18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* inftrees.h -- header to use inftrees.c
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (C) 1995-2005 Mark Adler
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * For conditions of distribution and use, see copyright notice in zlib.h
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* WARNING: this file should *not* be used by applications. It is
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   part of the implementation of the compression library and is
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   subject to change. Applications should only use zlib.h.
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Structure for decoding tables.  Each entry provides either the
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   information needed to do the operation requested by the code that
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   indexed that table entry, or it provides a pointer to another
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   table that indexes more bits of the code.  op indicates whether
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   the entry is a pointer to another table, a literal, a length or
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   distance, an end-of-block, or an invalid code.  For a table
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   pointer, the low four bits of op is the number of index bits of
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   that table.  For a length or distance, the low four bits of op
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   is the number of extra bits to get after the code.  bits is
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   the number of bits in this code or part of the code to drop off
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   of the bit buffer.  val is the actual byte to output in the case
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   of a literal, the base length or distance, or the offset from
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   the current table to the next table.  Each entry is four bytes. */
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct {
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned char op;           /* operation, extra bits, table bits */
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned char bits;         /* bits in this part of the code */
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned short val;         /* offset in table or code value */
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} code;
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* op values as set by inflate_table():
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    00000000 - literal
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    0000tttt - table link, tttt != 0 is the number of table index bits
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    0001eeee - length or distance, eeee is the number of extra bits
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    01100000 - end of block
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    01000000 - invalid code
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Maximum size of dynamic tree.  The maximum found in a long but non-
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   exhaustive search was 1444 code structures (852 for length/literals
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   and 592 for distances, the latter actually the result of an
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   exhaustive search).  The true maximum is not known, but the value
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   below is more than safe. */
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENOUGH 2048
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAXD 592
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Type of code to build for inftable() */
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum {
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    CODES,
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    LENS,
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    DISTS
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} codetype;
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int inflate_table OF((codetype type, unsigned short FAR *lens,
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                             unsigned codes, code FAR * FAR *table,
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                             unsigned FAR *bits, unsigned short FAR *work));
56