/*TITLE translation table coding constants and variables */

/****keyword-flag*** "%v %f %n" */
/* "9 12-May-92,17:46:24 MODEL.H" */

#define NO_OF_CHARS 256
#define EOF_SYMBOL (NO_OF_CHARS+1)

#define NO_OF_SYMBOLS (NO_OF_CHARS+1)

#define MAX_FREQUENCY 16383

typedef struct
{
	unsigned total_freq;
	unsigned char freq[(NO_OF_SYMBOLS+1+1)/2];
} FrequencyInfo;

extern FrequencyInfo frequency_info_data[NO_OF_CHARS];
extern FrequencyInfo *frequency_info[NO_OF_CHARS];

extern unsigned translate[16];

extern unsigned both_weights[256];

extern unsigned symbol_translation[NO_OF_CHARS];

extern unsigned char_translation[NO_OF_CHARS];

#define HIGH_MASK 240 /* the high four bits */
#define LOW_MASK 15   /* the low four bits */

#define HIGH_INCREMENT 16 /* the difference between two high values */
#define LOW_INCREMENT 1 /* the difference between two low values */

#define HIGH_SHIFT 4 /* how much to shift a high nibble */
#define LOW_SHIFT 0 /* how much to shift a low nibble */

#define UPPER_INDEX 15 /* how high is the last table index */

#define TRANSLATE_SIZE 16

#define TRANSLATE_TABLE {1,16,22,30,42,58,79,109,150,207,285,392,540,744,1024,16000}

int start_inputing_bits(void);
int start_model(void);
int update_model(int symbol,unsigned char oldch);
int start_decoding(void);
unsigned decode_symbol(unsigned oldch);
int input_bit(void);
int output_0(void);
int output_1(void);
int done_outputing_bits(void);
int start_outputing_bits(void);
int done_encoding(void);
int start_encoding(void);
int encode_symbol(unsigned symbol, unsigned oldch);

