Added in-stream deflate compression for file reconstruction instructions.
[rsync/rsync.git] / lib / zlib.c
1 /*
2  * This file is derived from various .h and .c files from the zlib-0.95
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  * - changed functions not used outside this file to "local"
10  * - added minCompression parameter to deflateInit2
11  * - added Z_PACKET_FLUSH (see zlib.h for details)
12  * - added inflateIncomp
13  *
14  * $Id$
15  */
16
17
18 /*+++++*/
19 /* zutil.h -- internal interface and configuration of the compression library
20  * Copyright (C) 1995 Jean-loup Gailly.
21  * For conditions of distribution and use, see copyright notice in zlib.h
22  */
23
24 /* WARNING: this file should *not* be used by applications. It is
25    part of the implementation of the compression library and is
26    subject to change. Applications should only use zlib.h.
27  */
28
29 /* From: zutil.h,v 1.9 1995/05/03 17:27:12 jloup Exp */
30
31 #define _Z_UTIL_H
32
33 #include "zlib.h"
34
35 #ifndef local
36 #  define local static
37 #endif
38 /* compile with -Dlocal if your debugger can't find static symbols */
39
40 #define FAR
41
42 typedef unsigned char  uch;
43 typedef uch FAR uchf;
44 typedef unsigned short ush;
45 typedef ush FAR ushf;
46 typedef unsigned int   ulg;
47
48 extern char *z_errmsg[]; /* indexed by 1-zlib_error */
49
50 #define ERR_RETURN(strm,err) return (strm->msg=z_errmsg[1-err], err)
51 /* To be used only when the state is known to be valid */
52
53 #ifndef NULL
54 #define NULL    ((void *) 0)
55 #endif
56
57         /* common constants */
58
59 #define DEFLATED   8
60
61 #ifndef DEF_WBITS
62 #  define DEF_WBITS MAX_WBITS
63 #endif
64 /* default windowBits for decompression. MAX_WBITS is for compression only */
65
66 #if MAX_MEM_LEVEL >= 8
67 #  define DEF_MEM_LEVEL 8
68 #else
69 #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
70 #endif
71 /* default memLevel */
72
73 #define STORED_BLOCK 0
74 #define STATIC_TREES 1
75 #define DYN_TREES    2
76 /* The three kinds of block type */
77
78 #define MIN_MATCH  3
79 #define MAX_MATCH  258
80 /* The minimum and maximum match lengths */
81
82          /* functions */
83
84 #if defined(KERNEL) || defined(_KERNEL)
85 #  define zmemcpy(d, s, n)      bcopy((s), (d), (n))
86 #  define zmemzero              bzero
87 #else
88 #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
89 #  define HAVE_MEMCPY
90 #endif
91 #ifdef HAVE_MEMCPY
92 #    define zmemcpy memcpy
93 #    define zmemzero(dest, len) memset(dest, 0, len)
94 #else
95    extern void zmemcpy  OF((Bytef* dest, Bytef* source, uInt len));
96    extern void zmemzero OF((Bytef* dest, uInt len));
97 #endif
98 #endif
99
100 /* Diagnostic functions */
101 #ifdef DEBUG_ZLIB
102 #  include <stdio.h>
103 #  ifndef verbose
104 #    define verbose 0
105 #  endif
106 #  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
107 #  define Trace(x) fprintf x
108 #  define Tracev(x) {if (verbose) fprintf x ;}
109 #  define Tracevv(x) {if (verbose>1) fprintf x ;}
110 #  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
111 #  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
112 #else
113 #  define Assert(cond,msg)
114 #  define Trace(x)
115 #  define Tracev(x)
116 #  define Tracevv(x)
117 #  define Tracec(c,x)
118 #  define Tracecv(c,x)
119 #endif
120
121
122 typedef uLong (*check_func) OF((uLong check, Bytef *buf, uInt len));
123
124 /* voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); */
125 /* void   zcfree  OF((voidpf opaque, voidpf ptr)); */
126
127 #define ZALLOC(strm, items, size) \
128            (*((strm)->zalloc))((strm)->opaque, (items), (size))
129 #define ZFREE(strm, addr, size) \
130            (*((strm)->zfree))((strm)->opaque, (voidpf)(addr), (size))
131 #define TRY_FREE(s, p, n) {if (p) ZFREE(s, p, n);}
132
133 /* deflate.h -- internal compression state
134  * Copyright (C) 1995 Jean-loup Gailly
135  * For conditions of distribution and use, see copyright notice in zlib.h 
136  */
137
138 /* WARNING: this file should *not* be used by applications. It is
139    part of the implementation of the compression library and is
140    subject to change. Applications should only use zlib.h.
141  */
142
143
144 /*+++++*/
145 /* From: deflate.h,v 1.5 1995/05/03 17:27:09 jloup Exp */
146
147 /* ===========================================================================
148  * Internal compression state.
149  */
150
151 /* Data type */
152 #define BINARY  0
153 #define ASCII   1
154 #define UNKNOWN 2
155
156 #define LENGTH_CODES 29
157 /* number of length codes, not counting the special END_BLOCK code */
158
159 #define LITERALS  256
160 /* number of literal bytes 0..255 */
161
162 #define L_CODES (LITERALS+1+LENGTH_CODES)
163 /* number of Literal or Length codes, including the END_BLOCK code */
164
165 #define D_CODES   30
166 /* number of distance codes */
167
168 #define BL_CODES  19
169 /* number of codes used to transfer the bit lengths */
170
171 #define HEAP_SIZE (2*L_CODES+1)
172 /* maximum heap size */
173
174 #define MAX_BITS 15
175 /* All codes must not exceed MAX_BITS bits */
176
177 #define INIT_STATE    42
178 #define BUSY_STATE   113
179 #define FLUSH_STATE  124
180 #define FINISH_STATE 666
181 /* Stream status */
182
183
184 /* Data structure describing a single value and its code string. */
185 typedef struct ct_data_s {
186     union {
187         ush  freq;       /* frequency count */
188         ush  code;       /* bit string */
189     } fc;
190     union {
191         ush  dad;        /* father node in Huffman tree */
192         ush  len;        /* length of bit string */
193     } dl;
194 } FAR ct_data;
195
196 #define Freq fc.freq
197 #define Code fc.code
198 #define Dad  dl.dad
199 #define Len  dl.len
200
201 typedef struct static_tree_desc_s  static_tree_desc;
202
203 typedef struct tree_desc_s {
204     ct_data *dyn_tree;           /* the dynamic tree */
205     int     max_code;            /* largest code with non zero frequency */
206     static_tree_desc *stat_desc; /* the corresponding static tree */
207 } FAR tree_desc;
208
209 typedef ush Pos;
210 typedef Pos FAR Posf;
211 typedef unsigned IPos;
212
213 /* A Pos is an index in the character window. We use short instead of int to
214  * save space in the various tables. IPos is used only for parameter passing.
215  */
216
217 typedef struct deflate_state {
218     z_stream *strm;      /* pointer back to this zlib stream */
219     int   status;        /* as the name implies */
220     Bytef *pending_buf;  /* output still pending */
221     Bytef *pending_out;  /* next pending byte to output to the stream */
222     int   pending;       /* nb of bytes in the pending buffer */
223     uLong adler;         /* adler32 of uncompressed data */
224     int   noheader;      /* suppress zlib header and adler32 */
225     Byte  data_type;     /* UNKNOWN, BINARY or ASCII */
226     Byte  method;        /* STORED (for zip only) or DEFLATED */
227     int   minCompr;      /* min size decrease for Z_FLUSH_NOSTORE */
228
229                 /* used by deflate.c: */
230
231     uInt  w_size;        /* LZ77 window size (32K by default) */
232     uInt  w_bits;        /* log2(w_size)  (8..16) */
233     uInt  w_mask;        /* w_size - 1 */
234
235     Bytef *window;
236     /* Sliding window. Input bytes are read into the second half of the window,
237      * and move to the first half later to keep a dictionary of at least wSize
238      * bytes. With this organization, matches are limited to a distance of
239      * wSize-MAX_MATCH bytes, but this ensures that IO is always
240      * performed with a length multiple of the block size. Also, it limits
241      * the window size to 64K, which is quite useful on MSDOS.
242      * To do: use the user input buffer as sliding window.
243      */
244
245     ulg window_size;
246     /* Actual size of window: 2*wSize, except when the user input buffer
247      * is directly used as sliding window.
248      */
249
250     Posf *prev;
251     /* Link to older string with same hash index. To limit the size of this
252      * array to 64K, this link is maintained only for the last 32K strings.
253      * An index in this array is thus a window index modulo 32K.
254      */
255
256     Posf *head; /* Heads of the hash chains or NIL. */
257
258     uInt  ins_h;          /* hash index of string to be inserted */
259     uInt  hash_size;      /* number of elements in hash table */
260     uInt  hash_bits;      /* log2(hash_size) */
261     uInt  hash_mask;      /* hash_size-1 */
262
263     uInt  hash_shift;
264     /* Number of bits by which ins_h must be shifted at each input
265      * step. It must be such that after MIN_MATCH steps, the oldest
266      * byte no longer takes part in the hash key, that is:
267      *   hash_shift * MIN_MATCH >= hash_bits
268      */
269
270     long block_start;
271     /* Window position at the beginning of the current output block. Gets
272      * negative when the window is moved backwards.
273      */
274
275     uInt match_length;           /* length of best match */
276     IPos prev_match;             /* previous match */
277     int match_available;         /* set if previous match exists */
278     uInt strstart;               /* start of string to insert */
279     uInt match_start;            /* start of matching string */
280     uInt lookahead;              /* number of valid bytes ahead in window */
281
282     uInt prev_length;
283     /* Length of the best match at previous step. Matches not greater than this
284      * are discarded. This is used in the lazy match evaluation.
285      */
286
287     uInt max_chain_length;
288     /* To speed up deflation, hash chains are never searched beyond this
289      * length.  A higher limit improves compression ratio but degrades the
290      * speed.
291      */
292
293     uInt max_lazy_match;
294     /* Attempt to find a better match only when the current match is strictly
295      * smaller than this value. This mechanism is used only for compression
296      * levels >= 4.
297      */
298 #   define max_insert_length  max_lazy_match
299     /* Insert new strings in the hash table only if the match length is not
300      * greater than this length. This saves time but degrades compression.
301      * max_insert_length is used only for compression levels <= 3.
302      */
303
304     int level;    /* compression level (1..9) */
305     int strategy; /* favor or force Huffman coding*/
306
307     uInt good_match;
308     /* Use a faster search when the previous match is longer than this */
309
310      int nice_match; /* Stop searching when current match exceeds this */
311
312                 /* used by trees.c: */
313     /* Didn't use ct_data typedef below to supress compiler warning */
314     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
315     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
316     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
317
318     struct tree_desc_s l_desc;               /* desc. for literal tree */
319     struct tree_desc_s d_desc;               /* desc. for distance tree */
320     struct tree_desc_s bl_desc;              /* desc. for bit length tree */
321
322     ush bl_count[MAX_BITS+1];
323     /* number of codes at each bit length for an optimal tree */
324
325     int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
326     int heap_len;               /* number of elements in the heap */
327     int heap_max;               /* element of largest frequency */
328     /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
329      * The same heap array is used to build all trees.
330      */
331
332     uch depth[2*L_CODES+1];
333     /* Depth of each subtree used as tie breaker for trees of equal frequency
334      */
335
336     uchf *l_buf;          /* buffer for literals or lengths */
337
338     uInt  lit_bufsize;
339     /* Size of match buffer for literals/lengths.  There are 4 reasons for
340      * limiting lit_bufsize to 64K:
341      *   - frequencies can be kept in 16 bit counters
342      *   - if compression is not successful for the first block, all input
343      *     data is still in the window so we can still emit a stored block even
344      *     when input comes from standard input.  (This can also be done for
345      *     all blocks if lit_bufsize is not greater than 32K.)
346      *   - if compression is not successful for a file smaller than 64K, we can
347      *     even emit a stored file instead of a stored block (saving 5 bytes).
348      *     This is applicable only for zip (not gzip or zlib).
349      *   - creating new Huffman trees less frequently may not provide fast
350      *     adaptation to changes in the input data statistics. (Take for
351      *     example a binary file with poorly compressible code followed by
352      *     a highly compressible string table.) Smaller buffer sizes give
353      *     fast adaptation but have of course the overhead of transmitting
354      *     trees more frequently.
355      *   - I can't count above 4
356      */
357
358     uInt last_lit;      /* running index in l_buf */
359
360     ushf *d_buf;
361     /* Buffer for distances. To simplify the code, d_buf and l_buf have
362      * the same number of elements. To use different lengths, an extra flag
363      * array would be necessary.
364      */
365
366     ulg opt_len;        /* bit length of current block with optimal trees */
367     ulg static_len;     /* bit length of current block with static trees */
368     ulg compressed_len; /* total bit length of compressed file */
369     uInt matches;       /* number of string matches in current block */
370     int last_eob_len;   /* bit length of EOB code for last block */
371
372 #ifdef DEBUG_ZLIB
373     ulg bits_sent;      /* bit length of the compressed data */
374 #endif
375
376     ush bi_buf;
377     /* Output buffer. bits are inserted starting at the bottom (least
378      * significant bits).
379      */
380     int bi_valid;
381     /* Number of valid bits in bi_buf.  All bits above the last valid bit
382      * are always zero.
383      */
384
385     uInt blocks_in_packet;
386     /* Number of blocks produced since the last time Z_PACKET_FLUSH
387      * was used.
388      */
389
390 } FAR deflate_state;
391
392 /* Output a byte on the stream.
393  * IN assertion: there is enough room in pending_buf.
394  */
395 #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
396
397
398 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
399 /* Minimum amount of lookahead, except at the end of the input file.
400  * See deflate.c for comments about the MIN_MATCH+1.
401  */
402
403 #define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
404 /* In order to simplify the code, particularly on 16 bit machines, match
405  * distances are limited to MAX_DIST instead of WSIZE.
406  */
407
408         /* in trees.c */
409 local void ct_init       OF((deflate_state *s));
410 local int  ct_tally      OF((deflate_state *s, int dist, int lc));
411 local ulg ct_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
412                              int flush));
413 local void ct_align      OF((deflate_state *s));
414 local void ct_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
415                           int eof));
416 local void ct_stored_type_only OF((deflate_state *s));
417
418
419 /*+++++*/
420 /* deflate.c -- compress data using the deflation algorithm
421  * Copyright (C) 1995 Jean-loup Gailly.
422  * For conditions of distribution and use, see copyright notice in zlib.h 
423  */
424
425 /*
426  *  ALGORITHM
427  *
428  *      The "deflation" process depends on being able to identify portions
429  *      of the input text which are identical to earlier input (within a
430  *      sliding window trailing behind the input currently being processed).
431  *
432  *      The most straightforward technique turns out to be the fastest for
433  *      most input files: try all possible matches and select the longest.
434  *      The key feature of this algorithm is that insertions into the string
435  *      dictionary are very simple and thus fast, and deletions are avoided
436  *      completely. Insertions are performed at each input character, whereas
437  *      string matches are performed only when the previous match ends. So it
438  *      is preferable to spend more time in matches to allow very fast string
439  *      insertions and avoid deletions. The matching algorithm for small
440  *      strings is inspired from that of Rabin & Karp. A brute force approach
441  *      is used to find longer strings when a small match has been found.
442  *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
443  *      (by Leonid Broukhis).
444  *         A previous version of this file used a more sophisticated algorithm
445  *      (by Fiala and Greene) which is guaranteed to run in linear amortized
446  *      time, but has a larger average cost, uses more memory and is patented.
447  *      However the F&G algorithm may be faster for some highly redundant
448  *      files if the parameter max_chain_length (described below) is too large.
449  *
450  *  ACKNOWLEDGEMENTS
451  *
452  *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
453  *      I found it in 'freeze' written by Leonid Broukhis.
454  *      Thanks to many people for bug reports and testing.
455  *
456  *  REFERENCES
457  *
458  *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
459  *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
460  *
461  *      A description of the Rabin and Karp algorithm is given in the book
462  *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
463  *
464  *      Fiala,E.R., and Greene,D.H.
465  *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
466  *
467  */
468
469 /* From: deflate.c,v 1.8 1995/05/03 17:27:08 jloup Exp */
470
471 local char zlib_copyright[] = " deflate Copyright 1995 Jean-loup Gailly ";
472 /*
473   If you use the zlib library in a product, an acknowledgment is welcome
474   in the documentation of your product. If for some reason you cannot
475   include such an acknowledgment, I would appreciate that you keep this
476   copyright string in the executable of your product.
477  */
478
479 #define NIL 0
480 /* Tail of hash chains */
481
482 #ifndef TOO_FAR
483 #  define TOO_FAR 4096
484 #endif
485 /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
486
487 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
488 /* Minimum amount of lookahead, except at the end of the input file.
489  * See deflate.c for comments about the MIN_MATCH+1.
490  */
491
492 /* Values for max_lazy_match, good_match and max_chain_length, depending on
493  * the desired pack level (0..9). The values given below have been tuned to
494  * exclude worst case performance for pathological files. Better values may be
495  * found for specific files.
496  */
497
498 typedef struct config_s {
499    ush good_length; /* reduce lazy search above this match length */
500    ush max_lazy;    /* do not perform lazy search above this match length */
501    ush nice_length; /* quit search above this match length */
502    ush max_chain;
503 } config;
504
505 local config configuration_table[10] = {
506 /*      good lazy nice chain */
507 /* 0 */ {0,    0,  0,    0},  /* store only */
508 /* 1 */ {4,    4,  8,    4},  /* maximum speed, no lazy matches */
509 /* 2 */ {4,    5, 16,    8},
510 /* 3 */ {4,    6, 32,   32},
511
512 /* 4 */ {4,    4, 16,   16},  /* lazy matches */
513 /* 5 */ {8,   16, 32,   32},
514 /* 6 */ {8,   16, 128, 128},
515 /* 7 */ {8,   32, 128, 256},
516 /* 8 */ {32, 128, 258, 1024},
517 /* 9 */ {32, 258, 258, 4096}}; /* maximum compression */
518
519 /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
520  * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
521  * meaning.
522  */
523
524 #define EQUAL 0
525 /* result of memcmp for equal strings */
526
527 /* ===========================================================================
528  *  Prototypes for local functions.
529  */
530
531 local void fill_window   OF((deflate_state *s));
532 local int  deflate_fast  OF((deflate_state *s, int flush));
533 local int  deflate_slow  OF((deflate_state *s, int flush));
534 local void lm_init       OF((deflate_state *s));
535 local int longest_match  OF((deflate_state *s, IPos cur_match));
536 local void putShortMSB   OF((deflate_state *s, uInt b));
537 local void flush_pending OF((z_stream *strm));
538 local int read_buf       OF((z_stream *strm, charf *buf, unsigned size));
539 #ifdef ASMV
540       void match_init OF((void)); /* asm code initialization */
541 #endif
542
543 #ifdef DEBUG_ZLIB
544 local  void check_match OF((deflate_state *s, IPos start, IPos match,
545                             int length));
546 #endif
547
548
549 /* ===========================================================================
550  * Update a hash value with the given input byte
551  * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
552  *    input characters, so that a running hash key can be computed from the
553  *    previous key instead of complete recalculation each time.
554  */
555 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
556
557
558 /* ===========================================================================
559  * Insert string str in the dictionary and set match_head to the previous head
560  * of the hash chain (the most recent string with same hash key). Return
561  * the previous length of the hash chain.
562  * IN  assertion: all calls to to INSERT_STRING are made with consecutive
563  *    input characters and the first MIN_MATCH bytes of str are valid
564  *    (except for the last MIN_MATCH-1 bytes of the input file).
565  */
566 #define INSERT_STRING(s, str, match_head) \
567    (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
568     s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
569     s->head[s->ins_h] = (str))
570
571 /* ===========================================================================
572  * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
573  * prev[] will be initialized on the fly.
574  */
575 #define CLEAR_HASH(s) \
576     s->head[s->hash_size-1] = NIL; \
577     zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
578
579 /* ========================================================================= */
580 int deflateInit (strm, level)
581     z_stream *strm;
582     int level;
583 {
584     return deflateInit2 (strm, level, DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
585                          0, 0);
586     /* To do: ignore strm->next_in if we use it as window */
587 }
588
589 /* ========================================================================= */
590 int deflateInit2 (strm, level, method, windowBits, memLevel,
591                   strategy, minCompression)
592     z_stream *strm;
593     int  level;
594     int  method;
595     int  windowBits;
596     int  memLevel;
597     int  strategy;
598     int  minCompression;
599 {
600     deflate_state *s;
601     int noheader = 0;
602
603     if (strm == Z_NULL) return Z_STREAM_ERROR;
604
605     strm->msg = Z_NULL;
606 /*    if (strm->zalloc == Z_NULL) strm->zalloc = zcalloc; */
607 /*    if (strm->zfree == Z_NULL) strm->zfree = zcfree; */
608
609     if (level == Z_DEFAULT_COMPRESSION) level = 6;
610
611     if (windowBits < 0) { /* undocumented feature: suppress zlib header */
612         noheader = 1;
613         windowBits = -windowBits;
614     }
615     if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != DEFLATED ||
616         windowBits < 8 || windowBits > 15 || level < 1 || level > 9) {
617         return Z_STREAM_ERROR;
618     }
619     s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
620     if (s == Z_NULL) return Z_MEM_ERROR;
621     strm->state = (struct internal_state FAR *)s;
622     s->strm = strm;
623
624     s->noheader = noheader;
625     s->w_bits = windowBits;
626     s->w_size = 1 << s->w_bits;
627     s->w_mask = s->w_size - 1;
628
629     s->hash_bits = memLevel + 7;
630     s->hash_size = 1 << s->hash_bits;
631     s->hash_mask = s->hash_size - 1;
632     s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
633
634     s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
635     s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
636     s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
637
638     s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
639
640     s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 2*sizeof(ush));
641
642     if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
643         s->pending_buf == Z_NULL) {
644         strm->msg = z_errmsg[1-Z_MEM_ERROR];
645         deflateEnd (strm);
646         return Z_MEM_ERROR;
647     }
648     s->d_buf = (ushf *) &(s->pending_buf[s->lit_bufsize]);
649     s->l_buf = (uchf *) &(s->pending_buf[3*s->lit_bufsize]);
650     /* We overlay pending_buf and d_buf+l_buf. This works since the average
651      * output size for (length,distance) codes is <= 32 bits (worst case
652      * is 15+15+13=33).
653      */
654
655     s->level = level;
656     s->strategy = strategy;
657     s->method = (Byte)method;
658     s->minCompr = minCompression;
659     s->blocks_in_packet = 0;
660
661     return deflateReset(strm);
662 }
663
664 /* ========================================================================= */
665 int deflateReset (strm)
666     z_stream *strm;
667 {
668     deflate_state *s;
669     
670     if (strm == Z_NULL || strm->state == Z_NULL ||
671         strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
672
673     strm->total_in = strm->total_out = 0;
674     strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
675     strm->data_type = Z_UNKNOWN;
676
677     s = (deflate_state *)strm->state;
678     s->pending = 0;
679     s->pending_out = s->pending_buf;
680
681     if (s->noheader < 0) {
682         s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
683     }
684     s->status = s->noheader ? BUSY_STATE : INIT_STATE;
685     s->adler = 1;
686
687     ct_init(s);
688     lm_init(s);
689
690     return Z_OK;
691 }
692
693 /* =========================================================================
694  * Put a short in the pending buffer. The 16-bit value is put in MSB order.
695  * IN assertion: the stream state is correct and there is enough room in
696  * pending_buf.
697  */
698 local void putShortMSB (s, b)
699     deflate_state *s;
700     uInt b;
701 {
702     put_byte(s, (Byte)(b >> 8));
703     put_byte(s, (Byte)(b & 0xff));
704 }   
705
706 /* =========================================================================
707  * Flush as much pending output as possible.
708  */
709 local void flush_pending(strm)
710     z_stream *strm;
711 {
712     deflate_state *state = (deflate_state *) strm->state;
713     unsigned len = state->pending;
714
715     if (len > strm->avail_out) len = strm->avail_out;
716     if (len == 0) return;
717
718     if (strm->next_out != NULL) {
719         zmemcpy(strm->next_out, state->pending_out, len);
720         strm->next_out += len;
721     }
722     state->pending_out += len;
723     strm->total_out += len;
724     strm->avail_out -= len;
725     state->pending -= len;
726     if (state->pending == 0) {
727         state->pending_out = state->pending_buf;
728     }
729 }
730
731 /* ========================================================================= */
732 int deflate (strm, flush)
733     z_stream *strm;
734     int flush;
735 {
736     deflate_state *state = (deflate_state *) strm->state;
737
738     if (strm == Z_NULL || state == Z_NULL) return Z_STREAM_ERROR;
739     
740     if (strm->next_in == Z_NULL && strm->avail_in != 0) {
741         ERR_RETURN(strm, Z_STREAM_ERROR);
742     }
743     if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
744
745     state->strm = strm; /* just in case */
746
747     /* Write the zlib header */
748     if (state->status == INIT_STATE) {
749
750         uInt header = (DEFLATED + ((state->w_bits-8)<<4)) << 8;
751         uInt level_flags = (state->level-1) >> 1;
752
753         if (level_flags > 3) level_flags = 3;
754         header |= (level_flags << 6);
755         header += 31 - (header % 31);
756
757         state->status = BUSY_STATE;
758         putShortMSB(state, header);
759     }
760
761     /* Flush as much pending output as possible */
762     if (state->pending != 0) {
763         flush_pending(strm);
764         if (strm->avail_out == 0) return Z_OK;
765     }
766
767     /* If we came back in here to get the last output from
768      * a previous flush, we're done for now.
769      */
770     if (state->status == FLUSH_STATE) {
771         state->status = BUSY_STATE;
772         if (flush != Z_NO_FLUSH && flush != Z_FINISH)
773             return Z_OK;
774     }
775
776     /* User must not provide more input after the first FINISH: */
777     if (state->status == FINISH_STATE && strm->avail_in != 0) {
778         ERR_RETURN(strm, Z_BUF_ERROR);
779     }
780
781     /* Start a new block or continue the current one.
782      */
783     if (strm->avail_in != 0 || state->lookahead != 0 ||
784         (flush == Z_FINISH && state->status != FINISH_STATE)) {
785         int quit;
786
787         if (flush == Z_FINISH) {
788             state->status = FINISH_STATE;
789         }
790         if (state->level <= 3) {
791             quit = deflate_fast(state, flush);
792         } else {
793             quit = deflate_slow(state, flush);
794         }
795         if (quit || strm->avail_out == 0)
796             return Z_OK;
797         /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
798          * of deflate should use the same flush parameter to make sure
799          * that the flush is complete. So we don't have to output an
800          * empty block here, this will be done at next call. This also
801          * ensures that for a very small output buffer, we emit at most
802          * one empty block.
803          */
804     }
805
806     /* If a flush was requested, we have a little more to output now. */
807     if (flush != Z_NO_FLUSH && flush != Z_FINISH
808         && state->status != FINISH_STATE) {
809         switch (flush) {
810         case Z_PARTIAL_FLUSH:
811             ct_align(state);
812             break;
813         case Z_PACKET_FLUSH:
814             /* Output just the 3-bit `stored' block type value,
815                but not a zero length. */
816             ct_stored_type_only(state);
817             break;
818         default:
819             ct_stored_block(state, (char*)0, 0L, 0);
820             /* For a full flush, this empty block will be recognized
821              * as a special marker by inflate_sync().
822              */
823             if (flush == Z_FULL_FLUSH) {
824                 CLEAR_HASH(state);             /* forget history */
825             }
826         }
827         flush_pending(strm);
828         if (strm->avail_out == 0) {
829             /* We'll have to come back to get the rest of the output;
830              * this ensures we don't output a second zero-length stored
831              * block (or whatever).
832              */
833             state->status = FLUSH_STATE;
834             return Z_OK;
835         }
836     }
837
838     Assert(strm->avail_out > 0, "bug2");
839
840     if (flush != Z_FINISH) return Z_OK;
841     if (state->noheader) return Z_STREAM_END;
842
843     /* Write the zlib trailer (adler32) */
844     putShortMSB(state, (uInt)(state->adler >> 16));
845     putShortMSB(state, (uInt)(state->adler & 0xffff));
846     flush_pending(strm);
847     /* If avail_out is zero, the application will call deflate again
848      * to flush the rest.
849      */
850     state->noheader = -1; /* write the trailer only once! */
851     return state->pending != 0 ? Z_OK : Z_STREAM_END;
852 }
853
854 /* ========================================================================= */
855 int deflateEnd (strm)
856     z_stream *strm;
857 {
858     deflate_state *state = (deflate_state *) strm->state;
859
860     if (strm == Z_NULL || state == Z_NULL) return Z_STREAM_ERROR;
861
862     TRY_FREE(strm, state->window, state->w_size * 2 * sizeof(Byte));
863     TRY_FREE(strm, state->prev, state->w_size * sizeof(Pos));
864     TRY_FREE(strm, state->head, state->hash_size * sizeof(Pos));
865     TRY_FREE(strm, state->pending_buf, state->lit_bufsize * 2 * sizeof(ush));
866
867     ZFREE(strm, state, sizeof(deflate_state));
868     strm->state = Z_NULL;
869
870     return Z_OK;
871 }
872
873 /* ===========================================================================
874  * Read a new buffer from the current input stream, update the adler32
875  * and total number of bytes read.
876  */
877 local int read_buf(strm, buf, size)
878     z_stream *strm;
879     charf *buf;
880     unsigned size;
881 {
882     unsigned len = strm->avail_in;
883     deflate_state *state = (deflate_state *) strm->state;
884
885     if (len > size) len = size;
886     if (len == 0) return 0;
887
888     strm->avail_in  -= len;
889
890     if (!state->noheader) {
891         state->adler = adler32(state->adler, strm->next_in, len);
892     }
893     zmemcpy(buf, strm->next_in, len);
894     strm->next_in  += len;
895     strm->total_in += len;
896
897     return (int)len;
898 }
899
900 /* ===========================================================================
901  * Initialize the "longest match" routines for a new zlib stream
902  */
903 local void lm_init (s)
904     deflate_state *s;
905 {
906     s->window_size = (ulg)2L*s->w_size;
907
908     CLEAR_HASH(s);
909
910     /* Set the default configuration parameters:
911      */
912     s->max_lazy_match   = configuration_table[s->level].max_lazy;
913     s->good_match       = configuration_table[s->level].good_length;
914     s->nice_match       = configuration_table[s->level].nice_length;
915     s->max_chain_length = configuration_table[s->level].max_chain;
916
917     s->strstart = 0;
918     s->block_start = 0L;
919     s->lookahead = 0;
920     s->match_length = MIN_MATCH-1;
921     s->match_available = 0;
922     s->ins_h = 0;
923 #ifdef ASMV
924     match_init(); /* initialize the asm code */
925 #endif
926 }
927
928 /* ===========================================================================
929  * Set match_start to the longest match starting at the given string and
930  * return its length. Matches shorter or equal to prev_length are discarded,
931  * in which case the result is equal to prev_length and match_start is
932  * garbage.
933  * IN assertions: cur_match is the head of the hash chain for the current
934  *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
935  */
936 #ifndef ASMV
937 /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
938  * match.S. The code will be functionally equivalent.
939  */
940 local int longest_match(s, cur_match)
941     deflate_state *s;
942     IPos cur_match;                             /* current match */
943 {
944     unsigned chain_length = s->max_chain_length;/* max hash chain length */
945     register Bytef *scan = s->window + s->strstart; /* current string */
946     register Bytef *match;                       /* matched string */
947     register int len;                           /* length of current match */
948     int best_len = s->prev_length;              /* best match length so far */
949     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
950         s->strstart - (IPos)MAX_DIST(s) : NIL;
951     /* Stop when cur_match becomes <= limit. To simplify the code,
952      * we prevent matches with the string of window index 0.
953      */
954     Posf *prev = s->prev;
955     uInt wmask = s->w_mask;
956
957 #ifdef UNALIGNED_OK
958     /* Compare two bytes at a time. Note: this is not always beneficial.
959      * Try with and without -DUNALIGNED_OK to check.
960      */
961     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
962     register ush scan_start = *(ushf*)scan;
963     register ush scan_end   = *(ushf*)(scan+best_len-1);
964 #else
965     register Bytef *strend = s->window + s->strstart + MAX_MATCH;
966     register Byte scan_end1  = scan[best_len-1];
967     register Byte scan_end   = scan[best_len];
968 #endif
969
970     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
971      * It is easy to get rid of this optimization if necessary.
972      */
973     Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
974
975     /* Do not waste too much time if we already have a good match: */
976     if (s->prev_length >= s->good_match) {
977         chain_length >>= 2;
978     }
979     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
980
981     do {
982         Assert(cur_match < s->strstart, "no future");
983         match = s->window + cur_match;
984
985         /* Skip to next match if the match length cannot increase
986          * or if the match length is less than 2:
987          */
988 #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
989         /* This code assumes sizeof(unsigned short) == 2. Do not use
990          * UNALIGNED_OK if your compiler uses a different size.
991          */
992         if (*(ushf*)(match+best_len-1) != scan_end ||
993             *(ushf*)match != scan_start) continue;
994
995         /* It is not necessary to compare scan[2] and match[2] since they are
996          * always equal when the other bytes match, given that the hash keys
997          * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
998          * strstart+3, +5, ... up to strstart+257. We check for insufficient
999          * lookahead only every 4th comparison; the 128th check will be made
1000          * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
1001          * necessary to put more guard bytes at the end of the window, or
1002          * to check more often for insufficient lookahead.
1003          */
1004         Assert(scan[2] == match[2], "scan[2]?");
1005         scan++, match++;
1006         do {
1007         } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1008                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1009                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1010                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1011                  scan < strend);
1012         /* The funny "do {}" generates better code on most compilers */
1013
1014         /* Here, scan <= window+strstart+257 */
1015         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1016         if (*scan == *match) scan++;
1017
1018         len = (MAX_MATCH - 1) - (int)(strend-scan);
1019         scan = strend - (MAX_MATCH-1);
1020
1021 #else /* UNALIGNED_OK */
1022
1023         if (match[best_len]   != scan_end  ||
1024             match[best_len-1] != scan_end1 ||
1025             *match            != *scan     ||
1026             *++match          != scan[1])      continue;
1027
1028         /* The check at best_len-1 can be removed because it will be made
1029          * again later. (This heuristic is not always a win.)
1030          * It is not necessary to compare scan[2] and match[2] since they
1031          * are always equal when the other bytes match, given that
1032          * the hash keys are equal and that HASH_BITS >= 8.
1033          */
1034         scan += 2, match++;
1035         Assert(*scan == *match, "match[2]?");
1036
1037         /* We check for insufficient lookahead only every 8th comparison;
1038          * the 256th check will be made at strstart+258.
1039          */
1040         do {
1041         } while (*++scan == *++match && *++scan == *++match &&
1042                  *++scan == *++match && *++scan == *++match &&
1043                  *++scan == *++match && *++scan == *++match &&
1044                  *++scan == *++match && *++scan == *++match &&
1045                  scan < strend);
1046
1047         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1048
1049         len = MAX_MATCH - (int)(strend - scan);
1050         scan = strend - MAX_MATCH;
1051
1052 #endif /* UNALIGNED_OK */
1053
1054         if (len > best_len) {
1055             s->match_start = cur_match;
1056             best_len = len;
1057             if (len >= s->nice_match) break;
1058 #ifdef UNALIGNED_OK
1059             scan_end = *(ushf*)(scan+best_len-1);
1060 #else
1061             scan_end1  = scan[best_len-1];
1062             scan_end   = scan[best_len];
1063 #endif
1064         }
1065     } while ((cur_match = prev[cur_match & wmask]) > limit
1066              && --chain_length != 0);
1067
1068     return best_len;
1069 }
1070 #endif /* ASMV */
1071
1072 #ifdef DEBUG_ZLIB
1073 /* ===========================================================================
1074  * Check that the match at match_start is indeed a match.
1075  */
1076 local void check_match(s, start, match, length)
1077     deflate_state *s;
1078     IPos start, match;
1079     int length;
1080 {
1081     /* check that the match is indeed a match */
1082     if (memcmp((charf *)s->window + match,
1083                 (charf *)s->window + start, length) != EQUAL) {
1084         fprintf(stderr,
1085             " start %u, match %u, length %d\n",
1086             start, match, length);
1087         do { fprintf(stderr, "%c%c", s->window[match++],
1088                      s->window[start++]); } while (--length != 0);
1089         z_error("invalid match");
1090     }
1091     if (verbose > 1) {
1092         fprintf(stderr,"\\[%d,%d]", start-match, length);
1093         do { putc(s->window[start++], stderr); } while (--length != 0);
1094     }
1095 }
1096 #else
1097 #  define check_match(s, start, match, length)
1098 #endif
1099
1100 /* ===========================================================================
1101  * Fill the window when the lookahead becomes insufficient.
1102  * Updates strstart and lookahead.
1103  *
1104  * IN assertion: lookahead < MIN_LOOKAHEAD
1105  * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
1106  *    At least one byte has been read, or avail_in == 0; reads are
1107  *    performed for at least two bytes (required for the zip translate_eol
1108  *    option -- not supported here).
1109  */
1110 local void fill_window(s)
1111     deflate_state *s;
1112 {
1113     register unsigned n, m;
1114     register Posf *p;
1115     unsigned more;    /* Amount of free space at the end of the window. */
1116     uInt wsize = s->w_size;
1117
1118     do {
1119         more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
1120
1121         /* Deal with !@#$% 64K limit: */
1122         if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
1123             more = wsize;
1124         } else if (more == (unsigned)(-1)) {
1125             /* Very unlikely, but possible on 16 bit machine if strstart == 0
1126              * and lookahead == 1 (input done one byte at time)
1127              */
1128             more--;
1129
1130         /* If the window is almost full and there is insufficient lookahead,
1131          * move the upper half to the lower one to make room in the upper half.
1132          */
1133         } else if (s->strstart >= wsize+MAX_DIST(s)) {
1134
1135             /* By the IN assertion, the window is not empty so we can't confuse
1136              * more == 0 with more == 64K on a 16 bit machine.
1137              */
1138             zmemcpy((charf *)s->window, (charf *)s->window+wsize,
1139                    (unsigned)wsize);
1140             s->match_start -= wsize;
1141             s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
1142
1143             s->block_start -= (long) wsize;
1144
1145             /* Slide the hash table (could be avoided with 32 bit values
1146                at the expense of memory usage):
1147              */
1148             n = s->hash_size;
1149             p = &s->head[n];
1150             do {
1151                 m = *--p;
1152                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
1153             } while (--n);
1154
1155             n = wsize;
1156             p = &s->prev[n];
1157             do {
1158                 m = *--p;
1159                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
1160                 /* If n is not on any hash chain, prev[n] is garbage but
1161                  * its value will never be used.
1162                  */
1163             } while (--n);
1164
1165             more += wsize;
1166         }
1167         if (s->strm->avail_in == 0) return;
1168
1169         /* If there was no sliding:
1170          *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
1171          *    more == window_size - lookahead - strstart
1172          * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
1173          * => more >= window_size - 2*WSIZE + 2
1174          * In the BIG_MEM or MMAP case (not yet supported),
1175          *   window_size == input_size + MIN_LOOKAHEAD  &&
1176          *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
1177          * Otherwise, window_size == 2*WSIZE so more >= 2.
1178          * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
1179          */
1180         Assert(more >= 2, "more < 2");
1181
1182         n = read_buf(s->strm, (charf *)s->window + s->strstart + s->lookahead,
1183                      more);
1184         s->lookahead += n;
1185
1186         /* Initialize the hash value now that we have some input: */
1187         if (s->lookahead >= MIN_MATCH) {
1188             s->ins_h = s->window[s->strstart];
1189             UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1190 #if MIN_MATCH != 3
1191             Call UPDATE_HASH() MIN_MATCH-3 more times
1192 #endif
1193         }
1194         /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
1195          * but this is not important since only literal bytes will be emitted.
1196          */
1197
1198     } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
1199 }
1200
1201 /* ===========================================================================
1202  * Flush the current block, with given end-of-file flag.
1203  * IN assertion: strstart is set to the end of the current match.
1204  */
1205 #define FLUSH_BLOCK_ONLY(s, flush) { \
1206    ct_flush_block(s, (s->block_start >= 0L ? \
1207            (charf *)&s->window[(unsigned)s->block_start] : \
1208            (charf *)Z_NULL), (long)s->strstart - s->block_start, (flush)); \
1209    s->block_start = s->strstart; \
1210    flush_pending(s->strm); \
1211    Tracev((stderr,"[FLUSH]")); \
1212 }
1213
1214 /* Same but force premature exit if necessary. */
1215 #define FLUSH_BLOCK(s, flush) { \
1216    FLUSH_BLOCK_ONLY(s, flush); \
1217    if (s->strm->avail_out == 0) return 1; \
1218 }
1219
1220 /* ===========================================================================
1221  * Compress as much as possible from the input stream, return true if
1222  * processing was terminated prematurely (no more input or output space).
1223  * This function does not perform lazy evaluationof matches and inserts
1224  * new strings in the dictionary only for unmatched strings or for short
1225  * matches. It is used only for the fast compression options.
1226  */
1227 local int deflate_fast(s, flush)
1228     deflate_state *s;
1229     int flush;
1230 {
1231     IPos hash_head = NIL; /* head of the hash chain */
1232     int bflush;     /* set if current block must be flushed */
1233
1234     s->prev_length = MIN_MATCH-1;
1235
1236     for (;;) {
1237         /* Make sure that we always have enough lookahead, except
1238          * at the end of the input file. We need MAX_MATCH bytes
1239          * for the next match, plus MIN_MATCH bytes to insert the
1240          * string following the next match.
1241          */
1242         if (s->lookahead < MIN_LOOKAHEAD) {
1243             fill_window(s);
1244             if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) return 1;
1245
1246             if (s->lookahead == 0) break; /* flush the current block */
1247         }
1248
1249         /* Insert the string window[strstart .. strstart+2] in the
1250          * dictionary, and set hash_head to the head of the hash chain:
1251          */
1252         if (s->lookahead >= MIN_MATCH) {
1253             INSERT_STRING(s, s->strstart, hash_head);
1254         }
1255
1256         /* Find the longest match, discarding those <= prev_length.
1257          * At this point we have always match_length < MIN_MATCH
1258          */
1259         if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
1260             /* To simplify the code, we prevent matches with the string
1261              * of window index 0 (in particular we have to avoid a match
1262              * of the string with itself at the start of the input file).
1263              */
1264             if (s->strategy != Z_HUFFMAN_ONLY) {
1265                 s->match_length = longest_match (s, hash_head);
1266             }
1267             /* longest_match() sets match_start */
1268
1269             if (s->match_length > s->lookahead) s->match_length = s->lookahead;
1270         }
1271         if (s->match_length >= MIN_MATCH) {
1272             check_match(s, s->strstart, s->match_start, s->match_length);
1273
1274             bflush = ct_tally(s, s->strstart - s->match_start,
1275                               s->match_length - MIN_MATCH);
1276
1277             s->lookahead -= s->match_length;
1278
1279             /* Insert new strings in the hash table only if the match length
1280              * is not too large. This saves time but degrades compression.
1281              */
1282             if (s->match_length <= s->max_insert_length &&
1283                 s->lookahead >= MIN_MATCH) {
1284                 s->match_length--; /* string at strstart already in hash table */
1285                 do {
1286                     s->strstart++;
1287                     INSERT_STRING(s, s->strstart, hash_head);
1288                     /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1289                      * always MIN_MATCH bytes ahead.
1290                      */
1291                 } while (--s->match_length != 0);
1292                 s->strstart++; 
1293             } else {
1294                 s->strstart += s->match_length;
1295                 s->match_length = 0;
1296                 s->ins_h = s->window[s->strstart];
1297                 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1298 #if MIN_MATCH != 3
1299                 Call UPDATE_HASH() MIN_MATCH-3 more times
1300 #endif
1301                 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1302                  * matter since it will be recomputed at next deflate call.
1303                  */
1304             }
1305         } else {
1306             /* No match, output a literal byte */
1307             Tracevv((stderr,"%c", s->window[s->strstart]));
1308             bflush = ct_tally (s, 0, s->window[s->strstart]);
1309             s->lookahead--;
1310             s->strstart++; 
1311         }
1312         if (bflush) FLUSH_BLOCK(s, Z_NO_FLUSH);
1313     }
1314     FLUSH_BLOCK(s, flush);
1315     return 0; /* normal exit */
1316 }
1317
1318 /* ===========================================================================
1319  * Same as above, but achieves better compression. We use a lazy
1320  * evaluation for matches: a match is finally adopted only if there is
1321  * no better match at the next window position.
1322  */
1323 local int deflate_slow(s, flush)
1324     deflate_state *s;
1325     int flush;
1326 {
1327     IPos hash_head = NIL;    /* head of hash chain */
1328     int bflush;              /* set if current block must be flushed */
1329
1330     /* Process the input block. */
1331     for (;;) {
1332         /* Make sure that we always have enough lookahead, except
1333          * at the end of the input file. We need MAX_MATCH bytes
1334          * for the next match, plus MIN_MATCH bytes to insert the
1335          * string following the next match.
1336          */
1337         if (s->lookahead < MIN_LOOKAHEAD) {
1338             fill_window(s);
1339             if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) return 1;
1340
1341             if (s->lookahead == 0) break; /* flush the current block */
1342         }
1343
1344         /* Insert the string window[strstart .. strstart+2] in the
1345          * dictionary, and set hash_head to the head of the hash chain:
1346          */
1347         if (s->lookahead >= MIN_MATCH) {
1348             INSERT_STRING(s, s->strstart, hash_head);
1349         }
1350
1351         if (flush == Z_INSERT_ONLY) {
1352             s->strstart++;
1353             s->lookahead--;
1354             continue;
1355         }
1356
1357         /* Find the longest match, discarding those <= prev_length.
1358          */
1359         s->prev_length = s->match_length, s->prev_match = s->match_start;
1360         s->match_length = MIN_MATCH-1;
1361
1362         if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
1363             s->strstart - hash_head <= MAX_DIST(s)) {
1364             /* To simplify the code, we prevent matches with the string
1365              * of window index 0 (in particular we have to avoid a match
1366              * of the string with itself at the start of the input file).
1367              */
1368             if (s->strategy != Z_HUFFMAN_ONLY) {
1369                 s->match_length = longest_match (s, hash_head);
1370             }
1371             /* longest_match() sets match_start */
1372             if (s->match_length > s->lookahead) s->match_length = s->lookahead;
1373
1374             if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
1375                  (s->match_length == MIN_MATCH &&
1376                   s->strstart - s->match_start > TOO_FAR))) {
1377
1378                 /* If prev_match is also MIN_MATCH, match_start is garbage
1379                  * but we will ignore the current match anyway.
1380                  */
1381                 s->match_length = MIN_MATCH-1;
1382             }
1383         }
1384         /* If there was a match at the previous step and the current
1385          * match is not better, output the previous match:
1386          */
1387         if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
1388             uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
1389             /* Do not insert strings in hash table beyond this. */
1390
1391             check_match(s, s->strstart-1, s->prev_match, s->prev_length);
1392
1393             bflush = ct_tally(s, s->strstart -1 - s->prev_match,
1394                               s->prev_length - MIN_MATCH);
1395
1396             /* Insert in hash table all strings up to the end of the match.
1397              * strstart-1 and strstart are already inserted. If there is not
1398              * enough lookahead, the last two strings are not inserted in
1399              * the hash table.
1400              */
1401             s->lookahead -= s->prev_length-1;
1402             s->prev_length -= 2;
1403             do {
1404                 if (++s->strstart <= max_insert) {
1405                     INSERT_STRING(s, s->strstart, hash_head);
1406                 }
1407             } while (--s->prev_length != 0);
1408             s->match_available = 0;
1409             s->match_length = MIN_MATCH-1;
1410             s->strstart++;
1411
1412             if (bflush) FLUSH_BLOCK(s, Z_NO_FLUSH);
1413
1414         } else if (s->match_available) {
1415             /* If there was no match at the previous position, output a
1416              * single literal. If there was a match but the current match
1417              * is longer, truncate the previous match to a single literal.
1418              */
1419             Tracevv((stderr,"%c", s->window[s->strstart-1]));
1420             if (ct_tally (s, 0, s->window[s->strstart-1])) {
1421                 FLUSH_BLOCK_ONLY(s, Z_NO_FLUSH);
1422             }
1423             s->strstart++;
1424             s->lookahead--;
1425             if (s->strm->avail_out == 0) return 1;
1426         } else {
1427             /* There is no previous match to compare with, wait for
1428              * the next step to decide.
1429              */
1430             s->match_available = 1;
1431             s->strstart++;
1432             s->lookahead--;
1433         }
1434     }
1435     if (flush == Z_INSERT_ONLY) {
1436         s->block_start = s->strstart;
1437         return 1;
1438     }
1439     Assert (flush != Z_NO_FLUSH, "no flush?");
1440     if (s->match_available) {
1441         Tracevv((stderr,"%c", s->window[s->strstart-1]));
1442         ct_tally (s, 0, s->window[s->strstart-1]);
1443         s->match_available = 0;
1444     }
1445     FLUSH_BLOCK(s, flush);
1446     return 0;
1447 }
1448
1449
1450 /*+++++*/
1451 /* trees.c -- output deflated data using Huffman coding
1452  * Copyright (C) 1995 Jean-loup Gailly
1453  * For conditions of distribution and use, see copyright notice in zlib.h 
1454  */
1455
1456 /*
1457  *  ALGORITHM
1458  *
1459  *      The "deflation" process uses several Huffman trees. The more
1460  *      common source values are represented by shorter bit sequences.
1461  *
1462  *      Each code tree is stored in a compressed form which is itself
1463  * a Huffman encoding of the lengths of all the code strings (in
1464  * ascending order by source values).  The actual code strings are
1465  * reconstructed from the lengths in the inflate process, as described
1466  * in the deflate specification.
1467  *
1468  *  REFERENCES
1469  *
1470  *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
1471  *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
1472  *
1473  *      Storer, James A.
1474  *          Data Compression:  Methods and Theory, pp. 49-50.
1475  *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
1476  *
1477  *      Sedgewick, R.
1478  *          Algorithms, p290.
1479  *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
1480  */
1481
1482 /* From: trees.c,v 1.5 1995/05/03 17:27:12 jloup Exp */
1483
1484 #ifdef DEBUG_ZLIB
1485 #  include <ctype.h>
1486 #endif
1487
1488 /* ===========================================================================
1489  * Constants
1490  */
1491
1492 #define MAX_BL_BITS 7
1493 /* Bit length codes must not exceed MAX_BL_BITS bits */
1494
1495 #define END_BLOCK 256
1496 /* end of block literal code */
1497
1498 #define REP_3_6      16
1499 /* repeat previous bit length 3-6 times (2 bits of repeat count) */
1500
1501 #define REPZ_3_10    17
1502 /* repeat a zero length 3-10 times  (3 bits of repeat count) */
1503
1504 #define REPZ_11_138  18
1505 /* repeat a zero length 11-138 times  (7 bits of repeat count) */
1506
1507 local int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
1508    = {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};
1509
1510 local int extra_dbits[D_CODES] /* extra bits for each distance code */
1511    = {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};
1512
1513 local int extra_blbits[BL_CODES]/* extra bits for each bit length code */
1514    = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
1515
1516 local uch bl_order[BL_CODES]
1517    = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
1518 /* The lengths of the bit length codes are sent in order of decreasing
1519  * probability, to avoid transmitting the lengths for unused bit length codes.
1520  */
1521
1522 #define Buf_size (8 * 2*sizeof(char))
1523 /* Number of bits used within bi_buf. (bi_buf might be implemented on
1524  * more than 16 bits on some systems.)
1525  */
1526
1527 /* ===========================================================================
1528  * Local data. These are initialized only once.
1529  * To do: initialize at compile time to be completely reentrant. ???
1530  */
1531
1532 local ct_data static_ltree[L_CODES+2];
1533 /* The static literal tree. Since the bit lengths are imposed, there is no
1534  * need for the L_CODES extra codes used during heap construction. However
1535  * The codes 286 and 287 are needed to build a canonical tree (see ct_init
1536  * below).
1537  */
1538
1539 local ct_data static_dtree[D_CODES];
1540 /* The static distance tree. (Actually a trivial tree since all codes use
1541  * 5 bits.)
1542  */
1543
1544 local uch dist_code[512];
1545 /* distance codes. The first 256 values correspond to the distances
1546  * 3 .. 258, the last 256 values correspond to the top 8 bits of
1547  * the 15 bit distances.
1548  */
1549
1550 local uch length_code[MAX_MATCH-MIN_MATCH+1];
1551 /* length code for each normalized match length (0 == MIN_MATCH) */
1552
1553 local int base_length[LENGTH_CODES];
1554 /* First normalized length for each code (0 = MIN_MATCH) */
1555
1556 local int base_dist[D_CODES];
1557 /* First normalized distance for each code (0 = distance of 1) */
1558
1559 struct static_tree_desc_s {
1560     ct_data *static_tree;        /* static tree or NULL */
1561     intf    *extra_bits;         /* extra bits for each code or NULL */
1562     int     extra_base;          /* base index for extra_bits */
1563     int     elems;               /* max number of elements in the tree */
1564     int     max_length;          /* max bit length for the codes */
1565 };
1566
1567 local static_tree_desc  static_l_desc =
1568 {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
1569
1570 local static_tree_desc  static_d_desc =
1571 {static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
1572
1573 local static_tree_desc  static_bl_desc =
1574 {(ct_data *)0, extra_blbits, 0,      BL_CODES, MAX_BL_BITS};
1575
1576 /* ===========================================================================
1577  * Local (static) routines in this file.
1578  */
1579
1580 local void ct_static_init OF((void));
1581 local void init_block     OF((deflate_state *s));
1582 local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
1583 local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
1584 local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
1585 local void build_tree     OF((deflate_state *s, tree_desc *desc));
1586 local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
1587 local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
1588 local int  build_bl_tree  OF((deflate_state *s));
1589 local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
1590                               int blcodes));
1591 local void compress_block OF((deflate_state *s, ct_data *ltree,
1592                               ct_data *dtree));
1593 local void set_data_type  OF((deflate_state *s));
1594 local unsigned bi_reverse OF((unsigned value, int length));
1595 local void bi_windup      OF((deflate_state *s));
1596 local void bi_flush       OF((deflate_state *s));
1597 local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
1598                               int header));
1599
1600 #ifndef DEBUG_ZLIB
1601 #  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
1602    /* Send a code of the given tree. c and tree must not have side effects */
1603
1604 #else /* DEBUG_ZLIB */
1605 #  define send_code(s, c, tree) \
1606      { if (verbose>1) fprintf(stderr,"\ncd %3d ",(c)); \
1607        send_bits(s, tree[c].Code, tree[c].Len); }
1608 #endif
1609
1610 #define d_code(dist) \
1611    ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)])
1612 /* Mapping from a distance to a distance code. dist is the distance - 1 and
1613  * must not have side effects. dist_code[256] and dist_code[257] are never
1614  * used.
1615  */
1616
1617 /* ===========================================================================
1618  * Output a short LSB first on the stream.
1619  * IN assertion: there is enough room in pendingBuf.
1620  */
1621 #define put_short(s, w) { \
1622     put_byte(s, (uch)((w) & 0xff)); \
1623     put_byte(s, (uch)((ush)(w) >> 8)); \
1624 }
1625
1626 /* ===========================================================================
1627  * Send a value on a given number of bits.
1628  * IN assertion: length <= 16 and value fits in length bits.
1629  */
1630 #ifdef DEBUG_ZLIB
1631 local void send_bits      OF((deflate_state *s, int value, int length));
1632
1633 local void send_bits(s, value, length)
1634     deflate_state *s;
1635     int value;  /* value to send */
1636     int length; /* number of bits */
1637 {
1638     Tracev((stderr," l %2d v %4x ", length, value));
1639     Assert(length > 0 && length <= 15, "invalid length");
1640     s->bits_sent += (ulg)length;
1641
1642     /* If not enough room in bi_buf, use (valid) bits from bi_buf and
1643      * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
1644      * unused bits in value.
1645      */
1646     if (s->bi_valid > (int)Buf_size - length) {
1647         s->bi_buf |= (value << s->bi_valid);
1648         put_short(s, s->bi_buf);
1649         s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
1650         s->bi_valid += length - Buf_size;
1651     } else {
1652         s->bi_buf |= value << s->bi_valid;
1653         s->bi_valid += length;
1654     }
1655 }
1656 #else /* !DEBUG_ZLIB */
1657
1658 #define send_bits(s, value, length) \
1659 { int len = length;\
1660   if (s->bi_valid > (int)Buf_size - len) {\
1661     int val = value;\
1662     s->bi_buf |= (val << s->bi_valid);\
1663     put_short(s, s->bi_buf);\
1664     s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
1665     s->bi_valid += len - Buf_size;\
1666   } else {\
1667     s->bi_buf |= (value) << s->bi_valid;\
1668     s->bi_valid += len;\
1669   }\
1670 }
1671 #endif /* DEBUG_ZLIB */
1672
1673
1674 #define MAX(a,b) (a >= b ? a : b)
1675 /* the arguments must not have side effects */
1676
1677 /* ===========================================================================
1678  * Initialize the various 'constant' tables.
1679  * To do: do this at compile time.
1680  */
1681 local void ct_static_init()
1682 {
1683     int n;        /* iterates over tree elements */
1684     int bits;     /* bit counter */
1685     int length;   /* length value */
1686     int code;     /* code value */
1687     int dist;     /* distance index */
1688     ush bl_count[MAX_BITS+1];
1689     /* number of codes at each bit length for an optimal tree */
1690
1691     /* Initialize the mapping length (0..255) -> length code (0..28) */
1692     length = 0;
1693     for (code = 0; code < LENGTH_CODES-1; code++) {
1694         base_length[code] = length;
1695         for (n = 0; n < (1<<extra_lbits[code]); n++) {
1696             length_code[length++] = (uch)code;
1697         }
1698     }
1699     Assert (length == 256, "ct_static_init: length != 256");
1700     /* Note that the length 255 (match length 258) can be represented
1701      * in two different ways: code 284 + 5 bits or code 285, so we
1702      * overwrite length_code[255] to use the best encoding:
1703      */
1704     length_code[length-1] = (uch)code;
1705
1706     /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
1707     dist = 0;
1708     for (code = 0 ; code < 16; code++) {
1709         base_dist[code] = dist;
1710         for (n = 0; n < (1<<extra_dbits[code]); n++) {
1711             dist_code[dist++] = (uch)code;
1712         }
1713     }
1714     Assert (dist == 256, "ct_static_init: dist != 256");
1715     dist >>= 7; /* from now on, all distances are divided by 128 */
1716     for ( ; code < D_CODES; code++) {
1717         base_dist[code] = dist << 7;
1718         for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
1719             dist_code[256 + dist++] = (uch)code;
1720         }
1721     }
1722     Assert (dist == 256, "ct_static_init: 256+dist != 512");
1723
1724     /* Construct the codes of the static literal tree */
1725     for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
1726     n = 0;
1727     while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
1728     while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
1729     while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
1730     while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
1731     /* Codes 286 and 287 do not exist, but we must include them in the
1732      * tree construction to get a canonical Huffman tree (longest code
1733      * all ones)
1734      */
1735     gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
1736
1737     /* The static distance tree is trivial: */
1738     for (n = 0; n < D_CODES; n++) {
1739         static_dtree[n].Len = 5;
1740         static_dtree[n].Code = bi_reverse(n, 5);
1741     }
1742 }
1743
1744 /* ===========================================================================
1745  * Initialize the tree data structures for a new zlib stream.
1746  */
1747 local void ct_init(s)
1748     deflate_state *s;
1749 {
1750     if (static_dtree[0].Len == 0) {
1751         ct_static_init();              /* To do: at compile time */
1752     }
1753
1754     s->compressed_len = 0L;
1755
1756     s->l_desc.dyn_tree = s->dyn_ltree;
1757     s->l_desc.stat_desc = &static_l_desc;
1758
1759     s->d_desc.dyn_tree = s->dyn_dtree;
1760     s->d_desc.stat_desc = &static_d_desc;
1761
1762     s->bl_desc.dyn_tree = s->bl_tree;
1763     s->bl_desc.stat_desc = &static_bl_desc;
1764
1765     s->bi_buf = 0;
1766     s->bi_valid = 0;
1767     s->last_eob_len = 8; /* enough lookahead for inflate */
1768 #ifdef DEBUG_ZLIB
1769     s->bits_sent = 0L;
1770 #endif
1771     s->blocks_in_packet = 0;
1772
1773     /* Initialize the first block of the first file: */
1774     init_block(s);
1775 }
1776
1777 /* ===========================================================================
1778  * Initialize a new block.
1779  */
1780 local void init_block(s)
1781     deflate_state *s;
1782 {
1783     int n; /* iterates over tree elements */
1784
1785     /* Initialize the trees. */
1786     for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
1787     for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
1788     for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
1789
1790     s->dyn_ltree[END_BLOCK].Freq = 1;
1791     s->opt_len = s->static_len = 0L;
1792     s->last_lit = s->matches = 0;
1793 }
1794
1795 #define SMALLEST 1
1796 /* Index within the heap array of least frequent node in the Huffman tree */
1797
1798
1799 /* ===========================================================================
1800  * Remove the smallest element from the heap and recreate the heap with
1801  * one less element. Updates heap and heap_len.
1802  */
1803 #define pqremove(s, tree, top) \
1804 {\
1805     top = s->heap[SMALLEST]; \
1806     s->heap[SMALLEST] = s->heap[s->heap_len--]; \
1807     pqdownheap(s, tree, SMALLEST); \
1808 }
1809
1810 /* ===========================================================================
1811  * Compares to subtrees, using the tree depth as tie breaker when
1812  * the subtrees have equal frequency. This minimizes the worst case length.
1813  */
1814 #define smaller(tree, n, m, depth) \
1815    (tree[n].Freq < tree[m].Freq || \
1816    (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
1817
1818 /* ===========================================================================
1819  * Restore the heap property by moving down the tree starting at node k,
1820  * exchanging a node with the smallest of its two sons if necessary, stopping
1821  * when the heap property is re-established (each father smaller than its
1822  * two sons).
1823  */
1824 local void pqdownheap(s, tree, k)
1825     deflate_state *s;
1826     ct_data *tree;  /* the tree to restore */
1827     int k;               /* node to move down */
1828 {
1829     int v = s->heap[k];
1830     int j = k << 1;  /* left son of k */
1831     while (j <= s->heap_len) {
1832         /* Set j to the smallest of the two sons: */
1833         if (j < s->heap_len &&
1834             smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
1835             j++;
1836         }
1837         /* Exit if v is smaller than both sons */
1838         if (smaller(tree, v, s->heap[j], s->depth)) break;
1839
1840         /* Exchange v with the smallest son */
1841         s->heap[k] = s->heap[j];  k = j;
1842
1843         /* And continue down the tree, setting j to the left son of k */
1844         j <<= 1;
1845     }
1846     s->heap[k] = v;
1847 }
1848
1849 /* ===========================================================================
1850  * Compute the optimal bit lengths for a tree and update the total bit length
1851  * for the current block.
1852  * IN assertion: the fields freq and dad are set, heap[heap_max] and
1853  *    above are the tree nodes sorted by increasing frequency.
1854  * OUT assertions: the field len is set to the optimal bit length, the
1855  *     array bl_count contains the frequencies for each bit length.
1856  *     The length opt_len is updated; static_len is also updated if stree is
1857  *     not null.
1858  */
1859 local void gen_bitlen(s, desc)
1860     deflate_state *s;
1861     tree_desc *desc;    /* the tree descriptor */
1862 {
1863     ct_data *tree  = desc->dyn_tree;
1864     int max_code   = desc->max_code;
1865     ct_data *stree = desc->stat_desc->static_tree;
1866     intf *extra    = desc->stat_desc->extra_bits;
1867     int base       = desc->stat_desc->extra_base;
1868     int max_length = desc->stat_desc->max_length;
1869     int h;              /* heap index */
1870     int n, m;           /* iterate over the tree elements */
1871     int bits;           /* bit length */
1872     int xbits;          /* extra bits */
1873     ush f;              /* frequency */
1874     int overflow = 0;   /* number of elements with bit length too large */
1875
1876     for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
1877
1878     /* In a first pass, compute the optimal bit lengths (which may
1879      * overflow in the case of the bit length tree).
1880      */
1881     tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
1882
1883     for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
1884         n = s->heap[h];
1885         bits = tree[tree[n].Dad].Len + 1;
1886         if (bits > max_length) bits = max_length, overflow++;
1887         tree[n].Len = (ush)bits;
1888         /* We overwrite tree[n].Dad which is no longer needed */
1889
1890         if (n > max_code) continue; /* not a leaf node */
1891
1892         s->bl_count[bits]++;
1893         xbits = 0;
1894         if (n >= base) xbits = extra[n-base];
1895         f = tree[n].Freq;
1896         s->opt_len += (ulg)f * (bits + xbits);
1897         if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
1898     }
1899     if (overflow == 0) return;
1900
1901     Trace((stderr,"\nbit length overflow\n"));
1902     /* This happens for example on obj2 and pic of the Calgary corpus */
1903
1904     /* Find the first bit length which could increase: */
1905     do {
1906         bits = max_length-1;
1907         while (s->bl_count[bits] == 0) bits--;
1908         s->bl_count[bits]--;      /* move one leaf down the tree */
1909         s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
1910         s->bl_count[max_length]--;
1911         /* The brother of the overflow item also moves one step up,
1912          * but this does not affect bl_count[max_length]
1913          */
1914         overflow -= 2;
1915     } while (overflow > 0);
1916
1917     /* Now recompute all bit lengths, scanning in increasing frequency.
1918      * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
1919      * lengths instead of fixing only the wrong ones. This idea is taken
1920      * from 'ar' written by Haruhiko Okumura.)
1921      */
1922     for (bits = max_length; bits != 0; bits--) {
1923         n = s->bl_count[bits];
1924         while (n != 0) {
1925             m = s->heap[--h];
1926             if (m > max_code) continue;
1927             if (tree[m].Len != (unsigned) bits) {
1928                 Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
1929                 s->opt_len += ((long)bits - (long)tree[m].Len)
1930                               *(long)tree[m].Freq;
1931                 tree[m].Len = (ush)bits;
1932             }
1933             n--;
1934         }
1935     }
1936 }
1937
1938 /* ===========================================================================
1939  * Generate the codes for a given tree and bit counts (which need not be
1940  * optimal).
1941  * IN assertion: the array bl_count contains the bit length statistics for
1942  * the given tree and the field len is set for all tree elements.
1943  * OUT assertion: the field code is set for all tree elements of non
1944  *     zero code length.
1945  */
1946 local void gen_codes (tree, max_code, bl_count)
1947     ct_data *tree;             /* the tree to decorate */
1948     int max_code;              /* largest code with non zero frequency */
1949     ushf *bl_count;            /* number of codes at each bit length */
1950 {
1951     ush next_code[MAX_BITS+1]; /* next code value for each bit length */
1952     ush code = 0;              /* running code value */
1953     int bits;                  /* bit index */
1954     int n;                     /* code index */
1955
1956     /* The distribution counts are first used to generate the code values
1957      * without bit reversal.
1958      */
1959     for (bits = 1; bits <= MAX_BITS; bits++) {
1960         next_code[bits] = code = (code + bl_count[bits-1]) << 1;
1961     }
1962     /* Check that the bit counts in bl_count are consistent. The last code
1963      * must be all ones.
1964      */
1965     Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
1966             "inconsistent bit counts");
1967     Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
1968
1969     for (n = 0;  n <= max_code; n++) {
1970         int len = tree[n].Len;
1971         if (len == 0) continue;
1972         /* Now reverse the bits */
1973         tree[n].Code = bi_reverse(next_code[len]++, len);
1974
1975         Tracec(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
1976              n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
1977     }
1978 }
1979
1980 /* ===========================================================================
1981  * Construct one Huffman tree and assigns the code bit strings and lengths.
1982  * Update the total bit length for the current block.
1983  * IN assertion: the field freq is set for all tree elements.
1984  * OUT assertions: the fields len and code are set to the optimal bit length
1985  *     and corresponding code. The length opt_len is updated; static_len is
1986  *     also updated if stree is not null. The field max_code is set.
1987  */
1988 local void build_tree(s, desc)
1989     deflate_state *s;
1990     tree_desc *desc; /* the tree descriptor */
1991 {
1992     ct_data *tree   = desc->dyn_tree;
1993     ct_data *stree  = desc->stat_desc->static_tree;
1994     int elems       = desc->stat_desc->elems;
1995     int n, m;          /* iterate over heap elements */
1996     int max_code = -1; /* largest code with non zero frequency */
1997     int node;          /* new node being created */
1998
1999     /* Construct the initial heap, with least frequent element in
2000      * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
2001      * heap[0] is not used.
2002      */
2003     s->heap_len = 0, s->heap_max = HEAP_SIZE;
2004
2005     for (n = 0; n < elems; n++) {
2006         if (tree[n].Freq != 0) {
2007             s->heap[++(s->heap_len)] = max_code = n;
2008             s->depth[n] = 0;
2009         } else {
2010             tree[n].Len = 0;
2011         }
2012     }
2013
2014     /* The pkzip format requires that at least one distance code exists,
2015      * and that at least one bit should be sent even if there is only one
2016      * possible code. So to avoid special checks later on we force at least
2017      * two codes of non zero frequency.
2018      */
2019     while (s->heap_len < 2) {
2020         node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
2021         tree[node].Freq = 1;
2022         s->depth[node] = 0;
2023         s->opt_len--; if (stree) s->static_len -= stree[node].Len;
2024         /* node is 0 or 1 so it does not have extra bits */
2025     }
2026     desc->max_code = max_code;
2027
2028     /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
2029      * establish sub-heaps of increasing lengths:
2030      */
2031     for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
2032
2033     /* Construct the Huffman tree by repeatedly combining the least two
2034      * frequent nodes.
2035      */
2036     node = elems;              /* next internal node of the tree */
2037     do {
2038         pqremove(s, tree, n);  /* n = node of least frequency */
2039         m = s->heap[SMALLEST]; /* m = node of next least frequency */
2040
2041         s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
2042         s->heap[--(s->heap_max)] = m;
2043
2044         /* Create a new node father of n and m */
2045         tree[node].Freq = tree[n].Freq + tree[m].Freq;
2046         s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
2047         tree[n].Dad = tree[m].Dad = (ush)node;
2048 #ifdef DUMP_BL_TREE
2049         if (tree == s->bl_tree) {
2050             fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
2051                     node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
2052         }
2053 #endif
2054         /* and insert the new node in the heap */
2055         s->heap[SMALLEST] = node++;
2056         pqdownheap(s, tree, SMALLEST);
2057
2058     } while (s->heap_len >= 2);
2059
2060     s->heap[--(s->heap_max)] = s->heap[SMALLEST];
2061
2062     /* At this point, the fields freq and dad are set. We can now
2063      * generate the bit lengths.
2064      */
2065     gen_bitlen(s, (tree_desc *)desc);
2066
2067     /* The field len is now set, we can generate the bit codes */
2068     gen_codes ((ct_data *)tree, max_code, s->bl_count);
2069 }
2070
2071 /* ===========================================================================
2072  * Scan a literal or distance tree to determine the frequencies of the codes
2073  * in the bit length tree.
2074  */
2075 local void scan_tree (s, tree, max_code)
2076     deflate_state *s;
2077     ct_data *tree;   /* the tree to be scanned */
2078     int max_code;    /* and its largest code of non zero frequency */
2079 {
2080     int n;                     /* iterates over all tree elements */
2081     int prevlen = -1;          /* last emitted length */
2082     int curlen;                /* length of current code */
2083     int nextlen = tree[0].Len; /* length of next code */
2084     int count = 0;             /* repeat count of the current code */
2085     int max_count = 7;         /* max repeat count */
2086     int min_count = 4;         /* min repeat count */
2087
2088     if (nextlen == 0) max_count = 138, min_count = 3;
2089     tree[max_code+1].Len = (ush)0xffff; /* guard */
2090
2091     for (n = 0; n <= max_code; n++) {
2092         curlen = nextlen; nextlen = tree[n+1].Len;
2093         if (++count < max_count && curlen == nextlen) {
2094             continue;
2095         } else if (count < min_count) {
2096             s->bl_tree[curlen].Freq += count;
2097         } else if (curlen != 0) {
2098             if (curlen != prevlen) s->bl_tree[curlen].Freq++;
2099             s->bl_tree[REP_3_6].Freq++;
2100         } else if (count <= 10) {
2101             s->bl_tree[REPZ_3_10].Freq++;
2102         } else {
2103             s->bl_tree[REPZ_11_138].Freq++;
2104         }
2105         count = 0; prevlen = curlen;
2106         if (nextlen == 0) {
2107             max_count = 138, min_count = 3;
2108         } else if (curlen == nextlen) {
2109             max_count = 6, min_count = 3;
2110         } else {
2111             max_count = 7, min_count = 4;
2112         }
2113     }
2114 }
2115
2116 /* ===========================================================================
2117  * Send a literal or distance tree in compressed form, using the codes in
2118  * bl_tree.
2119  */
2120 local void send_tree (s, tree, max_code)
2121     deflate_state *s;
2122     ct_data *tree; /* the tree to be scanned */
2123     int max_code;       /* and its largest code of non zero frequency */
2124 {
2125     int n;                     /* iterates over all tree elements */
2126     int prevlen = -1;          /* last emitted length */
2127     int curlen;                /* length of current code */
2128     int nextlen = tree[0].Len; /* length of next code */
2129     int count = 0;             /* repeat count of the current code */
2130     int max_count = 7;         /* max repeat count */
2131     int min_count = 4;         /* min repeat count */
2132
2133     /* tree[max_code+1].Len = -1; */  /* guard already set */
2134     if (nextlen == 0) max_count = 138, min_count = 3;
2135
2136     for (n = 0; n <= max_code; n++) {
2137         curlen = nextlen; nextlen = tree[n+1].Len;
2138         if (++count < max_count && curlen == nextlen) {
2139             continue;
2140         } else if (count < min_count) {
2141             do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
2142
2143         } else if (curlen != 0) {
2144             if (curlen != prevlen) {
2145                 send_code(s, curlen, s->bl_tree); count--;
2146             }
2147             Assert(count >= 3 && count <= 6, " 3_6?");
2148             send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
2149
2150         } else if (count <= 10) {
2151             send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
2152
2153         } else {
2154             send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
2155         }
2156         count = 0; prevlen = curlen;
2157         if (nextlen == 0) {
2158             max_count = 138, min_count = 3;
2159         } else if (curlen == nextlen) {
2160             max_count = 6, min_count = 3;
2161         } else {
2162             max_count = 7, min_count = 4;
2163         }
2164     }
2165 }
2166
2167 /* ===========================================================================
2168  * Construct the Huffman tree for the bit lengths and return the index in
2169  * bl_order of the last bit length code to send.
2170  */
2171 local int build_bl_tree(s)
2172     deflate_state *s;
2173 {
2174     int max_blindex;  /* index of last bit length code of non zero freq */
2175
2176     /* Determine the bit length frequencies for literal and distance trees */
2177     scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
2178     scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
2179
2180     /* Build the bit length tree: */
2181     build_tree(s, (tree_desc *)(&(s->bl_desc)));
2182     /* opt_len now includes the length of the tree representations, except
2183      * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
2184      */
2185
2186     /* Determine the number of bit length codes to send. The pkzip format
2187      * requires that at least 4 bit length codes be sent. (appnote.txt says
2188      * 3 but the actual value used is 4.)
2189      */
2190     for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
2191         if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
2192     }
2193     /* Update opt_len to include the bit length tree and counts */
2194     s->opt_len += 3*(max_blindex+1) + 5+5+4;
2195     Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
2196             s->opt_len, s->static_len));
2197
2198     return max_blindex;
2199 }
2200
2201 /* ===========================================================================
2202  * Send the header for a block using dynamic Huffman trees: the counts, the
2203  * lengths of the bit length codes, the literal tree and the distance tree.
2204  * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
2205  */
2206 local void send_all_trees(s, lcodes, dcodes, blcodes)
2207     deflate_state *s;
2208     int lcodes, dcodes, blcodes; /* number of codes for each tree */
2209 {
2210     int rank;                    /* index in bl_order */
2211
2212     Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
2213     Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
2214             "too many codes");
2215     Tracev((stderr, "\nbl counts: "));
2216     send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
2217     send_bits(s, dcodes-1,   5);
2218     send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
2219     for (rank = 0; rank < blcodes; rank++) {
2220         Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
2221         send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
2222     }
2223     Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
2224
2225     send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
2226     Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
2227
2228     send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
2229     Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
2230 }
2231
2232 /* ===========================================================================
2233  * Send a stored block
2234  */
2235 local void ct_stored_block(s, buf, stored_len, eof)
2236     deflate_state *s;
2237     charf *buf;       /* input block */
2238     ulg stored_len;   /* length of input block */
2239     int eof;          /* true if this is the last block for a file */
2240 {
2241     send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
2242     s->compressed_len = (s->compressed_len + 3 + 7) & ~7L;
2243     s->compressed_len += (stored_len + 4) << 3;
2244
2245     copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
2246 }
2247
2248 /* Send just the `stored block' type code without any length bytes or data.
2249  */
2250 local void ct_stored_type_only(s)
2251     deflate_state *s;
2252 {
2253     send_bits(s, (STORED_BLOCK << 1), 3);
2254     bi_windup(s);
2255     s->compressed_len = (s->compressed_len + 3) & ~7L;
2256 }
2257
2258
2259 /* ===========================================================================
2260  * Send one empty static block to give enough lookahead for inflate.
2261  * This takes 10 bits, of which 7 may remain in the bit buffer.
2262  * The current inflate code requires 9 bits of lookahead. If the EOB
2263  * code for the previous block was coded on 5 bits or less, inflate
2264  * may have only 5+3 bits of lookahead to decode this EOB.
2265  * (There are no problems if the previous block is stored or fixed.)
2266  */
2267 local void ct_align(s)
2268     deflate_state *s;
2269 {
2270     send_bits(s, STATIC_TREES<<1, 3);
2271     send_code(s, END_BLOCK, static_ltree);
2272     s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
2273     bi_flush(s);
2274     /* Of the 10 bits for the empty block, we have already sent
2275      * (10 - bi_valid) bits. The lookahead for the EOB of the previous
2276      * block was thus its length plus what we have just sent.
2277      */
2278     if (s->last_eob_len + 10 - s->bi_valid < 9) {
2279         send_bits(s, STATIC_TREES<<1, 3);
2280         send_code(s, END_BLOCK, static_ltree);
2281         s->compressed_len += 10L;
2282         bi_flush(s);
2283     }
2284     s->last_eob_len = 7;
2285 }
2286
2287 /* ===========================================================================
2288  * Determine the best encoding for the current block: dynamic trees, static
2289  * trees or store, and output the encoded block to the zip file. This function
2290  * returns the total compressed length for the file so far.
2291  */
2292 local ulg ct_flush_block(s, buf, stored_len, flush)
2293     deflate_state *s;
2294     charf *buf;       /* input block, or NULL if too old */
2295     ulg stored_len;   /* length of input block */
2296     int flush;        /* Z_FINISH if this is the last block for a file */
2297 {
2298     ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
2299     int max_blindex;  /* index of last bit length code of non zero freq */
2300     int eof = flush == Z_FINISH;
2301
2302     ++s->blocks_in_packet;
2303
2304     /* Check if the file is ascii or binary */
2305     if (s->data_type == UNKNOWN) set_data_type(s);
2306
2307     /* Construct the literal and distance trees */
2308     build_tree(s, (tree_desc *)(&(s->l_desc)));
2309     Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
2310             s->static_len));
2311
2312     build_tree(s, (tree_desc *)(&(s->d_desc)));
2313     Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
2314             s->static_len));
2315     /* At this point, opt_len and static_len are the total bit lengths of
2316      * the compressed block data, excluding the tree representations.
2317      */
2318
2319     /* Build the bit length tree for the above two trees, and get the index
2320      * in bl_order of the last bit length code to send.
2321      */
2322     max_blindex = build_bl_tree(s);
2323
2324     /* Determine the best encoding. Compute first the block length in bytes */
2325     opt_lenb = (s->opt_len+3+7)>>3;
2326     static_lenb = (s->static_len+3+7)>>3;
2327
2328     Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
2329             opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
2330             s->last_lit));
2331
2332     if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
2333
2334     /* If compression failed and this is the first and last block,
2335      * and if the .zip file can be seeked (to rewrite the local header),
2336      * the whole file is transformed into a stored file:
2337      */
2338 #ifdef STORED_FILE_OK
2339 #  ifdef FORCE_STORED_FILE
2340     if (eof && compressed_len == 0L) /* force stored file */
2341 #  else
2342     if (stored_len <= opt_lenb && eof && s->compressed_len==0L && seekable())
2343 #  endif
2344     {
2345         /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
2346         if (buf == (charf*)0) error ("block vanished");
2347
2348         copy_block(buf, (unsigned)stored_len, 0); /* without header */
2349         s->compressed_len = stored_len << 3;
2350         s->method = STORED;
2351     } else
2352 #endif /* STORED_FILE_OK */
2353
2354     /* For Z_PACKET_FLUSH, if we don't achieve the required minimum
2355      * compression, and this block contains all the data since the last
2356      * time we used Z_PACKET_FLUSH, then just omit this block completely
2357      * from the output.
2358      */
2359     if (flush == Z_PACKET_FLUSH && s->blocks_in_packet == 1
2360         && opt_lenb > stored_len - s->minCompr) {
2361         s->blocks_in_packet = 0;
2362         /* output nothing */
2363     } else
2364
2365 #ifdef FORCE_STORED
2366     if (buf != (char*)0) /* force stored block */
2367 #else
2368     if (stored_len+4 <= opt_lenb && buf != (char*)0)
2369                        /* 4: two words for the lengths */
2370 #endif
2371     {
2372         /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
2373          * Otherwise we can't have processed more than WSIZE input bytes since
2374          * the last block flush, because compression would have been
2375          * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
2376          * transform a block into a stored block.
2377          */
2378         ct_stored_block(s, buf, stored_len, eof);
2379     } else
2380
2381 #ifdef FORCE_STATIC
2382     if (static_lenb >= 0) /* force static trees */
2383 #else
2384     if (static_lenb == opt_lenb)
2385 #endif
2386     {
2387         send_bits(s, (STATIC_TREES<<1)+eof, 3);
2388         compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
2389         s->compressed_len += 3 + s->static_len;
2390     } else {
2391         send_bits(s, (DYN_TREES<<1)+eof, 3);
2392         send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
2393                        max_blindex+1);
2394         compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
2395         s->compressed_len += 3 + s->opt_len;
2396     }
2397     Assert (s->compressed_len == s->bits_sent, "bad compressed size");
2398     init_block(s);
2399
2400     if (eof) {
2401         bi_windup(s);
2402         s->compressed_len += 7;  /* align on byte boundary */
2403     }
2404     Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
2405            s->compressed_len-7*eof));
2406
2407     return s->compressed_len >> 3;
2408 }
2409
2410 /* ===========================================================================
2411  * Save the match info and tally the frequency counts. Return true if
2412  * the current block must be flushed.
2413  */
2414 local int ct_tally (s, dist, lc)
2415     deflate_state *s;
2416     int dist;  /* distance of matched string */
2417     int lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
2418 {
2419     s->d_buf[s->last_lit] = (ush)dist;
2420     s->l_buf[s->last_lit++] = (uch)lc;
2421     if (dist == 0) {
2422         /* lc is the unmatched char */
2423         s->dyn_ltree[lc].Freq++;
2424     } else {
2425         s->matches++;
2426         /* Here, lc is the match length - MIN_MATCH */
2427         dist--;             /* dist = match distance - 1 */
2428         Assert((ush)dist < (ush)MAX_DIST(s) &&
2429                (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
2430                (ush)d_code(dist) < (ush)D_CODES,  "ct_tally: bad match");
2431
2432         s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++;
2433         s->dyn_dtree[d_code(dist)].Freq++;
2434     }
2435
2436     /* Try to guess if it is profitable to stop the current block here */
2437     if (s->level > 2 && (s->last_lit & 0xfff) == 0) {
2438         /* Compute an upper bound for the compressed length */
2439         ulg out_length = (ulg)s->last_lit*8L;
2440         ulg in_length = (ulg)s->strstart - s->block_start;
2441         int dcode;
2442         for (dcode = 0; dcode < D_CODES; dcode++) {
2443             out_length += (ulg)s->dyn_dtree[dcode].Freq *
2444                 (5L+extra_dbits[dcode]);
2445         }
2446         out_length >>= 3;
2447         Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
2448                s->last_lit, in_length, out_length,
2449                100L - out_length*100L/in_length));
2450         if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
2451     }
2452     return (s->last_lit == s->lit_bufsize-1);
2453     /* We avoid equality with lit_bufsize because of wraparound at 64K
2454      * on 16 bit machines and because stored blocks are restricted to
2455      * 64K-1 bytes.
2456      */
2457 }
2458
2459 /* ===========================================================================
2460  * Send the block data compressed using the given Huffman trees
2461  */
2462 local void compress_block(s, ltree, dtree)
2463     deflate_state *s;
2464     ct_data *ltree; /* literal tree */
2465     ct_data *dtree; /* distance tree */
2466 {
2467     unsigned dist;      /* distance of matched string */
2468     int lc;             /* match length or unmatched char (if dist == 0) */
2469     unsigned lx = 0;    /* running index in l_buf */
2470     unsigned code;      /* the code to send */
2471     int extra;          /* number of extra bits to send */
2472
2473     if (s->last_lit != 0) do {
2474         dist = s->d_buf[lx];
2475         lc = s->l_buf[lx++];
2476         if (dist == 0) {
2477             send_code(s, lc, ltree); /* send a literal byte */
2478             Tracecv(isgraph(lc), (stderr," '%c' ", lc));
2479         } else {
2480             /* Here, lc is the match length - MIN_MATCH */
2481             code = length_code[lc];
2482             send_code(s, code+LITERALS+1, ltree); /* send the length code */
2483             extra = extra_lbits[code];
2484             if (extra != 0) {
2485                 lc -= base_length[code];
2486                 send_bits(s, lc, extra);       /* send the extra length bits */
2487             }
2488             dist--; /* dist is now the match distance - 1 */
2489             code = d_code(dist);
2490             Assert (code < D_CODES, "bad d_code");
2491
2492             send_code(s, code, dtree);       /* send the distance code */
2493             extra = extra_dbits[code];
2494             if (extra != 0) {
2495                 dist -= base_dist[code];
2496                 send_bits(s, dist, extra);   /* send the extra distance bits */
2497             }
2498         } /* literal or match pair ? */
2499
2500         /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
2501         Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
2502
2503     } while (lx < s->last_lit);
2504
2505     send_code(s, END_BLOCK, ltree);
2506     s->last_eob_len = ltree[END_BLOCK].Len;
2507 }
2508
2509 /* ===========================================================================
2510  * Set the data type to ASCII or BINARY, using a crude approximation:
2511  * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
2512  * IN assertion: the fields freq of dyn_ltree are set and the total of all
2513  * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
2514  */
2515 local void set_data_type(s)
2516     deflate_state *s;
2517 {
2518     int n = 0;
2519     unsigned ascii_freq = 0;
2520     unsigned bin_freq = 0;
2521     while (n < 7)        bin_freq += s->dyn_ltree[n++].Freq;
2522     while (n < 128)    ascii_freq += s->dyn_ltree[n++].Freq;
2523     while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
2524     s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? BINARY : ASCII);
2525 }
2526
2527 /* ===========================================================================
2528  * Reverse the first len bits of a code, using straightforward code (a faster
2529  * method would use a table)
2530  * IN assertion: 1 <= len <= 15
2531  */
2532 local unsigned bi_reverse(code, len)
2533     unsigned code; /* the value to invert */
2534     int len;       /* its bit length */
2535 {
2536     register unsigned res = 0;
2537     do {
2538         res |= code & 1;
2539         code >>= 1, res <<= 1;
2540     } while (--len > 0);
2541     return res >> 1;
2542 }
2543
2544 /* ===========================================================================
2545  * Flush the bit buffer, keeping at most 7 bits in it.
2546  */
2547 local void bi_flush(s)
2548     deflate_state *s;
2549 {
2550     if (s->bi_valid == 16) {
2551         put_short(s, s->bi_buf);
2552         s->bi_buf = 0;
2553         s->bi_valid = 0;
2554     } else if (s->bi_valid >= 8) {
2555         put_byte(s, (Byte)s->bi_buf);
2556         s->bi_buf >>= 8;
2557         s->bi_valid -= 8;
2558     }
2559 }
2560
2561 /* ===========================================================================
2562  * Flush the bit buffer and align the output on a byte boundary
2563  */
2564 local void bi_windup(s)
2565     deflate_state *s;
2566 {
2567     if (s->bi_valid > 8) {
2568         put_short(s, s->bi_buf);
2569     } else if (s->bi_valid > 0) {
2570         put_byte(s, (Byte)s->bi_buf);
2571     }
2572     s->bi_buf = 0;
2573     s->bi_valid = 0;
2574 #ifdef DEBUG_ZLIB
2575     s->bits_sent = (s->bits_sent+7) & ~7;
2576 #endif
2577 }
2578
2579 /* ===========================================================================
2580  * Copy a stored block, storing first the length and its
2581  * one's complement if requested.
2582  */
2583 local void copy_block(s, buf, len, header)
2584     deflate_state *s;
2585     charf    *buf;    /* the input data */
2586     unsigned len;     /* its length */
2587     int      header;  /* true if block header must be written */
2588 {
2589     bi_windup(s);        /* align on byte boundary */
2590     s->last_eob_len = 8; /* enough lookahead for inflate */
2591
2592     if (header) {
2593         put_short(s, (ush)len);   
2594         put_short(s, (ush)~len);
2595 #ifdef DEBUG_ZLIB
2596         s->bits_sent += 2*16;
2597 #endif
2598     }
2599 #ifdef DEBUG_ZLIB
2600     s->bits_sent += (ulg)len<<3;
2601 #endif
2602     while (len--) {
2603         put_byte(s, *buf++);
2604     }
2605 }
2606
2607
2608 /*+++++*/
2609 /* infblock.h -- header to use infblock.c
2610  * Copyright (C) 1995 Mark Adler
2611  * For conditions of distribution and use, see copyright notice in zlib.h 
2612  */
2613
2614 /* WARNING: this file should *not* be used by applications. It is
2615    part of the implementation of the compression library and is
2616    subject to change. Applications should only use zlib.h.
2617  */
2618
2619 struct inflate_blocks_state;
2620 typedef struct inflate_blocks_state FAR inflate_blocks_statef;
2621
2622 local inflate_blocks_statef * inflate_blocks_new OF((
2623     z_stream *z,
2624     check_func c,               /* check function */
2625     uInt w));                   /* window size */
2626
2627 local int inflate_blocks OF((
2628     inflate_blocks_statef *,
2629     z_stream *,
2630     int));                      /* initial return code */
2631
2632 local void inflate_blocks_reset OF((
2633     inflate_blocks_statef *,
2634     z_stream *,
2635     uLongf *));                  /* check value on output */
2636
2637 local int inflate_blocks_free OF((
2638     inflate_blocks_statef *,
2639     z_stream *,
2640     uLongf *));                  /* check value on output */
2641
2642 local int inflate_addhistory OF((
2643     inflate_blocks_statef *,
2644     z_stream *));
2645
2646 local int inflate_packet_flush OF((
2647     inflate_blocks_statef *));
2648
2649 /*+++++*/
2650 /* inftrees.h -- header to use inftrees.c
2651  * Copyright (C) 1995 Mark Adler
2652  * For conditions of distribution and use, see copyright notice in zlib.h 
2653  */
2654
2655 /* WARNING: this file should *not* be used by applications. It is
2656    part of the implementation of the compression library and is
2657    subject to change. Applications should only use zlib.h.
2658  */
2659
2660 /* Huffman code lookup table entry--this entry is four bytes for machines
2661    that have 16-bit pointers (e.g. PC's in the small or medium model). */
2662
2663 typedef struct inflate_huft_s FAR inflate_huft;
2664
2665 struct inflate_huft_s {
2666   union {
2667     struct {
2668       Byte Exop;        /* number of extra bits or operation */
2669       Byte Bits;        /* number of bits in this code or subcode */
2670     } what;
2671     uInt Nalloc;        /* number of these allocated here */
2672     Bytef *pad;         /* pad structure to a power of 2 (4 bytes for */
2673   } word;               /*  16-bit, 8 bytes for 32-bit machines) */
2674   union {
2675     uInt Base;          /* literal, length base, or distance base */
2676     inflate_huft *Next; /* pointer to next level of table */
2677   } more;
2678 };
2679
2680 #ifdef DEBUG_ZLIB
2681   local uInt inflate_hufts;
2682 #endif
2683
2684 local int inflate_trees_bits OF((
2685     uIntf *,                    /* 19 code lengths */
2686     uIntf *,                    /* bits tree desired/actual depth */
2687     inflate_huft * FAR *,       /* bits tree result */
2688     z_stream *));               /* for zalloc, zfree functions */
2689
2690 local int inflate_trees_dynamic OF((
2691     uInt,                       /* number of literal/length codes */
2692     uInt,                       /* number of distance codes */
2693     uIntf *,                    /* that many (total) code lengths */
2694     uIntf *,                    /* literal desired/actual bit depth */
2695     uIntf *,                    /* distance desired/actual bit depth */
2696     inflate_huft * FAR *,       /* literal/length tree result */
2697     inflate_huft * FAR *,       /* distance tree result */
2698     z_stream *));               /* for zalloc, zfree functions */
2699
2700 local int inflate_trees_fixed OF((
2701     uIntf *,                    /* literal desired/actual bit depth */
2702     uIntf *,                    /* distance desired/actual bit depth */
2703     inflate_huft * FAR *,       /* literal/length tree result */
2704     inflate_huft * FAR *));     /* distance tree result */
2705
2706 local int inflate_trees_free OF((
2707     inflate_huft *,             /* tables to free */
2708     z_stream *));               /* for zfree function */
2709
2710
2711 /*+++++*/
2712 /* infcodes.h -- header to use infcodes.c
2713  * Copyright (C) 1995 Mark Adler
2714  * For conditions of distribution and use, see copyright notice in zlib.h 
2715  */
2716
2717 /* WARNING: this file should *not* be used by applications. It is
2718    part of the implementation of the compression library and is
2719    subject to change. Applications should only use zlib.h.
2720  */
2721
2722 struct inflate_codes_state;
2723 typedef struct inflate_codes_state FAR inflate_codes_statef;
2724
2725 local inflate_codes_statef *inflate_codes_new OF((
2726     uInt, uInt,
2727     inflate_huft *, inflate_huft *,
2728     z_stream *));
2729
2730 local int inflate_codes OF((
2731     inflate_blocks_statef *,
2732     z_stream *,
2733     int));
2734
2735 local void inflate_codes_free OF((
2736     inflate_codes_statef *,
2737     z_stream *));
2738
2739
2740 /*+++++*/
2741 /* inflate.c -- zlib interface to inflate modules
2742  * Copyright (C) 1995 Mark Adler
2743  * For conditions of distribution and use, see copyright notice in zlib.h 
2744  */
2745
2746 /* inflate private state */
2747 struct internal_state {
2748
2749   /* mode */
2750   enum {
2751       METHOD,   /* waiting for method byte */
2752       FLAG,     /* waiting for flag byte */
2753       BLOCKS,   /* decompressing blocks */
2754       CHECK4,   /* four check bytes to go */
2755       CHECK3,   /* three check bytes to go */
2756       CHECK2,   /* two check bytes to go */
2757       CHECK1,   /* one check byte to go */
2758       DONE,     /* finished check, done */
2759       BAD}      /* got an error--stay here */
2760     mode;               /* current inflate mode */
2761
2762   /* mode dependent information */
2763   union {
2764     uInt method;        /* if FLAGS, method byte */
2765     struct {
2766       uLong was;                /* computed check value */
2767       uLong need;               /* stream check value */
2768     } check;            /* if CHECK, check values to compare */
2769     uInt marker;        /* if BAD, inflateSync's marker bytes count */
2770   } sub;        /* submode */
2771
2772   /* mode independent information */
2773   int  nowrap;          /* flag for no wrapper */
2774   uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
2775   inflate_blocks_statef 
2776     *blocks;            /* current inflate_blocks state */
2777
2778 };
2779
2780
2781 int inflateReset(z)
2782 z_stream *z;
2783 {
2784   uLong c;
2785
2786   if (z == Z_NULL || z->state == Z_NULL)
2787     return Z_STREAM_ERROR;
2788   z->total_in = z->total_out = 0;
2789   z->msg = Z_NULL;
2790   z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
2791   inflate_blocks_reset(z->state->blocks, z, &c);
2792   Trace((stderr, "inflate: reset\n"));
2793   return Z_OK;
2794 }
2795
2796
2797 int inflateEnd(z)
2798 z_stream *z;
2799 {
2800   uLong c;
2801
2802   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
2803     return Z_STREAM_ERROR;
2804   if (z->state->blocks != Z_NULL)
2805     inflate_blocks_free(z->state->blocks, z, &c);
2806   ZFREE(z, z->state, sizeof(struct internal_state));
2807   z->state = Z_NULL;
2808   Trace((stderr, "inflate: end\n"));
2809   return Z_OK;
2810 }
2811
2812
2813 int inflateInit2(z, w)
2814 z_stream *z;
2815 int w;
2816 {
2817   /* initialize state */
2818   if (z == Z_NULL)
2819     return Z_STREAM_ERROR;
2820 /*  if (z->zalloc == Z_NULL) z->zalloc = zcalloc; */
2821 /*  if (z->zfree == Z_NULL) z->zfree = zcfree; */
2822   if ((z->state = (struct internal_state FAR *)
2823        ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
2824     return Z_MEM_ERROR;
2825   z->state->blocks = Z_NULL;
2826
2827   /* handle undocumented nowrap option (no zlib header or check) */
2828   z->state->nowrap = 0;
2829   if (w < 0)
2830   {
2831     w = - w;
2832     z->state->nowrap = 1;
2833   }
2834
2835   /* set window size */
2836   if (w < 8 || w > 15)
2837   {
2838     inflateEnd(z);
2839     return Z_STREAM_ERROR;
2840   }
2841   z->state->wbits = (uInt)w;
2842
2843   /* create inflate_blocks state */
2844   if ((z->state->blocks =
2845        inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, 1 << w))
2846       == Z_NULL)
2847   {
2848     inflateEnd(z);
2849     return Z_MEM_ERROR;
2850   }
2851   Trace((stderr, "inflate: allocated\n"));
2852
2853   /* reset state */
2854   inflateReset(z);
2855   return Z_OK;
2856 }
2857
2858
2859 int inflateInit(z)
2860 z_stream *z;
2861 {
2862   return inflateInit2(z, DEF_WBITS);
2863 }
2864
2865
2866 #define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
2867 #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
2868
2869 int inflate(z, f)
2870 z_stream *z;
2871 int f;
2872 {
2873   int r;
2874   uInt b;
2875
2876   if (z == Z_NULL || z->next_in == Z_NULL)
2877     return Z_STREAM_ERROR;
2878   r = Z_BUF_ERROR;
2879   while (1) switch (z->state->mode)
2880   {
2881     case METHOD:
2882       NEEDBYTE
2883       if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED)
2884       {
2885         z->state->mode = BAD;
2886         z->msg = "unknown compression method";
2887         z->state->sub.marker = 5;       /* can't try inflateSync */
2888         break;
2889       }
2890       if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
2891       {
2892         z->state->mode = BAD;
2893         z->msg = "invalid window size";
2894         z->state->sub.marker = 5;       /* can't try inflateSync */
2895         break;
2896       }
2897       z->state->mode = FLAG;
2898     case FLAG:
2899       NEEDBYTE
2900       if ((b = NEXTBYTE) & 0x20)
2901       {
2902         z->state->mode = BAD;
2903         z->msg = "invalid reserved bit";
2904         z->state->sub.marker = 5;       /* can't try inflateSync */
2905         break;
2906       }
2907       if (((z->state->sub.method << 8) + b) % 31)
2908       {
2909         z->state->mode = BAD;
2910         z->msg = "incorrect header check";
2911         z->state->sub.marker = 5;       /* can't try inflateSync */
2912         break;
2913       }
2914       Trace((stderr, "inflate: zlib header ok\n"));
2915       z->state->mode = BLOCKS;
2916     case BLOCKS:
2917       r = inflate_blocks(z->state->blocks, z, r);
2918       if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
2919           r = inflate_packet_flush(z->state->blocks);
2920       if (r == Z_DATA_ERROR)
2921       {
2922         z->state->mode = BAD;
2923         z->state->sub.marker = 0;       /* can try inflateSync */
2924         break;
2925       }
2926       if (r != Z_STREAM_END)
2927         return r;
2928       r = Z_OK;
2929       inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
2930       if (z->state->nowrap)
2931       {
2932         z->state->mode = DONE;
2933         break;
2934       }
2935       z->state->mode = CHECK4;
2936     case CHECK4:
2937       NEEDBYTE
2938       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
2939       z->state->mode = CHECK3;
2940     case CHECK3:
2941       NEEDBYTE
2942       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
2943       z->state->mode = CHECK2;
2944     case CHECK2:
2945       NEEDBYTE
2946       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
2947       z->state->mode = CHECK1;
2948     case CHECK1:
2949       NEEDBYTE
2950       z->state->sub.check.need += (uLong)NEXTBYTE;
2951
2952       if (z->state->sub.check.was != z->state->sub.check.need)
2953       {
2954         z->state->mode = BAD;
2955         z->msg = "incorrect data check";
2956         z->state->sub.marker = 5;       /* can't try inflateSync */
2957         break;
2958       }
2959       Trace((stderr, "inflate: zlib check ok\n"));
2960       z->state->mode = DONE;
2961     case DONE:
2962       return Z_STREAM_END;
2963     case BAD:
2964       return Z_DATA_ERROR;
2965     default:
2966       return Z_STREAM_ERROR;
2967   }
2968
2969  empty:
2970   if (f != Z_PACKET_FLUSH)
2971     return r;
2972   z->state->mode = BAD;
2973   z->state->sub.marker = 0;       /* can try inflateSync */
2974   return Z_DATA_ERROR;
2975 }
2976
2977 /*
2978  * This subroutine adds the data at next_in/avail_in to the output history
2979  * without performing any output.  The output buffer must be "caught up";
2980  * i.e. no pending output (hence s->read equals s->write), and the state must
2981  * be BLOCKS (i.e. we should be willing to see the start of a series of
2982  * BLOCKS).  On exit, the output will also be caught up, and the checksum
2983  * will have been updated if need be.
2984  */
2985
2986 int inflateIncomp(z)
2987 z_stream *z;
2988 {
2989     if (z->state->mode != BLOCKS)
2990         return Z_DATA_ERROR;
2991     return inflate_addhistory(z->state->blocks, z);
2992 }
2993
2994
2995 int inflateSync(z)
2996 z_stream *z;
2997 {
2998   uInt n;       /* number of bytes to look at */
2999   Bytef *p;     /* pointer to bytes */
3000   uInt m;       /* number of marker bytes found in a row */
3001   uLong r, w;   /* temporaries to save total_in and total_out */
3002
3003   /* set up */
3004   if (z == Z_NULL || z->state == Z_NULL)
3005     return Z_STREAM_ERROR;
3006   if (z->state->mode != BAD)
3007   {
3008     z->state->mode = BAD;
3009     z->state->sub.marker = 0;
3010   }
3011   if ((n = z->avail_in) == 0)
3012     return Z_BUF_ERROR;
3013   p = z->next_in;
3014   m = z->state->sub.marker;
3015
3016   /* search */
3017   while (n && m < 4)
3018   {
3019     if (*p == (Byte)(m < 2 ? 0 : 0xff))
3020       m++;
3021     else if (*p)
3022       m = 0;
3023     else
3024       m = 4 - m;
3025     p++, n--;
3026   }
3027
3028   /* restore */
3029   z->total_in += p - z->next_in;
3030   z->next_in = p;
3031   z->avail_in = n;
3032   z->state->sub.marker = m;
3033
3034   /* return no joy or set up to restart on a new block */
3035   if (m != 4)
3036     return Z_DATA_ERROR;
3037   r = z->total_in;  w = z->total_out;
3038   inflateReset(z);
3039   z->total_in = r;  z->total_out = w;
3040   z->state->mode = BLOCKS;
3041   return Z_OK;
3042 }
3043
3044 #undef NEEDBYTE
3045 #undef NEXTBYTE
3046
3047 /*+++++*/
3048 /* infutil.h -- types and macros common to blocks and codes
3049  * Copyright (C) 1995 Mark Adler
3050  * For conditions of distribution and use, see copyright notice in zlib.h 
3051  */
3052
3053 /* WARNING: this file should *not* be used by applications. It is
3054    part of the implementation of the compression library and is
3055    subject to change. Applications should only use zlib.h.
3056  */
3057
3058 /* inflate blocks semi-private state */
3059 struct inflate_blocks_state {
3060
3061   /* mode */
3062   enum {
3063       TYPE,     /* get type bits (3, including end bit) */
3064       LENS,     /* get lengths for stored */
3065       STORED,   /* processing stored block */
3066       TABLE,    /* get table lengths */
3067       BTREE,    /* get bit lengths tree for a dynamic block */
3068       DTREE,    /* get length, distance trees for a dynamic block */
3069       CODES,    /* processing fixed or dynamic block */
3070       DRY,      /* output remaining window bytes */
3071       DONEB,     /* finished last block, done */
3072       BADB}      /* got a data error--stuck here */
3073     mode;               /* current inflate_block mode */
3074
3075   /* mode dependent information */
3076   union {
3077     uInt left;          /* if STORED, bytes left to copy */
3078     struct {
3079       uInt table;               /* table lengths (14 bits) */
3080       uInt index;               /* index into blens (or border) */
3081       uIntf *blens;             /* bit lengths of codes */
3082       uInt bb;                  /* bit length tree depth */
3083       inflate_huft *tb;         /* bit length decoding tree */
3084       int nblens;               /* # elements allocated at blens */
3085     } trees;            /* if DTREE, decoding info for trees */
3086     struct {
3087       inflate_huft *tl, *td;    /* trees to free */
3088       inflate_codes_statef 
3089          *codes;
3090     } decode;           /* if CODES, current state */
3091   } sub;                /* submode */
3092   uInt last;            /* true if this block is the last block */
3093
3094   /* mode independent information */
3095   uInt bitk;            /* bits in bit buffer */
3096   uLong bitb;           /* bit buffer */
3097   Bytef *window;        /* sliding window */
3098   Bytef *end;           /* one byte after sliding window */
3099   Bytef *read;          /* window read pointer */
3100   Bytef *write;         /* window write pointer */
3101   check_func checkfn;   /* check function */
3102   uLong check;          /* check on output */
3103
3104 };
3105
3106
3107 /* defines for inflate input/output */
3108 /*   update pointers and return */
3109 #define UPDBITS {s->bitb=b;s->bitk=k;}
3110 #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
3111 #define UPDOUT {s->write=q;}
3112 #define UPDATE {UPDBITS UPDIN UPDOUT}
3113 #define LEAVE {UPDATE return inflate_flush(s,z,r);}
3114 /*   get bytes and bits */
3115 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
3116 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
3117 #define NEXTBYTE (n--,*p++)
3118 #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
3119 #define DUMPBITS(j) {b>>=(j);k-=(j);}
3120 /*   output bytes */
3121 #define WAVAIL (q<s->read?s->read-q-1:s->end-q)
3122 #define LOADOUT {q=s->write;m=WAVAIL;}
3123 #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=WAVAIL;}}
3124 #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
3125 #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
3126 #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
3127 /*   load local pointers */
3128 #define LOAD {LOADIN LOADOUT}
3129
3130 /* And'ing with mask[n] masks the lower n bits */
3131 local uInt inflate_mask[] = {
3132     0x0000,
3133     0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
3134     0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
3135 };
3136
3137 /* copy as much as possible from the sliding window to the output area */
3138 local int inflate_flush OF((
3139     inflate_blocks_statef *,
3140     z_stream *,
3141     int));
3142
3143 /*+++++*/
3144 /* inffast.h -- header to use inffast.c
3145  * Copyright (C) 1995 Mark Adler
3146  * For conditions of distribution and use, see copyright notice in zlib.h 
3147  */
3148
3149 /* WARNING: this file should *not* be used by applications. It is
3150    part of the implementation of the compression library and is
3151    subject to change. Applications should only use zlib.h.
3152  */
3153
3154 local int inflate_fast OF((
3155     uInt,
3156     uInt,
3157     inflate_huft *,
3158     inflate_huft *,
3159     inflate_blocks_statef *,
3160     z_stream *));
3161
3162
3163 /*+++++*/
3164 /* infblock.c -- interpret and process block types to last block
3165  * Copyright (C) 1995 Mark Adler
3166  * For conditions of distribution and use, see copyright notice in zlib.h 
3167  */
3168
3169 /* Table for deflate from PKZIP's appnote.txt. */
3170 local uInt border[] = { /* Order of the bit length code lengths */
3171         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
3172
3173 /*
3174    Notes beyond the 1.93a appnote.txt:
3175
3176    1. Distance pointers never point before the beginning of the output
3177       stream.
3178    2. Distance pointers can point back across blocks, up to 32k away.
3179    3. There is an implied maximum of 7 bits for the bit length table and
3180       15 bits for the actual data.
3181    4. If only one code exists, then it is encoded using one bit.  (Zero
3182       would be more efficient, but perhaps a little confusing.)  If two
3183       codes exist, they are coded using one bit each (0 and 1).
3184    5. There is no way of sending zero distance codes--a dummy must be
3185       sent if there are none.  (History: a pre 2.0 version of PKZIP would
3186       store blocks with no distance codes, but this was discovered to be
3187       too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
3188       zero distance codes, which is sent as one code of zero bits in
3189       length.
3190    6. There are up to 286 literal/length codes.  Code 256 represents the
3191       end-of-block.  Note however that the static length tree defines
3192       288 codes just to fill out the Huffman codes.  Codes 286 and 287
3193       cannot be used though, since there is no length base or extra bits
3194       defined for them.  Similarily, there are up to 30 distance codes.
3195       However, static trees define 32 codes (all 5 bits) to fill out the
3196       Huffman codes, but the last two had better not show up in the data.
3197    7. Unzip can check dynamic Huffman blocks for complete code sets.
3198       The exception is that a single code would not be complete (see #4).
3199    8. The five bits following the block type is really the number of
3200       literal codes sent minus 257.
3201    9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
3202       (1+6+6).  Therefore, to output three times the length, you output
3203       three codes (1+1+1), whereas to output four times the same length,
3204       you only need two codes (1+3).  Hmm.
3205   10. In the tree reconstruction algorithm, Code = Code + Increment
3206       only if BitLength(i) is not zero.  (Pretty obvious.)
3207   11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
3208   12. Note: length code 284 can represent 227-258, but length code 285
3209       really is 258.  The last length deserves its own, short code
3210       since it gets used a lot in very redundant files.  The length
3211       258 is special since 258 - 3 (the min match length) is 255.
3212   13. The literal/length and distance code bit lengths are read as a
3213       single stream of lengths.  It is possible (and advantageous) for
3214       a repeat code (16, 17, or 18) to go across the boundary between
3215       the two sets of lengths.
3216  */
3217
3218
3219 local void inflate_blocks_reset(s, z, c)
3220 inflate_blocks_statef *s;
3221 z_stream *z;
3222 uLongf *c;
3223 {
3224   if (s->checkfn != Z_NULL)
3225     *c = s->check;
3226   if (s->mode == BTREE || s->mode == DTREE)
3227     ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
3228   if (s->mode == CODES)
3229   {
3230     inflate_codes_free(s->sub.decode.codes, z);
3231     inflate_trees_free(s->sub.decode.td, z);
3232     inflate_trees_free(s->sub.decode.tl, z);
3233   }
3234   s->mode = TYPE;
3235   s->bitk = 0;
3236   s->bitb = 0;
3237   s->read = s->write = s->window;
3238   if (s->checkfn != Z_NULL)
3239     s->check = (*s->checkfn)(0L, Z_NULL, 0);
3240   Trace((stderr, "inflate:   blocks reset\n"));
3241 }
3242
3243
3244 local inflate_blocks_statef *inflate_blocks_new(z, c, w)
3245 z_stream *z;
3246 check_func c;
3247 uInt w;
3248 {
3249   inflate_blocks_statef *s;
3250
3251   if ((s = (inflate_blocks_statef *)ZALLOC
3252        (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
3253     return s;
3254   if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
3255   {
3256     ZFREE(z, s, sizeof(struct inflate_blocks_state));
3257     return Z_NULL;
3258   }
3259   s->end = s->window + w;
3260   s->checkfn = c;
3261   s->mode = TYPE;
3262   Trace((stderr, "inflate:   blocks allocated\n"));
3263   inflate_blocks_reset(s, z, &s->check);
3264   return s;
3265 }
3266
3267
3268 local int inflate_blocks(s, z, r)
3269 inflate_blocks_statef *s;
3270 z_stream *z;
3271 int r;
3272 {
3273   uInt t;               /* temporary storage */
3274   uLong b;              /* bit buffer */
3275   uInt k;               /* bits in bit buffer */
3276   Bytef *p;             /* input data pointer */
3277   uInt n;               /* bytes available there */
3278   Bytef *q;             /* output window write pointer */
3279   uInt m;               /* bytes to end of window or read pointer */
3280
3281   /* copy input/output information to locals (UPDATE macro restores) */
3282   LOAD
3283
3284   /* process input based on current state */
3285   while (1) switch (s->mode)
3286   {
3287     case TYPE:
3288       NEEDBITS(3)
3289       t = (uInt)b & 7;
3290       s->last = t & 1;
3291       switch (t >> 1)
3292       {
3293         case 0:                         /* stored */
3294           Trace((stderr, "inflate:     stored block%s\n",
3295                  s->last ? " (last)" : ""));
3296           DUMPBITS(3)
3297           t = k & 7;                    /* go to byte boundary */
3298           DUMPBITS(t)
3299           s->mode = LENS;               /* get length of stored block */
3300           break;
3301         case 1:                         /* fixed */
3302           Trace((stderr, "inflate:     fixed codes block%s\n",
3303                  s->last ? " (last)" : ""));
3304           {
3305             uInt bl, bd;
3306             inflate_huft *tl, *td;
3307
3308             inflate_trees_fixed(&bl, &bd, &tl, &td);
3309             s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
3310             if (s->sub.decode.codes == Z_NULL)
3311             {
3312               r = Z_MEM_ERROR;
3313               LEAVE
3314             }
3315             s->sub.decode.tl = Z_NULL;  /* don't try to free these */
3316             s->sub.decode.td = Z_NULL;
3317           }
3318           DUMPBITS(3)
3319           s->mode = CODES;
3320           break;
3321         case 2:                         /* dynamic */
3322           Trace((stderr, "inflate:     dynamic codes block%s\n",
3323                  s->last ? " (last)" : ""));
3324           DUMPBITS(3)
3325           s->mode = TABLE;
3326           break;
3327         case 3:                         /* illegal */
3328           DUMPBITS(3)
3329           s->mode = BADB;
3330           z->msg = "invalid block type";
3331           r = Z_DATA_ERROR;
3332           LEAVE
3333       }
3334       break;
3335     case LENS:
3336       NEEDBITS(32)
3337       if (((~b) >> 16) != (b & 0xffff))
3338       {
3339         s->mode = BADB;
3340         z->msg = "invalid stored block lengths";
3341         r = Z_DATA_ERROR;
3342         LEAVE
3343       }
3344       s->sub.left = (uInt)b & 0xffff;
3345       b = k = 0;                      /* dump bits */
3346       Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
3347       s->mode = s->sub.left ? STORED : TYPE;
3348       break;
3349     case STORED:
3350       if (n == 0)
3351         LEAVE
3352       NEEDOUT
3353       t = s->sub.left;
3354       if (t > n) t = n;
3355       if (t > m) t = m;
3356       zmemcpy(q, p, t);
3357       p += t;  n -= t;
3358       q += t;  m -= t;
3359       if ((s->sub.left -= t) != 0)
3360         break;
3361       Tracev((stderr, "inflate:       stored end, %lu total out\n",
3362               z->total_out + (q >= s->read ? q - s->read :
3363               (s->end - s->read) + (q - s->window))));
3364       s->mode = s->last ? DRY : TYPE;
3365       break;
3366     case TABLE:
3367       NEEDBITS(14)
3368       s->sub.trees.table = t = (uInt)b & 0x3fff;
3369 #ifndef PKZIP_BUG_WORKAROUND
3370       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
3371       {
3372         s->mode = BADB;
3373         z->msg = "too many length or distance symbols";
3374         r = Z_DATA_ERROR;
3375         LEAVE
3376       }
3377 #endif
3378       t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
3379       if (t < 19)
3380         t = 19;
3381       if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
3382       {
3383         r = Z_MEM_ERROR;
3384         LEAVE
3385       }
3386       s->sub.trees.nblens = t;
3387       DUMPBITS(14)
3388       s->sub.trees.index = 0;
3389       Tracev((stderr, "inflate:       table sizes ok\n"));
3390       s->mode = BTREE;
3391     case BTREE:
3392       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
3393       {
3394         NEEDBITS(3)
3395         s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
3396         DUMPBITS(3)
3397       }
3398       while (s->sub.trees.index < 19)
3399         s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
3400       s->sub.trees.bb = 7;
3401       t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
3402                              &s->sub.trees.tb, z);
3403       if (t != Z_OK)
3404       {
3405         r = t;
3406         if (r == Z_DATA_ERROR)
3407           s->mode = BADB;
3408         LEAVE
3409       }
3410       s->sub.trees.index = 0;
3411       Tracev((stderr, "inflate:       bits tree ok\n"));
3412       s->mode = DTREE;
3413     case DTREE:
3414       while (t = s->sub.trees.table,
3415              s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
3416       {
3417         inflate_huft *h;
3418         uInt i, j, c;
3419
3420         t = s->sub.trees.bb;
3421         NEEDBITS(t)
3422         h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
3423         t = h->word.what.Bits;
3424         c = h->more.Base;
3425         if (c < 16)
3426         {
3427           DUMPBITS(t)
3428           s->sub.trees.blens[s->sub.trees.index++] = c;
3429         }
3430         else /* c == 16..18 */
3431         {
3432           i = c == 18 ? 7 : c - 14;
3433           j = c == 18 ? 11 : 3;
3434           NEEDBITS(t + i)
3435           DUMPBITS(t)
3436           j += (uInt)b & inflate_mask[i];
3437           DUMPBITS(i)
3438           i = s->sub.trees.index;
3439           t = s->sub.trees.table;
3440           if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
3441               (c == 16 && i < 1))
3442           {
3443             s->mode = BADB;
3444             z->msg = "invalid bit length repeat";
3445             r = Z_DATA_ERROR;
3446             LEAVE
3447           }
3448           c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
3449           do {
3450             s->sub.trees.blens[i++] = c;
3451           } while (--j);
3452           s->sub.trees.index = i;
3453         }
3454       }
3455       inflate_trees_free(s->sub.trees.tb, z);
3456       s->sub.trees.tb = Z_NULL;
3457       {
3458         uInt bl, bd;
3459         inflate_huft *tl, *td;
3460         inflate_codes_statef *c;
3461
3462         bl = 9;         /* must be <= 9 for lookahead assumptions */
3463         bd = 6;         /* must be <= 9 for lookahead assumptions */
3464         t = s->sub.trees.table;
3465         t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
3466                                   s->sub.trees.blens, &bl, &bd, &tl, &td, z);
3467         if (t != Z_OK)
3468         {
3469           if (t == (uInt)Z_DATA_ERROR)
3470             s->mode = BADB;
3471           r = t;
3472           LEAVE
3473         }
3474         Tracev((stderr, "inflate:       trees ok\n"));
3475         if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
3476         {
3477           inflate_trees_free(td, z);
3478           inflate_trees_free(tl, z);
3479           r = Z_MEM_ERROR;
3480           LEAVE
3481         }
3482         ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
3483         s->sub.decode.codes = c;
3484         s->sub.decode.tl = tl;
3485         s->sub.decode.td = td;
3486       }
3487       s->mode = CODES;
3488     case CODES:
3489       UPDATE
3490       if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
3491         return inflate_flush(s, z, r);
3492       r = Z_OK;
3493       inflate_codes_free(s->sub.decode.codes, z);
3494       inflate_trees_free(s->sub.decode.td, z);
3495       inflate_trees_free(s->sub.decode.tl, z);
3496       LOAD
3497       Tracev((stderr, "inflate:       codes end, %lu total out\n",
3498               z->total_out + (q >= s->read ? q - s->read :
3499               (s->end - s->read) + (q - s->window))));
3500       if (!s->last)
3501       {
3502         s->mode = TYPE;
3503         break;
3504       }
3505       if (k > 7)              /* return unused byte, if any */
3506       {
3507         Assert(k < 16, "inflate_codes grabbed too many bytes")
3508         k -= 8;
3509         n++;
3510         p--;                    /* can always return one */
3511       }
3512       s->mode = DRY;
3513     case DRY:
3514       FLUSH
3515       if (s->read != s->write)
3516         LEAVE
3517       s->mode = DONEB;
3518     case DONEB:
3519       r = Z_STREAM_END;
3520       LEAVE
3521     case BADB:
3522       r = Z_DATA_ERROR;
3523       LEAVE
3524     default:
3525       r = Z_STREAM_ERROR;
3526       LEAVE
3527   }
3528 }
3529
3530
3531 local int inflate_blocks_free(s, z, c)
3532 inflate_blocks_statef *s;
3533 z_stream *z;
3534 uLongf *c;
3535 {
3536   inflate_blocks_reset(s, z, c);
3537   ZFREE(z, s->window, s->end - s->window);
3538   ZFREE(z, s, sizeof(struct inflate_blocks_state));
3539   Trace((stderr, "inflate:   blocks freed\n"));
3540   return Z_OK;
3541 }
3542
3543 /*
3544  * This subroutine adds the data at next_in/avail_in to the output history
3545  * without performing any output.  The output buffer must be "caught up";
3546  * i.e. no pending output (hence s->read equals s->write), and the state must
3547  * be BLOCKS (i.e. we should be willing to see the start of a series of
3548  * BLOCKS).  On exit, the output will also be caught up, and the checksum
3549  * will have been updated if need be.
3550  */
3551 local int inflate_addhistory(s, z)
3552 inflate_blocks_statef *s;
3553 z_stream *z;
3554 {
3555     uLong b;              /* bit buffer */  /* NOT USED HERE */
3556     uInt k;               /* bits in bit buffer */ /* NOT USED HERE */
3557     uInt t;               /* temporary storage */
3558     Bytef *p;             /* input data pointer */
3559     uInt n;               /* bytes available there */
3560     Bytef *q;             /* output window write pointer */
3561     uInt m;               /* bytes to end of window or read pointer */
3562
3563     if (s->read != s->write)
3564         return Z_STREAM_ERROR;
3565     if (s->mode != TYPE)
3566         return Z_DATA_ERROR;
3567
3568     /* we're ready to rock */
3569     LOAD
3570     /* while there is input ready, copy to output buffer, moving
3571      * pointers as needed.
3572      */
3573     while (n) {
3574         t = n;  /* how many to do */
3575         /* is there room until end of buffer? */
3576         if (t > m) t = m;
3577         /* update check information */
3578         if (s->checkfn != Z_NULL)
3579             s->check = (*s->checkfn)(s->check, q, t);
3580         zmemcpy(q, p, t);
3581         q += t;
3582         p += t;
3583         n -= t;
3584         z->total_out += t;
3585         s->read = q;    /* drag read pointer forward */
3586 /*      WRAP  */        /* expand WRAP macro by hand to handle s->read */
3587         if (q == s->end) {
3588             s->read = q = s->window;
3589             m = WAVAIL;
3590         }
3591     }
3592     UPDATE
3593     return Z_OK;
3594 }
3595
3596
3597 /*
3598  * At the end of a Deflate-compressed PPP packet, we expect to have seen
3599  * a `stored' block type value but not the (zero) length bytes.
3600  */
3601 local int inflate_packet_flush(s)
3602     inflate_blocks_statef *s;
3603 {
3604     if (s->mode != LENS)
3605         return Z_DATA_ERROR;
3606     s->mode = TYPE;
3607     return Z_OK;
3608 }
3609
3610
3611 /*+++++*/
3612 /* inftrees.c -- generate Huffman trees for efficient decoding
3613  * Copyright (C) 1995 Mark Adler
3614  * For conditions of distribution and use, see copyright notice in zlib.h 
3615  */
3616
3617 /* simplify the use of the inflate_huft type with some defines */
3618 #define base more.Base
3619 #define next more.Next
3620 #define exop word.what.Exop
3621 #define bits word.what.Bits
3622
3623
3624 local int huft_build OF((
3625     uIntf *,            /* code lengths in bits */
3626     uInt,               /* number of codes */
3627     uInt,               /* number of "simple" codes */
3628     uIntf *,            /* list of base values for non-simple codes */
3629     uIntf *,            /* list of extra bits for non-simple codes */
3630     inflate_huft * FAR*,/* result: starting table */
3631     uIntf *,            /* maximum lookup bits (returns actual) */
3632     z_stream *));       /* for zalloc function */
3633
3634 local voidpf falloc OF((
3635     voidpf,             /* opaque pointer (not used) */
3636     uInt,               /* number of items */
3637     uInt));             /* size of item */
3638
3639 local void ffree OF((
3640     voidpf q,           /* opaque pointer (not used) */
3641     voidpf p,           /* what to free (not used) */
3642     uInt n));           /* number of bytes (not used) */
3643
3644 /* Tables for deflate from PKZIP's appnote.txt. */
3645 local uInt cplens[] = { /* Copy lengths for literal codes 257..285 */
3646         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
3647         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
3648         /* actually lengths - 2; also see note #13 above about 258 */
3649 local uInt cplext[] = { /* Extra bits for literal codes 257..285 */
3650         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
3651         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 192, 192}; /* 192==invalid */
3652 local uInt cpdist[] = { /* Copy offsets for distance codes 0..29 */
3653         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
3654         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
3655         8193, 12289, 16385, 24577};
3656 local uInt cpdext[] = { /* Extra bits for distance codes */
3657         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
3658         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
3659         12, 12, 13, 13};
3660
3661 /*
3662    Huffman code decoding is performed using a multi-level table lookup.
3663    The fastest way to decode is to simply build a lookup table whose
3664    size is determined by the longest code.  However, the time it takes
3665    to build this table can also be a factor if the data being decoded
3666    is not very long.  The most common codes are necessarily the
3667    shortest codes, so those codes dominate the decoding time, and hence
3668    the speed.  The idea is you can have a shorter table that decodes the
3669    shorter, more probable codes, and then point to subsidiary tables for
3670    the longer codes.  The time it costs to decode the longer codes is
3671    then traded against the time it takes to make longer tables.
3672
3673    This results of this trade are in the variables lbits and dbits
3674    below.  lbits is the number of bits the first level table for literal/
3675    length codes can decode in one step, and dbits is the same thing for
3676    the distance codes.  Subsequent tables are also less than or equal to
3677    those sizes.  These values may be adjusted either when all of the
3678    codes are shorter than that, in which case the longest code length in
3679    bits is used, or when the shortest code is *longer* than the requested
3680    table size, in which case the length of the shortest code in bits is
3681    used.
3682
3683    There are two different values for the two tables, since they code a
3684    different number of possibilities each.  The literal/length table
3685    codes 286 possible values, or in a flat code, a little over eight
3686    bits.  The distance table codes 30 possible values, or a little less
3687    than five bits, flat.  The optimum values for speed end up being
3688    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
3689    The optimum values may differ though from machine to machine, and
3690    possibly even between compilers.  Your mileage may vary.
3691  */
3692
3693
3694 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
3695 #define BMAX 15         /* maximum bit length of any code */
3696 #define N_MAX 288       /* maximum number of codes in any set */
3697
3698 #ifdef DEBUG_ZLIB
3699   uInt inflate_hufts;
3700 #endif
3701
3702 local int huft_build(b, n, s, d, e, t, m, zs)
3703 uIntf *b;               /* code lengths in bits (all assumed <= BMAX) */
3704 uInt n;                 /* number of codes (assumed <= N_MAX) */
3705 uInt s;                 /* number of simple-valued codes (0..s-1) */
3706 uIntf *d;               /* list of base values for non-simple codes */
3707 uIntf *e;               /* list of extra bits for non-simple codes */  
3708 inflate_huft * FAR *t;  /* result: starting table */
3709 uIntf *m;               /* maximum lookup bits, returns actual */
3710 z_stream *zs;           /* for zalloc function */
3711 /* Given a list of code lengths and a maximum table size, make a set of
3712    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
3713    if the given code set is incomplete (the tables are still built in this
3714    case), Z_DATA_ERROR if the input is invalid (all zero length codes or an
3715    over-subscribed set of lengths), or Z_MEM_ERROR if not enough memory. */
3716 {
3717
3718   uInt a;                       /* counter for codes of length k */
3719   uInt c[BMAX+1];               /* bit length count table */
3720   uInt f;                       /* i repeats in table every f entries */
3721   int g;                        /* maximum code length */
3722   int h;                        /* table level */
3723   register uInt i;              /* counter, current code */
3724   register uInt j;              /* counter */
3725   register int k;               /* number of bits in current code */
3726   int l;                        /* bits per table (returned in m) */
3727   register uIntf *p;            /* pointer into c[], b[], or v[] */
3728   inflate_huft *q;              /* points to current table */
3729   struct inflate_huft_s r;      /* table entry for structure assignment */
3730   inflate_huft *u[BMAX];        /* table stack */
3731   uInt v[N_MAX];                /* values in order of bit length */
3732   register int w;               /* bits before this table == (l * h) */
3733   uInt x[BMAX+1];               /* bit offsets, then code stack */
3734   uIntf *xp;                    /* pointer into x */
3735   int y;                        /* number of dummy codes added */
3736   uInt z;                       /* number of entries in current table */
3737
3738
3739   /* Generate counts for each bit length */
3740   p = c;
3741 #define C0 *p++ = 0;
3742 #define C2 C0 C0 C0 C0
3743 #define C4 C2 C2 C2 C2
3744   C4                            /* clear c[]--assume BMAX+1 is 16 */
3745   p = b;  i = n;
3746   do {
3747     c[*p++]++;                  /* assume all entries <= BMAX */
3748   } while (--i);
3749   if (c[0] == n)                /* null input--all zero length codes */
3750   {
3751     *t = (inflate_huft *)Z_NULL;
3752     *m = 0;
3753     return Z_OK;
3754   }
3755
3756
3757   /* Find minimum and maximum length, bound *m by those */
3758   l = *m;
3759   for (j = 1; j <= BMAX; j++)
3760     if (c[j])
3761       break;
3762   k = j;                        /* minimum code length */
3763   if ((uInt)l < j)
3764     l = j;
3765   for (i = BMAX; i; i--)
3766     if (c[i])
3767       break;
3768   g = i;                        /* maximum code length */
3769   if ((uInt)l > i)
3770     l = i;
3771   *m = l;
3772
3773
3774   /* Adjust last length count to fill out codes, if needed */
3775   for (y = 1 << j; j < i; j++, y <<= 1)
3776     if ((y -= c[j]) < 0)
3777       return Z_DATA_ERROR;
3778   if ((y -= c[i]) < 0)
3779     return Z_DATA_ERROR;
3780   c[i] += y;
3781
3782
3783   /* Generate starting offsets into the value table for each length */
3784   x[1] = j = 0;
3785   p = c + 1;  xp = x + 2;
3786   while (--i) {                 /* note that i == g from above */
3787     *xp++ = (j += *p++);
3788   }
3789
3790
3791   /* Make a table of values in order of bit lengths */
3792   p = b;  i = 0;
3793   do {
3794     if ((j = *p++) != 0)
3795       v[x[j]++] = i;
3796   } while (++i < n);
3797
3798
3799   /* Generate the Huffman codes and for each, make the table entries */
3800   x[0] = i = 0;                 /* first Huffman code is zero */
3801   p = v;                        /* grab values in bit order */
3802   h = -1;                       /* no tables yet--level -1 */
3803   w = -l;                       /* bits decoded == (l * h) */
3804   u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
3805   q = (inflate_huft *)Z_NULL;   /* ditto */
3806   z = 0;                        /* ditto */
3807
3808   /* go through the bit lengths (k already is bits in shortest code) */
3809   for (; k <= g; k++)
3810   {
3811     a = c[k];
3812     while (a--)
3813     {
3814       /* here i is the Huffman code of length k bits for value *p */
3815       /* make tables up to required level */
3816       while (k > w + l)
3817       {
3818         h++;
3819         w += l;                 /* previous table always l bits */
3820
3821         /* compute minimum size table less than or equal to l bits */
3822         z = (z = g - w) > (uInt)l ? l : z;      /* table size upper limit */
3823         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
3824         {                       /* too few codes for k-w bit table */
3825           f -= a + 1;           /* deduct codes from patterns left */
3826           xp = c + k;
3827           if (j < z)
3828             while (++j < z)     /* try smaller tables up to z bits */
3829             {
3830               if ((f <<= 1) <= *++xp)
3831                 break;          /* enough codes to use up j bits */
3832               f -= *xp;         /* else deduct codes from patterns */
3833             }
3834         }
3835         z = 1 << j;             /* table entries for j-bit table */
3836
3837         /* allocate and link in new table */
3838         if ((q = (inflate_huft *)ZALLOC
3839              (zs,z + 1,sizeof(inflate_huft))) == Z_NULL)
3840         {
3841           if (h)
3842             inflate_trees_free(u[0], zs);
3843           return Z_MEM_ERROR;   /* not enough memory */
3844         }
3845         q->word.Nalloc = z + 1;
3846 #ifdef DEBUG_ZLIB
3847         inflate_hufts += z + 1;
3848 #endif
3849         *t = q + 1;             /* link to list for huft_free() */
3850         *(t = &(q->next)) = Z_NULL;
3851         u[h] = ++q;             /* table starts after link */
3852
3853         /* connect to last table, if there is one */
3854         if (h)
3855         {
3856           x[h] = i;             /* save pattern for backing up */
3857           r.bits = (Byte)l;     /* bits to dump before this table */
3858           r.exop = (Byte)j;     /* bits in this table */
3859           r.next = q;           /* pointer to this table */
3860           j = i >> (w - l);     /* (get around Turbo C bug) */
3861           u[h-1][j] = r;        /* connect to last table */
3862         }
3863       }
3864
3865       /* set up table entry in r */
3866       r.bits = (Byte)(k - w);
3867       if (p >= v + n)
3868         r.exop = 128 + 64;      /* out of values--invalid code */
3869       else if (*p < s)
3870       {
3871         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
3872         r.base = *p++;          /* simple code is just the value */
3873       }
3874       else
3875       {
3876         r.exop = (Byte)e[*p - s] + 16 + 64; /* non-simple--look up in lists */
3877         r.base = d[*p++ - s];
3878       }
3879
3880       /* fill code-like entries with r */
3881       f = 1 << (k - w);
3882       for (j = i >> w; j < z; j += f)
3883         q[j] = r;
3884
3885       /* backwards increment the k-bit code i */
3886       for (j = 1 << (k - 1); i & j; j >>= 1)
3887         i ^= j;
3888       i ^= j;
3889
3890       /* backup over finished tables */
3891       while ((i & ((1 << w) - 1)) != x[h])
3892       {
3893         h--;                    /* don't need to update q */
3894         w -= l;
3895       }
3896     }
3897   }
3898
3899
3900   /* Return Z_BUF_ERROR if we were given an incomplete table */
3901   return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
3902 }
3903
3904
3905 local int inflate_trees_bits(c, bb, tb, z)
3906 uIntf *c;               /* 19 code lengths */
3907 uIntf *bb;              /* bits tree desired/actual depth */
3908 inflate_huft * FAR *tb; /* bits tree result */
3909 z_stream *z;            /* for zfree function */
3910 {
3911   int r;
3912
3913   r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, tb, bb, z);
3914   if (r == Z_DATA_ERROR)
3915     z->msg = "oversubscribed dynamic bit lengths tree";
3916   else if (r == Z_BUF_ERROR)
3917   {
3918     inflate_trees_free(*tb, z);
3919     z->msg = "incomplete dynamic bit lengths tree";
3920     r = Z_DATA_ERROR;
3921   }
3922   return r;
3923 }
3924
3925
3926 local int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, z)
3927 uInt nl;                /* number of literal/length codes */
3928 uInt nd;                /* number of distance codes */
3929 uIntf *c;               /* that many (total) code lengths */
3930 uIntf *bl;              /* literal desired/actual bit depth */
3931 uIntf *bd;              /* distance desired/actual bit depth */
3932 inflate_huft * FAR *tl; /* literal/length tree result */
3933 inflate_huft * FAR *td; /* distance tree result */
3934 z_stream *z;            /* for zfree function */
3935 {
3936   int r;
3937
3938   /* build literal/length tree */
3939   if ((r = huft_build(c, nl, 257, cplens, cplext, tl, bl, z)) != Z_OK)
3940   {
3941     if (r == Z_DATA_ERROR)
3942       z->msg = "oversubscribed literal/length tree";
3943     else if (r == Z_BUF_ERROR)
3944     {
3945       inflate_trees_free(*tl, z);
3946       z->msg = "incomplete literal/length tree";
3947       r = Z_DATA_ERROR;
3948     }
3949     return r;
3950   }
3951
3952   /* build distance tree */
3953   if ((r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, z)) != Z_OK)
3954   {
3955     if (r == Z_DATA_ERROR)
3956       z->msg = "oversubscribed literal/length tree";
3957     else if (r == Z_BUF_ERROR) {
3958 #ifdef PKZIP_BUG_WORKAROUND
3959       r = Z_OK;
3960     }
3961 #else
3962       inflate_trees_free(*td, z);
3963       z->msg = "incomplete literal/length tree";
3964       r = Z_DATA_ERROR;
3965     }
3966     inflate_trees_free(*tl, z);
3967     return r;
3968 #endif
3969   }
3970
3971   /* done */
3972   return Z_OK;
3973 }
3974
3975
3976 /* build fixed tables only once--keep them here */
3977 local int fixed_lock = 0;
3978 local int fixed_built = 0;
3979 #define FIXEDH 530      /* number of hufts used by fixed tables */
3980 local uInt fixed_left = FIXEDH;
3981 local inflate_huft fixed_mem[FIXEDH];
3982 local uInt fixed_bl;
3983 local uInt fixed_bd;
3984 local inflate_huft *fixed_tl;
3985 local inflate_huft *fixed_td;
3986
3987
3988 local voidpf falloc(q, n, s)
3989 voidpf q;        /* opaque pointer (not used) */
3990 uInt n;         /* number of items */
3991 uInt s;         /* size of item */
3992 {
3993   Assert(s == sizeof(inflate_huft) && n <= fixed_left,
3994          "inflate_trees falloc overflow");
3995   if (q) s++; /* to make some compilers happy */
3996   fixed_left -= n;
3997   return (voidpf)(fixed_mem + fixed_left);
3998 }
3999
4000
4001 local void ffree(q, p, n)
4002 voidpf q;
4003 voidpf p;
4004 uInt n;
4005 {
4006   Assert(0, "inflate_trees ffree called!");
4007   if (q) q = p; /* to make some compilers happy */
4008 }
4009
4010
4011 local int inflate_trees_fixed(bl, bd, tl, td)
4012 uIntf *bl;               /* literal desired/actual bit depth */
4013 uIntf *bd;               /* distance desired/actual bit depth */
4014 inflate_huft * FAR *tl;  /* literal/length tree result */
4015 inflate_huft * FAR *td;  /* distance tree result */
4016 {
4017   /* build fixed tables if not built already--lock out other instances */
4018   while (++fixed_lock > 1)
4019     fixed_lock--;
4020   if (!fixed_built)
4021   {
4022     int k;              /* temporary variable */
4023     unsigned c[288];    /* length list for huft_build */
4024     z_stream z;         /* for falloc function */
4025
4026     /* set up fake z_stream for memory routines */
4027     z.zalloc = falloc;
4028     z.zfree = ffree;
4029     z.opaque = Z_NULL;
4030
4031     /* literal table */
4032     for (k = 0; k < 144; k++)
4033       c[k] = 8;
4034     for (; k < 256; k++)
4035       c[k] = 9;
4036     for (; k < 280; k++)
4037       c[k] = 7;
4038     for (; k < 288; k++)
4039       c[k] = 8;
4040     fixed_bl = 7;
4041     huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, &z);
4042
4043     /* distance table */
4044     for (k = 0; k < 30; k++)
4045       c[k] = 5;
4046     fixed_bd = 5;
4047     huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, &z);
4048
4049     /* done */
4050     fixed_built = 1;
4051   }
4052   fixed_lock--;
4053   *bl = fixed_bl;
4054   *bd = fixed_bd;
4055   *tl = fixed_tl;
4056   *td = fixed_td;
4057   return Z_OK;
4058 }
4059
4060
4061 local int inflate_trees_free(t, z)
4062 inflate_huft *t;        /* table to free */
4063 z_stream *z;            /* for zfree function */
4064 /* Free the malloc'ed tables built by huft_build(), which makes a linked
4065    list of the tables it made, with the links in a dummy first entry of
4066    each table. */
4067 {
4068   register inflate_huft *p, *q;
4069
4070   /* Go through linked list, freeing from the malloced (t[-1]) address. */
4071   p = t;
4072   while (p != Z_NULL)
4073   {
4074     q = (--p)->next;
4075     ZFREE(z, p, p->word.Nalloc * sizeof(inflate_huft));
4076     p = q;
4077   } 
4078   return Z_OK;
4079 }
4080
4081 /*+++++*/
4082 /* infcodes.c -- process literals and length/distance pairs
4083  * Copyright (C) 1995 Mark Adler
4084  * For conditions of distribution and use, see copyright notice in zlib.h 
4085  */
4086
4087 /* simplify the use of the inflate_huft type with some defines */
4088 #define base more.Base
4089 #define next more.Next
4090 #define exop word.what.Exop
4091 #define bits word.what.Bits
4092
4093 /* inflate codes private state */
4094 struct inflate_codes_state {
4095
4096   /* mode */
4097   enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
4098       START,    /* x: set up for LEN */
4099       LEN,      /* i: get length/literal/eob next */
4100       LENEXT,   /* i: getting length extra (have base) */
4101       DIST,     /* i: get distance next */
4102       DISTEXT,  /* i: getting distance extra */
4103       COPY,     /* o: copying bytes in window, waiting for space */
4104       LIT,      /* o: got literal, waiting for output space */
4105       WASH,     /* o: got eob, possibly still output waiting */
4106       END,      /* x: got eob and all data flushed */
4107       BADCODE}  /* x: got error */
4108     mode;               /* current inflate_codes mode */
4109
4110   /* mode dependent information */
4111   uInt len;
4112   union {
4113     struct {
4114       inflate_huft *tree;       /* pointer into tree */
4115       uInt need;                /* bits needed */
4116     } code;             /* if LEN or DIST, where in tree */
4117     uInt lit;           /* if LIT, literal */
4118     struct {
4119       uInt get;                 /* bits to get for extra */
4120       uInt dist;                /* distance back to copy from */
4121     } copy;             /* if EXT or COPY, where and how much */
4122   } sub;                /* submode */
4123
4124   /* mode independent information */
4125   Byte lbits;           /* ltree bits decoded per branch */
4126   Byte dbits;           /* dtree bits decoder per branch */
4127   inflate_huft *ltree;          /* literal/length/eob tree */
4128   inflate_huft *dtree;          /* distance tree */
4129
4130 };
4131
4132
4133 local inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
4134 uInt bl, bd;
4135 inflate_huft *tl, *td;
4136 z_stream *z;
4137 {
4138   inflate_codes_statef *c;
4139
4140   if ((c = (inflate_codes_statef *)
4141        ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
4142   {
4143     c->mode = START;
4144     c->lbits = (Byte)bl;
4145     c->dbits = (Byte)bd;
4146     c->ltree = tl;
4147     c->dtree = td;
4148     Tracev((stderr, "inflate:       codes new\n"));
4149   }
4150   return c;
4151 }
4152
4153
4154 local int inflate_codes(s, z, r)
4155 inflate_blocks_statef *s;
4156 z_stream *z;
4157 int r;
4158 {
4159   uInt j;               /* temporary storage */
4160   inflate_huft *t;      /* temporary pointer */
4161   uInt e;               /* extra bits or operation */
4162   uLong b;              /* bit buffer */
4163   uInt k;               /* bits in bit buffer */
4164   Bytef *p;             /* input data pointer */
4165   uInt n;               /* bytes available there */
4166   Bytef *q;             /* output window write pointer */
4167   uInt m;               /* bytes to end of window or read pointer */
4168   Bytef *f;             /* pointer to copy strings from */
4169   inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */
4170
4171   /* copy input/output information to locals (UPDATE macro restores) */
4172   LOAD
4173
4174   /* process input and output based on current state */
4175   while (1) switch (c->mode)
4176   {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
4177     case START:         /* x: set up for LEN */
4178 #ifndef SLOW
4179       if (m >= 258 && n >= 10)
4180       {
4181         UPDATE
4182         r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
4183         LOAD
4184         if (r != Z_OK)
4185         {
4186           c->mode = r == Z_STREAM_END ? WASH : BADCODE;
4187           break;
4188         }
4189       }
4190 #endif /* !SLOW */
4191       c->sub.code.need = c->lbits;
4192       c->sub.code.tree = c->ltree;
4193       c->mode = LEN;
4194     case LEN:           /* i: get length/literal/eob next */
4195       j = c->sub.code.need;
4196       NEEDBITS(j)
4197       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
4198       DUMPBITS(t->bits)
4199       e = (uInt)(t->exop);
4200       if (e == 0)               /* literal */
4201       {
4202         c->sub.lit = t->base;
4203         Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
4204                  "inflate:         literal '%c'\n" :
4205                  "inflate:         literal 0x%02x\n", t->base));
4206         c->mode = LIT;
4207         break;
4208       }
4209       if (e & 16)               /* length */
4210       {
4211         c->sub.copy.get = e & 15;
4212         c->len = t->base;
4213         c->mode = LENEXT;
4214         break;
4215       }
4216       if ((e & 64) == 0)        /* next table */
4217       {
4218         c->sub.code.need = e;
4219         c->sub.code.tree = t->next;
4220         break;
4221       }
4222       if (e & 32)               /* end of block */
4223       {
4224         Tracevv((stderr, "inflate:         end of block\n"));
4225         c->mode = WASH;
4226         break;
4227       }
4228       c->mode = BADCODE;        /* invalid code */
4229       z->msg = "invalid literal/length code";
4230       r = Z_DATA_ERROR;
4231       LEAVE
4232     case LENEXT:        /* i: getting length extra (have base) */
4233       j = c->sub.copy.get;
4234       NEEDBITS(j)
4235       c->len += (uInt)b & inflate_mask[j];
4236       DUMPBITS(j)
4237       c->sub.code.need = c->dbits;
4238       c->sub.code.tree = c->dtree;
4239       Tracevv((stderr, "inflate:         length %u\n", c->len));
4240       c->mode = DIST;
4241     case DIST:          /* i: get distance next */
4242       j = c->sub.code.need;
4243       NEEDBITS(j)
4244       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
4245       DUMPBITS(t->bits)
4246       e = (uInt)(t->exop);
4247       if (e & 16)               /* distance */
4248       {
4249         c->sub.copy.get = e & 15;
4250         c->sub.copy.dist = t->base;
4251         c->mode = DISTEXT;
4252         break;
4253       }
4254       if ((e & 64) == 0)        /* next table */
4255       {
4256         c->sub.code.need = e;
4257         c->sub.code.tree = t->next;
4258         break;
4259       }
4260       c->mode = BADCODE;        /* invalid code */
4261       z->msg = "invalid distance code";
4262       r = Z_DATA_ERROR;
4263       LEAVE
4264     case DISTEXT:       /* i: getting distance extra */
4265       j = c->sub.copy.get;
4266       NEEDBITS(j)
4267       c->sub.copy.dist += (uInt)b & inflate_mask[j];
4268       DUMPBITS(j)
4269       Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
4270       c->mode = COPY;
4271     case COPY:          /* o: copying bytes in window, waiting for space */
4272 #ifndef __TURBOC__ /* Turbo C bug for following expression */
4273       f = (uInt)(q - s->window) < c->sub.copy.dist ?
4274           s->end - (c->sub.copy.dist - (q - s->window)) :
4275           q - c->sub.copy.dist;
4276 #else
4277       f = q - c->sub.copy.dist;
4278       if ((uInt)(q - s->window) < c->sub.copy.dist)
4279         f = s->end - (c->sub.copy.dist - (q - s->window));
4280 #endif
4281       while (c->len)
4282       {
4283         NEEDOUT
4284         OUTBYTE(*f++)
4285         if (f == s->end)
4286           f = s->window;
4287         c->len--;
4288       }
4289       c->mode = START;
4290       break;
4291     case LIT:           /* o: got literal, waiting for output space */
4292       NEEDOUT
4293       OUTBYTE(c->sub.lit)
4294       c->mode = START;
4295       break;
4296     case WASH:          /* o: got eob, possibly more output */
4297       FLUSH
4298       if (s->read != s->write)
4299         LEAVE
4300       c->mode = END;
4301     case END:
4302       r = Z_STREAM_END;
4303       LEAVE
4304     case BADCODE:       /* x: got error */
4305       r = Z_DATA_ERROR;
4306       LEAVE
4307     default:
4308       r = Z_STREAM_ERROR;
4309       LEAVE
4310   }
4311 }
4312
4313
4314 local void inflate_codes_free(c, z)
4315 inflate_codes_statef *c;
4316 z_stream *z;
4317 {
4318   ZFREE(z, c, sizeof(struct inflate_codes_state));
4319   Tracev((stderr, "inflate:       codes free\n"));
4320 }
4321
4322 /*+++++*/
4323 /* inflate_util.c -- data and routines common to blocks and codes
4324  * Copyright (C) 1995 Mark Adler
4325  * For conditions of distribution and use, see copyright notice in zlib.h 
4326  */
4327
4328 /* copy as much as possible from the sliding window to the output area */
4329 local int inflate_flush(s, z, r)
4330 inflate_blocks_statef *s;
4331 z_stream *z;
4332 int r;
4333 {
4334   uInt n;
4335   Bytef *p, *q;
4336
4337   /* local copies of source and destination pointers */
4338   p = z->next_out;
4339   q = s->read;
4340
4341   /* compute number of bytes to copy as far as end of window */
4342   n = (uInt)((q <= s->write ? s->write : s->end) - q);
4343   if (n > z->avail_out) n = z->avail_out;
4344   if (n && r == Z_BUF_ERROR) r = Z_OK;
4345
4346   /* update counters */
4347   z->avail_out -= n;
4348   z->total_out += n;
4349
4350   /* update check information */
4351   if (s->checkfn != Z_NULL)
4352     s->check = (*s->checkfn)(s->check, q, n);
4353
4354   /* copy as far as end of window */
4355   if (p != NULL) {
4356     zmemcpy(p, q, n);
4357     p += n;
4358   }
4359   q += n;
4360
4361   /* see if more to copy at beginning of window */
4362   if (q == s->end)
4363   {
4364     /* wrap pointers */
4365     q = s->window;
4366     if (s->write == s->end)
4367       s->write = s->window;
4368
4369     /* compute bytes to copy */
4370     n = (uInt)(s->write - q);
4371     if (n > z->avail_out) n = z->avail_out;
4372     if (n && r == Z_BUF_ERROR) r = Z_OK;
4373
4374     /* update counters */
4375     z->avail_out -= n;
4376     z->total_out += n;
4377
4378     /* update check information */
4379     if (s->checkfn != Z_NULL)
4380       s->check = (*s->checkfn)(s->check, q, n);
4381
4382     /* copy */
4383     if (p != NULL) {
4384       zmemcpy(p, q, n);
4385       p += n;
4386     }
4387     q += n;
4388   }
4389
4390   /* update pointers */
4391   z->next_out = p;
4392   s->read = q;
4393
4394   /* done */
4395   return r;
4396 }
4397
4398
4399 /*+++++*/
4400 /* inffast.c -- process literals and length/distance pairs fast
4401  * Copyright (C) 1995 Mark Adler
4402  * For conditions of distribution and use, see copyright notice in zlib.h 
4403  */
4404
4405 /* simplify the use of the inflate_huft type with some defines */
4406 #define base more.Base
4407 #define next more.Next
4408 #define exop word.what.Exop
4409 #define bits word.what.Bits
4410
4411 /* macros for bit input with no checking and for returning unused bytes */
4412 #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
4413 #define UNGRAB {n+=(c=k>>3);p-=c;k&=7;}
4414
4415 /* Called with number of bytes left to write in window at least 258
4416    (the maximum string length) and number of input bytes available
4417    at least ten.  The ten bytes are six bytes for the longest length/
4418    distance pair plus four bytes for overloading the bit buffer. */
4419
4420 local int inflate_fast(bl, bd, tl, td, s, z)
4421 uInt bl, bd;
4422 inflate_huft *tl, *td;
4423 inflate_blocks_statef *s;
4424 z_stream *z;
4425 {
4426   inflate_huft *t;      /* temporary pointer */
4427   uInt e;               /* extra bits or operation */
4428   uLong b;              /* bit buffer */
4429   uInt k;               /* bits in bit buffer */
4430   Bytef *p;             /* input data pointer */
4431   uInt n;               /* bytes available there */
4432   Bytef *q;             /* output window write pointer */
4433   uInt m;               /* bytes to end of window or read pointer */
4434   uInt ml;              /* mask for literal/length tree */
4435   uInt md;              /* mask for distance tree */
4436   uInt c;               /* bytes to copy */
4437   uInt d;               /* distance back to copy from */
4438   Bytef *r;             /* copy source pointer */
4439
4440   /* load input, output, bit values */
4441   LOAD
4442
4443   /* initialize masks */
4444   ml = inflate_mask[bl];
4445   md = inflate_mask[bd];
4446
4447   /* do until not enough input or output space for fast loop */
4448   do {                          /* assume called with m >= 258 && n >= 10 */
4449     /* get literal/length code */
4450     GRABBITS(20)                /* max bits for literal/length code */
4451     if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
4452     {
4453       DUMPBITS(t->bits)
4454       Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
4455                 "inflate:         * literal '%c'\n" :
4456                 "inflate:         * literal 0x%02x\n", t->base));
4457       *q++ = (Byte)t->base;
4458       m--;
4459       continue;
4460     }
4461     do {
4462       DUMPBITS(t->bits)
4463       if (e & 16)
4464       {
4465         /* get extra bits for length */
4466         e &= 15;
4467         c = t->base + ((uInt)b & inflate_mask[e]);
4468         DUMPBITS(e)
4469         Tracevv((stderr, "inflate:         * length %u\n", c));
4470
4471         /* decode distance base of block to copy */
4472         GRABBITS(15);           /* max bits for distance code */
4473         e = (t = td + ((uInt)b & md))->exop;
4474         do {
4475           DUMPBITS(t->bits)
4476           if (e & 16)
4477           {
4478             /* get extra bits to add to distance base */
4479             e &= 15;
4480             GRABBITS(e)         /* get extra bits (up to 13) */
4481             d = t->base + ((uInt)b & inflate_mask[e]);
4482             DUMPBITS(e)
4483             Tracevv((stderr, "inflate:         * distance %u\n", d));
4484
4485             /* do the copy */
4486             m -= c;
4487             if ((uInt)(q - s->window) >= d)     /* offset before dest */
4488             {                                   /*  just copy */
4489               r = q - d;
4490               *q++ = *r++;  c--;        /* minimum count is three, */
4491               *q++ = *r++;  c--;        /*  so unroll loop a little */
4492             }
4493             else                        /* else offset after destination */
4494             {
4495               e = d - (q - s->window);  /* bytes from offset to end */
4496               r = s->end - e;           /* pointer to offset */
4497               if (c > e)                /* if source crosses, */
4498               {
4499                 c -= e;                 /* copy to end of window */
4500                 do {
4501                   *q++ = *r++;
4502                 } while (--e);
4503                 r = s->window;          /* copy rest from start of window */
4504               }
4505             }
4506             do {                        /* copy all or what's left */
4507               *q++ = *r++;
4508             } while (--c);
4509             break;
4510           }
4511           else if ((e & 64) == 0)
4512             e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop;
4513           else
4514           {
4515             z->msg = "invalid distance code";
4516             UNGRAB
4517             UPDATE
4518             return Z_DATA_ERROR;
4519           }
4520         } while (1);
4521         break;
4522       }
4523       if ((e & 64) == 0)
4524       {
4525         if ((e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop) == 0)
4526         {
4527           DUMPBITS(t->bits)
4528           Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
4529                     "inflate:         * literal '%c'\n" :
4530                     "inflate:         * literal 0x%02x\n", t->base));
4531           *q++ = (Byte)t->base;
4532           m--;
4533           break;
4534         }
4535       }
4536       else if (e & 32)
4537       {
4538         Tracevv((stderr, "inflate:         * end of block\n"));
4539         UNGRAB
4540         UPDATE
4541         return Z_STREAM_END;
4542       }
4543       else
4544       {
4545         z->msg = "invalid literal/length code";
4546         UNGRAB
4547         UPDATE
4548         return Z_DATA_ERROR;
4549       }
4550     } while (1);
4551   } while (m >= 258 && n >= 10);
4552
4553   /* not enough input or output--restore pointers and return */
4554   UNGRAB
4555   UPDATE
4556   return Z_OK;
4557 }
4558
4559
4560 /*+++++*/
4561 /* zutil.c -- target dependent utility functions for the compression library
4562  * Copyright (C) 1995 Jean-loup Gailly.
4563  * For conditions of distribution and use, see copyright notice in zlib.h 
4564  */
4565
4566 /* From: zutil.c,v 1.8 1995/05/03 17:27:12 jloup Exp */
4567
4568 char *zlib_version = ZLIB_VERSION;
4569
4570 char *z_errmsg[] = {
4571 "stream end",          /* Z_STREAM_END    1 */
4572 "",                    /* Z_OK            0 */
4573 "file error",          /* Z_ERRNO        (-1) */
4574 "stream error",        /* Z_STREAM_ERROR (-2) */
4575 "data error",          /* Z_DATA_ERROR   (-3) */
4576 "insufficient memory", /* Z_MEM_ERROR    (-4) */
4577 "buffer error",        /* Z_BUF_ERROR    (-5) */
4578 ""};
4579
4580
4581 /*+++++*/
4582 /* adler32.c -- compute the Adler-32 checksum of a data stream
4583  * Copyright (C) 1995 Mark Adler
4584  * For conditions of distribution and use, see copyright notice in zlib.h 
4585  */
4586
4587 /* From: adler32.c,v 1.6 1995/05/03 17:27:08 jloup Exp */
4588
4589 #define BASE 65521L /* largest prime smaller than 65536 */
4590 #define NMAX 5552
4591 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
4592
4593 #define DO1(buf)  {s1 += *buf++; s2 += s1;}
4594 #define DO2(buf)  DO1(buf); DO1(buf);
4595 #define DO4(buf)  DO2(buf); DO2(buf);
4596 #define DO8(buf)  DO4(buf); DO4(buf);
4597 #define DO16(buf) DO8(buf); DO8(buf);
4598
4599 /* ========================================================================= */
4600 uLong adler32(adler, buf, len)
4601     uLong adler;
4602     Bytef *buf;
4603     uInt len;
4604 {
4605     unsigned long s1 = adler & 0xffff;
4606     unsigned long s2 = (adler >> 16) & 0xffff;
4607     int k;
4608
4609     if (buf == Z_NULL) return 1L;
4610
4611     while (len > 0) {
4612         k = len < NMAX ? len : NMAX;
4613         len -= k;
4614         while (k >= 16) {
4615             DO16(buf);
4616             k -= 16;
4617         }
4618         if (k != 0) do {
4619             DO1(buf);
4620         } while (--k);
4621         s1 %= BASE;
4622         s2 %= BASE;
4623     }
4624     return (s2 << 16) | s1;
4625 }