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