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 }; 48