1 | /* inflate9.h -- internal inflate state definition
|
---|
2 | * Copyright (C) 1995-2003 Mark Adler
|
---|
3 | * For conditions of distribution and use, see copyright notice in zlib.h
|
---|
4 | */
|
---|
5 |
|
---|
6 | /* WARNING: this file should *not* be used by applications. It is
|
---|
7 | part of the implementation of the compression library and is
|
---|
8 | subject to change. Applications should only use zlib.h.
|
---|
9 | */
|
---|
10 |
|
---|
11 | /* Possible inflate modes between inflate() calls */
|
---|
12 | typedef enum {
|
---|
13 | TYPE, /* i: waiting for type bits, including last-flag bit */
|
---|
14 | STORED, /* i: waiting for stored size (length and complement) */
|
---|
15 | TABLE, /* i: waiting for dynamic block table lengths */
|
---|
16 | LEN, /* i: waiting for length/lit code */
|
---|
17 | DONE, /* finished check, done -- remain here until reset */
|
---|
18 | BAD /* got a data error -- remain here until reset */
|
---|
19 | } inflate_mode;
|
---|
20 |
|
---|
21 | /*
|
---|
22 | State transitions between above modes -
|
---|
23 |
|
---|
24 | (most modes can go to the BAD mode -- not shown for clarity)
|
---|
25 |
|
---|
26 | Read deflate blocks:
|
---|
27 | TYPE -> STORED or TABLE or LEN or DONE
|
---|
28 | STORED -> TYPE
|
---|
29 | TABLE -> LENLENS -> CODELENS -> LEN
|
---|
30 | Read deflate codes:
|
---|
31 | LEN -> LEN or TYPE
|
---|
32 | */
|
---|
33 |
|
---|
34 | /* state maintained between inflate() calls. Approximately 7K bytes. */
|
---|
35 | struct inflate_state {
|
---|
36 | /* sliding window */
|
---|
37 | unsigned char FAR *window; /* allocated sliding window, if needed */
|
---|
38 | /* dynamic table building */
|
---|
39 | unsigned ncode; /* number of code length code lengths */
|
---|
40 | unsigned nlen; /* number of length code lengths */
|
---|
41 | unsigned ndist; /* number of distance code lengths */
|
---|
42 | unsigned have; /* number of code lengths in lens[] */
|
---|
43 | code FAR *next; /* next available space in codes[] */
|
---|
44 | unsigned short lens[320]; /* temporary storage for code lengths */
|
---|
45 | unsigned short work[288]; /* work area for code table building */
|
---|
46 | code codes[ENOUGH]; /* space for code tables */
|
---|
47 | };
|
---|