/*
* Listing 1 -- coder.h
*
* This header file contains the constants, declarations, and
* prototypes needed to use the arithmetic coding routines. These
* declarations are for routines that need to interface with the
* arithmetic coding stuff in coder.c
*
*/
#define MAXIMUM_SCALE 16383 /* Maximum allowed frequency count */
#define ESCAPE 256 /* The escape symbol */
#define DONE -1 /* The output stream empty symbol */
#define FLUSH -2 /* The symbol to flush the model */
/*
* A symbol can either be represented as an int, or as a pair of
* counts on a scale. This structure gives a standard way of
* defining it as a pair of counts.
*/
typedef struct {
unsigned short int low_count;
unsigned short int high_count;
unsigned short int scale;
} SYMBOL;
extern long underflow_bits; /* The present underflow count in */
/* the arithmetic coder. */
/*
* Function prototypes.
*/
void initialize_arithmetic_decoder( FILE *stream );
void remove_symbol_from_stream( FILE *stream, SYMBOL *s );
void initialize_arithmetic_encoder( void );
void encode_symbol( FILE *stream, SYMBOL *s );
void flush_arithmetic_encoder( FILE *stream );
short int get_current_count( SYMBOL *s );