summaryrefslogtreecommitdiff
path: root/inftrees.h
diff options
context:
space:
mode:
Diffstat (limited to 'inftrees.h')
-rw-r--r--inftrees.h91
1 files changed, 44 insertions, 47 deletions
diff --git a/inftrees.h b/inftrees.h
index 04b73b7..49eeeb9 100644
--- a/inftrees.h
+++ b/inftrees.h
@@ -1,6 +1,6 @@
1/* inftrees.h -- header to use inftrees.c 1/* inftrees.h -- header to use inftrees.c
2 * Copyright (C) 1995-2002 Mark Adler 2 * Copyright (C) 1995-2003 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
6/* WARNING: this file should *not* be used by applications. It is 6/* WARNING: this file should *not* be used by applications. It is
@@ -8,51 +8,48 @@
8 subject to change. Applications should only use zlib.h. 8 subject to change. Applications should only use zlib.h.
9 */ 9 */
10 10
11/* Huffman code lookup table entry--this entry is four bytes for machines 11/* Structure for decoding tables. Each entry provides either the
12 that have 16-bit pointers (e.g. PC's in the small or medium model). */ 12 information needed to do the operation requested by the code that
13 13 indexed that table entry, or it provides a pointer to another
14typedef struct inflate_huft_s FAR inflate_huft; 14 table that indexes more bits of the code. op indicates whether
15 15 the entry is a pointer to another table, a literal, a length or
16struct inflate_huft_s { 16 distance, an end-of-block, or an invalid code. For a table
17 union { 17 pointer, the low four bits of op is the number of index bits of
18 struct { 18 that table. For a length or distance, the low four bits of op
19 Byte Exop; /* number of extra bits or operation */ 19 is the number of extra bits to get after the code. bits is
20 Byte Bits; /* number of bits in this code or subcode */ 20 the number of bits in this code or part of the code to drop off
21 } what; 21 of the bit buffer. val is the actual byte to output in the case
22 uInt pad; /* pad structure to a power of 2 (4 bytes for */ 22 of a literal, the base length or distance, or the offset from
23 } word; /* 16-bit, 8 bytes for 32-bit int's) */ 23 the current table to the next table. Each entry is four bytes. */
24 uInt base; /* literal, length base, distance base, 24typedef struct {
25 or table offset */ 25 unsigned char op; /* operation, extra bits, table bits */
26}; 26 unsigned char bits; /* bits in this part of the code */
27 unsigned short val; /* offset in table or code value */
28} code;
29
30/* op values as set by inflate_table():
31 00000000 - literal
32 0000tttt - table link, tttt != 0 is the number of table index bits
33 0001eeee - length or distance, eeee is the number of extra bits
34 01100000 - end of block
35 01000000 - invalid code
36 */
27 37
28/* Maximum size of dynamic tree. The maximum found in a long but non- 38/* Maximum size of dynamic tree. The maximum found in a long but non-
29 exhaustive search was 1004 huft structures (850 for length/literals 39 exhaustive search was 1004 code structures (850 for length/literals
30 and 154 for distances, the latter actually the result of an 40 and 154 for distances, the latter actually the result of an
31 exhaustive search). The actual maximum is not known, but the 41 exhaustive search). The true maximum is not known, but the value
32 value below is more than safe. */ 42 below is more than safe. */
33#define MANY 1440 43#define ENOUGH 1440
34 44#define MAXD 154
35extern int inflate_trees_bits OF(( 45
36 uIntf *, /* 19 code lengths */ 46/* Type of code to build for inftable() */
37 uIntf *, /* bits tree desired/actual depth */ 47typedef enum {
38 inflate_huft * FAR *, /* bits tree result */ 48 CODES,
39 inflate_huft *, /* space for trees */ 49 LENS,
40 z_streamp)); /* for messages */ 50 DISTS
41 51} codetype;
42extern int inflate_trees_dynamic OF(( 52
43 uInt, /* number of literal/length codes */ 53extern int inflate_table OF((codetype type, unsigned short FAR *lens,
44 uInt, /* number of distance codes */ 54 unsigned codes, code * FAR *table, unsigned *bits,
45 uIntf *, /* that many (total) code lengths */ 55 unsigned short FAR *work));
46 uIntf *, /* literal desired/actual bit depth */
47 uIntf *, /* distance desired/actual bit depth */
48 inflate_huft * FAR *, /* literal/length tree result */
49 inflate_huft * FAR *, /* distance tree result */
50 inflate_huft *, /* space for trees */
51 z_streamp)); /* for messages */
52
53extern int inflate_trees_fixed OF((
54 uIntf *, /* literal desired/actual bit depth */
55 uIntf *, /* distance desired/actual bit depth */
56 inflate_huft * FAR *, /* literal/length tree result */
57 inflate_huft * FAR *, /* distance tree result */
58 z_streamp)); /* for memory allocation */