xref: /OK3568_Linux_fs/u-boot/lib/zlib/inftrees.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* inftrees.h -- header to use inftrees.c
2*4882a593Smuzhiyun  * Copyright (C) 1995-2005 Mark Adler
3*4882a593Smuzhiyun  * For conditions of distribution and use, see copyright notice in zlib.h
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun /* WARNING: this file should *not* be used by applications. It is
7*4882a593Smuzhiyun    part of the implementation of the compression library and is
8*4882a593Smuzhiyun    subject to change. Applications should only use zlib.h.
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /* Structure for decoding tables.  Each entry provides either the
12*4882a593Smuzhiyun    information needed to do the operation requested by the code that
13*4882a593Smuzhiyun    indexed that table entry, or it provides a pointer to another
14*4882a593Smuzhiyun    table that indexes more bits of the code.  op indicates whether
15*4882a593Smuzhiyun    the entry is a pointer to another table, a literal, a length or
16*4882a593Smuzhiyun    distance, an end-of-block, or an invalid code.  For a table
17*4882a593Smuzhiyun    pointer, the low four bits of op is the number of index bits of
18*4882a593Smuzhiyun    that table.  For a length or distance, the low four bits of op
19*4882a593Smuzhiyun    is the number of extra bits to get after the code.  bits is
20*4882a593Smuzhiyun    the number of bits in this code or part of the code to drop off
21*4882a593Smuzhiyun    of the bit buffer.  val is the actual byte to output in the case
22*4882a593Smuzhiyun    of a literal, the base length or distance, or the offset from
23*4882a593Smuzhiyun    the current table to the next table.  Each entry is four bytes. */
24*4882a593Smuzhiyun typedef struct {
25*4882a593Smuzhiyun     unsigned char op;           /* operation, extra bits, table bits */
26*4882a593Smuzhiyun     unsigned char bits;         /* bits in this part of the code */
27*4882a593Smuzhiyun     unsigned short val;         /* offset in table or code value */
28*4882a593Smuzhiyun } code;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* op values as set by inflate_table():
31*4882a593Smuzhiyun     00000000 - literal
32*4882a593Smuzhiyun     0000tttt - table link, tttt != 0 is the number of table index bits
33*4882a593Smuzhiyun     0001eeee - length or distance, eeee is the number of extra bits
34*4882a593Smuzhiyun     01100000 - end of block
35*4882a593Smuzhiyun     01000000 - invalid code
36*4882a593Smuzhiyun  */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* Maximum size of dynamic tree.  The maximum found in a long but non-
39*4882a593Smuzhiyun    exhaustive search was 1444 code structures (852 for length/literals
40*4882a593Smuzhiyun    and 592 for distances, the latter actually the result of an
41*4882a593Smuzhiyun    exhaustive search).  The true maximum is not known, but the value
42*4882a593Smuzhiyun    below is more than safe. */
43*4882a593Smuzhiyun #define ENOUGH 2048
44*4882a593Smuzhiyun #define MAXD 592
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* Type of code to build for inftable() */
47*4882a593Smuzhiyun typedef enum {
48*4882a593Smuzhiyun     CODES,
49*4882a593Smuzhiyun     LENS,
50*4882a593Smuzhiyun     DISTS
51*4882a593Smuzhiyun } codetype;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun extern int inflate_table OF((codetype type, unsigned short FAR *lens,
54*4882a593Smuzhiyun                              unsigned codes, code FAR * FAR *table,
55*4882a593Smuzhiyun                              unsigned FAR *bits, unsigned short FAR *work));
56