2005-04-17 02:20:36 +04:00
/* inftrees.h -- header to use inftrees.c
2006-06-23 01:47:34 +04:00
* Copyright ( C ) 1995 - 2005 Mark Adler
* For conditions of distribution and use , see copyright notice in zlib . h
2005-04-17 02:20:36 +04:00
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change . Applications should only use zlib . h .
*/
2006-06-23 01:47:34 +04:00
/* Structure for decoding tables. Each entry provides either the
information needed to do the operation requested by the code that
indexed that table entry , or it provides a pointer to another
table that indexes more bits of the code . op indicates whether
the entry is a pointer to another table , a literal , a length or
distance , an end - of - block , or an invalid code . For a table
pointer , the low four bits of op is the number of index bits of
that table . For a length or distance , the low four bits of op
is the number of extra bits to get after the code . bits is
the number of bits in this code or part of the code to drop off
of the bit buffer . val is the actual byte to output in the case
of a literal , the base length or distance , or the offset from
the current table to the next table . Each entry is four bytes . */
typedef struct {
unsigned char op ; /* operation, extra bits, table bits */
unsigned char bits ; /* bits in this part of the code */
unsigned short val ; /* offset in table or code value */
} code ;
/* op values as set by inflate_table():
00000000 - literal
0000 tttt - table link , tttt ! = 0 is the number of table index bits
0001 eeee - length or distance , eeee is the number of extra bits
01100000 - end of block
01000000 - invalid code
*/
2005-04-17 02:20:36 +04:00
/* Maximum size of dynamic tree. The maximum found in a long but non-
2006-06-23 01:47:34 +04:00
exhaustive search was 1444 code structures ( 852 for length / literals
and 592 for distances , the latter actually the result of an
exhaustive search ) . The true maximum is not known , but the value
below is more than safe . */
# define ENOUGH 2048
# define MAXD 592
/* Type of code to build for inftable() */
typedef enum {
CODES ,
LENS ,
DISTS
} codetype ;
extern int zlib_inflate_table ( codetype type , unsigned short * lens ,
unsigned codes , code * * table ,
unsigned * bits , unsigned short * work ) ;