zlib.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:174k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * This file is derived from various .h and .c files from the zlib-1.0.4
  3.  * distribution by Jean-loup Gailly and Mark Adler, with some additions
  4.  * by Paul Mackerras to aid in implementing Deflate compression and
  5.  * decompression for PPP packets.  See zlib.h for conditions of
  6.  * distribution and use.
  7.  *
  8.  * Changes that have been made include:
  9.  * - added Z_PACKET_FLUSH (see zlib.h for details)
  10.  * - added inflateIncomp and deflateOutputPending
  11.  * - allow strm->next_out to be NULL, meaning discard the output
  12.  *
  13.  * $Id: zlib.c,v 1.3 1997/12/23 10:47:42 paulus Exp $
  14.  */
  15. /* 
  16.  *  ==FILEVERSION 20020318==
  17.  *
  18.  * This marker is used by the Linux installation script to determine
  19.  * whether an up-to-date version of this file is already installed.
  20.  */
  21. #define NO_DUMMY_DECL
  22. #define NO_ZCFUNCS
  23. #define MY_ZCALLOC
  24. #if defined(__FreeBSD__) && (defined(KERNEL) || defined(_KERNEL))
  25. #define inflate inflate_ppp /* FreeBSD already has an inflate :-( */
  26. #endif
  27. /* +++ zutil.h */
  28. /* zutil.h -- internal interface and configuration of the compression library
  29.  * Copyright (C) 1995-1996 Jean-loup Gailly.
  30.  * For conditions of distribution and use, see copyright notice in zlib.h
  31.  */
  32. /* WARNING: this file should *not* be used by applications. It is
  33.    part of the implementation of the compression library and is
  34.    subject to change. Applications should only use zlib.h.
  35.  */
  36. /* From: zutil.h,v 1.16 1996/07/24 13:41:13 me Exp $ */
  37. #ifndef _Z_UTIL_H
  38. #define _Z_UTIL_H
  39. #include "zlib.h"
  40. #if defined(KERNEL) || defined(_KERNEL)
  41. /* Assume this is a *BSD or SVR4 kernel */
  42. #include <sys/types.h>
  43. #include <sys/time.h>
  44. #include <sys/systm.h>
  45. #  define HAVE_MEMCPY
  46. #  define memcpy(d, s, n) bcopy((s), (d), (n))
  47. #  define memset(d, v, n) bzero((d), (n))
  48. #  define memcmp bcmp
  49. #else
  50. #if defined(__KERNEL__)
  51. /* Assume this is a Linux kernel */
  52. #include <linux/string.h>
  53. #define HAVE_MEMCPY
  54. #else /* not kernel */
  55. #if defined(MSDOS)||defined(VMS)||defined(CRAY)||defined(WIN32)||defined(RISCOS)
  56. #   include <stddef.h>
  57. #   include <errno.h>
  58. #else
  59.     extern int errno;
  60. #endif
  61. #ifdef STDC
  62. #  include <string.h>
  63. #  include <stdlib.h>
  64. #endif
  65. #endif /* __KERNEL__ */
  66. #endif /* _KERNEL || KERNEL */
  67. #ifndef local
  68. #  define local static
  69. #endif
  70. /* compile with -Dlocal if your debugger can't find static symbols */
  71. typedef unsigned char  uch;
  72. typedef uch FAR uchf;
  73. typedef unsigned short ush;
  74. typedef ush FAR ushf;
  75. typedef unsigned long  ulg;
  76. extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
  77. /* (size given to avoid silly warnings with Visual C++) */
  78. #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
  79. #define ERR_RETURN(strm,err) 
  80.   return (strm->msg = (char*)ERR_MSG(err), (err))
  81. /* To be used only when the state is known to be valid */
  82.         /* common constants */
  83. #ifndef DEF_WBITS
  84. #  define DEF_WBITS MAX_WBITS
  85. #endif
  86. /* default windowBits for decompression. MAX_WBITS is for compression only */
  87. #if MAX_MEM_LEVEL >= 8
  88. #  define DEF_MEM_LEVEL 8
  89. #else
  90. #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
  91. #endif
  92. /* default memLevel */
  93. #define STORED_BLOCK 0
  94. #define STATIC_TREES 1
  95. #define DYN_TREES    2
  96. /* The three kinds of block type */
  97. #define MIN_MATCH  3
  98. #define MAX_MATCH  258
  99. /* The minimum and maximum match lengths */
  100. #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
  101.         /* target dependencies */
  102. #ifdef MSDOS
  103. #  define OS_CODE  0x00
  104. #  ifdef __TURBOC__
  105. #    include <alloc.h>
  106. #  else /* MSC or DJGPP */
  107. #    include <malloc.h>
  108. #  endif
  109. #endif
  110. #ifdef OS2
  111. #  define OS_CODE  0x06
  112. #endif
  113. #ifdef WIN32 /* Window 95 & Windows NT */
  114. #  define OS_CODE  0x0b
  115. #endif
  116. #if defined(VAXC) || defined(VMS)
  117. #  define OS_CODE  0x02
  118. #  define FOPEN(name, mode) 
  119.      fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
  120. #endif
  121. #ifdef AMIGA
  122. #  define OS_CODE  0x01
  123. #endif
  124. #if defined(ATARI) || defined(atarist)
  125. #  define OS_CODE  0x05
  126. #endif
  127. #ifdef MACOS
  128. #  define OS_CODE  0x07
  129. #endif
  130. #ifdef __50SERIES /* Prime/PRIMOS */
  131. #  define OS_CODE  0x0F
  132. #endif
  133. #ifdef TOPS20
  134. #  define OS_CODE  0x0a
  135. #endif
  136. #if defined(_BEOS_) || defined(RISCOS)
  137. #  define fdopen(fd,mode) NULL /* No fdopen() */
  138. #endif
  139.         /* Common defaults */
  140. #ifndef OS_CODE
  141. #  define OS_CODE  0x03  /* assume Unix */
  142. #endif
  143. #ifndef FOPEN
  144. #  define FOPEN(name, mode) fopen((name), (mode))
  145. #endif
  146.          /* functions */
  147. #ifdef HAVE_STRERROR
  148.    extern char *strerror OF((int));
  149. #  define zstrerror(errnum) strerror(errnum)
  150. #else
  151. #  define zstrerror(errnum) ""
  152. #endif
  153. #if defined(pyr)
  154. #  define NO_MEMCPY
  155. #endif
  156. #if (defined(M_I86SM) || defined(M_I86MM)) && !defined(_MSC_VER)
  157.  /* Use our own functions for small and medium model with MSC <= 5.0.
  158.   * You may have to use the same strategy for Borland C (untested).
  159.   */
  160. #  define NO_MEMCPY
  161. #endif
  162. #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
  163. #  define HAVE_MEMCPY
  164. #endif
  165. #ifdef HAVE_MEMCPY
  166. #  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
  167. #    define zmemcpy _fmemcpy
  168. #    define zmemcmp _fmemcmp
  169. #    define zmemzero(dest, len) _fmemset(dest, 0, len)
  170. #  else
  171. #    define zmemcpy memcpy
  172. #    define zmemcmp memcmp
  173. #    define zmemzero(dest, len) memset(dest, 0, len)
  174. #  endif
  175. #else
  176.    extern void zmemcpy  OF((Bytef* dest, Bytef* source, uInt len));
  177.    extern int  zmemcmp  OF((Bytef* s1,   Bytef* s2, uInt len));
  178.    extern void zmemzero OF((Bytef* dest, uInt len));
  179. #endif
  180. /* Diagnostic functions */
  181. #ifdef DEBUG_ZLIB
  182. #  include <stdio.h>
  183. #  ifndef verbose
  184. #    define verbose 0
  185. #  endif
  186.    extern void z_error    OF((char *m));
  187. #  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
  188. #  define Trace(x) fprintf x
  189. #  define Tracev(x) {if (verbose) fprintf x ;}
  190. #  define Tracevv(x) {if (verbose>1) fprintf x ;}
  191. #  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
  192. #  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
  193. #else
  194. #  define Assert(cond,msg)
  195. #  define Trace(x)
  196. #  define Tracev(x)
  197. #  define Tracevv(x)
  198. #  define Tracec(c,x)
  199. #  define Tracecv(c,x)
  200. #endif
  201. typedef uLong (*check_func) OF((uLong check, const Bytef *buf, uInt len));
  202. voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
  203. void   zcfree  OF((voidpf opaque, voidpf ptr));
  204. #define ZALLOC(strm, items, size) 
  205.            (*((strm)->zalloc))((strm)->opaque, (items), (size))
  206. #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
  207. #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
  208. #endif /* _Z_UTIL_H */
  209. /* --- zutil.h */
  210. /* +++ deflate.h */
  211. /* deflate.h -- internal compression state
  212.  * Copyright (C) 1995-1996 Jean-loup Gailly
  213.  * For conditions of distribution and use, see copyright notice in zlib.h 
  214.  */
  215. /* WARNING: this file should *not* be used by applications. It is
  216.    part of the implementation of the compression library and is
  217.    subject to change. Applications should only use zlib.h.
  218.  */
  219. /* From: deflate.h,v 1.10 1996/07/02 12:41:00 me Exp $ */
  220. #ifndef _DEFLATE_H
  221. #define _DEFLATE_H
  222. /* #include "zutil.h" */
  223. /* ===========================================================================
  224.  * Internal compression state.
  225.  */
  226. #define LENGTH_CODES 29
  227. /* number of length codes, not counting the special END_BLOCK code */
  228. #define LITERALS  256
  229. /* number of literal bytes 0..255 */
  230. #define L_CODES (LITERALS+1+LENGTH_CODES)
  231. /* number of Literal or Length codes, including the END_BLOCK code */
  232. #define D_CODES   30
  233. /* number of distance codes */
  234. #define BL_CODES  19
  235. /* number of codes used to transfer the bit lengths */
  236. #define HEAP_SIZE (2*L_CODES+1)
  237. /* maximum heap size */
  238. #define MAX_BITS 15
  239. /* All codes must not exceed MAX_BITS bits */
  240. #define INIT_STATE    42
  241. #define BUSY_STATE   113
  242. #define FINISH_STATE 666
  243. /* Stream status */
  244. /* Data structure describing a single value and its code string. */
  245. typedef struct ct_data_s {
  246.     union {
  247.         ush  freq;       /* frequency count */
  248.         ush  code;       /* bit string */
  249.     } fc;
  250.     union {
  251.         ush  dad;        /* father node in Huffman tree */
  252.         ush  len;        /* length of bit string */
  253.     } dl;
  254. } FAR ct_data;
  255. #define Freq fc.freq
  256. #define Code fc.code
  257. #define Dad  dl.dad
  258. #define Len  dl.len
  259. typedef struct static_tree_desc_s  static_tree_desc;
  260. typedef struct tree_desc_s {
  261.     ct_data *dyn_tree;           /* the dynamic tree */
  262.     int     max_code;            /* largest code with non zero frequency */
  263.     static_tree_desc *stat_desc; /* the corresponding static tree */
  264. } FAR tree_desc;
  265. typedef ush Pos;
  266. typedef Pos FAR Posf;
  267. typedef unsigned IPos;
  268. /* A Pos is an index in the character window. We use short instead of int to
  269.  * save space in the various tables. IPos is used only for parameter passing.
  270.  */
  271. typedef struct deflate_state {
  272.     z_streamp strm;      /* pointer back to this zlib stream */
  273.     int   status;        /* as the name implies */
  274.     Bytef *pending_buf;  /* output still pending */
  275.     ulg   pending_buf_size; /* size of pending_buf */
  276.     Bytef *pending_out;  /* next pending byte to output to the stream */
  277.     int   pending;       /* nb of bytes in the pending buffer */
  278.     int   noheader;      /* suppress zlib header and adler32 */
  279.     Byte  data_type;     /* UNKNOWN, BINARY or ASCII */
  280.     Byte  method;        /* STORED (for zip only) or DEFLATED */
  281.     int   last_flush;    /* value of flush param for previous deflate call */
  282.                 /* used by deflate.c: */
  283.     uInt  w_size;        /* LZ77 window size (32K by default) */
  284.     uInt  w_bits;        /* log2(w_size)  (8..16) */
  285.     uInt  w_mask;        /* w_size - 1 */
  286.     Bytef *window;
  287.     /* Sliding window. Input bytes are read into the second half of the window,
  288.      * and move to the first half later to keep a dictionary of at least wSize
  289.      * bytes. With this organization, matches are limited to a distance of
  290.      * wSize-MAX_MATCH bytes, but this ensures that IO is always
  291.      * performed with a length multiple of the block size. Also, it limits
  292.      * the window size to 64K, which is quite useful on MSDOS.
  293.      * To do: use the user input buffer as sliding window.
  294.      */
  295.     ulg window_size;
  296.     /* Actual size of window: 2*wSize, except when the user input buffer
  297.      * is directly used as sliding window.
  298.      */
  299.     Posf *prev;
  300.     /* Link to older string with same hash index. To limit the size of this
  301.      * array to 64K, this link is maintained only for the last 32K strings.
  302.      * An index in this array is thus a window index modulo 32K.
  303.      */
  304.     Posf *head; /* Heads of the hash chains or NIL. */
  305.     uInt  ins_h;          /* hash index of string to be inserted */
  306.     uInt  hash_size;      /* number of elements in hash table */
  307.     uInt  hash_bits;      /* log2(hash_size) */
  308.     uInt  hash_mask;      /* hash_size-1 */
  309.     uInt  hash_shift;
  310.     /* Number of bits by which ins_h must be shifted at each input
  311.      * step. It must be such that after MIN_MATCH steps, the oldest
  312.      * byte no longer takes part in the hash key, that is:
  313.      *   hash_shift * MIN_MATCH >= hash_bits
  314.      */
  315.     long block_start;
  316.     /* Window position at the beginning of the current output block. Gets
  317.      * negative when the window is moved backwards.
  318.      */
  319.     uInt match_length;           /* length of best match */
  320.     IPos prev_match;             /* previous match */
  321.     int match_available;         /* set if previous match exists */
  322.     uInt strstart;               /* start of string to insert */
  323.     uInt match_start;            /* start of matching string */
  324.     uInt lookahead;              /* number of valid bytes ahead in window */
  325.     uInt prev_length;
  326.     /* Length of the best match at previous step. Matches not greater than this
  327.      * are discarded. This is used in the lazy match evaluation.
  328.      */
  329.     uInt max_chain_length;
  330.     /* To speed up deflation, hash chains are never searched beyond this
  331.      * length.  A higher limit improves compression ratio but degrades the
  332.      * speed.
  333.      */
  334.     uInt max_lazy_match;
  335.     /* Attempt to find a better match only when the current match is strictly
  336.      * smaller than this value. This mechanism is used only for compression
  337.      * levels >= 4.
  338.      */
  339. #   define max_insert_length  max_lazy_match
  340.     /* Insert new strings in the hash table only if the match length is not
  341.      * greater than this length. This saves time but degrades compression.
  342.      * max_insert_length is used only for compression levels <= 3.
  343.      */
  344.     int level;    /* compression level (1..9) */
  345.     int strategy; /* favor or force Huffman coding*/
  346.     uInt good_match;
  347.     /* Use a faster search when the previous match is longer than this */
  348.     int nice_match; /* Stop searching when current match exceeds this */
  349.                 /* used by trees.c: */
  350.     /* Didn't use ct_data typedef below to supress compiler warning */
  351.     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
  352.     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
  353.     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
  354.     struct tree_desc_s l_desc;               /* desc. for literal tree */
  355.     struct tree_desc_s d_desc;               /* desc. for distance tree */
  356.     struct tree_desc_s bl_desc;              /* desc. for bit length tree */
  357.     ush bl_count[MAX_BITS+1];
  358.     /* number of codes at each bit length for an optimal tree */
  359.     int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
  360.     int heap_len;               /* number of elements in the heap */
  361.     int heap_max;               /* element of largest frequency */
  362.     /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
  363.      * The same heap array is used to build all trees.
  364.      */
  365.     uch depth[2*L_CODES+1];
  366.     /* Depth of each subtree used as tie breaker for trees of equal frequency
  367.      */
  368.     uchf *l_buf;          /* buffer for literals or lengths */
  369.     uInt  lit_bufsize;
  370.     /* Size of match buffer for literals/lengths.  There are 4 reasons for
  371.      * limiting lit_bufsize to 64K:
  372.      *   - frequencies can be kept in 16 bit counters
  373.      *   - if compression is not successful for the first block, all input
  374.      *     data is still in the window so we can still emit a stored block even
  375.      *     when input comes from standard input.  (This can also be done for
  376.      *     all blocks if lit_bufsize is not greater than 32K.)
  377.      *   - if compression is not successful for a file smaller than 64K, we can
  378.      *     even emit a stored file instead of a stored block (saving 5 bytes).
  379.      *     This is applicable only for zip (not gzip or zlib).
  380.      *   - creating new Huffman trees less frequently may not provide fast
  381.      *     adaptation to changes in the input data statistics. (Take for
  382.      *     example a binary file with poorly compressible code followed by
  383.      *     a highly compressible string table.) Smaller buffer sizes give
  384.      *     fast adaptation but have of course the overhead of transmitting
  385.      *     trees more frequently.
  386.      *   - I can't count above 4
  387.      */
  388.     uInt last_lit;      /* running index in l_buf */
  389.     ushf *d_buf;
  390.     /* Buffer for distances. To simplify the code, d_buf and l_buf have
  391.      * the same number of elements. To use different lengths, an extra flag
  392.      * array would be necessary.
  393.      */
  394.     ulg opt_len;        /* bit length of current block with optimal trees */
  395.     ulg static_len;     /* bit length of current block with static trees */
  396.     ulg compressed_len; /* total bit length of compressed file */
  397.     uInt matches;       /* number of string matches in current block */
  398.     int last_eob_len;   /* bit length of EOB code for last block */
  399. #ifdef DEBUG_ZLIB
  400.     ulg bits_sent;      /* bit length of the compressed data */
  401. #endif
  402.     ush bi_buf;
  403.     /* Output buffer. bits are inserted starting at the bottom (least
  404.      * significant bits).
  405.      */
  406.     int bi_valid;
  407.     /* Number of valid bits in bi_buf.  All bits above the last valid bit
  408.      * are always zero.
  409.      */
  410. } FAR deflate_state;
  411. /* Output a byte on the stream.
  412.  * IN assertion: there is enough room in pending_buf.
  413.  */
  414. #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
  415. #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
  416. /* Minimum amount of lookahead, except at the end of the input file.
  417.  * See deflate.c for comments about the MIN_MATCH+1.
  418.  */
  419. #define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
  420. /* In order to simplify the code, particularly on 16 bit machines, match
  421.  * distances are limited to MAX_DIST instead of WSIZE.
  422.  */
  423.         /* in trees.c */
  424. void _tr_init         OF((deflate_state *s));
  425. int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
  426. ulg  _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
  427.   int eof));
  428. void _tr_align        OF((deflate_state *s));
  429. void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
  430.                           int eof));
  431. void _tr_stored_type_only OF((deflate_state *));
  432. #endif
  433. /* --- deflate.h */
  434. /* +++ deflate.c */
  435. /* deflate.c -- compress data using the deflation algorithm
  436.  * Copyright (C) 1995-1996 Jean-loup Gailly.
  437.  * For conditions of distribution and use, see copyright notice in zlib.h 
  438.  */
  439. /*
  440.  *  ALGORITHM
  441.  *
  442.  *      The "deflation" process depends on being able to identify portions
  443.  *      of the input text which are identical to earlier input (within a
  444.  *      sliding window trailing behind the input currently being processed).
  445.  *
  446.  *      The most straightforward technique turns out to be the fastest for
  447.  *      most input files: try all possible matches and select the longest.
  448.  *      The key feature of this algorithm is that insertions into the string
  449.  *      dictionary are very simple and thus fast, and deletions are avoided
  450.  *      completely. Insertions are performed at each input character, whereas
  451.  *      string matches are performed only when the previous match ends. So it
  452.  *      is preferable to spend more time in matches to allow very fast string
  453.  *      insertions and avoid deletions. The matching algorithm for small
  454.  *      strings is inspired from that of Rabin & Karp. A brute force approach
  455.  *      is used to find longer strings when a small match has been found.
  456.  *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
  457.  *      (by Leonid Broukhis).
  458.  *         A previous version of this file used a more sophisticated algorithm
  459.  *      (by Fiala and Greene) which is guaranteed to run in linear amortized
  460.  *      time, but has a larger average cost, uses more memory and is patented.
  461.  *      However the F&G algorithm may be faster for some highly redundant
  462.  *      files if the parameter max_chain_length (described below) is too large.
  463.  *
  464.  *  ACKNOWLEDGEMENTS
  465.  *
  466.  *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
  467.  *      I found it in 'freeze' written by Leonid Broukhis.
  468.  *      Thanks to many people for bug reports and testing.
  469.  *
  470.  *  REFERENCES
  471.  *
  472.  *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
  473.  *      Available in ftp://ds.internic.net/rfc/rfc1951.txt
  474.  *
  475.  *      A description of the Rabin and Karp algorithm is given in the book
  476.  *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
  477.  *
  478.  *      Fiala,E.R., and Greene,D.H.
  479.  *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
  480.  *
  481.  */
  482. /* From: deflate.c,v 1.15 1996/07/24 13:40:58 me Exp $ */
  483. /* #include "deflate.h" */
  484. char deflate_copyright[] = " deflate 1.0.4 Copyright 1995-1996 Jean-loup Gailly ";
  485. /*
  486.   If you use the zlib library in a product, an acknowledgment is welcome
  487.   in the documentation of your product. If for some reason you cannot
  488.   include such an acknowledgment, I would appreciate that you keep this
  489.   copyright string in the executable of your product.
  490.  */
  491. /* ===========================================================================
  492.  *  Function prototypes.
  493.  */
  494. typedef enum {
  495.     need_more,      /* block not completed, need more input or more output */
  496.     block_done,     /* block flush performed */
  497.     finish_started, /* finish started, need only more output at next deflate */
  498.     finish_done     /* finish done, accept no more input or output */
  499. } block_state;
  500. typedef block_state (*compress_func) OF((deflate_state *s, int flush));
  501. /* Compression function. Returns the block state after the call. */
  502. local void fill_window    OF((deflate_state *s));
  503. local block_state deflate_stored OF((deflate_state *s, int flush));
  504. local block_state deflate_fast   OF((deflate_state *s, int flush));
  505. local block_state deflate_slow   OF((deflate_state *s, int flush));
  506. local void lm_init        OF((deflate_state *s));
  507. local void putShortMSB    OF((deflate_state *s, uInt b));
  508. local void flush_pending  OF((z_streamp strm));
  509. local int read_buf        OF((z_streamp strm, charf *buf, unsigned size));
  510. #ifdef ASMV
  511.       void match_init OF((void)); /* asm code initialization */
  512.       uInt longest_match  OF((deflate_state *s, IPos cur_match));
  513. #else
  514. local uInt longest_match  OF((deflate_state *s, IPos cur_match));
  515. #endif
  516. #ifdef DEBUG_ZLIB
  517. local  void check_match OF((deflate_state *s, IPos start, IPos match,
  518.                             int length));
  519. #endif
  520. /* ===========================================================================
  521.  * Local data
  522.  */
  523. #define NIL 0
  524. /* Tail of hash chains */
  525. #ifndef TOO_FAR
  526. #  define TOO_FAR 4096
  527. #endif
  528. /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
  529. #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
  530. /* Minimum amount of lookahead, except at the end of the input file.
  531.  * See deflate.c for comments about the MIN_MATCH+1.
  532.  */
  533. /* Values for max_lazy_match, good_match and max_chain_length, depending on
  534.  * the desired pack level (0..9). The values given below have been tuned to
  535.  * exclude worst case performance for pathological files. Better values may be
  536.  * found for specific files.
  537.  */
  538. typedef struct config_s {
  539.    ush good_length; /* reduce lazy search above this match length */
  540.    ush max_lazy;    /* do not perform lazy search above this match length */
  541.    ush nice_length; /* quit search above this match length */
  542.    ush max_chain;
  543.    compress_func func;
  544. } config;
  545. local config configuration_table[10] = {
  546. /*      good lazy nice chain */
  547. /* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
  548. /* 1 */ {4,    4,  8,    4, deflate_fast}, /* maximum speed, no lazy matches */
  549. /* 2 */ {4,    5, 16,    8, deflate_fast},
  550. /* 3 */ {4,    6, 32,   32, deflate_fast},
  551. /* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
  552. /* 5 */ {8,   16, 32,   32, deflate_slow},
  553. /* 6 */ {8,   16, 128, 128, deflate_slow},
  554. /* 7 */ {8,   32, 128, 256, deflate_slow},
  555. /* 8 */ {32, 128, 258, 1024, deflate_slow},
  556. /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
  557. /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
  558.  * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
  559.  * meaning.
  560.  */
  561. #define EQUAL 0
  562. /* result of memcmp for equal strings */
  563. #ifndef NO_DUMMY_DECL
  564. struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
  565. #endif
  566. /* ===========================================================================
  567.  * Update a hash value with the given input byte
  568.  * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
  569.  *    input characters, so that a running hash key can be computed from the
  570.  *    previous key instead of complete recalculation each time.
  571.  */
  572. #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
  573. /* ===========================================================================
  574.  * Insert string str in the dictionary and set match_head to the previous head
  575.  * of the hash chain (the most recent string with same hash key). Return
  576.  * the previous length of the hash chain.
  577.  * IN  assertion: all calls to to INSERT_STRING are made with consecutive
  578.  *    input characters and the first MIN_MATCH bytes of str are valid
  579.  *    (except for the last MIN_MATCH-1 bytes of the input file).
  580.  */
  581. #define INSERT_STRING(s, str, match_head) 
  582.    (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), 
  583.     s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], 
  584.     s->head[s->ins_h] = (Pos)(str))
  585. /* ===========================================================================
  586.  * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
  587.  * prev[] will be initialized on the fly.
  588.  */
  589. #define CLEAR_HASH(s) 
  590.     s->head[s->hash_size-1] = NIL; 
  591.     zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
  592. /* ========================================================================= */
  593. int deflateInit_(strm, level, version, stream_size)
  594.     z_streamp strm;
  595.     int level;
  596.     const char *version;
  597.     int stream_size;
  598. {
  599.     return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
  600.  Z_DEFAULT_STRATEGY, version, stream_size);
  601.     /* To do: ignore strm->next_in if we use it as window */
  602. }
  603. /* ========================================================================= */
  604. int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
  605.   version, stream_size)
  606.     z_streamp strm;
  607.     int  level;
  608.     int  method;
  609.     int  windowBits;
  610.     int  memLevel;
  611.     int  strategy;
  612.     const char *version;
  613.     int stream_size;
  614. {
  615.     deflate_state *s;
  616.     int noheader = 0;
  617.     static char* my_version = ZLIB_VERSION;
  618.     ushf *overlay;
  619.     /* We overlay pending_buf and d_buf+l_buf. This works since the average
  620.      * output size for (length,distance) codes is <= 24 bits.
  621.      */
  622.     if (version == Z_NULL || version[0] != my_version[0] ||
  623.         stream_size != sizeof(z_stream)) {
  624. return Z_VERSION_ERROR;
  625.     }
  626.     if (strm == Z_NULL) return Z_STREAM_ERROR;
  627.     strm->msg = Z_NULL;
  628. #ifndef NO_ZCFUNCS
  629.     if (strm->zalloc == Z_NULL) {
  630. strm->zalloc = zcalloc;
  631. strm->opaque = (voidpf)0;
  632.     }
  633.     if (strm->zfree == Z_NULL) strm->zfree = zcfree;
  634. #endif
  635.     if (level == Z_DEFAULT_COMPRESSION) level = 6;
  636.     if (windowBits < 0) { /* undocumented feature: suppress zlib header */
  637.         noheader = 1;
  638.         windowBits = -windowBits;
  639.     }
  640.     if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
  641.         windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
  642. strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
  643.         return Z_STREAM_ERROR;
  644.     }
  645.     s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
  646.     if (s == Z_NULL) return Z_MEM_ERROR;
  647.     strm->state = (struct internal_state FAR *)s;
  648.     s->strm = strm;
  649.     s->noheader = noheader;
  650.     s->w_bits = windowBits;
  651.     s->w_size = 1 << s->w_bits;
  652.     s->w_mask = s->w_size - 1;
  653.     s->hash_bits = memLevel + 7;
  654.     s->hash_size = 1 << s->hash_bits;
  655.     s->hash_mask = s->hash_size - 1;
  656.     s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
  657.     s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
  658.     s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
  659.     s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
  660.     s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
  661.     overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
  662.     s->pending_buf = (uchf *) overlay;
  663.     s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
  664.     if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
  665.         s->pending_buf == Z_NULL) {
  666.         strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
  667.         deflateEnd (strm);
  668.         return Z_MEM_ERROR;
  669.     }
  670.     s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
  671.     s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
  672.     s->level = level;
  673.     s->strategy = strategy;
  674.     s->method = (Byte)method;
  675.     return deflateReset(strm);
  676. }
  677. /* ========================================================================= */
  678. int deflateSetDictionary (strm, dictionary, dictLength)
  679.     z_streamp strm;
  680.     const Bytef *dictionary;
  681.     uInt  dictLength;
  682. {
  683.     deflate_state *s;
  684.     uInt length = dictLength;
  685.     uInt n;
  686.     IPos hash_head = 0;
  687.     if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
  688. return Z_STREAM_ERROR;
  689.     s = (deflate_state *) strm->state;
  690.     if (s->status != INIT_STATE) return Z_STREAM_ERROR;
  691.     strm->adler = adler32(strm->adler, dictionary, dictLength);
  692.     if (length < MIN_MATCH) return Z_OK;
  693.     if (length > MAX_DIST(s)) {
  694. length = MAX_DIST(s);
  695. #ifndef USE_DICT_HEAD
  696. dictionary += dictLength - length; /* use the tail of the dictionary */
  697. #endif
  698.     }
  699.     zmemcpy((charf *)s->window, dictionary, length);
  700.     s->strstart = length;
  701.     s->block_start = (long)length;
  702.     /* Insert all strings in the hash table (except for the last two bytes).
  703.      * s->lookahead stays null, so s->ins_h will be recomputed at the next
  704.      * call of fill_window.
  705.      */
  706.     s->ins_h = s->window[0];
  707.     UPDATE_HASH(s, s->ins_h, s->window[1]);
  708.     for (n = 0; n <= length - MIN_MATCH; n++) {
  709. INSERT_STRING(s, n, hash_head);
  710.     }
  711.     if (hash_head) hash_head = 0;  /* to make compiler happy */
  712.     return Z_OK;
  713. }
  714. /* ========================================================================= */
  715. int deflateReset (strm)
  716.     z_streamp strm;
  717. {
  718.     deflate_state *s;
  719.     
  720.     if (strm == Z_NULL || strm->state == Z_NULL ||
  721.         strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
  722.     strm->total_in = strm->total_out = 0;
  723.     strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
  724.     strm->data_type = Z_UNKNOWN;
  725.     s = (deflate_state *)strm->state;
  726.     s->pending = 0;
  727.     s->pending_out = s->pending_buf;
  728.     if (s->noheader < 0) {
  729.         s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
  730.     }
  731.     s->status = s->noheader ? BUSY_STATE : INIT_STATE;
  732.     strm->adler = 1;
  733.     s->last_flush = Z_NO_FLUSH;
  734.     _tr_init(s);
  735.     lm_init(s);
  736.     return Z_OK;
  737. }
  738. /* ========================================================================= */
  739. int deflateParams(strm, level, strategy)
  740.     z_streamp strm;
  741.     int level;
  742.     int strategy;
  743. {
  744.     deflate_state *s;
  745.     compress_func func;
  746.     int err = Z_OK;
  747.     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
  748.     s = (deflate_state *) strm->state;
  749.     if (level == Z_DEFAULT_COMPRESSION) {
  750. level = 6;
  751.     }
  752.     if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
  753. return Z_STREAM_ERROR;
  754.     }
  755.     func = configuration_table[s->level].func;
  756.     if (func != configuration_table[level].func && strm->total_in != 0) {
  757. /* Flush the last buffer: */
  758. err = deflate(strm, Z_PARTIAL_FLUSH);
  759.     }
  760.     if (s->level != level) {
  761. s->level = level;
  762. s->max_lazy_match   = configuration_table[level].max_lazy;
  763. s->good_match       = configuration_table[level].good_length;
  764. s->nice_match       = configuration_table[level].nice_length;
  765. s->max_chain_length = configuration_table[level].max_chain;
  766.     }
  767.     s->strategy = strategy;
  768.     return err;
  769. }
  770. /* =========================================================================
  771.  * Put a short in the pending buffer. The 16-bit value is put in MSB order.
  772.  * IN assertion: the stream state is correct and there is enough room in
  773.  * pending_buf.
  774.  */
  775. local void putShortMSB (s, b)
  776.     deflate_state *s;
  777.     uInt b;
  778. {
  779.     put_byte(s, (Byte)(b >> 8));
  780.     put_byte(s, (Byte)(b & 0xff));
  781. }   
  782. /* =========================================================================
  783.  * Flush as much pending output as possible. All deflate() output goes
  784.  * through this function so some applications may wish to modify it
  785.  * to avoid allocating a large strm->next_out buffer and copying into it.
  786.  * (See also read_buf()).
  787.  */
  788. local void flush_pending(strm)
  789.     z_streamp strm;
  790. {
  791.     deflate_state *s = (deflate_state *) strm->state;
  792.     unsigned len = s->pending;
  793.     if (len > strm->avail_out) len = strm->avail_out;
  794.     if (len == 0) return;
  795.     if (strm->next_out != Z_NULL) {
  796. zmemcpy(strm->next_out, s->pending_out, len);
  797. strm->next_out += len;
  798.     }
  799.     s->pending_out += len;
  800.     strm->total_out += len;
  801.     strm->avail_out  -= len;
  802.     s->pending -= len;
  803.     if (s->pending == 0) {
  804.         s->pending_out = s->pending_buf;
  805.     }
  806. }
  807. /* ========================================================================= */
  808. int deflate (strm, flush)
  809.     z_streamp strm;
  810.     int flush;
  811. {
  812.     int old_flush; /* value of flush param for previous deflate call */
  813.     deflate_state *s;
  814.     if (strm == Z_NULL || strm->state == Z_NULL ||
  815. flush > Z_FINISH || flush < 0) {
  816.         return Z_STREAM_ERROR;
  817.     }
  818.     s = (deflate_state *) strm->state;
  819.     if ((strm->next_in == Z_NULL && strm->avail_in != 0) ||
  820. (s->status == FINISH_STATE && flush != Z_FINISH)) {
  821.         ERR_RETURN(strm, Z_STREAM_ERROR);
  822.     }
  823.     if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
  824.     s->strm = strm; /* just in case */
  825.     old_flush = s->last_flush;
  826.     s->last_flush = flush;
  827.     /* Write the zlib header */
  828.     if (s->status == INIT_STATE) {
  829.         uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
  830.         uInt level_flags = (s->level-1) >> 1;
  831.         if (level_flags > 3) level_flags = 3;
  832.         header |= (level_flags << 6);
  833. if (s->strstart != 0) header |= PRESET_DICT;
  834.         header += 31 - (header % 31);
  835.         s->status = BUSY_STATE;
  836.         putShortMSB(s, header);
  837. /* Save the adler32 of the preset dictionary: */
  838. if (s->strstart != 0) {
  839.     putShortMSB(s, (uInt)(strm->adler >> 16));
  840.     putShortMSB(s, (uInt)(strm->adler & 0xffff));
  841. }
  842. strm->adler = 1L;
  843.     }
  844.     /* Flush as much pending output as possible */
  845.     if (s->pending != 0) {
  846.         flush_pending(strm);
  847.         if (strm->avail_out == 0) {
  848.     /* Since avail_out is 0, deflate will be called again with
  849.      * more output space, but possibly with both pending and
  850.      * avail_in equal to zero. There won't be anything to do,
  851.      * but this is not an error situation so make sure we
  852.      * return OK instead of BUF_ERROR at next call of deflate:
  853.              */
  854.     s->last_flush = -1;
  855.     return Z_OK;
  856. }
  857.     /* Make sure there is something to do and avoid duplicate consecutive
  858.      * flushes. For repeated and useless calls with Z_FINISH, we keep
  859.      * returning Z_STREAM_END instead of Z_BUFF_ERROR.
  860.      */
  861.     } else if (strm->avail_in == 0 && flush <= old_flush &&
  862.        flush != Z_FINISH) {
  863.         ERR_RETURN(strm, Z_BUF_ERROR);
  864.     }
  865.     /* User must not provide more input after the first FINISH: */
  866.     if (s->status == FINISH_STATE && strm->avail_in != 0) {
  867.         ERR_RETURN(strm, Z_BUF_ERROR);
  868.     }
  869.     /* Start a new block or continue the current one.
  870.      */
  871.     if (strm->avail_in != 0 || s->lookahead != 0 ||
  872.         (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
  873.         block_state bstate;
  874. bstate = (*(configuration_table[s->level].func))(s, flush);
  875.         if (bstate == finish_started || bstate == finish_done) {
  876.             s->status = FINISH_STATE;
  877.         }
  878.         if (bstate == need_more || bstate == finish_started) {
  879.     if (strm->avail_out == 0) {
  880.         s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
  881.     }
  882.     return Z_OK;
  883.     /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
  884.      * of deflate should use the same flush parameter to make sure
  885.      * that the flush is complete. So we don't have to output an
  886.      * empty block here, this will be done at next call. This also
  887.      * ensures that for a very small output buffer, we emit at most
  888.      * one empty block.
  889.      */
  890. }
  891.         if (bstate == block_done) {
  892.             if (flush == Z_PARTIAL_FLUSH) {
  893.                 _tr_align(s);
  894.     } else if (flush == Z_PACKET_FLUSH) {
  895. /* Output just the 3-bit `stored' block type value,
  896.    but not a zero length. */
  897. _tr_stored_type_only(s);
  898.             } else { /* FULL_FLUSH or SYNC_FLUSH */
  899.                 _tr_stored_block(s, (char*)0, 0L, 0);
  900.                 /* For a full flush, this empty block will be recognized
  901.                  * as a special marker by inflate_sync().
  902.                  */
  903.                 if (flush == Z_FULL_FLUSH) {
  904.                     CLEAR_HASH(s);             /* forget history */
  905.                 }
  906.             }
  907.             flush_pending(strm);
  908.     if (strm->avail_out == 0) {
  909.       s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
  910.       return Z_OK;
  911.     }
  912.         }
  913.     }
  914.     Assert(strm->avail_out > 0, "bug2");
  915.     if (flush != Z_FINISH) return Z_OK;
  916.     if (s->noheader) return Z_STREAM_END;
  917.     /* Write the zlib trailer (adler32) */
  918.     putShortMSB(s, (uInt)(strm->adler >> 16));
  919.     putShortMSB(s, (uInt)(strm->adler & 0xffff));
  920.     flush_pending(strm);
  921.     /* If avail_out is zero, the application will call deflate again
  922.      * to flush the rest.
  923.      */
  924.     s->noheader = -1; /* write the trailer only once! */
  925.     return s->pending != 0 ? Z_OK : Z_STREAM_END;
  926. }
  927. /* ========================================================================= */
  928. int deflateEnd (strm)
  929.     z_streamp strm;
  930. {
  931.     int status;
  932.     deflate_state *s;
  933.     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
  934.     s = (deflate_state *) strm->state;
  935.     status = s->status;
  936.     if (status != INIT_STATE && status != BUSY_STATE &&
  937. status != FINISH_STATE) {
  938.       return Z_STREAM_ERROR;
  939.     }
  940.     /* Deallocate in reverse order of allocations: */
  941.     TRY_FREE(strm, s->pending_buf);
  942.     TRY_FREE(strm, s->head);
  943.     TRY_FREE(strm, s->prev);
  944.     TRY_FREE(strm, s->window);
  945.     ZFREE(strm, s);
  946.     strm->state = Z_NULL;
  947.     return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
  948. }
  949. /* =========================================================================
  950.  * Copy the source state to the destination state.
  951.  */
  952. int deflateCopy (dest, source)
  953.     z_streamp dest;
  954.     z_streamp source;
  955. {
  956.     deflate_state *ds;
  957.     deflate_state *ss;
  958.     ushf *overlay;
  959.     if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL)
  960.         return Z_STREAM_ERROR;
  961.     ss = (deflate_state *) source->state;
  962.     *dest = *source;
  963.     ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
  964.     if (ds == Z_NULL) return Z_MEM_ERROR;
  965.     dest->state = (struct internal_state FAR *) ds;
  966.     *ds = *ss;
  967.     ds->strm = dest;
  968.     ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
  969.     ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
  970.     ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
  971.     overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
  972.     ds->pending_buf = (uchf *) overlay;
  973.     if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
  974.         ds->pending_buf == Z_NULL) {
  975.         deflateEnd (dest);
  976.         return Z_MEM_ERROR;
  977.     }
  978.     /* ??? following zmemcpy doesn't work for 16-bit MSDOS */
  979.     zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
  980.     zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
  981.     zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
  982.     zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
  983.     ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
  984.     ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
  985.     ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
  986.     ds->l_desc.dyn_tree = ds->dyn_ltree;
  987.     ds->d_desc.dyn_tree = ds->dyn_dtree;
  988.     ds->bl_desc.dyn_tree = ds->bl_tree;
  989.     return Z_OK;
  990. }
  991. /* ===========================================================================
  992.  * Return the number of bytes of output which are immediately available
  993.  * for output from the decompressor.
  994.  */
  995. int deflateOutputPending (strm)
  996.     z_streamp strm;
  997. {
  998.     if (strm == Z_NULL || strm->state == Z_NULL) return 0;
  999.     
  1000.     return ((deflate_state *)(strm->state))->pending;
  1001. }
  1002. /* ===========================================================================
  1003.  * Read a new buffer from the current input stream, update the adler32
  1004.  * and total number of bytes read.  All deflate() input goes through
  1005.  * this function so some applications may wish to modify it to avoid
  1006.  * allocating a large strm->next_in buffer and copying from it.
  1007.  * (See also flush_pending()).
  1008.  */
  1009. local int read_buf(strm, buf, size)
  1010.     z_streamp strm;
  1011.     charf *buf;
  1012.     unsigned size;
  1013. {
  1014.     unsigned len = strm->avail_in;
  1015.     if (len > size) len = size;
  1016.     if (len == 0) return 0;
  1017.     strm->avail_in  -= len;
  1018.     if (!((deflate_state *)(strm->state))->noheader) {
  1019.         strm->adler = adler32(strm->adler, strm->next_in, len);
  1020.     }
  1021.     zmemcpy(buf, strm->next_in, len);
  1022.     strm->next_in  += len;
  1023.     strm->total_in += len;
  1024.     return (int)len;
  1025. }
  1026. /* ===========================================================================
  1027.  * Initialize the "longest match" routines for a new zlib stream
  1028.  */
  1029. local void lm_init (s)
  1030.     deflate_state *s;
  1031. {
  1032.     s->window_size = (ulg)2L*s->w_size;
  1033.     CLEAR_HASH(s);
  1034.     /* Set the default configuration parameters:
  1035.      */
  1036.     s->max_lazy_match   = configuration_table[s->level].max_lazy;
  1037.     s->good_match       = configuration_table[s->level].good_length;
  1038.     s->nice_match       = configuration_table[s->level].nice_length;
  1039.     s->max_chain_length = configuration_table[s->level].max_chain;
  1040.     s->strstart = 0;
  1041.     s->block_start = 0L;
  1042.     s->lookahead = 0;
  1043.     s->match_length = s->prev_length = MIN_MATCH-1;
  1044.     s->match_available = 0;
  1045.     s->ins_h = 0;
  1046. #ifdef ASMV
  1047.     match_init(); /* initialize the asm code */
  1048. #endif
  1049. }
  1050. /* ===========================================================================
  1051.  * Set match_start to the longest match starting at the given string and
  1052.  * return its length. Matches shorter or equal to prev_length are discarded,
  1053.  * in which case the result is equal to prev_length and match_start is
  1054.  * garbage.
  1055.  * IN assertions: cur_match is the head of the hash chain for the current
  1056.  *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  1057.  * OUT assertion: the match length is not greater than s->lookahead.
  1058.  */
  1059. #ifndef ASMV
  1060. /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
  1061.  * match.S. The code will be functionally equivalent.
  1062.  */
  1063. local uInt longest_match(s, cur_match)
  1064.     deflate_state *s;
  1065.     IPos cur_match;                             /* current match */
  1066. {
  1067.     unsigned chain_length = s->max_chain_length;/* max hash chain length */
  1068.     register Bytef *scan = s->window + s->strstart; /* current string */
  1069.     register Bytef *match;                       /* matched string */
  1070.     register int len;                           /* length of current match */
  1071.     int best_len = s->prev_length;              /* best match length so far */
  1072.     int nice_match = s->nice_match;             /* stop if match long enough */
  1073.     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
  1074.         s->strstart - (IPos)MAX_DIST(s) : NIL;
  1075.     /* Stop when cur_match becomes <= limit. To simplify the code,
  1076.      * we prevent matches with the string of window index 0.
  1077.      */
  1078.     Posf *prev = s->prev;
  1079.     uInt wmask = s->w_mask;
  1080. #ifdef UNALIGNED_OK
  1081.     /* Compare two bytes at a time. Note: this is not always beneficial.
  1082.      * Try with and without -DUNALIGNED_OK to check.
  1083.      */
  1084.     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
  1085.     register ush scan_start = *(ushf*)scan;
  1086.     register ush scan_end   = *(ushf*)(scan+best_len-1);
  1087. #else
  1088.     register Bytef *strend = s->window + s->strstart + MAX_MATCH;
  1089.     register Byte scan_end1  = scan[best_len-1];
  1090.     register Byte scan_end   = scan[best_len];
  1091. #endif
  1092.     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
  1093.      * It is easy to get rid of this optimization if necessary.
  1094.      */
  1095.     Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
  1096.     /* Do not waste too much time if we already have a good match: */
  1097.     if (s->prev_length >= s->good_match) {
  1098.         chain_length >>= 2;
  1099.     }
  1100.     /* Do not look for matches beyond the end of the input. This is necessary
  1101.      * to make deflate deterministic.
  1102.      */
  1103.     if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
  1104.     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
  1105.     do {
  1106.         Assert(cur_match < s->strstart, "no future");
  1107.         match = s->window + cur_match;
  1108.         /* Skip to next match if the match length cannot increase
  1109.          * or if the match length is less than 2:
  1110.          */
  1111. #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
  1112.         /* This code assumes sizeof(unsigned short) == 2. Do not use
  1113.          * UNALIGNED_OK if your compiler uses a different size.
  1114.          */
  1115.         if (*(ushf*)(match+best_len-1) != scan_end ||
  1116.             *(ushf*)match != scan_start) continue;
  1117.         /* It is not necessary to compare scan[2] and match[2] since they are
  1118.          * always equal when the other bytes match, given that the hash keys
  1119.          * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
  1120.          * strstart+3, +5, ... up to strstart+257. We check for insufficient
  1121.          * lookahead only every 4th comparison; the 128th check will be made
  1122.          * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
  1123.          * necessary to put more guard bytes at the end of the window, or
  1124.          * to check more often for insufficient lookahead.
  1125.          */
  1126.         Assert(scan[2] == match[2], "scan[2]?");
  1127.         scan++, match++;
  1128.         do {
  1129.         } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
  1130.                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
  1131.                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
  1132.                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
  1133.                  scan < strend);
  1134.         /* The funny "do {}" generates better code on most compilers */
  1135.         /* Here, scan <= window+strstart+257 */
  1136.         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  1137.         if (*scan == *match) scan++;
  1138.         len = (MAX_MATCH - 1) - (int)(strend-scan);
  1139.         scan = strend - (MAX_MATCH-1);
  1140. #else /* UNALIGNED_OK */
  1141.         if (match[best_len]   != scan_end  ||
  1142.             match[best_len-1] != scan_end1 ||
  1143.             *match            != *scan     ||
  1144.             *++match          != scan[1])      continue;
  1145.         /* The check at best_len-1 can be removed because it will be made
  1146.          * again later. (This heuristic is not always a win.)
  1147.          * It is not necessary to compare scan[2] and match[2] since they
  1148.          * are always equal when the other bytes match, given that
  1149.          * the hash keys are equal and that HASH_BITS >= 8.
  1150.          */
  1151.         scan += 2, match++;
  1152.         Assert(*scan == *match, "match[2]?");
  1153.         /* We check for insufficient lookahead only every 8th comparison;
  1154.          * the 256th check will be made at strstart+258.
  1155.          */
  1156.         do {
  1157.         } while (*++scan == *++match && *++scan == *++match &&
  1158.                  *++scan == *++match && *++scan == *++match &&
  1159.                  *++scan == *++match && *++scan == *++match &&
  1160.                  *++scan == *++match && *++scan == *++match &&
  1161.                  scan < strend);
  1162.         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  1163.         len = MAX_MATCH - (int)(strend - scan);
  1164.         scan = strend - MAX_MATCH;
  1165. #endif /* UNALIGNED_OK */
  1166.         if (len > best_len) {
  1167.             s->match_start = cur_match;
  1168.             best_len = len;
  1169.             if (len >= nice_match) break;
  1170. #ifdef UNALIGNED_OK
  1171.             scan_end = *(ushf*)(scan+best_len-1);
  1172. #else
  1173.             scan_end1  = scan[best_len-1];
  1174.             scan_end   = scan[best_len];
  1175. #endif
  1176.         }
  1177.     } while ((cur_match = prev[cur_match & wmask]) > limit
  1178.              && --chain_length != 0);
  1179.     if ((uInt)best_len <= s->lookahead) return best_len;
  1180.     return s->lookahead;
  1181. }
  1182. #endif /* ASMV */
  1183. #ifdef DEBUG_ZLIB
  1184. /* ===========================================================================
  1185.  * Check that the match at match_start is indeed a match.
  1186.  */
  1187. local void check_match(s, start, match, length)
  1188.     deflate_state *s;
  1189.     IPos start, match;
  1190.     int length;
  1191. {
  1192.     /* check that the match is indeed a match */
  1193.     if (zmemcmp((charf *)s->window + match,
  1194.                 (charf *)s->window + start, length) != EQUAL) {
  1195.         fprintf(stderr, " start %u, match %u, length %dn",
  1196. start, match, length);
  1197.         do {
  1198.     fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
  1199. } while (--length != 0);
  1200.         z_error("invalid match");
  1201.     }
  1202.     if (z_verbose > 1) {
  1203.         fprintf(stderr,"\[%d,%d]", start-match, length);
  1204.         do { putc(s->window[start++], stderr); } while (--length != 0);
  1205.     }
  1206. }
  1207. #else
  1208. #  define check_match(s, start, match, length)
  1209. #endif
  1210. /* ===========================================================================
  1211.  * Fill the window when the lookahead becomes insufficient.
  1212.  * Updates strstart and lookahead.
  1213.  *
  1214.  * IN assertion: lookahead < MIN_LOOKAHEAD
  1215.  * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
  1216.  *    At least one byte has been read, or avail_in == 0; reads are
  1217.  *    performed for at least two bytes (required for the zip translate_eol
  1218.  *    option -- not supported here).
  1219.  */
  1220. local void fill_window(s)
  1221.     deflate_state *s;
  1222. {
  1223.     register unsigned n, m;
  1224.     register Posf *p;
  1225.     unsigned more;    /* Amount of free space at the end of the window. */
  1226.     uInt wsize = s->w_size;
  1227.     do {
  1228.         more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
  1229.         /* Deal with !@#$% 64K limit: */
  1230.         if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
  1231.             more = wsize;
  1232.         } else if (more == (unsigned)(-1)) {
  1233.             /* Very unlikely, but possible on 16 bit machine if strstart == 0
  1234.              * and lookahead == 1 (input done one byte at time)
  1235.              */
  1236.             more--;
  1237.         /* If the window is almost full and there is insufficient lookahead,
  1238.          * move the upper half to the lower one to make room in the upper half.
  1239.          */
  1240.         } else if (s->strstart >= wsize+MAX_DIST(s)) {
  1241.             zmemcpy((charf *)s->window, (charf *)s->window+wsize,
  1242.                    (unsigned)wsize);
  1243.             s->match_start -= wsize;
  1244.             s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
  1245.             s->block_start -= (long) wsize;
  1246.             /* Slide the hash table (could be avoided with 32 bit values
  1247.                at the expense of memory usage). We slide even when level == 0
  1248.                to keep the hash table consistent if we switch back to level > 0
  1249.                later. (Using level 0 permanently is not an optimal usage of
  1250.                zlib, so we don't care about this pathological case.)
  1251.              */
  1252.             n = s->hash_size;
  1253.             p = &s->head[n];
  1254.             do {
  1255.                 m = *--p;
  1256.                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
  1257.             } while (--n);
  1258.             n = wsize;
  1259.             p = &s->prev[n];
  1260.             do {
  1261.                 m = *--p;
  1262.                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
  1263.                 /* If n is not on any hash chain, prev[n] is garbage but
  1264.                  * its value will never be used.
  1265.                  */
  1266.             } while (--n);
  1267.             more += wsize;
  1268.         }
  1269.         if (s->strm->avail_in == 0) return;
  1270.         /* If there was no sliding:
  1271.          *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
  1272.          *    more == window_size - lookahead - strstart
  1273.          * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
  1274.          * => more >= window_size - 2*WSIZE + 2
  1275.          * In the BIG_MEM or MMAP case (not yet supported),
  1276.          *   window_size == input_size + MIN_LOOKAHEAD  &&
  1277.          *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
  1278.          * Otherwise, window_size == 2*WSIZE so more >= 2.
  1279.          * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
  1280.          */
  1281.         Assert(more >= 2, "more < 2");
  1282.         n = read_buf(s->strm, (charf *)s->window + s->strstart + s->lookahead,
  1283.                      more);
  1284.         s->lookahead += n;
  1285.         /* Initialize the hash value now that we have some input: */
  1286.         if (s->lookahead >= MIN_MATCH) {
  1287.             s->ins_h = s->window[s->strstart];
  1288.             UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
  1289. #if MIN_MATCH != 3
  1290.             Call UPDATE_HASH() MIN_MATCH-3 more times
  1291. #endif
  1292.         }
  1293.         /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
  1294.          * but this is not important since only literal bytes will be emitted.
  1295.          */
  1296.     } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
  1297. }
  1298. /* ===========================================================================
  1299.  * Flush the current block, with given end-of-file flag.
  1300.  * IN assertion: strstart is set to the end of the current match.
  1301.  */
  1302. #define FLUSH_BLOCK_ONLY(s, eof) { 
  1303.    _tr_flush_block(s, (s->block_start >= 0L ? 
  1304.                    (charf *)&s->window[(unsigned)s->block_start] : 
  1305.                    (charf *)Z_NULL), 
  1306. (ulg)((long)s->strstart - s->block_start), 
  1307. (eof)); 
  1308.    s->block_start = s->strstart; 
  1309.    flush_pending(s->strm); 
  1310.    Tracev((stderr,"[FLUSH]")); 
  1311. }
  1312. /* Same but force premature exit if necessary. */
  1313. #define FLUSH_BLOCK(s, eof) { 
  1314.    FLUSH_BLOCK_ONLY(s, eof); 
  1315.    if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; 
  1316. }
  1317. /* ===========================================================================
  1318.  * Copy without compression as much as possible from the input stream, return
  1319.  * the current block state.
  1320.  * This function does not insert new strings in the dictionary since
  1321.  * uncompressible data is probably not useful. This function is used
  1322.  * only for the level=0 compression option.
  1323.  * NOTE: this function should be optimized to avoid extra copying from
  1324.  * window to pending_buf.
  1325.  */
  1326. local block_state deflate_stored(s, flush)
  1327.     deflate_state *s;
  1328.     int flush;
  1329. {
  1330.     /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
  1331.      * to pending_buf_size, and each stored block has a 5 byte header:
  1332.      */
  1333.     ulg max_block_size = 0xffff;
  1334.     ulg max_start;
  1335.     if (max_block_size > s->pending_buf_size - 5) {
  1336.         max_block_size = s->pending_buf_size - 5;
  1337.     }
  1338.     /* Copy as much as possible from input to output: */
  1339.     for (;;) {
  1340.         /* Fill the window as much as possible: */
  1341.         if (s->lookahead <= 1) {
  1342.             Assert(s->strstart < s->w_size+MAX_DIST(s) ||
  1343.    s->block_start >= (long)s->w_size, "slide too late");
  1344.             fill_window(s);
  1345.             if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
  1346.             if (s->lookahead == 0) break; /* flush the current block */
  1347.         }
  1348. Assert(s->block_start >= 0L, "block gone");
  1349. s->strstart += s->lookahead;
  1350. s->lookahead = 0;
  1351. /* Emit a stored block if pending_buf will be full: */
  1352.   max_start = s->block_start + max_block_size;
  1353.         if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
  1354.     /* strstart == 0 is possible when wraparound on 16-bit machine */
  1355.     s->lookahead = (uInt)(s->strstart - max_start);
  1356.     s->strstart = (uInt)max_start;
  1357.             FLUSH_BLOCK(s, 0);
  1358. }
  1359. /* Flush if we may have to slide, otherwise block_start may become
  1360.          * negative and the data will be gone:
  1361.          */
  1362.         if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
  1363.             FLUSH_BLOCK(s, 0);
  1364. }
  1365.     }
  1366.     FLUSH_BLOCK(s, flush == Z_FINISH);
  1367.     return flush == Z_FINISH ? finish_done : block_done;
  1368. }
  1369. /* ===========================================================================
  1370.  * Compress as much as possible from the input stream, return the current
  1371.  * block state.
  1372.  * This function does not perform lazy evaluation of matches and inserts
  1373.  * new strings in the dictionary only for unmatched strings or for short
  1374.  * matches. It is used only for the fast compression options.
  1375.  */
  1376. local block_state deflate_fast(s, flush)
  1377.     deflate_state *s;
  1378.     int flush;
  1379. {
  1380.     IPos hash_head = NIL; /* head of the hash chain */
  1381.     int bflush;           /* set if current block must be flushed */
  1382.     for (;;) {
  1383.         /* Make sure that we always have enough lookahead, except
  1384.          * at the end of the input file. We need MAX_MATCH bytes
  1385.          * for the next match, plus MIN_MATCH bytes to insert the
  1386.          * string following the next match.
  1387.          */
  1388.         if (s->lookahead < MIN_LOOKAHEAD) {
  1389.             fill_window(s);
  1390.             if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
  1391.         return need_more;
  1392.     }
  1393.             if (s->lookahead == 0) break; /* flush the current block */
  1394.         }
  1395.         /* Insert the string window[strstart .. strstart+2] in the
  1396.          * dictionary, and set hash_head to the head of the hash chain:
  1397.          */
  1398.         if (s->lookahead >= MIN_MATCH) {
  1399.             INSERT_STRING(s, s->strstart, hash_head);
  1400.         }
  1401.         /* Find the longest match, discarding those <= prev_length.
  1402.          * At this point we have always match_length < MIN_MATCH
  1403.          */
  1404.         if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
  1405.             /* To simplify the code, we prevent matches with the string
  1406.              * of window index 0 (in particular we have to avoid a match
  1407.              * of the string with itself at the start of the input file).
  1408.              */
  1409.             if (s->strategy != Z_HUFFMAN_ONLY) {
  1410.                 s->match_length = longest_match (s, hash_head);
  1411.             }
  1412.             /* longest_match() sets match_start */
  1413.         }
  1414.         if (s->match_length >= MIN_MATCH) {
  1415.             check_match(s, s->strstart, s->match_start, s->match_length);
  1416.             bflush = _tr_tally(s, s->strstart - s->match_start,
  1417.                                s->match_length - MIN_MATCH);
  1418.             s->lookahead -= s->match_length;
  1419.             /* Insert new strings in the hash table only if the match length
  1420.              * is not too large. This saves time but degrades compression.
  1421.              */
  1422.             if (s->match_length <= s->max_insert_length &&
  1423.                 s->lookahead >= MIN_MATCH) {
  1424.                 s->match_length--; /* string at strstart already in hash table */
  1425.                 do {
  1426.                     s->strstart++;
  1427.                     INSERT_STRING(s, s->strstart, hash_head);
  1428.                     /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  1429.                      * always MIN_MATCH bytes ahead.
  1430.                      */
  1431.                 } while (--s->match_length != 0);
  1432.                 s->strstart++; 
  1433.             } else {
  1434.                 s->strstart += s->match_length;
  1435.                 s->match_length = 0;
  1436.                 s->ins_h = s->window[s->strstart];
  1437.                 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
  1438. #if MIN_MATCH != 3
  1439.                 Call UPDATE_HASH() MIN_MATCH-3 more times
  1440. #endif
  1441.                 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
  1442.                  * matter since it will be recomputed at next deflate call.
  1443.                  */
  1444.             }
  1445.         } else {
  1446.             /* No match, output a literal byte */
  1447.             Tracevv((stderr,"%c", s->window[s->strstart]));
  1448.             bflush = _tr_tally (s, 0, s->window[s->strstart]);
  1449.             s->lookahead--;
  1450.             s->strstart++; 
  1451.         }
  1452.         if (bflush) FLUSH_BLOCK(s, 0);
  1453.     }
  1454.     FLUSH_BLOCK(s, flush == Z_FINISH);
  1455.     return flush == Z_FINISH ? finish_done : block_done;
  1456. }
  1457. /* ===========================================================================
  1458.  * Same as above, but achieves better compression. We use a lazy
  1459.  * evaluation for matches: a match is finally adopted only if there is
  1460.  * no better match at the next window position.
  1461.  */
  1462. local block_state deflate_slow(s, flush)
  1463.     deflate_state *s;
  1464.     int flush;
  1465. {
  1466.     IPos hash_head = NIL;    /* head of hash chain */
  1467.     int bflush;              /* set if current block must be flushed */
  1468.     /* Process the input block. */
  1469.     for (;;) {
  1470.         /* Make sure that we always have enough lookahead, except
  1471.          * at the end of the input file. We need MAX_MATCH bytes
  1472.          * for the next match, plus MIN_MATCH bytes to insert the
  1473.          * string following the next match.
  1474.          */
  1475.         if (s->lookahead < MIN_LOOKAHEAD) {
  1476.             fill_window(s);
  1477.             if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
  1478.         return need_more;
  1479.     }
  1480.             if (s->lookahead == 0) break; /* flush the current block */
  1481.         }
  1482.         /* Insert the string window[strstart .. strstart+2] in the
  1483.          * dictionary, and set hash_head to the head of the hash chain:
  1484.          */
  1485.         if (s->lookahead >= MIN_MATCH) {
  1486.             INSERT_STRING(s, s->strstart, hash_head);
  1487.         }
  1488.         /* Find the longest match, discarding those <= prev_length.
  1489.          */
  1490.         s->prev_length = s->match_length, s->prev_match = s->match_start;
  1491.         s->match_length = MIN_MATCH-1;
  1492.         if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
  1493.             s->strstart - hash_head <= MAX_DIST(s)) {
  1494.             /* To simplify the code, we prevent matches with the string
  1495.              * of window index 0 (in particular we have to avoid a match
  1496.              * of the string with itself at the start of the input file).
  1497.              */
  1498.             if (s->strategy != Z_HUFFMAN_ONLY) {
  1499.                 s->match_length = longest_match (s, hash_head);
  1500.             }
  1501.             /* longest_match() sets match_start */
  1502.             if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
  1503.                  (s->match_length == MIN_MATCH &&
  1504.                   s->strstart - s->match_start > TOO_FAR))) {
  1505.                 /* If prev_match is also MIN_MATCH, match_start is garbage
  1506.                  * but we will ignore the current match anyway.
  1507.                  */
  1508.                 s->match_length = MIN_MATCH-1;
  1509.             }
  1510.         }
  1511.         /* If there was a match at the previous step and the current
  1512.          * match is not better, output the previous match:
  1513.          */
  1514.         if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
  1515.             uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
  1516.             /* Do not insert strings in hash table beyond this. */
  1517.             check_match(s, s->strstart-1, s->prev_match, s->prev_length);
  1518.             bflush = _tr_tally(s, s->strstart -1 - s->prev_match,
  1519.                                s->prev_length - MIN_MATCH);
  1520.             /* Insert in hash table all strings up to the end of the match.
  1521.              * strstart-1 and strstart are already inserted. If there is not
  1522.              * enough lookahead, the last two strings are not inserted in
  1523.              * the hash table.
  1524.              */
  1525.             s->lookahead -= s->prev_length-1;
  1526.             s->prev_length -= 2;
  1527.             do {
  1528.                 if (++s->strstart <= max_insert) {
  1529.                     INSERT_STRING(s, s->strstart, hash_head);
  1530.                 }
  1531.             } while (--s->prev_length != 0);
  1532.             s->match_available = 0;
  1533.             s->match_length = MIN_MATCH-1;
  1534.             s->strstart++;
  1535.             if (bflush) FLUSH_BLOCK(s, 0);
  1536.         } else if (s->match_available) {
  1537.             /* If there was no match at the previous position, output a
  1538.              * single literal. If there was a match but the current match
  1539.              * is longer, truncate the previous match to a single literal.
  1540.              */
  1541.             Tracevv((stderr,"%c", s->window[s->strstart-1]));
  1542.             if (_tr_tally (s, 0, s->window[s->strstart-1])) {
  1543.                 FLUSH_BLOCK_ONLY(s, 0);
  1544.             }
  1545.             s->strstart++;
  1546.             s->lookahead--;
  1547.             if (s->strm->avail_out == 0) return need_more;
  1548.         } else {
  1549.             /* There is no previous match to compare with, wait for
  1550.              * the next step to decide.
  1551.              */
  1552.             s->match_available = 1;
  1553.             s->strstart++;
  1554.             s->lookahead--;
  1555.         }
  1556.     }
  1557.     Assert (flush != Z_NO_FLUSH, "no flush?");
  1558.     if (s->match_available) {
  1559.         Tracevv((stderr,"%c", s->window[s->strstart-1]));
  1560.         _tr_tally (s, 0, s->window[s->strstart-1]);
  1561.         s->match_available = 0;
  1562.     }
  1563.     FLUSH_BLOCK(s, flush == Z_FINISH);
  1564.     return flush == Z_FINISH ? finish_done : block_done;
  1565. }
  1566. /* --- deflate.c */
  1567. /* +++ trees.c */
  1568. /* trees.c -- output deflated data using Huffman coding
  1569.  * Copyright (C) 1995-1996 Jean-loup Gailly
  1570.  * For conditions of distribution and use, see copyright notice in zlib.h 
  1571.  */
  1572. /*
  1573.  *  ALGORITHM
  1574.  *
  1575.  *      The "deflation" process uses several Huffman trees. The more
  1576.  *      common source values are represented by shorter bit sequences.
  1577.  *
  1578.  *      Each code tree is stored in a compressed form which is itself
  1579.  * a Huffman encoding of the lengths of all the code strings (in
  1580.  * ascending order by source values).  The actual code strings are
  1581.  * reconstructed from the lengths in the inflate process, as described
  1582.  * in the deflate specification.
  1583.  *
  1584.  *  REFERENCES
  1585.  *
  1586.  *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
  1587.  *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
  1588.  *
  1589.  *      Storer, James A.
  1590.  *          Data Compression:  Methods and Theory, pp. 49-50.
  1591.  *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
  1592.  *
  1593.  *      Sedgewick, R.
  1594.  *          Algorithms, p290.
  1595.  *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
  1596.  */
  1597. /* From: trees.c,v 1.11 1996/07/24 13:41:06 me Exp $ */
  1598. /* #include "deflate.h" */
  1599. #ifdef DEBUG_ZLIB
  1600. #  include <ctype.h>
  1601. #endif
  1602. /* ===========================================================================
  1603.  * Constants
  1604.  */
  1605. #define MAX_BL_BITS 7
  1606. /* Bit length codes must not exceed MAX_BL_BITS bits */
  1607. #define END_BLOCK 256
  1608. /* end of block literal code */
  1609. #define REP_3_6      16
  1610. /* repeat previous bit length 3-6 times (2 bits of repeat count) */
  1611. #define REPZ_3_10    17
  1612. /* repeat a zero length 3-10 times  (3 bits of repeat count) */
  1613. #define REPZ_11_138  18
  1614. /* repeat a zero length 11-138 times  (7 bits of repeat count) */
  1615. local int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
  1616.    = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
  1617. local int extra_dbits[D_CODES] /* extra bits for each distance code */
  1618.    = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
  1619. local int extra_blbits[BL_CODES]/* extra bits for each bit length code */
  1620.    = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
  1621. local uch bl_order[BL_CODES]
  1622.    = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
  1623. /* The lengths of the bit length codes are sent in order of decreasing
  1624.  * probability, to avoid transmitting the lengths for unused bit length codes.
  1625.  */
  1626. #define Buf_size (8 * 2*sizeof(char))
  1627. /* Number of bits used within bi_buf. (bi_buf might be implemented on
  1628.  * more than 16 bits on some systems.)
  1629.  */
  1630. /* ===========================================================================
  1631.  * Local data. These are initialized only once.
  1632.  */
  1633. local ct_data static_ltree[L_CODES+2];
  1634. /* The static literal tree. Since the bit lengths are imposed, there is no
  1635.  * need for the L_CODES extra codes used during heap construction. However
  1636.  * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
  1637.  * below).
  1638.  */
  1639. local ct_data static_dtree[D_CODES];
  1640. /* The static distance tree. (Actually a trivial tree since all codes use
  1641.  * 5 bits.)
  1642.  */
  1643. local uch dist_code[512];
  1644. /* distance codes. The first 256 values correspond to the distances
  1645.  * 3 .. 258, the last 256 values correspond to the top 8 bits of
  1646.  * the 15 bit distances.
  1647.  */
  1648. local uch length_code[MAX_MATCH-MIN_MATCH+1];
  1649. /* length code for each normalized match length (0 == MIN_MATCH) */
  1650. local int base_length[LENGTH_CODES];
  1651. /* First normalized length for each code (0 = MIN_MATCH) */
  1652. local int base_dist[D_CODES];
  1653. /* First normalized distance for each code (0 = distance of 1) */
  1654. struct static_tree_desc_s {
  1655.     ct_data *static_tree;        /* static tree or NULL */
  1656.     intf    *extra_bits;         /* extra bits for each code or NULL */
  1657.     int     extra_base;          /* base index for extra_bits */
  1658.     int     elems;               /* max number of elements in the tree */
  1659.     int     max_length;          /* max bit length for the codes */
  1660. };
  1661. local static_tree_desc  static_l_desc =
  1662. {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
  1663. local static_tree_desc  static_d_desc =
  1664. {static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
  1665. local static_tree_desc  static_bl_desc =
  1666. {(ct_data *)0, extra_blbits, 0,      BL_CODES, MAX_BL_BITS};
  1667. /* ===========================================================================
  1668.  * Local (static) routines in this file.
  1669.  */
  1670. local void tr_static_init OF((void));
  1671. local void init_block     OF((deflate_state *s));
  1672. local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
  1673. local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
  1674. local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
  1675. local void build_tree     OF((deflate_state *s, tree_desc *desc));
  1676. local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
  1677. local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
  1678. local int  build_bl_tree  OF((deflate_state *s));
  1679. local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
  1680.                               int blcodes));
  1681. local void compress_block OF((deflate_state *s, ct_data *ltree,
  1682.                               ct_data *dtree));
  1683. local void set_data_type  OF((deflate_state *s));
  1684. local unsigned bi_reverse OF((unsigned value, int length));
  1685. local void bi_windup      OF((deflate_state *s));
  1686. local void bi_flush       OF((deflate_state *s));
  1687. local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
  1688.                               int header));
  1689. #ifndef DEBUG_ZLIB
  1690. #  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
  1691.    /* Send a code of the given tree. c and tree must not have side effects */
  1692. #else /* DEBUG_ZLIB */
  1693. #  define send_code(s, c, tree) 
  1694.      { if (verbose>2) fprintf(stderr,"ncd %3d ",(c)); 
  1695.        send_bits(s, tree[c].Code, tree[c].Len); }
  1696. #endif
  1697. #define d_code(dist) 
  1698.    ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)])
  1699. /* Mapping from a distance to a distance code. dist is the distance - 1 and
  1700.  * must not have side effects. dist_code[256] and dist_code[257] are never
  1701.  * used.
  1702.  */
  1703. /* ===========================================================================
  1704.  * Output a short LSB first on the stream.
  1705.  * IN assertion: there is enough room in pendingBuf.
  1706.  */
  1707. #define put_short(s, w) { 
  1708.     put_byte(s, (uch)((w) & 0xff)); 
  1709.     put_byte(s, (uch)((ush)(w) >> 8)); 
  1710. }
  1711. /* ===========================================================================
  1712.  * Send a value on a given number of bits.
  1713.  * IN assertion: length <= 16 and value fits in length bits.
  1714.  */
  1715. #ifdef DEBUG_ZLIB
  1716. local void send_bits      OF((deflate_state *s, int value, int length));
  1717. local void send_bits(s, value, length)
  1718.     deflate_state *s;
  1719.     int value;  /* value to send */
  1720.     int length; /* number of bits */
  1721. {
  1722.     Tracevv((stderr," l %2d v %4x ", length, value));
  1723.     Assert(length > 0 && length <= 15, "invalid length");
  1724.     s->bits_sent += (ulg)length;
  1725.     /* If not enough room in bi_buf, use (valid) bits from bi_buf and
  1726.      * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
  1727.      * unused bits in value.
  1728.      */
  1729.     if (s->bi_valid > (int)Buf_size - length) {
  1730.         s->bi_buf |= (value << s->bi_valid);
  1731.         put_short(s, s->bi_buf);
  1732.         s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
  1733.         s->bi_valid += length - Buf_size;
  1734.     } else {
  1735.         s->bi_buf |= value << s->bi_valid;
  1736.         s->bi_valid += length;
  1737.     }
  1738. }
  1739. #else /* !DEBUG_ZLIB */
  1740. #define send_bits(s, value, length) 
  1741. { int len = length;
  1742.   if (s->bi_valid > (int)Buf_size - len) {
  1743.     int val = value;
  1744.     s->bi_buf |= (val << s->bi_valid);
  1745.     put_short(s, s->bi_buf);
  1746.     s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);
  1747.     s->bi_valid += len - Buf_size;
  1748.   } else {
  1749.     s->bi_buf |= (value) << s->bi_valid;
  1750.     s->bi_valid += len;
  1751.   }
  1752. }
  1753. #endif /* DEBUG_ZLIB */
  1754. #define MAX(a,b) (a >= b ? a : b)
  1755. /* the arguments must not have side effects */
  1756. /* ===========================================================================
  1757.  * Initialize the various 'constant' tables. In a multi-threaded environment,
  1758.  * this function may be called by two threads concurrently, but this is
  1759.  * harmless since both invocations do exactly the same thing.
  1760.  */
  1761. local void tr_static_init()
  1762. {
  1763.     static int static_init_done = 0;
  1764.     int n;        /* iterates over tree elements */
  1765.     int bits;     /* bit counter */
  1766.     int length;   /* length value */
  1767.     int code;     /* code value */
  1768.     int dist;     /* distance index */
  1769.     ush bl_count[MAX_BITS+1];
  1770.     /* number of codes at each bit length for an optimal tree */
  1771.     if (static_init_done) return;
  1772.     /* Initialize the mapping length (0..255) -> length code (0..28) */
  1773.     length = 0;
  1774.     for (code = 0; code < LENGTH_CODES-1; code++) {
  1775.         base_length[code] = length;
  1776.         for (n = 0; n < (1<<extra_lbits[code]); n++) {
  1777.             length_code[length++] = (uch)code;
  1778.         }
  1779.     }
  1780.     Assert (length == 256, "tr_static_init: length != 256");
  1781.     /* Note that the length 255 (match length 258) can be represented
  1782.      * in two different ways: code 284 + 5 bits or code 285, so we
  1783.      * overwrite length_code[255] to use the best encoding:
  1784.      */
  1785.     length_code[length-1] = (uch)code;
  1786.     /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
  1787.     dist = 0;
  1788.     for (code = 0 ; code < 16; code++) {
  1789.         base_dist[code] = dist;
  1790.         for (n = 0; n < (1<<extra_dbits[code]); n++) {
  1791.             dist_code[dist++] = (uch)code;
  1792.         }
  1793.     }
  1794.     Assert (dist == 256, "tr_static_init: dist != 256");
  1795.     dist >>= 7; /* from now on, all distances are divided by 128 */
  1796.     for ( ; code < D_CODES; code++) {
  1797.         base_dist[code] = dist << 7;
  1798.         for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
  1799.             dist_code[256 + dist++] = (uch)code;
  1800.         }
  1801.     }
  1802.     Assert (dist == 256, "tr_static_init: 256+dist != 512");
  1803.     /* Construct the codes of the static literal tree */
  1804.     for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
  1805.     n = 0;
  1806.     while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
  1807.     while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
  1808.     while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
  1809.     while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
  1810.     /* Codes 286 and 287 do not exist, but we must include them in the
  1811.      * tree construction to get a canonical Huffman tree (longest code
  1812.      * all ones)
  1813.      */
  1814.     gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
  1815.     /* The static distance tree is trivial: */
  1816.     for (n = 0; n < D_CODES; n++) {
  1817.         static_dtree[n].Len = 5;
  1818.         static_dtree[n].Code = bi_reverse((unsigned)n, 5);
  1819.     }
  1820.     static_init_done = 1;
  1821. }
  1822. /* ===========================================================================
  1823.  * Initialize the tree data structures for a new zlib stream.
  1824.  */
  1825. void _tr_init(s)
  1826.     deflate_state *s;
  1827. {
  1828.     tr_static_init();
  1829.     s->compressed_len = 0L;
  1830.     s->l_desc.dyn_tree = s->dyn_ltree;
  1831.     s->l_desc.stat_desc = &static_l_desc;
  1832.     s->d_desc.dyn_tree = s->dyn_dtree;
  1833.     s->d_desc.stat_desc = &static_d_desc;
  1834.     s->bl_desc.dyn_tree = s->bl_tree;
  1835.     s->bl_desc.stat_desc = &static_bl_desc;
  1836.     s->bi_buf = 0;
  1837.     s->bi_valid = 0;
  1838.     s->last_eob_len = 8; /* enough lookahead for inflate */
  1839. #ifdef DEBUG_ZLIB
  1840.     s->bits_sent = 0L;
  1841. #endif
  1842.     /* Initialize the first block of the first file: */
  1843.     init_block(s);
  1844. }
  1845. /* ===========================================================================
  1846.  * Initialize a new block.
  1847.  */
  1848. local void init_block(s)
  1849.     deflate_state *s;
  1850. {
  1851.     int n; /* iterates over tree elements */
  1852.     /* Initialize the trees. */
  1853.     for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
  1854.     for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
  1855.     for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
  1856.     s->dyn_ltree[END_BLOCK].Freq = 1;
  1857.     s->opt_len = s->static_len = 0L;
  1858.     s->last_lit = s->matches = 0;
  1859. }
  1860. #define SMALLEST 1
  1861. /* Index within the heap array of least frequent node in the Huffman tree */
  1862. /* ===========================================================================
  1863.  * Remove the smallest element from the heap and recreate the heap with
  1864.  * one less element. Updates heap and heap_len.
  1865.  */
  1866. #define pqremove(s, tree, top) 
  1867. {
  1868.     top = s->heap[SMALLEST]; 
  1869.     s->heap[SMALLEST] = s->heap[s->heap_len--]; 
  1870.     pqdownheap(s, tree, SMALLEST); 
  1871. }
  1872. /* ===========================================================================
  1873.  * Compares to subtrees, using the tree depth as tie breaker when
  1874.  * the subtrees have equal frequency. This minimizes the worst case length.
  1875.  */
  1876. #define smaller(tree, n, m, depth) 
  1877.    (tree[n].Freq < tree[m].Freq || 
  1878.    (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
  1879. /* ===========================================================================
  1880.  * Restore the heap property by moving down the tree starting at node k,
  1881.  * exchanging a node with the smallest of its two sons if necessary, stopping
  1882.  * when the heap property is re-established (each father smaller than its
  1883.  * two sons).
  1884.  */
  1885. local void pqdownheap(s, tree, k)
  1886.     deflate_state *s;
  1887.     ct_data *tree;  /* the tree to restore */
  1888.     int k;               /* node to move down */
  1889. {
  1890.     int v = s->heap[k];
  1891.     int j = k << 1;  /* left son of k */
  1892.     while (j <= s->heap_len) {
  1893.         /* Set j to the smallest of the two sons: */
  1894.         if (j < s->heap_len &&
  1895.             smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
  1896.             j++;
  1897.         }
  1898.         /* Exit if v is smaller than both sons */
  1899.         if (smaller(tree, v, s->heap[j], s->depth)) break;
  1900.         /* Exchange v with the smallest son */
  1901.         s->heap[k] = s->heap[j];  k = j;
  1902.         /* And continue down the tree, setting j to the left son of k */
  1903.         j <<= 1;
  1904.     }
  1905.     s->heap[k] = v;
  1906. }
  1907. /* ===========================================================================
  1908.  * Compute the optimal bit lengths for a tree and update the total bit length
  1909.  * for the current block.
  1910.  * IN assertion: the fields freq and dad are set, heap[heap_max] and
  1911.  *    above are the tree nodes sorted by increasing frequency.
  1912.  * OUT assertions: the field len is set to the optimal bit length, the
  1913.  *     array bl_count contains the frequencies for each bit length.
  1914.  *     The length opt_len is updated; static_len is also updated if stree is
  1915.  *     not null.
  1916.  */
  1917. local void gen_bitlen(s, desc)
  1918.     deflate_state *s;
  1919.     tree_desc *desc;    /* the tree descriptor */
  1920. {
  1921.     ct_data *tree  = desc->dyn_tree;
  1922.     int max_code   = desc->max_code;
  1923.     ct_data *stree = desc->stat_desc->static_tree;
  1924.     intf *extra    = desc->stat_desc->extra_bits;
  1925.     int base       = desc->stat_desc->extra_base;
  1926.     int max_length = desc->stat_desc->max_length;
  1927.     int h;              /* heap index */
  1928.     int n, m;           /* iterate over the tree elements */
  1929.     int bits;           /* bit length */
  1930.     int xbits;          /* extra bits */
  1931.     ush f;              /* frequency */
  1932.     int overflow = 0;   /* number of elements with bit length too large */
  1933.     for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
  1934.     /* In a first pass, compute the optimal bit lengths (which may
  1935.      * overflow in the case of the bit length tree).
  1936.      */
  1937.     tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
  1938.     for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
  1939.         n = s->heap[h];
  1940.         bits = tree[tree[n].Dad].Len + 1;
  1941.         if (bits > max_length) bits = max_length, overflow++;
  1942.         tree[n].Len = (ush)bits;
  1943.         /* We overwrite tree[n].Dad which is no longer needed */
  1944.         if (n > max_code) continue; /* not a leaf node */
  1945.         s->bl_count[bits]++;
  1946.         xbits = 0;
  1947.         if (n >= base) xbits = extra[n-base];
  1948.         f = tree[n].Freq;
  1949.         s->opt_len += (ulg)f * (bits + xbits);
  1950.         if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
  1951.     }
  1952.     if (overflow == 0) return;
  1953.     Trace((stderr,"nbit length overflown"));
  1954.     /* This happens for example on obj2 and pic of the Calgary corpus */
  1955.     /* Find the first bit length which could increase: */
  1956.     do {
  1957.         bits = max_length-1;
  1958.         while (s->bl_count[bits] == 0) bits--;
  1959.         s->bl_count[bits]--;      /* move one leaf down the tree */
  1960.         s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
  1961.         s->bl_count[max_length]--;
  1962.         /* The brother of the overflow item also moves one step up,
  1963.          * but this does not affect bl_count[max_length]
  1964.          */
  1965.         overflow -= 2;
  1966.     } while (overflow > 0);
  1967.     /* Now recompute all bit lengths, scanning in increasing frequency.
  1968.      * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
  1969.      * lengths instead of fixing only the wrong ones. This idea is taken
  1970.      * from 'ar' written by Haruhiko Okumura.)
  1971.      */
  1972.     for (bits = max_length; bits != 0; bits--) {
  1973.         n = s->bl_count[bits];
  1974.         while (n != 0) {
  1975.             m = s->heap[--h];
  1976.             if (m > max_code) continue;
  1977.             if (tree[m].Len != (unsigned) bits) {
  1978.                 Trace((stderr,"code %d bits %d->%dn", m, tree[m].Len, bits));
  1979.                 s->opt_len += ((long)bits - (long)tree[m].Len)
  1980.                               *(long)tree[m].Freq;
  1981.                 tree[m].Len = (ush)bits;
  1982.             }
  1983.             n--;
  1984.         }
  1985.     }
  1986. }
  1987. /* ===========================================================================
  1988.  * Generate the codes for a given tree and bit counts (which need not be
  1989.  * optimal).
  1990.  * IN assertion: the array bl_count contains the bit length statistics for
  1991.  * the given tree and the field len is set for all tree elements.
  1992.  * OUT assertion: the field code is set for all tree elements of non
  1993.  *     zero code length.
  1994.  */
  1995. local void gen_codes (tree, max_code, bl_count)
  1996.     ct_data *tree;             /* the tree to decorate */
  1997.     int max_code;              /* largest code with non zero frequency */
  1998.     ushf *bl_count;            /* number of codes at each bit length */
  1999. {
  2000.     ush next_code[MAX_BITS+1]; /* next code value for each bit length */
  2001.     ush code = 0;              /* running code value */
  2002.     int bits;                  /* bit index */
  2003.     int n;                     /* code index */
  2004.     /* The distribution counts are first used to generate the code values
  2005.      * without bit reversal.
  2006.      */
  2007.     for (bits = 1; bits <= MAX_BITS; bits++) {
  2008.         next_code[bits] = code = (code + bl_count[bits-1]) << 1;
  2009.     }
  2010.     /* Check that the bit counts in bl_count are consistent. The last code
  2011.      * must be all ones.
  2012.      */
  2013.     Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  2014.             "inconsistent bit counts");
  2015.     Tracev((stderr,"ngen_codes: max_code %d ", max_code));
  2016.     for (n = 0;  n <= max_code; n++) {
  2017.         int len = tree[n].Len;
  2018.         if (len == 0) continue;
  2019.         /* Now reverse the bits */
  2020.         tree[n].Code = bi_reverse(next_code[len]++, len);
  2021.         Tracecv(tree != static_ltree, (stderr,"nn %3d %c l %2d c %4x (%x) ",
  2022.              n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
  2023.     }
  2024. }
  2025. /* ===========================================================================
  2026.  * Construct one Huffman tree and assigns the code bit strings and lengths.
  2027.  * Update the total bit length for the current block.
  2028.  * IN assertion: the field freq is set for all tree elements.
  2029.  * OUT assertions: the fields len and code are set to the optimal bit length
  2030.  *     and corresponding code. The length opt_len is updated; static_len is
  2031.  *     also updated if stree is not null. The field max_code is set.
  2032.  */
  2033. local void build_tree(s, desc)
  2034.     deflate_state *s;
  2035.     tree_desc *desc; /* the tree descriptor */
  2036. {
  2037.     ct_data *tree   = desc->dyn_tree;
  2038.     ct_data *stree  = desc->stat_desc->static_tree;
  2039.     int elems       = desc->stat_desc->elems;
  2040.     int n, m;          /* iterate over heap elements */
  2041.     int max_code = -1; /* largest code with non zero frequency */
  2042.     int node;          /* new node being created */
  2043.     /* Construct the initial heap, with least frequent element in
  2044.      * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
  2045.      * heap[0] is not used.
  2046.      */
  2047.     s->heap_len = 0, s->heap_max = HEAP_SIZE;
  2048.     for (n = 0; n < elems; n++) {
  2049.         if (tree[n].Freq != 0) {
  2050.             s->heap[++(s->heap_len)] = max_code = n;
  2051.             s->depth[n] = 0;
  2052.         } else {
  2053.             tree[n].Len = 0;
  2054.         }
  2055.     }
  2056.     /* The pkzip format requires that at least one distance code exists,
  2057.      * and that at least one bit should be sent even if there is only one
  2058.      * possible code. So to avoid special checks later on we force at least
  2059.      * two codes of non zero frequency.
  2060.      */
  2061.     while (s->heap_len < 2) {
  2062.         node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
  2063.         tree[node].Freq = 1;
  2064.         s->depth[node] = 0;
  2065.         s->opt_len--; if (stree) s->static_len -= stree[node].Len;
  2066.         /* node is 0 or 1 so it does not have extra bits */
  2067.     }
  2068.     desc->max_code = max_code;
  2069.     /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
  2070.      * establish sub-heaps of increasing lengths:
  2071.      */
  2072.     for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
  2073.     /* Construct the Huffman tree by repeatedly combining the least two
  2074.      * frequent nodes.
  2075.      */
  2076.     node = elems;              /* next internal node of the tree */
  2077.     do {
  2078.         pqremove(s, tree, n);  /* n = node of least frequency */
  2079.         m = s->heap[SMALLEST]; /* m = node of next least frequency */
  2080.         s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
  2081.         s->heap[--(s->heap_max)] = m;
  2082.         /* Create a new node father of n and m */
  2083.         tree[node].Freq = tree[n].Freq + tree[m].Freq;
  2084.         s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
  2085.         tree[n].Dad = tree[m].Dad = (ush)node;
  2086. #ifdef DUMP_BL_TREE
  2087.         if (tree == s->bl_tree) {
  2088.             fprintf(stderr,"nnode %d(%d), sons %d(%d) %d(%d)",
  2089.                     node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
  2090.         }
  2091. #endif
  2092.         /* and insert the new node in the heap */
  2093.         s->heap[SMALLEST] = node++;
  2094.         pqdownheap(s, tree, SMALLEST);
  2095.     } while (s->heap_len >= 2);
  2096.     s->heap[--(s->heap_max)] = s->heap[SMALLEST];
  2097.     /* At this point, the fields freq and dad are set. We can now
  2098.      * generate the bit lengths.
  2099.      */
  2100.     gen_bitlen(s, (tree_desc *)desc);
  2101.     /* The field len is now set, we can generate the bit codes */
  2102.     gen_codes ((ct_data *)tree, max_code, s->bl_count);
  2103. }
  2104. /* ===========================================================================
  2105.  * Scan a literal or distance tree to determine the frequencies of the codes
  2106.  * in the bit length tree.
  2107.  */
  2108. local void scan_tree (s, tree, max_code)
  2109.     deflate_state *s;
  2110.     ct_data *tree;   /* the tree to be scanned */
  2111.     int max_code;    /* and its largest code of non zero frequency */
  2112. {
  2113.     int n;                     /* iterates over all tree elements */
  2114.     int prevlen = -1;          /* last emitted length */
  2115.     int curlen;                /* length of current code */
  2116.     int nextlen = tree[0].Len; /* length of next code */
  2117.     int count = 0;             /* repeat count of the current code */
  2118.     int max_count = 7;         /* max repeat count */
  2119.     int min_count = 4;         /* min repeat count */
  2120.     if (nextlen == 0) max_count = 138, min_count = 3;
  2121.     tree[max_code+1].Len = (ush)0xffff; /* guard */
  2122.     for (n = 0; n <= max_code; n++) {
  2123.         curlen = nextlen; nextlen = tree[n+1].Len;
  2124.         if (++count < max_count && curlen == nextlen) {
  2125.             continue;
  2126.         } else if (count < min_count) {
  2127.             s->bl_tree[curlen].Freq += count;
  2128.         } else if (curlen != 0) {
  2129.             if (curlen != prevlen) s->bl_tree[curlen].Freq++;
  2130.             s->bl_tree[REP_3_6].Freq++;
  2131.         } else if (count <= 10) {
  2132.             s->bl_tree[REPZ_3_10].Freq++;
  2133.         } else {
  2134.             s->bl_tree[REPZ_11_138].Freq++;
  2135.         }
  2136.         count = 0; prevlen = curlen;
  2137.         if (nextlen == 0) {
  2138.             max_count = 138, min_count = 3;
  2139.         } else if (curlen == nextlen) {
  2140.             max_count = 6, min_count = 3;
  2141.         } else {
  2142.             max_count = 7, min_count = 4;
  2143.         }
  2144.     }
  2145. }
  2146. /* ===========================================================================
  2147.  * Send a literal or distance tree in compressed form, using the codes in
  2148.  * bl_tree.
  2149.  */
  2150. local void send_tree (s, tree, max_code)
  2151.     deflate_state *s;
  2152.     ct_data *tree; /* the tree to be scanned */
  2153.     int max_code;       /* and its largest code of non zero frequency */
  2154. {
  2155.     int n;                     /* iterates over all tree elements */
  2156.     int prevlen = -1;          /* last emitted length */
  2157.     int curlen;                /* length of current code */
  2158.     int nextlen = tree[0].Len; /* length of next code */
  2159.     int count = 0;             /* repeat count of the current code */
  2160.     int max_count = 7;         /* max repeat count */
  2161.     int min_count = 4;         /* min repeat count */
  2162.     /* tree[max_code+1].Len = -1; */  /* guard already set */
  2163.     if (nextlen == 0) max_count = 138, min_count = 3;
  2164.     for (n = 0; n <= max_code; n++) {
  2165.         curlen = nextlen; nextlen = tree[n+1].Len;
  2166.         if (++count < max_count && curlen == nextlen) {
  2167.             continue;
  2168.         } else if (count < min_count) {
  2169.             do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
  2170.         } else if (curlen != 0) {
  2171.             if (curlen != prevlen) {
  2172.                 send_code(s, curlen, s->bl_tree); count--;
  2173.             }
  2174.             Assert(count >= 3 && count <= 6, " 3_6?");
  2175.             send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
  2176.         } else if (count <= 10) {
  2177.             send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
  2178.         } else {
  2179.             send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
  2180.         }
  2181.         count = 0; prevlen = curlen;
  2182.         if (nextlen == 0) {
  2183.             max_count = 138, min_count = 3;
  2184.         } else if (curlen == nextlen) {
  2185.             max_count = 6, min_count = 3;
  2186.         } else {
  2187.             max_count = 7, min_count = 4;
  2188.         }
  2189.     }
  2190. }
  2191. /* ===========================================================================
  2192.  * Construct the Huffman tree for the bit lengths and return the index in
  2193.  * bl_order of the last bit length code to send.
  2194.  */
  2195. local int build_bl_tree(s)
  2196.     deflate_state *s;
  2197. {
  2198.     int max_blindex;  /* index of last bit length code of non zero freq */
  2199.     /* Determine the bit length frequencies for literal and distance trees */
  2200.     scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
  2201.     scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
  2202.     /* Build the bit length tree: */
  2203.     build_tree(s, (tree_desc *)(&(s->bl_desc)));
  2204.     /* opt_len now includes the length of the tree representations, except
  2205.      * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
  2206.      */
  2207.     /* Determine the number of bit length codes to send. The pkzip format
  2208.      * requires that at least 4 bit length codes be sent. (appnote.txt says
  2209.      * 3 but the actual value used is 4.)
  2210.      */
  2211.     for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
  2212.         if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
  2213.     }
  2214.     /* Update opt_len to include the bit length tree and counts */
  2215.     s->opt_len += 3*(max_blindex+1) + 5+5+4;
  2216.     Tracev((stderr, "ndyn trees: dyn %ld, stat %ld",
  2217.             s->opt_len, s->static_len));
  2218.     return max_blindex;
  2219. }
  2220. /* ===========================================================================
  2221.  * Send the header for a block using dynamic Huffman trees: the counts, the
  2222.  * lengths of the bit length codes, the literal tree and the distance tree.
  2223.  * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
  2224.  */
  2225. local void send_all_trees(s, lcodes, dcodes, blcodes)
  2226.     deflate_state *s;
  2227.     int lcodes, dcodes, blcodes; /* number of codes for each tree */
  2228. {
  2229.     int rank;                    /* index in bl_order */
  2230.     Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  2231.     Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  2232.             "too many codes");
  2233.     Tracev((stderr, "nbl counts: "));
  2234.     send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
  2235.     send_bits(s, dcodes-1,   5);
  2236.     send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
  2237.     for (rank = 0; rank < blcodes; rank++) {
  2238.         Tracev((stderr, "nbl code %2d ", bl_order[rank]));
  2239.         send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
  2240.     }
  2241.     Tracev((stderr, "nbl tree: sent %ld", s->bits_sent));
  2242.     send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
  2243.     Tracev((stderr, "nlit tree: sent %ld", s->bits_sent));
  2244.     send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
  2245.     Tracev((stderr, "ndist tree: sent %ld", s->bits_sent));
  2246. }
  2247. /* ===========================================================================
  2248.  * Send a stored block
  2249.  */
  2250. void _tr_stored_block(s, buf, stored_len, eof)
  2251.     deflate_state *s;
  2252.     charf *buf;       /* input block */
  2253.     ulg stored_len;   /* length of input block */
  2254.     int eof;          /* true if this is the last block for a file */
  2255. {
  2256.     send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
  2257.     s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
  2258.     s->compressed_len += (stored_len + 4) << 3;
  2259.     copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
  2260. }
  2261. /* Send just the `stored block' type code without any length bytes or data.
  2262.  */
  2263. void _tr_stored_type_only(s)
  2264.     deflate_state *s;
  2265. {
  2266.     send_bits(s, (STORED_BLOCK << 1), 3);
  2267.     bi_windup(s);
  2268.     s->compressed_len = (s->compressed_len + 3) & ~7L;
  2269. }
  2270. /* ===========================================================================
  2271.  * Send one empty static block to give enough lookahead for inflate.
  2272.  * This takes 10 bits, of which 7 may remain in the bit buffer.
  2273.  * The current inflate code requires 9 bits of lookahead. If the
  2274.  * last two codes for the previous block (real code plus EOB) were coded
  2275.  * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
  2276.  * the last real code. In this case we send two empty static blocks instead
  2277.  * of one. (There are no problems if the previous block is stored or fixed.)
  2278.  * To simplify the code, we assume the worst case of last real code encoded
  2279.  * on one bit only.
  2280.  */
  2281. void _tr_align(s)
  2282.     deflate_state *s;
  2283. {
  2284.     send_bits(s, STATIC_TREES<<1, 3);
  2285.     send_code(s, END_BLOCK, static_ltree);
  2286.     s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
  2287.     bi_flush(s);
  2288.     /* Of the 10 bits for the empty block, we have already sent
  2289.      * (10 - bi_valid) bits. The lookahead for the last real code (before
  2290.      * the EOB of the previous block) was thus at least one plus the length
  2291.      * of the EOB plus what we have just sent of the empty static block.
  2292.      */
  2293.     if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
  2294.         send_bits(s, STATIC_TREES<<1, 3);
  2295.         send_code(s, END_BLOCK, static_ltree);
  2296.         s->compressed_len += 10L;
  2297.         bi_flush(s);
  2298.     }
  2299.     s->last_eob_len = 7;
  2300. }
  2301. /* ===========================================================================
  2302.  * Determine the best encoding for the current block: dynamic trees, static
  2303.  * trees or store, and output the encoded block to the zip file. This function
  2304.  * returns the total compressed length for the file so far.
  2305.  */
  2306. ulg _tr_flush_block(s, buf, stored_len, eof)
  2307.     deflate_state *s;
  2308.     charf *buf;       /* input block, or NULL if too old */
  2309.     ulg stored_len;   /* length of input block */
  2310.     int eof;          /* true if this is the last block for a file */
  2311. {
  2312.     ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
  2313.     int max_blindex = 0;  /* index of last bit length code of non zero freq */