1 /***********************************************************
\r
3 ***********************************************************/
\r
6 typedef unsigned char uchar; /* 8 bits or more */
\r
7 typedef unsigned int uint; /* 16 bits or more */
\r
8 typedef unsigned short ushort; /* 16 bits or more */
\r
9 typedef unsigned long ulong; /* 32 bits or more */
\r
13 extern int unpackable;
\r
14 extern ulong origsize, compsize;
\r
18 #define INIT_CRC 0 /* CCITT: 0xFFFF */
\r
19 extern FILE *arcfile, *infile, *outfile;
\r
20 extern uint crc, bitbuf;
\r
21 #define BITBUFSIZ (CHAR_BIT * sizeof bitbuf)
\r
23 void error(char *fmt, ...);
\r
24 void make_crctable(void);
\r
25 void fillbuf(int n);
\r
26 uint getbits(int n);
\r
27 /* void putbit(int bit); */
\r
28 void putbits(int n, uint x);
\r
29 int fread_crc(uchar *p, int n, FILE *f);
\r
30 void fwrite_crc(uchar *p, int n, FILE *f);
\r
31 void init_getbits(void);
\r
32 void init_putbits(void);
\r
34 /* encode.c and decode.c */
\r
36 #define DICBIT 13 /* 12(-lh4-) or 13(-lh5-) */
\r
37 #define DICSIZ (1U << DICBIT)
\r
38 #define MATCHBIT 8 /* bits for MAXMATCH - THRESHOLD */
\r
39 #define MAXMATCH 256 /* formerly F (not more than UCHAR_MAX + 1) */
\r
40 #define THRESHOLD 3 /* choose optimal value */
\r
41 #define PERC_FLAG 0x8000U
\r
44 void decode_start(void);
\r
45 void decode(uint count, uchar text[]);
\r
49 #define NC (UCHAR_MAX + MAXMATCH + 2 - THRESHOLD)
\r
50 /* alphabet = {0, 1, 2, ..., NC - 1} */
\r
51 #define CBIT 9 /* $\lfloor \log_2 NC \rfloor + 1$ */
\r
52 #define CODE_BIT 16 /* codeword length */
\r
54 extern ushort left[], right[];
\r
56 void huf_encode_start(void);
\r
57 void huf_decode_start(void);
\r
58 uint decode_c(void);
\r
59 uint decode_p(void);
\r
60 void output(uint c, uint p);
\r
61 void huf_encode_end(void);
\r
65 void make_table(int nchar, uchar bitlen[],
\r
66 int tablebits, ushort table[]);
\r
70 int make_tree(int nparm, ushort freqparm[],
\r
71 uchar lenparm[], ushort codeparm[]);
\r