1  /* inflate9.h -- internal inflate state definition
       2   * Copyright (C) 1995-2003 Mark Adler
       3   * For conditions of distribution and use, see copyright notice in zlib.h
       4   */
       5  
       6  /* WARNING: this file should *not* be used by applications. It is
       7     part of the implementation of the compression library and is
       8     subject to change. Applications should only use zlib.h.
       9   */
      10  
      11  /* Possible inflate modes between inflate() calls */
      12  typedef enum {
      13          TYPE,       /* i: waiting for type bits, including last-flag bit */
      14          STORED,     /* i: waiting for stored size (length and complement) */
      15          TABLE,      /* i: waiting for dynamic block table lengths */
      16              LEN,        /* i: waiting for length/lit code */
      17      DONE,       /* finished check, done -- remain here until reset */
      18      BAD         /* got a data error -- remain here until reset */
      19  } inflate_mode;
      20  
      21  /*
      22      State transitions between above modes -
      23  
      24      (most modes can go to the BAD mode -- not shown for clarity)
      25  
      26      Read deflate blocks:
      27              TYPE -> STORED or TABLE or LEN or DONE
      28              STORED -> TYPE
      29              TABLE -> LENLENS -> CODELENS -> LEN
      30      Read deflate codes:
      31                  LEN -> LEN or TYPE
      32   */
      33  
      34  /* state maintained between inflate() calls.  Approximately 7K bytes. */
      35  struct inflate_state {
      36          /* sliding window */
      37      unsigned char FAR *window;  /* allocated sliding window, if needed */
      38          /* dynamic table building */
      39      unsigned ncode;             /* number of code length code lengths */
      40      unsigned nlen;              /* number of length code lengths */
      41      unsigned ndist;             /* number of distance code lengths */
      42      unsigned have;              /* number of code lengths in lens[] */
      43      code FAR *next;             /* next available space in codes[] */
      44      unsigned short lens[320];   /* temporary storage for code lengths */
      45      unsigned short work[288];   /* work area for code table building */
      46      code codes[ENOUGH];         /* space for code tables */
      47  };