#ifndef _LZW_H #define _LZW_H /* a string entry */ struct zentry { int16 code; /* codeword of the prefix string */ char data; /* character to add to the prefix string */ }; struct zfast { /* fast version of string entry */ int16 owncode; /* own codeword */ int16 code; /* codeword of prefix string */ char data; /* character to add to prefix string */ }; #define ZCC 256 /* clear code table codeword */ #define ZFLUSH 257 /* codeword that signals a break in coding */ struct lzw { int16 codebits; /* significant bits in each codeword */ int maxbits; /* maximum number of bits per codeword */ #define LZWBITS 9 /* initial number of bits in each codeword */ int32 prefix; /* last processed codeword */ char mode; /* Compact or fast compression mode */ #define LZWCOMPACT 0 #define LZWFAST 1 union { struct zentry **tbl; /* compact table */ #define LZWBLK 130 /* size of entry arrays to allocate */ struct mbuf **bpp; /* mbuf version of table */ #define ZHASH 256 /* hash table size */ void *p; /* generic table pointer */ } tu; /* table of entries */ int nextbit; /* next bit to process in code stream */ int version; /* version number of sender */ #define ZVERSION 3 /* version number */ int32 cnt; /* count of processed bytes */ int32 code; /* temporary storage for coding in progress */ int32 next; /* next code to be added to the table */ int flushbit; /* next bit of the ZFLUSH codeword to send */ /* the following is used by the decoder only */ struct mbuf *buf; /* decoded buffer */ }; #define NULLLZW (struct lzw *)0 #ifdef ANSIPROTO extern struct usock; /* To please Turbo C++ */ #endif void lzwencode __ARGS((int s,char c)); void lzwinit __ARGS((int s,int bits,int mode)); void lzwfree __ARGS((struct usock *up)); void lzwflush __ARGS((struct usock *up)); int lzwdecode __ARGS((struct usock *up)); #endif /* _LZW_H */