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