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