Hex Artifact Content

Not logged in

Artifact 33c4c820010d3bd4e664df0897c97df7552f9337:


0000: 2f 2a 20 74 72 65 65 73 2e 63 20 2d 2d 20 6f 75  /* trees.c -- ou
0010: 74 70 75 74 20 64 65 66 6c 61 74 65 64 20 64 61  tput deflated da
0020: 74 61 20 75 73 69 6e 67 20 48 75 66 66 6d 61 6e  ta using Huffman
0030: 20 63 6f 64 69 6e 67 0a 20 2a 20 43 6f 70 79 72   coding. * Copyr
0040: 69 67 68 74 20 28 43 29 20 31 39 39 35 2d 31 39  ight (C) 1995-19
0050: 39 38 20 4a 65 61 6e 2d 6c 6f 75 70 20 47 61 69  98 Jean-loup Gai
0060: 6c 6c 79 0a 20 2a 20 46 6f 72 20 63 6f 6e 64 69  lly. * For condi
0070: 74 69 6f 6e 73 20 6f 66 20 64 69 73 74 72 69 62  tions of distrib
0080: 75 74 69 6f 6e 20 61 6e 64 20 75 73 65 2c 20 73  ution and use, s
0090: 65 65 20 63 6f 70 79 72 69 67 68 74 20 6e 6f 74  ee copyright not
00a0: 69 63 65 20 69 6e 20 7a 6c 69 62 2e 68 20 0a 20  ice in zlib.h . 
00b0: 2a 2f 0a 0a 2f 2a 0a 20 2a 20 20 41 4c 47 4f 52  */../*. *  ALGOR
00c0: 49 54 48 4d 0a 20 2a 0a 20 2a 20 20 20 20 20 20  ITHM. *. *      
00d0: 54 68 65 20 22 64 65 66 6c 61 74 69 6f 6e 22 20  The "deflation" 
00e0: 70 72 6f 63 65 73 73 20 75 73 65 73 20 73 65 76  process uses sev
00f0: 65 72 61 6c 20 48 75 66 66 6d 61 6e 20 74 72 65  eral Huffman tre
0100: 65 73 2e 20 54 68 65 20 6d 6f 72 65 0a 20 2a 20  es. The more. * 
0110: 20 20 20 20 20 63 6f 6d 6d 6f 6e 20 73 6f 75 72       common sour
0120: 63 65 20 76 61 6c 75 65 73 20 61 72 65 20 72 65  ce values are re
0130: 70 72 65 73 65 6e 74 65 64 20 62 79 20 73 68 6f  presented by sho
0140: 72 74 65 72 20 62 69 74 20 73 65 71 75 65 6e 63  rter bit sequenc
0150: 65 73 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 20 45  es.. *. *      E
0160: 61 63 68 20 63 6f 64 65 20 74 72 65 65 20 69 73  ach code tree is
0170: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 6f 6d   stored in a com
0180: 70 72 65 73 73 65 64 20 66 6f 72 6d 20 77 68 69  pressed form whi
0190: 63 68 20 69 73 20 69 74 73 65 6c 66 0a 20 2a 20  ch is itself. * 
01a0: 61 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  a Huffman encodi
01b0: 6e 67 20 6f 66 20 74 68 65 20 6c 65 6e 67 74 68  ng of the length
01c0: 73 20 6f 66 20 61 6c 6c 20 74 68 65 20 63 6f 64  s of all the cod
01d0: 65 20 73 74 72 69 6e 67 73 20 28 69 6e 0a 20 2a  e strings (in. *
01e0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
01f0: 20 62 79 20 73 6f 75 72 63 65 20 76 61 6c 75 65   by source value
0200: 73 29 2e 20 20 54 68 65 20 61 63 74 75 61 6c 20  s).  The actual 
0210: 63 6f 64 65 20 73 74 72 69 6e 67 73 20 61 72 65  code strings are
0220: 0a 20 2a 20 72 65 63 6f 6e 73 74 72 75 63 74 65  . * reconstructe
0230: 64 20 66 72 6f 6d 20 74 68 65 20 6c 65 6e 67 74  d from the lengt
0240: 68 73 20 69 6e 20 74 68 65 20 69 6e 66 6c 61 74  hs in the inflat
0250: 65 20 70 72 6f 63 65 73 73 2c 20 61 73 20 64 65  e process, as de
0260: 73 63 72 69 62 65 64 0a 20 2a 20 69 6e 20 74 68  scribed. * in th
0270: 65 20 64 65 66 6c 61 74 65 20 73 70 65 63 69 66  e deflate specif
0280: 69 63 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 20  ication.. *. *  
0290: 52 45 46 45 52 45 4e 43 45 53 0a 20 2a 0a 20 2a  REFERENCES. *. *
02a0: 20 20 20 20 20 20 44 65 75 74 73 63 68 2c 20 4c        Deutsch, L
02b0: 2e 50 2e 2c 22 27 44 65 66 6c 61 74 65 27 20 43  .P.,"'Deflate' C
02c0: 6f 6d 70 72 65 73 73 65 64 20 44 61 74 61 20 46  ompressed Data F
02d0: 6f 72 6d 61 74 20 53 70 65 63 69 66 69 63 61 74  ormat Specificat
02e0: 69 6f 6e 22 2e 0a 20 2a 20 20 20 20 20 20 41 76  ion".. *      Av
02f0: 61 69 6c 61 62 6c 65 20 69 6e 20 66 74 70 2e 75  ailable in ftp.u
0300: 75 2e 6e 65 74 3a 2f 70 75 62 2f 61 72 63 68 69  u.net:/pub/archi
0310: 76 69 6e 67 2f 7a 69 70 2f 64 6f 63 2f 64 65 66  ving/zip/doc/def
0320: 6c 61 74 65 2d 31 2e 31 2e 64 6f 63 0a 20 2a 0a  late-1.1.doc. *.
0330: 20 2a 20 20 20 20 20 20 53 74 6f 72 65 72 2c 20   *      Storer, 
0340: 4a 61 6d 65 73 20 41 2e 0a 20 2a 20 20 20 20 20  James A.. *     
0350: 20 20 20 20 20 44 61 74 61 20 43 6f 6d 70 72 65       Data Compre
0360: 73 73 69 6f 6e 3a 20 20 4d 65 74 68 6f 64 73 20  ssion:  Methods 
0370: 61 6e 64 20 54 68 65 6f 72 79 2c 20 70 70 2e 20  and Theory, pp. 
0380: 34 39 2d 35 30 2e 0a 20 2a 20 20 20 20 20 20 20  49-50.. *       
0390: 20 20 20 43 6f 6d 70 75 74 65 72 20 53 63 69 65     Computer Scie
03a0: 6e 63 65 20 50 72 65 73 73 2c 20 31 39 38 38 2e  nce Press, 1988.
03b0: 20 20 49 53 42 4e 20 30 2d 37 31 36 37 2d 38 31    ISBN 0-7167-81
03c0: 35 36 2d 35 2e 0a 20 2a 0a 20 2a 20 20 20 20 20  56-5.. *. *     
03d0: 20 53 65 64 67 65 77 69 63 6b 2c 20 52 2e 0a 20   Sedgewick, R.. 
03e0: 2a 20 20 20 20 20 20 20 20 20 20 41 6c 67 6f 72  *          Algor
03f0: 69 74 68 6d 73 2c 20 70 32 39 30 2e 0a 20 2a 20  ithms, p290.. * 
0400: 20 20 20 20 20 20 20 20 20 41 64 64 69 73 6f 6e           Addison
0410: 2d 57 65 73 6c 65 79 2c 20 31 39 38 33 2e 20 49  -Wesley, 1983. I
0420: 53 42 4e 20 30 2d 32 30 31 2d 30 36 36 37 32 2d  SBN 0-201-06672-
0430: 36 2e 0a 20 2a 2f 0a 0a 2f 2a 20 40 28 23 29 20  6.. */../* @(#) 
0440: 24 49 64 24 20 2a 2f 0a 0a 2f 2a 20 23 64 65 66  $Id$ */../* #def
0450: 69 6e 65 20 47 45 4e 5f 54 52 45 45 53 5f 48 20  ine GEN_TREES_H 
0460: 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 64 65  */..#include "de
0470: 66 6c 61 74 65 2e 68 22 0a 0a 23 69 66 64 65 66  flate.h"..#ifdef
0480: 20 44 45 42 55 47 0a 23 20 20 69 6e 63 6c 75 64   DEBUG.#  includ
0490: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
04a0: 69 66 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d  if../* =========
04b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04f0: 3d 3d 0a 20 2a 20 43 6f 6e 73 74 61 6e 74 73 0a  ==. * Constants.
0500: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4d 41 58   */..#define MAX
0510: 5f 42 4c 5f 42 49 54 53 20 37 0a 2f 2a 20 42 69  _BL_BITS 7./* Bi
0520: 74 20 6c 65 6e 67 74 68 20 63 6f 64 65 73 20 6d  t length codes m
0530: 75 73 74 20 6e 6f 74 20 65 78 63 65 65 64 20 4d  ust not exceed M
0540: 41 58 5f 42 4c 5f 42 49 54 53 20 62 69 74 73 20  AX_BL_BITS bits 
0550: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 45 4e 44 5f  */..#define END_
0560: 42 4c 4f 43 4b 20 32 35 36 0a 2f 2a 20 65 6e 64  BLOCK 256./* end
0570: 20 6f 66 20 62 6c 6f 63 6b 20 6c 69 74 65 72 61   of block litera
0580: 6c 20 63 6f 64 65 20 2a 2f 0a 0a 23 64 65 66 69  l code */..#defi
0590: 6e 65 20 52 45 50 5f 33 5f 36 20 20 20 20 20 20  ne REP_3_6      
05a0: 31 36 0a 2f 2a 20 72 65 70 65 61 74 20 70 72 65  16./* repeat pre
05b0: 76 69 6f 75 73 20 62 69 74 20 6c 65 6e 67 74 68  vious bit length
05c0: 20 33 2d 36 20 74 69 6d 65 73 20 28 32 20 62 69   3-6 times (2 bi
05d0: 74 73 20 6f 66 20 72 65 70 65 61 74 20 63 6f 75  ts of repeat cou
05e0: 6e 74 29 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  nt) */..#define 
05f0: 52 45 50 5a 5f 33 5f 31 30 20 20 20 20 31 37 0a  REPZ_3_10    17.
0600: 2f 2a 20 72 65 70 65 61 74 20 61 20 7a 65 72 6f  /* repeat a zero
0610: 20 6c 65 6e 67 74 68 20 33 2d 31 30 20 74 69 6d   length 3-10 tim
0620: 65 73 20 20 28 33 20 62 69 74 73 20 6f 66 20 72  es  (3 bits of r
0630: 65 70 65 61 74 20 63 6f 75 6e 74 29 20 2a 2f 0a  epeat count) */.
0640: 0a 23 64 65 66 69 6e 65 20 52 45 50 5a 5f 31 31  .#define REPZ_11
0650: 5f 31 33 38 20 20 31 38 0a 2f 2a 20 72 65 70 65  _138  18./* repe
0660: 61 74 20 61 20 7a 65 72 6f 20 6c 65 6e 67 74 68  at a zero length
0670: 20 31 31 2d 31 33 38 20 74 69 6d 65 73 20 20 28   11-138 times  (
0680: 37 20 62 69 74 73 20 6f 66 20 72 65 70 65 61 74  7 bits of repeat
0690: 20 63 6f 75 6e 74 29 20 2a 2f 0a 0a 6c 6f 63 61   count) */..loca
06a0: 6c 20 63 6f 6e 73 74 20 69 6e 74 20 65 78 74 72  l const int extr
06b0: 61 5f 6c 62 69 74 73 5b 4c 45 4e 47 54 48 5f 43  a_lbits[LENGTH_C
06c0: 4f 44 45 53 5d 20 2f 2a 20 65 78 74 72 61 20 62  ODES] /* extra b
06d0: 69 74 73 20 66 6f 72 20 65 61 63 68 20 6c 65 6e  its for each len
06e0: 67 74 68 20 63 6f 64 65 20 2a 2f 0a 20 20 20 3d  gth code */.   =
06f0: 20 7b 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c   {0,0,0,0,0,0,0,
0700: 30 2c 31 2c 31 2c 31 2c 31 2c 32 2c 32 2c 32 2c  0,1,1,1,1,2,2,2,
0710: 32 2c 33 2c 33 2c 33 2c 33 2c 34 2c 34 2c 34 2c  2,3,3,3,3,4,4,4,
0720: 34 2c 35 2c 35 2c 35 2c 35 2c 30 7d 3b 0a 0a 6c  4,5,5,5,5,0};..l
0730: 6f 63 61 6c 20 63 6f 6e 73 74 20 69 6e 74 20 65  ocal const int e
0740: 78 74 72 61 5f 64 62 69 74 73 5b 44 5f 43 4f 44  xtra_dbits[D_COD
0750: 45 53 5d 20 2f 2a 20 65 78 74 72 61 20 62 69 74  ES] /* extra bit
0760: 73 20 66 6f 72 20 65 61 63 68 20 64 69 73 74 61  s for each dista
0770: 6e 63 65 20 63 6f 64 65 20 2a 2f 0a 20 20 20 3d  nce code */.   =
0780: 20 7b 30 2c 30 2c 30 2c 30 2c 31 2c 31 2c 32 2c   {0,0,0,0,1,1,2,
0790: 32 2c 33 2c 33 2c 34 2c 34 2c 35 2c 35 2c 36 2c  2,3,3,4,4,5,5,6,
07a0: 36 2c 37 2c 37 2c 38 2c 38 2c 39 2c 39 2c 31 30  6,7,7,8,8,9,9,10
07b0: 2c 31 30 2c 31 31 2c 31 31 2c 31 32 2c 31 32 2c  ,10,11,11,12,12,
07c0: 31 33 2c 31 33 7d 3b 0a 0a 6c 6f 63 61 6c 20 63  13,13};..local c
07d0: 6f 6e 73 74 20 69 6e 74 20 65 78 74 72 61 5f 62  onst int extra_b
07e0: 6c 62 69 74 73 5b 42 4c 5f 43 4f 44 45 53 5d 2f  lbits[BL_CODES]/
07f0: 2a 20 65 78 74 72 61 20 62 69 74 73 20 66 6f 72  * extra bits for
0800: 20 65 61 63 68 20 62 69 74 20 6c 65 6e 67 74 68   each bit length
0810: 20 63 6f 64 65 20 2a 2f 0a 20 20 20 3d 20 7b 30   code */.   = {0
0820: 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30  ,0,0,0,0,0,0,0,0
0830: 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 32  ,0,0,0,0,0,0,0,2
0840: 2c 33 2c 37 7d 3b 0a 0a 6c 6f 63 61 6c 20 63 6f  ,3,7};..local co
0850: 6e 73 74 20 75 63 68 20 62 6c 5f 6f 72 64 65 72  nst uch bl_order
0860: 5b 42 4c 5f 43 4f 44 45 53 5d 0a 20 20 20 3d 20  [BL_CODES].   = 
0870: 7b 31 36 2c 31 37 2c 31 38 2c 30 2c 38 2c 37 2c  {16,17,18,0,8,7,
0880: 39 2c 36 2c 31 30 2c 35 2c 31 31 2c 34 2c 31 32  9,6,10,5,11,4,12
0890: 2c 33 2c 31 33 2c 32 2c 31 34 2c 31 2c 31 35 7d  ,3,13,2,14,1,15}
08a0: 3b 0a 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 73  ;./* The lengths
08b0: 20 6f 66 20 74 68 65 20 62 69 74 20 6c 65 6e 67   of the bit leng
08c0: 74 68 20 63 6f 64 65 73 20 61 72 65 20 73 65 6e  th codes are sen
08d0: 74 20 69 6e 20 6f 72 64 65 72 20 6f 66 20 64 65  t in order of de
08e0: 63 72 65 61 73 69 6e 67 0a 20 2a 20 70 72 6f 62  creasing. * prob
08f0: 61 62 69 6c 69 74 79 2c 20 74 6f 20 61 76 6f 69  ability, to avoi
0900: 64 20 74 72 61 6e 73 6d 69 74 74 69 6e 67 20 74  d transmitting t
0910: 68 65 20 6c 65 6e 67 74 68 73 20 66 6f 72 20 75  he lengths for u
0920: 6e 75 73 65 64 20 62 69 74 20 6c 65 6e 67 74 68  nused bit length
0930: 20 63 6f 64 65 73 2e 0a 20 2a 2f 0a 0a 23 64 65   codes.. */..#de
0940: 66 69 6e 65 20 42 75 66 5f 73 69 7a 65 20 28 38  fine Buf_size (8
0950: 20 2a 20 32 2a 73 69 7a 65 6f 66 28 63 68 61 72   * 2*sizeof(char
0960: 29 29 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  ))./* Number of 
0970: 62 69 74 73 20 75 73 65 64 20 77 69 74 68 69 6e  bits used within
0980: 20 62 69 5f 62 75 66 2e 20 28 62 69 5f 62 75 66   bi_buf. (bi_buf
0990: 20 6d 69 67 68 74 20 62 65 20 69 6d 70 6c 65 6d   might be implem
09a0: 65 6e 74 65 64 20 6f 6e 0a 20 2a 20 6d 6f 72 65  ented on. * more
09b0: 20 74 68 61 6e 20 31 36 20 62 69 74 73 20 6f 6e   than 16 bits on
09c0: 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e 29 0a   some systems.).
09d0: 20 2a 2f 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d   */../* ========
09e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
09f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a20: 3d 3d 3d 0a 20 2a 20 4c 6f 63 61 6c 20 64 61 74  ===. * Local dat
0a30: 61 2e 20 54 68 65 73 65 20 61 72 65 20 69 6e 69  a. These are ini
0a40: 74 69 61 6c 69 7a 65 64 20 6f 6e 6c 79 20 6f 6e  tialized only on
0a50: 63 65 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  ce.. */..#define
0a60: 20 44 49 53 54 5f 43 4f 44 45 5f 4c 45 4e 20 20   DIST_CODE_LEN  
0a70: 35 31 32 20 2f 2a 20 73 65 65 20 64 65 66 69 6e  512 /* see defin
0a80: 69 74 69 6f 6e 20 6f 66 20 61 72 72 61 79 20 64  ition of array d
0a90: 69 73 74 5f 63 6f 64 65 20 62 65 6c 6f 77 20 2a  ist_code below *
0aa0: 2f 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 47  /..#if defined(G
0ab0: 45 4e 5f 54 52 45 45 53 5f 48 29 20 7c 7c 20 21  EN_TREES_H) || !
0ac0: 64 65 66 69 6e 65 64 28 53 54 44 43 29 0a 2f 2a  defined(STDC)./*
0ad0: 20 6e 6f 6e 20 41 4e 53 49 20 63 6f 6d 70 69 6c   non ANSI compil
0ae0: 65 72 73 20 6d 61 79 20 6e 6f 74 20 61 63 63 65  ers may not acce
0af0: 70 74 20 74 72 65 65 73 2e 68 20 2a 2f 0a 0a 6c  pt trees.h */..l
0b00: 6f 63 61 6c 20 63 74 5f 64 61 74 61 20 73 74 61  ocal ct_data sta
0b10: 74 69 63 5f 6c 74 72 65 65 5b 4c 5f 43 4f 44 45  tic_ltree[L_CODE
0b20: 53 2b 32 5d 3b 0a 2f 2a 20 54 68 65 20 73 74 61  S+2];./* The sta
0b30: 74 69 63 20 6c 69 74 65 72 61 6c 20 74 72 65 65  tic literal tree
0b40: 2e 20 53 69 6e 63 65 20 74 68 65 20 62 69 74 20  . Since the bit 
0b50: 6c 65 6e 67 74 68 73 20 61 72 65 20 69 6d 70 6f  lengths are impo
0b60: 73 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  sed, there is no
0b70: 0a 20 2a 20 6e 65 65 64 20 66 6f 72 20 74 68 65  . * need for the
0b80: 20 4c 5f 43 4f 44 45 53 20 65 78 74 72 61 20 63   L_CODES extra c
0b90: 6f 64 65 73 20 75 73 65 64 20 64 75 72 69 6e 67  odes used during
0ba0: 20 68 65 61 70 20 63 6f 6e 73 74 72 75 63 74 69   heap constructi
0bb0: 6f 6e 2e 20 48 6f 77 65 76 65 72 0a 20 2a 20 54  on. However. * T
0bc0: 68 65 20 63 6f 64 65 73 20 32 38 36 20 61 6e 64  he codes 286 and
0bd0: 20 32 38 37 20 61 72 65 20 6e 65 65 64 65 64 20   287 are needed 
0be0: 74 6f 20 62 75 69 6c 64 20 61 20 63 61 6e 6f 6e  to build a canon
0bf0: 69 63 61 6c 20 74 72 65 65 20 28 73 65 65 20 5f  ical tree (see _
0c00: 74 72 5f 69 6e 69 74 0a 20 2a 20 62 65 6c 6f 77  tr_init. * below
0c10: 29 2e 0a 20 2a 2f 0a 0a 6c 6f 63 61 6c 20 63 74  ).. */..local ct
0c20: 5f 64 61 74 61 20 73 74 61 74 69 63 5f 64 74 72  _data static_dtr
0c30: 65 65 5b 44 5f 43 4f 44 45 53 5d 3b 0a 2f 2a 20  ee[D_CODES];./* 
0c40: 54 68 65 20 73 74 61 74 69 63 20 64 69 73 74 61  The static dista
0c50: 6e 63 65 20 74 72 65 65 2e 20 28 41 63 74 75 61  nce tree. (Actua
0c60: 6c 6c 79 20 61 20 74 72 69 76 69 61 6c 20 74 72  lly a trivial tr
0c70: 65 65 20 73 69 6e 63 65 20 61 6c 6c 20 63 6f 64  ee since all cod
0c80: 65 73 20 75 73 65 0a 20 2a 20 35 20 62 69 74 73  es use. * 5 bits
0c90: 2e 29 0a 20 2a 2f 0a 0a 75 63 68 20 5f 64 69 73  .). */..uch _dis
0ca0: 74 5f 63 6f 64 65 5b 44 49 53 54 5f 43 4f 44 45  t_code[DIST_CODE
0cb0: 5f 4c 45 4e 5d 3b 0a 2f 2a 20 44 69 73 74 61 6e  _LEN];./* Distan
0cc0: 63 65 20 63 6f 64 65 73 2e 20 54 68 65 20 66 69  ce codes. The fi
0cd0: 72 73 74 20 32 35 36 20 76 61 6c 75 65 73 20 63  rst 256 values c
0ce0: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65  orrespond to the
0cf0: 20 64 69 73 74 61 6e 63 65 73 0a 20 2a 20 33 20   distances. * 3 
0d00: 2e 2e 20 32 35 38 2c 20 74 68 65 20 6c 61 73 74  .. 258, the last
0d10: 20 32 35 36 20 76 61 6c 75 65 73 20 63 6f 72 72   256 values corr
0d20: 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 74 6f  espond to the to
0d30: 70 20 38 20 62 69 74 73 20 6f 66 0a 20 2a 20 74  p 8 bits of. * t
0d40: 68 65 20 31 35 20 62 69 74 20 64 69 73 74 61 6e  he 15 bit distan
0d50: 63 65 73 2e 0a 20 2a 2f 0a 0a 75 63 68 20 5f 6c  ces.. */..uch _l
0d60: 65 6e 67 74 68 5f 63 6f 64 65 5b 4d 41 58 5f 4d  ength_code[MAX_M
0d70: 41 54 43 48 2d 4d 49 4e 5f 4d 41 54 43 48 2b 31  ATCH-MIN_MATCH+1
0d80: 5d 3b 0a 2f 2a 20 6c 65 6e 67 74 68 20 63 6f 64  ];./* length cod
0d90: 65 20 66 6f 72 20 65 61 63 68 20 6e 6f 72 6d 61  e for each norma
0da0: 6c 69 7a 65 64 20 6d 61 74 63 68 20 6c 65 6e 67  lized match leng
0db0: 74 68 20 28 30 20 3d 3d 20 4d 49 4e 5f 4d 41 54  th (0 == MIN_MAT
0dc0: 43 48 29 20 2a 2f 0a 0a 6c 6f 63 61 6c 20 69 6e  CH) */..local in
0dd0: 74 20 62 61 73 65 5f 6c 65 6e 67 74 68 5b 4c 45  t base_length[LE
0de0: 4e 47 54 48 5f 43 4f 44 45 53 5d 3b 0a 2f 2a 20  NGTH_CODES];./* 
0df0: 46 69 72 73 74 20 6e 6f 72 6d 61 6c 69 7a 65 64  First normalized
0e00: 20 6c 65 6e 67 74 68 20 66 6f 72 20 65 61 63 68   length for each
0e10: 20 63 6f 64 65 20 28 30 20 3d 20 4d 49 4e 5f 4d   code (0 = MIN_M
0e20: 41 54 43 48 29 20 2a 2f 0a 0a 6c 6f 63 61 6c 20  ATCH) */..local 
0e30: 69 6e 74 20 62 61 73 65 5f 64 69 73 74 5b 44 5f  int base_dist[D_
0e40: 43 4f 44 45 53 5d 3b 0a 2f 2a 20 46 69 72 73 74  CODES];./* First
0e50: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 64 69 73 74   normalized dist
0e60: 61 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f  ance for each co
0e70: 64 65 20 28 30 20 3d 20 64 69 73 74 61 6e 63 65  de (0 = distance
0e80: 20 6f 66 20 31 29 20 2a 2f 0a 0a 23 65 6c 73 65   of 1) */..#else
0e90: 0a 23 20 20 69 6e 63 6c 75 64 65 20 22 74 72 65  .#  include "tre
0ea0: 65 73 2e 68 22 0a 23 65 6e 64 69 66 20 2f 2a 20  es.h".#endif /* 
0eb0: 47 45 4e 5f 54 52 45 45 53 5f 48 20 2a 2f 0a 0a  GEN_TREES_H */..
0ec0: 73 74 72 75 63 74 20 73 74 61 74 69 63 5f 74 72  struct static_tr
0ed0: 65 65 5f 64 65 73 63 5f 73 20 7b 0a 20 20 20 20  ee_desc_s {.    
0ee0: 63 6f 6e 73 74 20 63 74 5f 64 61 74 61 20 2a 73  const ct_data *s
0ef0: 74 61 74 69 63 5f 74 72 65 65 3b 20 20 2f 2a 20  tatic_tree;  /* 
0f00: 73 74 61 74 69 63 20 74 72 65 65 20 6f 72 20 4e  static tree or N
0f10: 55 4c 4c 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  ULL */.    const
0f20: 20 69 6e 74 66 20 2a 65 78 74 72 61 5f 62 69 74   intf *extra_bit
0f30: 73 3b 20 20 20 20 20 20 2f 2a 20 65 78 74 72 61  s;      /* extra
0f40: 20 62 69 74 73 20 66 6f 72 20 65 61 63 68 20 63   bits for each c
0f50: 6f 64 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  ode or NULL */. 
0f60: 20 20 20 69 6e 74 20 20 20 20 20 65 78 74 72 61     int     extra
0f70: 5f 62 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  _base;          
0f80: 2f 2a 20 62 61 73 65 20 69 6e 64 65 78 20 66 6f  /* base index fo
0f90: 72 20 65 78 74 72 61 5f 62 69 74 73 20 2a 2f 0a  r extra_bits */.
0fa0: 20 20 20 20 69 6e 74 20 20 20 20 20 65 6c 65 6d      int     elem
0fb0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
0fc0: 20 2f 2a 20 6d 61 78 20 6e 75 6d 62 65 72 20 6f   /* max number o
0fd0: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  f elements in th
0fe0: 65 20 74 72 65 65 20 2a 2f 0a 20 20 20 20 69 6e  e tree */.    in
0ff0: 74 20 20 20 20 20 6d 61 78 5f 6c 65 6e 67 74 68  t     max_length
1000: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61  ;          /* ma
1010: 78 20 62 69 74 20 6c 65 6e 67 74 68 20 66 6f 72  x bit length for
1020: 20 74 68 65 20 63 6f 64 65 73 20 2a 2f 0a 7d 3b   the codes */.};
1030: 0a 0a 6c 6f 63 61 6c 20 73 74 61 74 69 63 5f 74  ..local static_t
1040: 72 65 65 5f 64 65 73 63 20 20 73 74 61 74 69 63  ree_desc  static
1050: 5f 6c 5f 64 65 73 63 20 3d 0a 7b 73 74 61 74 69  _l_desc =.{stati
1060: 63 5f 6c 74 72 65 65 2c 20 65 78 74 72 61 5f 6c  c_ltree, extra_l
1070: 62 69 74 73 2c 20 4c 49 54 45 52 41 4c 53 2b 31  bits, LITERALS+1
1080: 2c 20 4c 5f 43 4f 44 45 53 2c 20 4d 41 58 5f 42  , L_CODES, MAX_B
1090: 49 54 53 7d 3b 0a 0a 6c 6f 63 61 6c 20 73 74 61  ITS};..local sta
10a0: 74 69 63 5f 74 72 65 65 5f 64 65 73 63 20 20 73  tic_tree_desc  s
10b0: 74 61 74 69 63 5f 64 5f 64 65 73 63 20 3d 0a 7b  tatic_d_desc =.{
10c0: 73 74 61 74 69 63 5f 64 74 72 65 65 2c 20 65 78  static_dtree, ex
10d0: 74 72 61 5f 64 62 69 74 73 2c 20 30 2c 20 20 20  tra_dbits, 0,   
10e0: 20 20 20 20 20 20 20 44 5f 43 4f 44 45 53 2c 20         D_CODES, 
10f0: 4d 41 58 5f 42 49 54 53 7d 3b 0a 0a 6c 6f 63 61  MAX_BITS};..loca
1100: 6c 20 73 74 61 74 69 63 5f 74 72 65 65 5f 64 65  l static_tree_de
1110: 73 63 20 20 73 74 61 74 69 63 5f 62 6c 5f 64 65  sc  static_bl_de
1120: 73 63 20 3d 0a 7b 28 63 6f 6e 73 74 20 63 74 5f  sc =.{(const ct_
1130: 64 61 74 61 20 2a 29 30 2c 20 65 78 74 72 61 5f  data *)0, extra_
1140: 62 6c 62 69 74 73 2c 20 30 2c 20 20 20 42 4c 5f  blbits, 0,   BL_
1150: 43 4f 44 45 53 2c 20 4d 41 58 5f 42 4c 5f 42 49  CODES, MAX_BL_BI
1160: 54 53 7d 3b 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d  TS};../* =======
1170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11b0: 3d 3d 3d 3d 0a 20 2a 20 4c 6f 63 61 6c 20 28 73  ====. * Local (s
11c0: 74 61 74 69 63 29 20 72 6f 75 74 69 6e 65 73 20  tatic) routines 
11d0: 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 20 2a  in this file.. *
11e0: 2f 0a 0a 6c 6f 63 61 6c 20 76 6f 69 64 20 74 72  /..local void tr
11f0: 5f 73 74 61 74 69 63 5f 69 6e 69 74 20 4f 46 28  _static_init OF(
1200: 28 76 6f 69 64 29 29 3b 0a 6c 6f 63 61 6c 20 76  (void));.local v
1210: 6f 69 64 20 69 6e 69 74 5f 62 6c 6f 63 6b 20 20  oid init_block  
1220: 20 20 20 4f 46 28 28 64 65 66 6c 61 74 65 5f 73     OF((deflate_s
1230: 74 61 74 65 20 2a 73 29 29 3b 0a 6c 6f 63 61 6c  tate *s));.local
1240: 20 76 6f 69 64 20 70 71 64 6f 77 6e 68 65 61 70   void pqdownheap
1250: 20 20 20 20 20 4f 46 28 28 64 65 66 6c 61 74 65       OF((deflate
1260: 5f 73 74 61 74 65 20 2a 73 2c 20 63 74 5f 64 61  _state *s, ct_da
1270: 74 61 20 2a 74 72 65 65 2c 20 69 6e 74 20 6b 29  ta *tree, int k)
1280: 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64 20 67 65  );.local void ge
1290: 6e 5f 62 69 74 6c 65 6e 20 20 20 20 20 4f 46 28  n_bitlen     OF(
12a0: 28 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20 2a  (deflate_state *
12b0: 73 2c 20 74 72 65 65 5f 64 65 73 63 20 2a 64 65  s, tree_desc *de
12c0: 73 63 29 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64  sc));.local void
12d0: 20 67 65 6e 5f 63 6f 64 65 73 20 20 20 20 20 20   gen_codes      
12e0: 4f 46 28 28 63 74 5f 64 61 74 61 20 2a 74 72 65  OF((ct_data *tre
12f0: 65 2c 20 69 6e 74 20 6d 61 78 5f 63 6f 64 65 2c  e, int max_code,
1300: 20 75 73 68 66 20 2a 62 6c 5f 63 6f 75 6e 74 29   ushf *bl_count)
1310: 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64 20 62 75  );.local void bu
1320: 69 6c 64 5f 74 72 65 65 20 20 20 20 20 4f 46 28  ild_tree     OF(
1330: 28 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20 2a  (deflate_state *
1340: 73 2c 20 74 72 65 65 5f 64 65 73 63 20 2a 64 65  s, tree_desc *de
1350: 73 63 29 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64  sc));.local void
1360: 20 73 63 61 6e 5f 74 72 65 65 20 20 20 20 20 20   scan_tree      
1370: 4f 46 28 28 64 65 66 6c 61 74 65 5f 73 74 61 74  OF((deflate_stat
1380: 65 20 2a 73 2c 20 63 74 5f 64 61 74 61 20 2a 74  e *s, ct_data *t
1390: 72 65 65 2c 20 69 6e 74 20 6d 61 78 5f 63 6f 64  ree, int max_cod
13a0: 65 29 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64 20  e));.local void 
13b0: 73 65 6e 64 5f 74 72 65 65 20 20 20 20 20 20 4f  send_tree      O
13c0: 46 28 28 64 65 66 6c 61 74 65 5f 73 74 61 74 65  F((deflate_state
13d0: 20 2a 73 2c 20 63 74 5f 64 61 74 61 20 2a 74 72   *s, ct_data *tr
13e0: 65 65 2c 20 69 6e 74 20 6d 61 78 5f 63 6f 64 65  ee, int max_code
13f0: 29 29 3b 0a 6c 6f 63 61 6c 20 69 6e 74 20 20 62  ));.local int  b
1400: 75 69 6c 64 5f 62 6c 5f 74 72 65 65 20 20 4f 46  uild_bl_tree  OF
1410: 28 28 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20  ((deflate_state 
1420: 2a 73 29 29 3b 0a 6c 6f 63 61 6c 20 76 6f 69 64  *s));.local void
1430: 20 73 65 6e 64 5f 61 6c 6c 5f 74 72 65 65 73 20   send_all_trees 
1440: 4f 46 28 28 64 65 66 6c 61 74 65 5f 73 74 61 74  OF((deflate_stat
1450: 65 20 2a 73 2c 20 69 6e 74 20 6c 63 6f 64 65 73  e *s, int lcodes
1460: 2c 20 69 6e 74 20 64 63 6f 64 65 73 2c 0a 20 20  , int dcodes,.  
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1480: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1490: 62 6c 63 6f 64 65 73 29 29 3b 0a 6c 6f 63 61 6c  blcodes));.local
14a0: 20 76 6f 69 64 20 63 6f 6d 70 72 65 73 73 5f 62   void compress_b
14b0: 6c 6f 63 6b 20 4f 46 28 28 64 65 66 6c 61 74 65  lock OF((deflate
14c0: 5f 73 74 61 74 65 20 2a 73 2c 20 63 74 5f 64 61  _state *s, ct_da
14d0: 74 61 20 2a 6c 74 72 65 65 2c 0a 20 20 20 20 20  ta *ltree,.     
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f0: 20 20 20 20 20 20 20 20 20 63 74 5f 64 61 74 61           ct_data
1500: 20 2a 64 74 72 65 65 29 29 3b 0a 6c 6f 63 61 6c   *dtree));.local
1510: 20 76 6f 69 64 20 73 65 74 5f 64 61 74 61 5f 74   void set_data_t
1520: 79 70 65 20 20 4f 46 28 28 64 65 66 6c 61 74 65  ype  OF((deflate
1530: 5f 73 74 61 74 65 20 2a 73 29 29 3b 0a 6c 6f 63  _state *s));.loc
1540: 61 6c 20 75 6e 73 69 67 6e 65 64 20 62 69 5f 72  al unsigned bi_r
1550: 65 76 65 72 73 65 20 4f 46 28 28 75 6e 73 69 67  everse OF((unsig
1560: 6e 65 64 20 76 61 6c 75 65 2c 20 69 6e 74 20 6c  ned value, int l
1570: 65 6e 67 74 68 29 29 3b 0a 6c 6f 63 61 6c 20 76  ength));.local v
1580: 6f 69 64 20 62 69 5f 77 69 6e 64 75 70 20 20 20  oid bi_windup   
1590: 20 20 20 4f 46 28 28 64 65 66 6c 61 74 65 5f 73     OF((deflate_s
15a0: 74 61 74 65 20 2a 73 29 29 3b 0a 6c 6f 63 61 6c  tate *s));.local
15b0: 20 76 6f 69 64 20 62 69 5f 66 6c 75 73 68 20 20   void bi_flush  
15c0: 20 20 20 20 20 4f 46 28 28 64 65 66 6c 61 74 65       OF((deflate
15d0: 5f 73 74 61 74 65 20 2a 73 29 29 3b 0a 6c 6f 63  _state *s));.loc
15e0: 61 6c 20 76 6f 69 64 20 63 6f 70 79 5f 62 6c 6f  al void copy_blo
15f0: 63 6b 20 20 20 20 20 4f 46 28 28 64 65 66 6c 61  ck     OF((defla
1600: 74 65 5f 73 74 61 74 65 20 2a 73 2c 20 63 68 61  te_state *s, cha
1610: 72 66 20 2a 62 75 66 2c 20 75 6e 73 69 67 6e 65  rf *buf, unsigne
1620: 64 20 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20  d len,.         
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1640: 20 20 20 20 20 69 6e 74 20 68 65 61 64 65 72 29       int header)
1650: 29 3b 0a 0a 23 69 66 64 65 66 20 47 45 4e 5f 54  );..#ifdef GEN_T
1660: 52 45 45 53 5f 48 0a 6c 6f 63 61 6c 20 76 6f 69  REES_H.local voi
1670: 64 20 67 65 6e 5f 74 72 65 65 73 5f 68 65 61 64  d gen_trees_head
1680: 65 72 20 4f 46 28 28 76 6f 69 64 29 29 3b 0a 23  er OF((void));.#
1690: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 44  endif..#ifndef D
16a0: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 73  EBUG.#  define s
16b0: 65 6e 64 5f 63 6f 64 65 28 73 2c 20 63 2c 20 74  end_code(s, c, t
16c0: 72 65 65 29 20 73 65 6e 64 5f 62 69 74 73 28 73  ree) send_bits(s
16d0: 2c 20 74 72 65 65 5b 63 5d 2e 43 6f 64 65 2c 20  , tree[c].Code, 
16e0: 74 72 65 65 5b 63 5d 2e 4c 65 6e 29 0a 20 20 20  tree[c].Len).   
16f0: 2f 2a 20 53 65 6e 64 20 61 20 63 6f 64 65 20 6f  /* Send a code o
1700: 66 20 74 68 65 20 67 69 76 65 6e 20 74 72 65 65  f the given tree
1710: 2e 20 63 20 61 6e 64 20 74 72 65 65 20 6d 75 73  . c and tree mus
1720: 74 20 6e 6f 74 20 68 61 76 65 20 73 69 64 65 20  t not have side 
1730: 65 66 66 65 63 74 73 20 2a 2f 0a 0a 23 65 6c 73  effects */..#els
1740: 65 20 2f 2a 20 44 45 42 55 47 20 2a 2f 0a 23 20  e /* DEBUG */.# 
1750: 20 64 65 66 69 6e 65 20 73 65 6e 64 5f 63 6f 64   define send_cod
1760: 65 28 73 2c 20 63 2c 20 74 72 65 65 29 20 5c 0a  e(s, c, tree) \.
1770: 20 20 20 20 20 7b 20 69 66 20 28 7a 5f 76 65 72       { if (z_ver
1780: 62 6f 73 65 3e 32 29 20 66 70 72 69 6e 74 66 28  bose>2) fprintf(
1790: 73 74 64 65 72 72 2c 22 5c 6e 63 64 20 25 33 64  stderr,"\ncd %3d
17a0: 20 22 2c 28 63 29 29 3b 20 5c 0a 20 20 20 20 20   ",(c)); \.     
17b0: 20 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20 74    send_bits(s, t
17c0: 72 65 65 5b 63 5d 2e 43 6f 64 65 2c 20 74 72 65  ree[c].Code, tre
17d0: 65 5b 63 5d 2e 4c 65 6e 29 3b 20 7d 0a 23 65 6e  e[c].Len); }.#en
17e0: 64 69 66 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d  dif../* ========
17f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1830: 3d 3d 3d 0a 20 2a 20 4f 75 74 70 75 74 20 61 20  ===. * Output a 
1840: 73 68 6f 72 74 20 4c 53 42 20 66 69 72 73 74 20  short LSB first 
1850: 6f 6e 20 74 68 65 20 73 74 72 65 61 6d 2e 0a 20  on the stream.. 
1860: 2a 20 49 4e 20 61 73 73 65 72 74 69 6f 6e 3a 20  * IN assertion: 
1870: 74 68 65 72 65 20 69 73 20 65 6e 6f 75 67 68 20  there is enough 
1880: 72 6f 6f 6d 20 69 6e 20 70 65 6e 64 69 6e 67 42  room in pendingB
1890: 75 66 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uf.. */.#define 
18a0: 70 75 74 5f 73 68 6f 72 74 28 73 2c 20 77 29 20  put_short(s, w) 
18b0: 7b 20 5c 0a 20 20 20 20 70 75 74 5f 62 79 74 65  { \.    put_byte
18c0: 28 73 2c 20 28 75 63 68 29 28 28 77 29 20 26 20  (s, (uch)((w) & 
18d0: 30 78 66 66 29 29 3b 20 5c 0a 20 20 20 20 70 75  0xff)); \.    pu
18e0: 74 5f 62 79 74 65 28 73 2c 20 28 75 63 68 29 28  t_byte(s, (uch)(
18f0: 28 75 73 68 29 28 77 29 20 3e 3e 20 38 29 29 3b  (ush)(w) >> 8));
1900: 20 5c 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d   \.}../* =======
1910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1950: 3d 3d 3d 3d 0a 20 2a 20 53 65 6e 64 20 61 20 76  ====. * Send a v
1960: 61 6c 75 65 20 6f 6e 20 61 20 67 69 76 65 6e 20  alue on a given 
1970: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 2e 0a  number of bits..
1980: 20 2a 20 49 4e 20 61 73 73 65 72 74 69 6f 6e 3a   * IN assertion:
1990: 20 6c 65 6e 67 74 68 20 3c 3d 20 31 36 20 61 6e   length <= 16 an
19a0: 64 20 76 61 6c 75 65 20 66 69 74 73 20 69 6e 20  d value fits in 
19b0: 6c 65 6e 67 74 68 20 62 69 74 73 2e 0a 20 2a 2f  length bits.. */
19c0: 0a 23 69 66 64 65 66 20 44 45 42 55 47 0a 6c 6f  .#ifdef DEBUG.lo
19d0: 63 61 6c 20 76 6f 69 64 20 73 65 6e 64 5f 62 69  cal void send_bi
19e0: 74 73 20 20 20 20 20 20 4f 46 28 28 64 65 66 6c  ts      OF((defl
19f0: 61 74 65 5f 73 74 61 74 65 20 2a 73 2c 20 69 6e  ate_state *s, in
1a00: 74 20 76 61 6c 75 65 2c 20 69 6e 74 20 6c 65 6e  t value, int len
1a10: 67 74 68 29 29 3b 0a 0a 6c 6f 63 61 6c 20 76 6f  gth));..local vo
1a20: 69 64 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20  id send_bits(s, 
1a30: 76 61 6c 75 65 2c 20 6c 65 6e 67 74 68 29 0a 20  value, length). 
1a40: 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61 74 65     deflate_state
1a50: 20 2a 73 3b 0a 20 20 20 20 69 6e 74 20 76 61 6c   *s;.    int val
1a60: 75 65 3b 20 20 2f 2a 20 76 61 6c 75 65 20 74 6f  ue;  /* value to
1a70: 20 73 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74   send */.    int
1a80: 20 6c 65 6e 67 74 68 3b 20 2f 2a 20 6e 75 6d 62   length; /* numb
1a90: 65 72 20 6f 66 20 62 69 74 73 20 2a 2f 0a 7b 0a  er of bits */.{.
1aa0: 20 20 20 20 54 72 61 63 65 76 76 28 28 73 74 64      Tracevv((std
1ab0: 65 72 72 2c 22 20 6c 20 25 32 64 20 76 20 25 34  err," l %2d v %4
1ac0: 78 20 22 2c 20 6c 65 6e 67 74 68 2c 20 76 61 6c  x ", length, val
1ad0: 75 65 29 29 3b 0a 20 20 20 20 41 73 73 65 72 74  ue));.    Assert
1ae0: 28 6c 65 6e 67 74 68 20 3e 20 30 20 26 26 20 6c  (length > 0 && l
1af0: 65 6e 67 74 68 20 3c 3d 20 31 35 2c 20 22 69 6e  ength <= 15, "in
1b00: 76 61 6c 69 64 20 6c 65 6e 67 74 68 22 29 3b 0a  valid length");.
1b10: 20 20 20 20 73 2d 3e 62 69 74 73 5f 73 65 6e 74      s->bits_sent
1b20: 20 2b 3d 20 28 75 6c 67 29 6c 65 6e 67 74 68 3b   += (ulg)length;
1b30: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20  ..    /* If not 
1b40: 65 6e 6f 75 67 68 20 72 6f 6f 6d 20 69 6e 20 62  enough room in b
1b50: 69 5f 62 75 66 2c 20 75 73 65 20 28 76 61 6c 69  i_buf, use (vali
1b60: 64 29 20 62 69 74 73 20 66 72 6f 6d 20 62 69 5f  d) bits from bi_
1b70: 62 75 66 20 61 6e 64 0a 20 20 20 20 20 2a 20 28  buf and.     * (
1b80: 31 36 20 2d 20 62 69 5f 76 61 6c 69 64 29 20 62  16 - bi_valid) b
1b90: 69 74 73 20 66 72 6f 6d 20 76 61 6c 75 65 2c 20  its from value, 
1ba0: 6c 65 61 76 69 6e 67 20 28 77 69 64 74 68 20 2d  leaving (width -
1bb0: 20 28 31 36 2d 62 69 5f 76 61 6c 69 64 29 29 0a   (16-bi_valid)).
1bc0: 20 20 20 20 20 2a 20 75 6e 75 73 65 64 20 62 69       * unused bi
1bd0: 74 73 20 69 6e 20 76 61 6c 75 65 2e 0a 20 20 20  ts in value..   
1be0: 20 20 2a 2f 0a 20 20 20 20 69 66 20 28 73 2d 3e    */.    if (s->
1bf0: 62 69 5f 76 61 6c 69 64 20 3e 20 28 69 6e 74 29  bi_valid > (int)
1c00: 42 75 66 5f 73 69 7a 65 20 2d 20 6c 65 6e 67 74  Buf_size - lengt
1c10: 68 29 20 7b 0a 20 20 20 20 20 20 20 20 73 2d 3e  h) {.        s->
1c20: 62 69 5f 62 75 66 20 7c 3d 20 28 76 61 6c 75 65  bi_buf |= (value
1c30: 20 3c 3c 20 73 2d 3e 62 69 5f 76 61 6c 69 64 29   << s->bi_valid)
1c40: 3b 0a 20 20 20 20 20 20 20 20 70 75 74 5f 73 68  ;.        put_sh
1c50: 6f 72 74 28 73 2c 20 73 2d 3e 62 69 5f 62 75 66  ort(s, s->bi_buf
1c60: 29 3b 0a 20 20 20 20 20 20 20 20 73 2d 3e 62 69  );.        s->bi
1c70: 5f 62 75 66 20 3d 20 28 75 73 68 29 76 61 6c 75  _buf = (ush)valu
1c80: 65 20 3e 3e 20 28 42 75 66 5f 73 69 7a 65 20 2d  e >> (Buf_size -
1c90: 20 73 2d 3e 62 69 5f 76 61 6c 69 64 29 3b 0a 20   s->bi_valid);. 
1ca0: 20 20 20 20 20 20 20 73 2d 3e 62 69 5f 76 61 6c         s->bi_val
1cb0: 69 64 20 2b 3d 20 6c 65 6e 67 74 68 20 2d 20 42  id += length - B
1cc0: 75 66 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 65  uf_size;.    } e
1cd0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73 2d  lse {.        s-
1ce0: 3e 62 69 5f 62 75 66 20 7c 3d 20 76 61 6c 75 65  >bi_buf |= value
1cf0: 20 3c 3c 20 73 2d 3e 62 69 5f 76 61 6c 69 64 3b   << s->bi_valid;
1d00: 0a 20 20 20 20 20 20 20 20 73 2d 3e 62 69 5f 76  .        s->bi_v
1d10: 61 6c 69 64 20 2b 3d 20 6c 65 6e 67 74 68 3b 0a  alid += length;.
1d20: 20 20 20 20 7d 0a 7d 0a 23 65 6c 73 65 20 2f 2a      }.}.#else /*
1d30: 20 21 44 45 42 55 47 20 2a 2f 0a 0a 23 64 65 66   !DEBUG */..#def
1d40: 69 6e 65 20 73 65 6e 64 5f 62 69 74 73 28 73 2c  ine send_bits(s,
1d50: 20 76 61 6c 75 65 2c 20 6c 65 6e 67 74 68 29 20   value, length) 
1d60: 5c 0a 7b 20 69 6e 74 20 6c 65 6e 20 3d 20 6c 65  \.{ int len = le
1d70: 6e 67 74 68 3b 5c 0a 20 20 69 66 20 28 73 2d 3e  ngth;\.  if (s->
1d80: 62 69 5f 76 61 6c 69 64 20 3e 20 28 69 6e 74 29  bi_valid > (int)
1d90: 42 75 66 5f 73 69 7a 65 20 2d 20 6c 65 6e 29 20  Buf_size - len) 
1da0: 7b 5c 0a 20 20 20 20 69 6e 74 20 76 61 6c 20 3d  {\.    int val =
1db0: 20 76 61 6c 75 65 3b 5c 0a 20 20 20 20 73 2d 3e   value;\.    s->
1dc0: 62 69 5f 62 75 66 20 7c 3d 20 28 76 61 6c 20 3c  bi_buf |= (val <
1dd0: 3c 20 73 2d 3e 62 69 5f 76 61 6c 69 64 29 3b 5c  < s->bi_valid);\
1de0: 0a 20 20 20 20 70 75 74 5f 73 68 6f 72 74 28 73  .    put_short(s
1df0: 2c 20 73 2d 3e 62 69 5f 62 75 66 29 3b 5c 0a 20  , s->bi_buf);\. 
1e00: 20 20 20 73 2d 3e 62 69 5f 62 75 66 20 3d 20 28     s->bi_buf = (
1e10: 75 73 68 29 76 61 6c 20 3e 3e 20 28 42 75 66 5f  ush)val >> (Buf_
1e20: 73 69 7a 65 20 2d 20 73 2d 3e 62 69 5f 76 61 6c  size - s->bi_val
1e30: 69 64 29 3b 5c 0a 20 20 20 20 73 2d 3e 62 69 5f  id);\.    s->bi_
1e40: 76 61 6c 69 64 20 2b 3d 20 6c 65 6e 20 2d 20 42  valid += len - B
1e50: 75 66 5f 73 69 7a 65 3b 5c 0a 20 20 7d 20 65 6c  uf_size;\.  } el
1e60: 73 65 20 7b 5c 0a 20 20 20 20 73 2d 3e 62 69 5f  se {\.    s->bi_
1e70: 62 75 66 20 7c 3d 20 28 76 61 6c 75 65 29 20 3c  buf |= (value) <
1e80: 3c 20 73 2d 3e 62 69 5f 76 61 6c 69 64 3b 5c 0a  < s->bi_valid;\.
1e90: 20 20 20 20 73 2d 3e 62 69 5f 76 61 6c 69 64 20      s->bi_valid 
1ea0: 2b 3d 20 6c 65 6e 3b 5c 0a 20 20 7d 5c 0a 7d 0a  += len;\.  }\.}.
1eb0: 23 65 6e 64 69 66 20 2f 2a 20 44 45 42 55 47 20  #endif /* DEBUG 
1ec0: 2a 2f 0a 0a 0a 23 64 65 66 69 6e 65 20 4d 41 58  */...#define MAX
1ed0: 28 61 2c 62 29 20 28 61 20 3e 3d 20 62 20 3f 20  (a,b) (a >= b ? 
1ee0: 61 20 3a 20 62 29 0a 2f 2a 20 74 68 65 20 61 72  a : b)./* the ar
1ef0: 67 75 6d 65 6e 74 73 20 6d 75 73 74 20 6e 6f 74  guments must not
1f00: 20 68 61 76 65 20 73 69 64 65 20 65 66 66 65 63   have side effec
1f10: 74 73 20 2a 2f 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d  ts */../* ======
1f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f60: 3d 3d 3d 3d 3d 0a 20 2a 20 49 6e 69 74 69 61 6c  =====. * Initial
1f70: 69 7a 65 20 74 68 65 20 76 61 72 69 6f 75 73 20  ize the various 
1f80: 27 63 6f 6e 73 74 61 6e 74 27 20 74 61 62 6c 65  'constant' table
1f90: 73 2e 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 76 6f 69  s.. */.local voi
1fa0: 64 20 74 72 5f 73 74 61 74 69 63 5f 69 6e 69 74  d tr_static_init
1fb0: 28 29 0a 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ().{.#if defined
1fc0: 28 47 45 4e 5f 54 52 45 45 53 5f 48 29 20 7c 7c  (GEN_TREES_H) ||
1fd0: 20 21 64 65 66 69 6e 65 64 28 53 54 44 43 29 0a   !defined(STDC).
1fe0: 20 20 20 20 73 74 61 74 69 63 20 69 6e 74 20 73      static int s
1ff0: 74 61 74 69 63 5f 69 6e 69 74 5f 64 6f 6e 65 20  tatic_init_done 
2000: 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 3b 20  = 0;.    int n; 
2010: 20 20 20 20 20 20 20 2f 2a 20 69 74 65 72 61 74         /* iterat
2020: 65 73 20 6f 76 65 72 20 74 72 65 65 20 65 6c 65  es over tree ele
2030: 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20 69 6e 74  ments */.    int
2040: 20 62 69 74 73 3b 20 20 20 20 20 2f 2a 20 62 69   bits;     /* bi
2050: 74 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  t counter */.   
2060: 20 69 6e 74 20 6c 65 6e 67 74 68 3b 20 20 20 2f   int length;   /
2070: 2a 20 6c 65 6e 67 74 68 20 76 61 6c 75 65 20 2a  * length value *
2080: 2f 0a 20 20 20 20 69 6e 74 20 63 6f 64 65 3b 20  /.    int code; 
2090: 20 20 20 20 2f 2a 20 63 6f 64 65 20 76 61 6c 75      /* code valu
20a0: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 64 69 73  e */.    int dis
20b0: 74 3b 20 20 20 20 20 2f 2a 20 64 69 73 74 61 6e  t;     /* distan
20c0: 63 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ce index */.    
20d0: 75 73 68 20 62 6c 5f 63 6f 75 6e 74 5b 4d 41 58  ush bl_count[MAX
20e0: 5f 42 49 54 53 2b 31 5d 3b 0a 20 20 20 20 2f 2a  _BITS+1];.    /*
20f0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 64 65 73   number of codes
2100: 20 61 74 20 65 61 63 68 20 62 69 74 20 6c 65 6e   at each bit len
2110: 67 74 68 20 66 6f 72 20 61 6e 20 6f 70 74 69 6d  gth for an optim
2120: 61 6c 20 74 72 65 65 20 2a 2f 0a 0a 20 20 20 20  al tree */..    
2130: 69 66 20 28 73 74 61 74 69 63 5f 69 6e 69 74 5f  if (static_init_
2140: 64 6f 6e 65 29 20 72 65 74 75 72 6e 3b 0a 0a 20  done) return;.. 
2150: 20 20 20 2f 2a 20 46 6f 72 20 73 6f 6d 65 20 65     /* For some e
2160: 6d 62 65 64 64 65 64 20 74 61 72 67 65 74 73 2c  mbedded targets,
2170: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2180: 73 20 61 72 65 20 6e 6f 74 20 69 6e 69 74 69 61  s are not initia
2190: 6c 69 7a 65 64 3a 20 2a 2f 0a 20 20 20 20 73 74  lized: */.    st
21a0: 61 74 69 63 5f 6c 5f 64 65 73 63 2e 73 74 61 74  atic_l_desc.stat
21b0: 69 63 5f 74 72 65 65 20 3d 20 73 74 61 74 69 63  ic_tree = static
21c0: 5f 6c 74 72 65 65 3b 0a 20 20 20 20 73 74 61 74  _ltree;.    stat
21d0: 69 63 5f 6c 5f 64 65 73 63 2e 65 78 74 72 61 5f  ic_l_desc.extra_
21e0: 62 69 74 73 20 3d 20 65 78 74 72 61 5f 6c 62 69  bits = extra_lbi
21f0: 74 73 3b 0a 20 20 20 20 73 74 61 74 69 63 5f 64  ts;.    static_d
2200: 5f 64 65 73 63 2e 73 74 61 74 69 63 5f 74 72 65  _desc.static_tre
2210: 65 20 3d 20 73 74 61 74 69 63 5f 64 74 72 65 65  e = static_dtree
2220: 3b 0a 20 20 20 20 73 74 61 74 69 63 5f 64 5f 64  ;.    static_d_d
2230: 65 73 63 2e 65 78 74 72 61 5f 62 69 74 73 20 3d  esc.extra_bits =
2240: 20 65 78 74 72 61 5f 64 62 69 74 73 3b 0a 20 20   extra_dbits;.  
2250: 20 20 73 74 61 74 69 63 5f 62 6c 5f 64 65 73 63    static_bl_desc
2260: 2e 65 78 74 72 61 5f 62 69 74 73 20 3d 20 65 78  .extra_bits = ex
2270: 74 72 61 5f 62 6c 62 69 74 73 3b 0a 0a 20 20 20  tra_blbits;..   
2280: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
2290: 68 65 20 6d 61 70 70 69 6e 67 20 6c 65 6e 67 74  he mapping lengt
22a0: 68 20 28 30 2e 2e 32 35 35 29 20 2d 3e 20 6c 65  h (0..255) -> le
22b0: 6e 67 74 68 20 63 6f 64 65 20 28 30 2e 2e 32 38  ngth code (0..28
22c0: 29 20 2a 2f 0a 20 20 20 20 6c 65 6e 67 74 68 20  ) */.    length 
22d0: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 20 28 63 6f  = 0;.    for (co
22e0: 64 65 20 3d 20 30 3b 20 63 6f 64 65 20 3c 20 4c  de = 0; code < L
22f0: 45 4e 47 54 48 5f 43 4f 44 45 53 2d 31 3b 20 63  ENGTH_CODES-1; c
2300: 6f 64 65 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20  ode++) {.       
2310: 20 62 61 73 65 5f 6c 65 6e 67 74 68 5b 63 6f 64   base_length[cod
2320: 65 5d 20 3d 20 6c 65 6e 67 74 68 3b 0a 20 20 20  e] = length;.   
2330: 20 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b       for (n = 0;
2340: 20 6e 20 3c 20 28 31 3c 3c 65 78 74 72 61 5f 6c   n < (1<<extra_l
2350: 62 69 74 73 5b 63 6f 64 65 5d 29 3b 20 6e 2b 2b  bits[code]); n++
2360: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2370: 5f 6c 65 6e 67 74 68 5f 63 6f 64 65 5b 6c 65 6e  _length_code[len
2380: 67 74 68 2b 2b 5d 20 3d 20 28 75 63 68 29 63 6f  gth++] = (uch)co
2390: 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  de;.        }.  
23a0: 20 20 7d 0a 20 20 20 20 41 73 73 65 72 74 20 28    }.    Assert (
23b0: 6c 65 6e 67 74 68 20 3d 3d 20 32 35 36 2c 20 22  length == 256, "
23c0: 74 72 5f 73 74 61 74 69 63 5f 69 6e 69 74 3a 20  tr_static_init: 
23d0: 6c 65 6e 67 74 68 20 21 3d 20 32 35 36 22 29 3b  length != 256");
23e0: 0a 20 20 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  .    /* Note tha
23f0: 74 20 74 68 65 20 6c 65 6e 67 74 68 20 32 35 35  t the length 255
2400: 20 28 6d 61 74 63 68 20 6c 65 6e 67 74 68 20 32   (match length 2
2410: 35 38 29 20 63 61 6e 20 62 65 20 72 65 70 72 65  58) can be repre
2420: 73 65 6e 74 65 64 0a 20 20 20 20 20 2a 20 69 6e  sented.     * in
2430: 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77   two different w
2440: 61 79 73 3a 20 63 6f 64 65 20 32 38 34 20 2b 20  ays: code 284 + 
2450: 35 20 62 69 74 73 20 6f 72 20 63 6f 64 65 20 32  5 bits or code 2
2460: 38 35 2c 20 73 6f 20 77 65 0a 20 20 20 20 20 2a  85, so we.     *
2470: 20 6f 76 65 72 77 72 69 74 65 20 6c 65 6e 67 74   overwrite lengt
2480: 68 5f 63 6f 64 65 5b 32 35 35 5d 20 74 6f 20 75  h_code[255] to u
2490: 73 65 20 74 68 65 20 62 65 73 74 20 65 6e 63 6f  se the best enco
24a0: 64 69 6e 67 3a 0a 20 20 20 20 20 2a 2f 0a 20 20  ding:.     */.  
24b0: 20 20 5f 6c 65 6e 67 74 68 5f 63 6f 64 65 5b 6c    _length_code[l
24c0: 65 6e 67 74 68 2d 31 5d 20 3d 20 28 75 63 68 29  ength-1] = (uch)
24d0: 63 6f 64 65 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  code;..    /* In
24e0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 6d 61 70  itialize the map
24f0: 70 69 6e 67 20 64 69 73 74 20 28 30 2e 2e 33 32  ping dist (0..32
2500: 4b 29 20 2d 3e 20 64 69 73 74 20 63 6f 64 65 20  K) -> dist code 
2510: 28 30 2e 2e 32 39 29 20 2a 2f 0a 20 20 20 20 64  (0..29) */.    d
2520: 69 73 74 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72  ist = 0;.    for
2530: 20 28 63 6f 64 65 20 3d 20 30 20 3b 20 63 6f 64   (code = 0 ; cod
2540: 65 20 3c 20 31 36 3b 20 63 6f 64 65 2b 2b 29 20  e < 16; code++) 
2550: 7b 0a 20 20 20 20 20 20 20 20 62 61 73 65 5f 64  {.        base_d
2560: 69 73 74 5b 63 6f 64 65 5d 20 3d 20 64 69 73 74  ist[code] = dist
2570: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 6e  ;.        for (n
2580: 20 3d 20 30 3b 20 6e 20 3c 20 28 31 3c 3c 65 78   = 0; n < (1<<ex
2590: 74 72 61 5f 64 62 69 74 73 5b 63 6f 64 65 5d 29  tra_dbits[code])
25a0: 3b 20 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20  ; n++) {.       
25b0: 20 20 20 20 20 5f 64 69 73 74 5f 63 6f 64 65 5b       _dist_code[
25c0: 64 69 73 74 2b 2b 5d 20 3d 20 28 75 63 68 29 63  dist++] = (uch)c
25d0: 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ode;.        }. 
25e0: 20 20 20 7d 0a 20 20 20 20 41 73 73 65 72 74 20     }.    Assert 
25f0: 28 64 69 73 74 20 3d 3d 20 32 35 36 2c 20 22 74  (dist == 256, "t
2600: 72 5f 73 74 61 74 69 63 5f 69 6e 69 74 3a 20 64  r_static_init: d
2610: 69 73 74 20 21 3d 20 32 35 36 22 29 3b 0a 20 20  ist != 256");.  
2620: 20 20 64 69 73 74 20 3e 3e 3d 20 37 3b 20 2f 2a    dist >>= 7; /*
2630: 20 66 72 6f 6d 20 6e 6f 77 20 6f 6e 2c 20 61 6c   from now on, al
2640: 6c 20 64 69 73 74 61 6e 63 65 73 20 61 72 65 20  l distances are 
2650: 64 69 76 69 64 65 64 20 62 79 20 31 32 38 20 2a  divided by 128 *
2660: 2f 0a 20 20 20 20 66 6f 72 20 28 20 3b 20 63 6f  /.    for ( ; co
2670: 64 65 20 3c 20 44 5f 43 4f 44 45 53 3b 20 63 6f  de < D_CODES; co
2680: 64 65 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20  de++) {.        
2690: 62 61 73 65 5f 64 69 73 74 5b 63 6f 64 65 5d 20  base_dist[code] 
26a0: 3d 20 64 69 73 74 20 3c 3c 20 37 3b 0a 20 20 20  = dist << 7;.   
26b0: 20 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b       for (n = 0;
26c0: 20 6e 20 3c 20 28 31 3c 3c 28 65 78 74 72 61 5f   n < (1<<(extra_
26d0: 64 62 69 74 73 5b 63 6f 64 65 5d 2d 37 29 29 3b  dbits[code]-7));
26e0: 20 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20   n++) {.        
26f0: 20 20 20 20 5f 64 69 73 74 5f 63 6f 64 65 5b 32      _dist_code[2
2700: 35 36 20 2b 20 64 69 73 74 2b 2b 5d 20 3d 20 28  56 + dist++] = (
2710: 75 63 68 29 63 6f 64 65 3b 0a 20 20 20 20 20 20  uch)code;.      
2720: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 41 73    }.    }.    As
2730: 73 65 72 74 20 28 64 69 73 74 20 3d 3d 20 32 35  sert (dist == 25
2740: 36 2c 20 22 74 72 5f 73 74 61 74 69 63 5f 69 6e  6, "tr_static_in
2750: 69 74 3a 20 32 35 36 2b 64 69 73 74 20 21 3d 20  it: 256+dist != 
2760: 35 31 32 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 43  512");..    /* C
2770: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 63 6f 64  onstruct the cod
2780: 65 73 20 6f 66 20 74 68 65 20 73 74 61 74 69 63  es of the static
2790: 20 6c 69 74 65 72 61 6c 20 74 72 65 65 20 2a 2f   literal tree */
27a0: 0a 20 20 20 20 66 6f 72 20 28 62 69 74 73 20 3d  .    for (bits =
27b0: 20 30 3b 20 62 69 74 73 20 3c 3d 20 4d 41 58 5f   0; bits <= MAX_
27c0: 42 49 54 53 3b 20 62 69 74 73 2b 2b 29 20 62 6c  BITS; bits++) bl
27d0: 5f 63 6f 75 6e 74 5b 62 69 74 73 5d 20 3d 20 30  _count[bits] = 0
27e0: 3b 0a 20 20 20 20 6e 20 3d 20 30 3b 0a 20 20 20  ;.    n = 0;.   
27f0: 20 77 68 69 6c 65 20 28 6e 20 3c 3d 20 31 34 33   while (n <= 143
2800: 29 20 73 74 61 74 69 63 5f 6c 74 72 65 65 5b 6e  ) static_ltree[n
2810: 2b 2b 5d 2e 4c 65 6e 20 3d 20 38 2c 20 62 6c 5f  ++].Len = 8, bl_
2820: 63 6f 75 6e 74 5b 38 5d 2b 2b 3b 0a 20 20 20 20  count[8]++;.    
2830: 77 68 69 6c 65 20 28 6e 20 3c 3d 20 32 35 35 29  while (n <= 255)
2840: 20 73 74 61 74 69 63 5f 6c 74 72 65 65 5b 6e 2b   static_ltree[n+
2850: 2b 5d 2e 4c 65 6e 20 3d 20 39 2c 20 62 6c 5f 63  +].Len = 9, bl_c
2860: 6f 75 6e 74 5b 39 5d 2b 2b 3b 0a 20 20 20 20 77  ount[9]++;.    w
2870: 68 69 6c 65 20 28 6e 20 3c 3d 20 32 37 39 29 20  hile (n <= 279) 
2880: 73 74 61 74 69 63 5f 6c 74 72 65 65 5b 6e 2b 2b  static_ltree[n++
2890: 5d 2e 4c 65 6e 20 3d 20 37 2c 20 62 6c 5f 63 6f  ].Len = 7, bl_co
28a0: 75 6e 74 5b 37 5d 2b 2b 3b 0a 20 20 20 20 77 68  unt[7]++;.    wh
28b0: 69 6c 65 20 28 6e 20 3c 3d 20 32 38 37 29 20 73  ile (n <= 287) s
28c0: 74 61 74 69 63 5f 6c 74 72 65 65 5b 6e 2b 2b 5d  tatic_ltree[n++]
28d0: 2e 4c 65 6e 20 3d 20 38 2c 20 62 6c 5f 63 6f 75  .Len = 8, bl_cou
28e0: 6e 74 5b 38 5d 2b 2b 3b 0a 20 20 20 20 2f 2a 20  nt[8]++;.    /* 
28f0: 43 6f 64 65 73 20 32 38 36 20 61 6e 64 20 32 38  Codes 286 and 28
2900: 37 20 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20  7 do not exist, 
2910: 62 75 74 20 77 65 20 6d 75 73 74 20 69 6e 63 6c  but we must incl
2920: 75 64 65 20 74 68 65 6d 20 69 6e 20 74 68 65 0a  ude them in the.
2930: 20 20 20 20 20 2a 20 74 72 65 65 20 63 6f 6e 73       * tree cons
2940: 74 72 75 63 74 69 6f 6e 20 74 6f 20 67 65 74 20  truction to get 
2950: 61 20 63 61 6e 6f 6e 69 63 61 6c 20 48 75 66 66  a canonical Huff
2960: 6d 61 6e 20 74 72 65 65 20 28 6c 6f 6e 67 65 73  man tree (longes
2970: 74 20 63 6f 64 65 0a 20 20 20 20 20 2a 20 61 6c  t code.     * al
2980: 6c 20 6f 6e 65 73 29 0a 20 20 20 20 20 2a 2f 0a  l ones).     */.
2990: 20 20 20 20 67 65 6e 5f 63 6f 64 65 73 28 28 63      gen_codes((c
29a0: 74 5f 64 61 74 61 20 2a 29 73 74 61 74 69 63 5f  t_data *)static_
29b0: 6c 74 72 65 65 2c 20 4c 5f 43 4f 44 45 53 2b 31  ltree, L_CODES+1
29c0: 2c 20 62 6c 5f 63 6f 75 6e 74 29 3b 0a 0a 20 20  , bl_count);..  
29d0: 20 20 2f 2a 20 54 68 65 20 73 74 61 74 69 63 20    /* The static 
29e0: 64 69 73 74 61 6e 63 65 20 74 72 65 65 20 69 73  distance tree is
29f0: 20 74 72 69 76 69 61 6c 3a 20 2a 2f 0a 20 20 20   trivial: */.   
2a00: 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c   for (n = 0; n <
2a10: 20 44 5f 43 4f 44 45 53 3b 20 6e 2b 2b 29 20 7b   D_CODES; n++) {
2a20: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 5f  .        static_
2a30: 64 74 72 65 65 5b 6e 5d 2e 4c 65 6e 20 3d 20 35  dtree[n].Len = 5
2a40: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  ;.        static
2a50: 5f 64 74 72 65 65 5b 6e 5d 2e 43 6f 64 65 20 3d  _dtree[n].Code =
2a60: 20 62 69 5f 72 65 76 65 72 73 65 28 28 75 6e 73   bi_reverse((uns
2a70: 69 67 6e 65 64 29 6e 2c 20 35 29 3b 0a 20 20 20  igned)n, 5);.   
2a80: 20 7d 0a 20 20 20 20 73 74 61 74 69 63 5f 69 6e   }.    static_in
2a90: 69 74 5f 64 6f 6e 65 20 3d 20 31 3b 0a 0a 23 20  it_done = 1;..# 
2aa0: 20 69 66 64 65 66 20 47 45 4e 5f 54 52 45 45 53   ifdef GEN_TREES
2ab0: 5f 48 0a 20 20 20 20 67 65 6e 5f 74 72 65 65 73  _H.    gen_trees
2ac0: 5f 68 65 61 64 65 72 28 29 3b 0a 23 20 20 65 6e  _header();.#  en
2ad0: 64 69 66 0a 23 65 6e 64 69 66 20 2f 2a 20 64 65  dif.#endif /* de
2ae0: 66 69 6e 65 64 28 47 45 4e 5f 54 52 45 45 53 5f  fined(GEN_TREES_
2af0: 48 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  H) || !defined(S
2b00: 54 44 43 29 20 2a 2f 0a 7d 0a 0a 2f 2a 20 3d 3d  TDC) */.}../* ==
2b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2b40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2b50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 47 65 6e  =========. * Gen
2b60: 65 72 65 72 61 74 65 20 74 68 65 20 66 69 6c 65  ererate the file
2b70: 20 74 72 65 65 73 2e 68 20 64 65 73 63 72 69 62   trees.h describ
2b80: 69 6e 67 20 74 68 65 20 73 74 61 74 69 63 20 74  ing the static t
2b90: 72 65 65 73 2e 0a 20 2a 2f 0a 23 69 66 64 65 66  rees.. */.#ifdef
2ba0: 20 47 45 4e 5f 54 52 45 45 53 5f 48 0a 23 20 20   GEN_TREES_H.#  
2bb0: 69 66 6e 64 65 66 20 44 45 42 55 47 0a 23 20 20  ifndef DEBUG.#  
2bc0: 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f    include <stdio
2bd0: 2e 68 3e 0a 23 20 20 65 6e 64 69 66 0a 0a 23 20  .h>.#  endif..# 
2be0: 20 64 65 66 69 6e 65 20 53 45 50 41 52 41 54 4f   define SEPARATO
2bf0: 52 28 69 2c 20 6c 61 73 74 2c 20 77 69 64 74 68  R(i, last, width
2c00: 29 20 5c 0a 20 20 20 20 20 20 28 28 69 29 20 3d  ) \.      ((i) =
2c10: 3d 20 28 6c 61 73 74 29 3f 20 22 5c 6e 7d 3b 5c  = (last)? "\n};\
2c20: 6e 5c 6e 22 20 3a 20 20 20 20 5c 0a 20 20 20 20  n\n" :    \.    
2c30: 20 20 20 28 28 69 29 20 25 20 28 77 69 64 74 68     ((i) % (width
2c40: 29 20 3d 3d 20 28 77 69 64 74 68 29 2d 31 20 3f  ) == (width)-1 ?
2c50: 20 22 2c 5c 6e 22 20 3a 20 22 2c 20 22 29 29 0a   ",\n" : ", ")).
2c60: 0a 76 6f 69 64 20 67 65 6e 5f 74 72 65 65 73 5f  .void gen_trees_
2c70: 68 65 61 64 65 72 28 29 0a 7b 0a 20 20 20 20 46  header().{.    F
2c80: 49 4c 45 20 2a 68 65 61 64 65 72 20 3d 20 66 6f  ILE *header = fo
2c90: 70 65 6e 28 22 74 72 65 65 73 2e 68 22 2c 20 22  pen("trees.h", "
2ca0: 77 22 29 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  w");.    int i;.
2cb0: 0a 20 20 20 20 41 73 73 65 72 74 20 28 68 65 61  .    Assert (hea
2cc0: 64 65 72 20 21 3d 20 4e 55 4c 4c 2c 20 22 43 61  der != NULL, "Ca
2cd0: 6e 27 74 20 6f 70 65 6e 20 74 72 65 65 73 2e 68  n't open trees.h
2ce0: 22 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  ");.    fprintf(
2cf0: 68 65 61 64 65 72 2c 0a 09 20 20 20 20 22 2f 2a  header,..    "/*
2d00: 20 68 65 61 64 65 72 20 63 72 65 61 74 65 64 20   header created 
2d10: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 69  automatically wi
2d20: 74 68 20 2d 44 47 45 4e 5f 54 52 45 45 53 5f 48  th -DGEN_TREES_H
2d30: 20 2a 2f 5c 6e 5c 6e 22 29 3b 0a 0a 20 20 20 20   */\n\n");..    
2d40: 66 70 72 69 6e 74 66 28 68 65 61 64 65 72 2c 20  fprintf(header, 
2d50: 22 6c 6f 63 61 6c 20 63 6f 6e 73 74 20 63 74 5f  "local const ct_
2d60: 64 61 74 61 20 73 74 61 74 69 63 5f 6c 74 72 65  data static_ltre
2d70: 65 5b 4c 5f 43 4f 44 45 53 2b 32 5d 20 3d 20 7b  e[L_CODES+2] = {
2d80: 5c 6e 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69  \n");.    for (i
2d90: 20 3d 20 30 3b 20 69 20 3c 20 4c 5f 43 4f 44 45   = 0; i < L_CODE
2da0: 53 2b 32 3b 20 69 2b 2b 29 20 7b 0a 09 66 70 72  S+2; i++) {..fpr
2db0: 69 6e 74 66 28 68 65 61 64 65 72 2c 20 22 7b 7b  intf(header, "{{
2dc0: 25 33 75 7d 2c 7b 25 33 75 7d 7d 25 73 22 2c 20  %3u},{%3u}}%s", 
2dd0: 73 74 61 74 69 63 5f 6c 74 72 65 65 5b 69 5d 2e  static_ltree[i].
2de0: 43 6f 64 65 2c 0a 09 09 73 74 61 74 69 63 5f 6c  Code,...static_l
2df0: 74 72 65 65 5b 69 5d 2e 4c 65 6e 2c 20 53 45 50  tree[i].Len, SEP
2e00: 41 52 41 54 4f 52 28 69 2c 20 4c 5f 43 4f 44 45  ARATOR(i, L_CODE
2e10: 53 2b 31 2c 20 35 29 29 3b 0a 20 20 20 20 7d 0a  S+1, 5));.    }.
2e20: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 68 65 61  .    fprintf(hea
2e30: 64 65 72 2c 20 22 6c 6f 63 61 6c 20 63 6f 6e 73  der, "local cons
2e40: 74 20 63 74 5f 64 61 74 61 20 73 74 61 74 69 63  t ct_data static
2e50: 5f 64 74 72 65 65 5b 44 5f 43 4f 44 45 53 5d 20  _dtree[D_CODES] 
2e60: 3d 20 7b 5c 6e 22 29 3b 0a 20 20 20 20 66 6f 72  = {\n");.    for
2e70: 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 44 5f 43   (i = 0; i < D_C
2e80: 4f 44 45 53 3b 20 69 2b 2b 29 20 7b 0a 09 66 70  ODES; i++) {..fp
2e90: 72 69 6e 74 66 28 68 65 61 64 65 72 2c 20 22 7b  rintf(header, "{
2ea0: 7b 25 32 75 7d 2c 7b 25 32 75 7d 7d 25 73 22 2c  {%2u},{%2u}}%s",
2eb0: 20 73 74 61 74 69 63 5f 64 74 72 65 65 5b 69 5d   static_dtree[i]
2ec0: 2e 43 6f 64 65 2c 0a 09 09 73 74 61 74 69 63 5f  .Code,...static_
2ed0: 64 74 72 65 65 5b 69 5d 2e 4c 65 6e 2c 20 53 45  dtree[i].Len, SE
2ee0: 50 41 52 41 54 4f 52 28 69 2c 20 44 5f 43 4f 44  PARATOR(i, D_COD
2ef0: 45 53 2d 31 2c 20 35 29 29 3b 0a 20 20 20 20 7d  ES-1, 5));.    }
2f00: 0a 0a 20 20 20 20 66 70 72 69 6e 74 66 28 68 65  ..    fprintf(he
2f10: 61 64 65 72 2c 20 22 63 6f 6e 73 74 20 75 63 68  ader, "const uch
2f20: 20 5f 64 69 73 74 5f 63 6f 64 65 5b 44 49 53 54   _dist_code[DIST
2f30: 5f 43 4f 44 45 5f 4c 45 4e 5d 20 3d 20 7b 5c 6e  _CODE_LEN] = {\n
2f40: 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 20 3d  ");.    for (i =
2f50: 20 30 3b 20 69 20 3c 20 44 49 53 54 5f 43 4f 44   0; i < DIST_COD
2f60: 45 5f 4c 45 4e 3b 20 69 2b 2b 29 20 7b 0a 09 66  E_LEN; i++) {..f
2f70: 70 72 69 6e 74 66 28 68 65 61 64 65 72 2c 20 22  printf(header, "
2f80: 25 32 75 25 73 22 2c 20 5f 64 69 73 74 5f 63 6f  %2u%s", _dist_co
2f90: 64 65 5b 69 5d 2c 0a 09 09 53 45 50 41 52 41 54  de[i],...SEPARAT
2fa0: 4f 52 28 69 2c 20 44 49 53 54 5f 43 4f 44 45 5f  OR(i, DIST_CODE_
2fb0: 4c 45 4e 2d 31 2c 20 32 30 29 29 3b 0a 20 20 20  LEN-1, 20));.   
2fc0: 20 7d 0a 0a 20 20 20 20 66 70 72 69 6e 74 66 28   }..    fprintf(
2fd0: 68 65 61 64 65 72 2c 20 22 63 6f 6e 73 74 20 75  header, "const u
2fe0: 63 68 20 5f 6c 65 6e 67 74 68 5f 63 6f 64 65 5b  ch _length_code[
2ff0: 4d 41 58 5f 4d 41 54 43 48 2d 4d 49 4e 5f 4d 41  MAX_MATCH-MIN_MA
3000: 54 43 48 2b 31 5d 3d 20 7b 5c 6e 22 29 3b 0a 20  TCH+1]= {\n");. 
3010: 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69     for (i = 0; i
3020: 20 3c 20 4d 41 58 5f 4d 41 54 43 48 2d 4d 49 4e   < MAX_MATCH-MIN
3030: 5f 4d 41 54 43 48 2b 31 3b 20 69 2b 2b 29 20 7b  _MATCH+1; i++) {
3040: 0a 09 66 70 72 69 6e 74 66 28 68 65 61 64 65 72  ..fprintf(header
3050: 2c 20 22 25 32 75 25 73 22 2c 20 5f 6c 65 6e 67  , "%2u%s", _leng
3060: 74 68 5f 63 6f 64 65 5b 69 5d 2c 0a 09 09 53 45  th_code[i],...SE
3070: 50 41 52 41 54 4f 52 28 69 2c 20 4d 41 58 5f 4d  PARATOR(i, MAX_M
3080: 41 54 43 48 2d 4d 49 4e 5f 4d 41 54 43 48 2c 20  ATCH-MIN_MATCH, 
3090: 32 30 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  20));.    }..   
30a0: 20 66 70 72 69 6e 74 66 28 68 65 61 64 65 72 2c   fprintf(header,
30b0: 20 22 6c 6f 63 61 6c 20 63 6f 6e 73 74 20 69 6e   "local const in
30c0: 74 20 62 61 73 65 5f 6c 65 6e 67 74 68 5b 4c 45  t base_length[LE
30d0: 4e 47 54 48 5f 43 4f 44 45 53 5d 20 3d 20 7b 5c  NGTH_CODES] = {\
30e0: 6e 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 20  n");.    for (i 
30f0: 3d 20 30 3b 20 69 20 3c 20 4c 45 4e 47 54 48 5f  = 0; i < LENGTH_
3100: 43 4f 44 45 53 3b 20 69 2b 2b 29 20 7b 0a 09 66  CODES; i++) {..f
3110: 70 72 69 6e 74 66 28 68 65 61 64 65 72 2c 20 22  printf(header, "
3120: 25 31 75 25 73 22 2c 20 62 61 73 65 5f 6c 65 6e  %1u%s", base_len
3130: 67 74 68 5b 69 5d 2c 0a 09 09 53 45 50 41 52 41  gth[i],...SEPARA
3140: 54 4f 52 28 69 2c 20 4c 45 4e 47 54 48 5f 43 4f  TOR(i, LENGTH_CO
3150: 44 45 53 2d 31 2c 20 32 30 29 29 3b 0a 20 20 20  DES-1, 20));.   
3160: 20 7d 0a 0a 20 20 20 20 66 70 72 69 6e 74 66 28   }..    fprintf(
3170: 68 65 61 64 65 72 2c 20 22 6c 6f 63 61 6c 20 63  header, "local c
3180: 6f 6e 73 74 20 69 6e 74 20 62 61 73 65 5f 64 69  onst int base_di
3190: 73 74 5b 44 5f 43 4f 44 45 53 5d 20 3d 20 7b 5c  st[D_CODES] = {\
31a0: 6e 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 20  n");.    for (i 
31b0: 3d 20 30 3b 20 69 20 3c 20 44 5f 43 4f 44 45 53  = 0; i < D_CODES
31c0: 3b 20 69 2b 2b 29 20 7b 0a 09 66 70 72 69 6e 74  ; i++) {..fprint
31d0: 66 28 68 65 61 64 65 72 2c 20 22 25 35 75 25 73  f(header, "%5u%s
31e0: 22 2c 20 62 61 73 65 5f 64 69 73 74 5b 69 5d 2c  ", base_dist[i],
31f0: 0a 09 09 53 45 50 41 52 41 54 4f 52 28 69 2c 20  ...SEPARATOR(i, 
3200: 44 5f 43 4f 44 45 53 2d 31 2c 20 31 30 29 29 3b  D_CODES-1, 10));
3210: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 63 6c 6f  .    }..    fclo
3220: 73 65 28 68 65 61 64 65 72 29 3b 0a 7d 0a 23 65  se(header);.}.#e
3230: 6e 64 69 66 20 2f 2a 20 47 45 4e 5f 54 52 45 45  ndif /* GEN_TREE
3240: 53 5f 48 20 2a 2f 0a 0a 2f 2a 20 3d 3d 3d 3d 3d  S_H */../* =====
3250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3290: 3d 3d 3d 3d 3d 3d 0a 20 2a 20 49 6e 69 74 69 61  ======. * Initia
32a0: 6c 69 7a 65 20 74 68 65 20 74 72 65 65 20 64 61  lize the tree da
32b0: 74 61 20 73 74 72 75 63 74 75 72 65 73 20 66 6f  ta structures fo
32c0: 72 20 61 20 6e 65 77 20 7a 6c 69 62 20 73 74 72  r a new zlib str
32d0: 65 61 6d 2e 0a 20 2a 2f 0a 76 6f 69 64 20 5f 74  eam.. */.void _t
32e0: 72 5f 69 6e 69 74 28 73 29 0a 20 20 20 20 64 65  r_init(s).    de
32f0: 66 6c 61 74 65 5f 73 74 61 74 65 20 2a 73 3b 0a  flate_state *s;.
3300: 7b 0a 20 20 20 20 74 72 5f 73 74 61 74 69 63 5f  {.    tr_static_
3310: 69 6e 69 74 28 29 3b 0a 0a 20 20 20 20 73 2d 3e  init();..    s->
3320: 6c 5f 64 65 73 63 2e 64 79 6e 5f 74 72 65 65 20  l_desc.dyn_tree 
3330: 3d 20 73 2d 3e 64 79 6e 5f 6c 74 72 65 65 3b 0a  = s->dyn_ltree;.
3340: 20 20 20 20 73 2d 3e 6c 5f 64 65 73 63 2e 73 74      s->l_desc.st
3350: 61 74 5f 64 65 73 63 20 3d 20 26 73 74 61 74 69  at_desc = &stati
3360: 63 5f 6c 5f 64 65 73 63 3b 0a 0a 20 20 20 20 73  c_l_desc;..    s
3370: 2d 3e 64 5f 64 65 73 63 2e 64 79 6e 5f 74 72 65  ->d_desc.dyn_tre
3380: 65 20 3d 20 73 2d 3e 64 79 6e 5f 64 74 72 65 65  e = s->dyn_dtree
3390: 3b 0a 20 20 20 20 73 2d 3e 64 5f 64 65 73 63 2e  ;.    s->d_desc.
33a0: 73 74 61 74 5f 64 65 73 63 20 3d 20 26 73 74 61  stat_desc = &sta
33b0: 74 69 63 5f 64 5f 64 65 73 63 3b 0a 0a 20 20 20  tic_d_desc;..   
33c0: 20 73 2d 3e 62 6c 5f 64 65 73 63 2e 64 79 6e 5f   s->bl_desc.dyn_
33d0: 74 72 65 65 20 3d 20 73 2d 3e 62 6c 5f 74 72 65  tree = s->bl_tre
33e0: 65 3b 0a 20 20 20 20 73 2d 3e 62 6c 5f 64 65 73  e;.    s->bl_des
33f0: 63 2e 73 74 61 74 5f 64 65 73 63 20 3d 20 26 73  c.stat_desc = &s
3400: 74 61 74 69 63 5f 62 6c 5f 64 65 73 63 3b 0a 0a  tatic_bl_desc;..
3410: 20 20 20 20 73 2d 3e 62 69 5f 62 75 66 20 3d 20      s->bi_buf = 
3420: 30 3b 0a 20 20 20 20 73 2d 3e 62 69 5f 76 61 6c  0;.    s->bi_val
3430: 69 64 20 3d 20 30 3b 0a 20 20 20 20 73 2d 3e 6c  id = 0;.    s->l
3440: 61 73 74 5f 65 6f 62 5f 6c 65 6e 20 3d 20 38 3b  ast_eob_len = 8;
3450: 20 2f 2a 20 65 6e 6f 75 67 68 20 6c 6f 6f 6b 61   /* enough looka
3460: 68 65 61 64 20 66 6f 72 20 69 6e 66 6c 61 74 65  head for inflate
3470: 20 2a 2f 0a 23 69 66 64 65 66 20 44 45 42 55 47   */.#ifdef DEBUG
3480: 0a 20 20 20 20 73 2d 3e 63 6f 6d 70 72 65 73 73  .    s->compress
3490: 65 64 5f 6c 65 6e 20 3d 20 30 4c 3b 0a 20 20 20  ed_len = 0L;.   
34a0: 20 73 2d 3e 62 69 74 73 5f 73 65 6e 74 20 3d 20   s->bits_sent = 
34b0: 30 4c 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  0L;.#endif..    
34c0: 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  /* Initialize th
34d0: 65 20 66 69 72 73 74 20 62 6c 6f 63 6b 20 6f 66  e first block of
34e0: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 3a   the first file:
34f0: 20 2a 2f 0a 20 20 20 20 69 6e 69 74 5f 62 6c 6f   */.    init_blo
3500: 63 6b 28 73 29 3b 0a 7d 0a 0a 2f 2a 20 3d 3d 3d  ck(s);.}../* ===
3510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3550: 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 49 6e 69 74  ========. * Init
3560: 69 61 6c 69 7a 65 20 61 20 6e 65 77 20 62 6c 6f  ialize a new blo
3570: 63 6b 2e 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 76 6f  ck.. */.local vo
3580: 69 64 20 69 6e 69 74 5f 62 6c 6f 63 6b 28 73 29  id init_block(s)
3590: 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61  .    deflate_sta
35a0: 74 65 20 2a 73 3b 0a 7b 0a 20 20 20 20 69 6e 74  te *s;.{.    int
35b0: 20 6e 3b 20 2f 2a 20 69 74 65 72 61 74 65 73 20   n; /* iterates 
35c0: 6f 76 65 72 20 74 72 65 65 20 65 6c 65 6d 65 6e  over tree elemen
35d0: 74 73 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 49 6e  ts */..    /* In
35e0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 74 72 65  itialize the tre
35f0: 65 73 2e 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28  es. */.    for (
3600: 6e 20 3d 20 30 3b 20 6e 20 3c 20 4c 5f 43 4f 44  n = 0; n < L_COD
3610: 45 53 3b 20 20 6e 2b 2b 29 20 73 2d 3e 64 79 6e  ES;  n++) s->dyn
3620: 5f 6c 74 72 65 65 5b 6e 5d 2e 46 72 65 71 20 3d  _ltree[n].Freq =
3630: 20 30 3b 0a 20 20 20 20 66 6f 72 20 28 6e 20 3d   0;.    for (n =
3640: 20 30 3b 20 6e 20 3c 20 44 5f 43 4f 44 45 53 3b   0; n < D_CODES;
3650: 20 20 6e 2b 2b 29 20 73 2d 3e 64 79 6e 5f 64 74    n++) s->dyn_dt
3660: 72 65 65 5b 6e 5d 2e 46 72 65 71 20 3d 20 30 3b  ree[n].Freq = 0;
3670: 0a 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b  .    for (n = 0;
3680: 20 6e 20 3c 20 42 4c 5f 43 4f 44 45 53 3b 20 6e   n < BL_CODES; n
3690: 2b 2b 29 20 73 2d 3e 62 6c 5f 74 72 65 65 5b 6e  ++) s->bl_tree[n
36a0: 5d 2e 46 72 65 71 20 3d 20 30 3b 0a 0a 20 20 20  ].Freq = 0;..   
36b0: 20 73 2d 3e 64 79 6e 5f 6c 74 72 65 65 5b 45 4e   s->dyn_ltree[EN
36c0: 44 5f 42 4c 4f 43 4b 5d 2e 46 72 65 71 20 3d 20  D_BLOCK].Freq = 
36d0: 31 3b 0a 20 20 20 20 73 2d 3e 6f 70 74 5f 6c 65  1;.    s->opt_le
36e0: 6e 20 3d 20 73 2d 3e 73 74 61 74 69 63 5f 6c 65  n = s->static_le
36f0: 6e 20 3d 20 30 4c 3b 0a 20 20 20 20 73 2d 3e 6c  n = 0L;.    s->l
3700: 61 73 74 5f 6c 69 74 20 3d 20 73 2d 3e 6d 61 74  ast_lit = s->mat
3710: 63 68 65 73 20 3d 20 30 3b 0a 7d 0a 0a 23 64 65  ches = 0;.}..#de
3720: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 20 31 0a  fine SMALLEST 1.
3730: 2f 2a 20 49 6e 64 65 78 20 77 69 74 68 69 6e 20  /* Index within 
3740: 74 68 65 20 68 65 61 70 20 61 72 72 61 79 20 6f  the heap array o
3750: 66 20 6c 65 61 73 74 20 66 72 65 71 75 65 6e 74  f least frequent
3760: 20 6e 6f 64 65 20 69 6e 20 74 68 65 20 48 75 66   node in the Huf
3770: 66 6d 61 6e 20 74 72 65 65 20 2a 2f 0a 0a 0a 2f  fman tree */.../
3780: 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  * ==============
3790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a  =============. *
37d0: 20 52 65 6d 6f 76 65 20 74 68 65 20 73 6d 61 6c   Remove the smal
37e0: 6c 65 73 74 20 65 6c 65 6d 65 6e 74 20 66 72 6f  lest element fro
37f0: 6d 20 74 68 65 20 68 65 61 70 20 61 6e 64 20 72  m the heap and r
3800: 65 63 72 65 61 74 65 20 74 68 65 20 68 65 61 70  ecreate the heap
3810: 20 77 69 74 68 0a 20 2a 20 6f 6e 65 20 6c 65 73   with. * one les
3820: 73 20 65 6c 65 6d 65 6e 74 2e 20 55 70 64 61 74  s element. Updat
3830: 65 73 20 68 65 61 70 20 61 6e 64 20 68 65 61 70  es heap and heap
3840: 5f 6c 65 6e 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e  _len.. */.#defin
3850: 65 20 70 71 72 65 6d 6f 76 65 28 73 2c 20 74 72  e pqremove(s, tr
3860: 65 65 2c 20 74 6f 70 29 20 5c 0a 7b 5c 0a 20 20  ee, top) \.{\.  
3870: 20 20 74 6f 70 20 3d 20 73 2d 3e 68 65 61 70 5b    top = s->heap[
3880: 53 4d 41 4c 4c 45 53 54 5d 3b 20 5c 0a 20 20 20  SMALLEST]; \.   
3890: 20 73 2d 3e 68 65 61 70 5b 53 4d 41 4c 4c 45 53   s->heap[SMALLES
38a0: 54 5d 20 3d 20 73 2d 3e 68 65 61 70 5b 73 2d 3e  T] = s->heap[s->
38b0: 68 65 61 70 5f 6c 65 6e 2d 2d 5d 3b 20 5c 0a 20  heap_len--]; \. 
38c0: 20 20 20 70 71 64 6f 77 6e 68 65 61 70 28 73 2c     pqdownheap(s,
38d0: 20 74 72 65 65 2c 20 53 4d 41 4c 4c 45 53 54 29   tree, SMALLEST)
38e0: 3b 20 5c 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d  ; \.}../* ======
38f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3930: 3d 3d 3d 3d 3d 0a 20 2a 20 43 6f 6d 70 61 72 65  =====. * Compare
3940: 73 20 74 6f 20 73 75 62 74 72 65 65 73 2c 20 75  s to subtrees, u
3950: 73 69 6e 67 20 74 68 65 20 74 72 65 65 20 64 65  sing the tree de
3960: 70 74 68 20 61 73 20 74 69 65 20 62 72 65 61 6b  pth as tie break
3970: 65 72 20 77 68 65 6e 0a 20 2a 20 74 68 65 20 73  er when. * the s
3980: 75 62 74 72 65 65 73 20 68 61 76 65 20 65 71 75  ubtrees have equ
3990: 61 6c 20 66 72 65 71 75 65 6e 63 79 2e 20 54 68  al frequency. Th
39a0: 69 73 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65  is minimizes the
39b0: 20 77 6f 72 73 74 20 63 61 73 65 20 6c 65 6e 67   worst case leng
39c0: 74 68 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th.. */.#define 
39d0: 73 6d 61 6c 6c 65 72 28 74 72 65 65 2c 20 6e 2c  smaller(tree, n,
39e0: 20 6d 2c 20 64 65 70 74 68 29 20 5c 0a 20 20 20   m, depth) \.   
39f0: 28 74 72 65 65 5b 6e 5d 2e 46 72 65 71 20 3c 20  (tree[n].Freq < 
3a00: 74 72 65 65 5b 6d 5d 2e 46 72 65 71 20 7c 7c 20  tree[m].Freq || 
3a10: 5c 0a 20 20 20 28 74 72 65 65 5b 6e 5d 2e 46 72  \.   (tree[n].Fr
3a20: 65 71 20 3d 3d 20 74 72 65 65 5b 6d 5d 2e 46 72  eq == tree[m].Fr
3a30: 65 71 20 26 26 20 64 65 70 74 68 5b 6e 5d 20 3c  eq && depth[n] <
3a40: 3d 20 64 65 70 74 68 5b 6d 5d 29 29 0a 0a 2f 2a  = depth[m]))../*
3a50: 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   ===============
3a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3a70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3a80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3a90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20  ============. * 
3aa0: 52 65 73 74 6f 72 65 20 74 68 65 20 68 65 61 70  Restore the heap
3ab0: 20 70 72 6f 70 65 72 74 79 20 62 79 20 6d 6f 76   property by mov
3ac0: 69 6e 67 20 64 6f 77 6e 20 74 68 65 20 74 72 65  ing down the tre
3ad0: 65 20 73 74 61 72 74 69 6e 67 20 61 74 20 6e 6f  e starting at no
3ae0: 64 65 20 6b 2c 0a 20 2a 20 65 78 63 68 61 6e 67  de k,. * exchang
3af0: 69 6e 67 20 61 20 6e 6f 64 65 20 77 69 74 68 20  ing a node with 
3b00: 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 6f 66 20  the smallest of 
3b10: 69 74 73 20 74 77 6f 20 73 6f 6e 73 20 69 66 20  its two sons if 
3b20: 6e 65 63 65 73 73 61 72 79 2c 20 73 74 6f 70 70  necessary, stopp
3b30: 69 6e 67 0a 20 2a 20 77 68 65 6e 20 74 68 65 20  ing. * when the 
3b40: 68 65 61 70 20 70 72 6f 70 65 72 74 79 20 69 73  heap property is
3b50: 20 72 65 2d 65 73 74 61 62 6c 69 73 68 65 64 20   re-established 
3b60: 28 65 61 63 68 20 66 61 74 68 65 72 20 73 6d 61  (each father sma
3b70: 6c 6c 65 72 20 74 68 61 6e 20 69 74 73 0a 20 2a  ller than its. *
3b80: 20 74 77 6f 20 73 6f 6e 73 29 2e 0a 20 2a 2f 0a   two sons).. */.
3b90: 6c 6f 63 61 6c 20 76 6f 69 64 20 70 71 64 6f 77  local void pqdow
3ba0: 6e 68 65 61 70 28 73 2c 20 74 72 65 65 2c 20 6b  nheap(s, tree, k
3bb0: 29 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74  ).    deflate_st
3bc0: 61 74 65 20 2a 73 3b 0a 20 20 20 20 63 74 5f 64  ate *s;.    ct_d
3bd0: 61 74 61 20 2a 74 72 65 65 3b 20 20 2f 2a 20 74  ata *tree;  /* t
3be0: 68 65 20 74 72 65 65 20 74 6f 20 72 65 73 74 6f  he tree to resto
3bf0: 72 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6b 3b  re */.    int k;
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c10: 2a 20 6e 6f 64 65 20 74 6f 20 6d 6f 76 65 20 64  * node to move d
3c20: 6f 77 6e 20 2a 2f 0a 7b 0a 20 20 20 20 69 6e 74  own */.{.    int
3c30: 20 76 20 3d 20 73 2d 3e 68 65 61 70 5b 6b 5d 3b   v = s->heap[k];
3c40: 0a 20 20 20 20 69 6e 74 20 6a 20 3d 20 6b 20 3c  .    int j = k <
3c50: 3c 20 31 3b 20 20 2f 2a 20 6c 65 66 74 20 73 6f  < 1;  /* left so
3c60: 6e 20 6f 66 20 6b 20 2a 2f 0a 20 20 20 20 77 68  n of k */.    wh
3c70: 69 6c 65 20 28 6a 20 3c 3d 20 73 2d 3e 68 65 61  ile (j <= s->hea
3c80: 70 5f 6c 65 6e 29 20 7b 0a 20 20 20 20 20 20 20  p_len) {.       
3c90: 20 2f 2a 20 53 65 74 20 6a 20 74 6f 20 74 68 65   /* Set j to the
3ca0: 20 73 6d 61 6c 6c 65 73 74 20 6f 66 20 74 68 65   smallest of the
3cb0: 20 74 77 6f 20 73 6f 6e 73 3a 20 2a 2f 0a 20 20   two sons: */.  
3cc0: 20 20 20 20 20 20 69 66 20 28 6a 20 3c 20 73 2d        if (j < s-
3cd0: 3e 68 65 61 70 5f 6c 65 6e 20 26 26 0a 20 20 20  >heap_len &&.   
3ce0: 20 20 20 20 20 20 20 20 20 73 6d 61 6c 6c 65 72           smaller
3cf0: 28 74 72 65 65 2c 20 73 2d 3e 68 65 61 70 5b 6a  (tree, s->heap[j
3d00: 2b 31 5d 2c 20 73 2d 3e 68 65 61 70 5b 6a 5d 2c  +1], s->heap[j],
3d10: 20 73 2d 3e 64 65 70 74 68 29 29 20 7b 0a 20 20   s->depth)) {.  
3d20: 20 20 20 20 20 20 20 20 20 20 6a 2b 2b 3b 0a 20            j++;. 
3d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3d40: 20 2f 2a 20 45 78 69 74 20 69 66 20 76 20 69 73   /* Exit if v is
3d50: 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 62 6f   smaller than bo
3d60: 74 68 20 73 6f 6e 73 20 2a 2f 0a 20 20 20 20 20  th sons */.     
3d70: 20 20 20 69 66 20 28 73 6d 61 6c 6c 65 72 28 74     if (smaller(t
3d80: 72 65 65 2c 20 76 2c 20 73 2d 3e 68 65 61 70 5b  ree, v, s->heap[
3d90: 6a 5d 2c 20 73 2d 3e 64 65 70 74 68 29 29 20 62  j], s->depth)) b
3da0: 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f  reak;..        /
3db0: 2a 20 45 78 63 68 61 6e 67 65 20 76 20 77 69 74  * Exchange v wit
3dc0: 68 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 73  h the smallest s
3dd0: 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 2d  on */.        s-
3de0: 3e 68 65 61 70 5b 6b 5d 20 3d 20 73 2d 3e 68 65  >heap[k] = s->he
3df0: 61 70 5b 6a 5d 3b 20 20 6b 20 3d 20 6a 3b 0a 0a  ap[j];  k = j;..
3e00: 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 64 20 63          /* And c
3e10: 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 74 68 65  ontinue down the
3e20: 20 74 72 65 65 2c 20 73 65 74 74 69 6e 67 20 6a   tree, setting j
3e30: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 73 6f 6e   to the left son
3e40: 20 6f 66 20 6b 20 2a 2f 0a 20 20 20 20 20 20 20   of k */.       
3e50: 20 6a 20 3c 3c 3d 20 31 3b 0a 20 20 20 20 7d 0a   j <<= 1;.    }.
3e60: 20 20 20 20 73 2d 3e 68 65 61 70 5b 6b 5d 20 3d      s->heap[k] =
3e70: 20 76 3b 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d   v;.}../* ======
3e80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3eb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ec0: 3d 3d 3d 3d 3d 0a 20 2a 20 43 6f 6d 70 75 74 65  =====. * Compute
3ed0: 20 74 68 65 20 6f 70 74 69 6d 61 6c 20 62 69 74   the optimal bit
3ee0: 20 6c 65 6e 67 74 68 73 20 66 6f 72 20 61 20 74   lengths for a t
3ef0: 72 65 65 20 61 6e 64 20 75 70 64 61 74 65 20 74  ree and update t
3f00: 68 65 20 74 6f 74 61 6c 20 62 69 74 20 6c 65 6e  he total bit len
3f10: 67 74 68 0a 20 2a 20 66 6f 72 20 74 68 65 20 63  gth. * for the c
3f20: 75 72 72 65 6e 74 20 62 6c 6f 63 6b 2e 0a 20 2a  urrent block.. *
3f30: 20 49 4e 20 61 73 73 65 72 74 69 6f 6e 3a 20 74   IN assertion: t
3f40: 68 65 20 66 69 65 6c 64 73 20 66 72 65 71 20 61  he fields freq a
3f50: 6e 64 20 64 61 64 20 61 72 65 20 73 65 74 2c 20  nd dad are set, 
3f60: 68 65 61 70 5b 68 65 61 70 5f 6d 61 78 5d 20 61  heap[heap_max] a
3f70: 6e 64 0a 20 2a 20 20 20 20 61 62 6f 76 65 20 61  nd. *    above a
3f80: 72 65 20 74 68 65 20 74 72 65 65 20 6e 6f 64 65  re the tree node
3f90: 73 20 73 6f 72 74 65 64 20 62 79 20 69 6e 63 72  s sorted by incr
3fa0: 65 61 73 69 6e 67 20 66 72 65 71 75 65 6e 63 79  easing frequency
3fb0: 2e 0a 20 2a 20 4f 55 54 20 61 73 73 65 72 74 69  .. * OUT asserti
3fc0: 6f 6e 73 3a 20 74 68 65 20 66 69 65 6c 64 20 6c  ons: the field l
3fd0: 65 6e 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  en is set to the
3fe0: 20 6f 70 74 69 6d 61 6c 20 62 69 74 20 6c 65 6e   optimal bit len
3ff0: 67 74 68 2c 20 74 68 65 0a 20 2a 20 20 20 20 20  gth, the. *     
4000: 61 72 72 61 79 20 62 6c 5f 63 6f 75 6e 74 20 63  array bl_count c
4010: 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 72 65 71  ontains the freq
4020: 75 65 6e 63 69 65 73 20 66 6f 72 20 65 61 63 68  uencies for each
4030: 20 62 69 74 20 6c 65 6e 67 74 68 2e 0a 20 2a 20   bit length.. * 
4040: 20 20 20 20 54 68 65 20 6c 65 6e 67 74 68 20 6f      The length o
4050: 70 74 5f 6c 65 6e 20 69 73 20 75 70 64 61 74 65  pt_len is update
4060: 64 3b 20 73 74 61 74 69 63 5f 6c 65 6e 20 69 73  d; static_len is
4070: 20 61 6c 73 6f 20 75 70 64 61 74 65 64 20 69 66   also updated if
4080: 20 73 74 72 65 65 20 69 73 0a 20 2a 20 20 20 20   stree is. *    
4090: 20 6e 6f 74 20 6e 75 6c 6c 2e 0a 20 2a 2f 0a 6c   not null.. */.l
40a0: 6f 63 61 6c 20 76 6f 69 64 20 67 65 6e 5f 62 69  ocal void gen_bi
40b0: 74 6c 65 6e 28 73 2c 20 64 65 73 63 29 0a 20 20  tlen(s, desc).  
40c0: 20 20 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20    deflate_state 
40d0: 2a 73 3b 0a 20 20 20 20 74 72 65 65 5f 64 65 73  *s;.    tree_des
40e0: 63 20 2a 64 65 73 63 3b 20 20 20 20 2f 2a 20 74  c *desc;    /* t
40f0: 68 65 20 74 72 65 65 20 64 65 73 63 72 69 70 74  he tree descript
4100: 6f 72 20 2a 2f 0a 7b 0a 20 20 20 20 63 74 5f 64  or */.{.    ct_d
4110: 61 74 61 20 2a 74 72 65 65 20 20 20 20 20 20 20  ata *tree       
4120: 20 3d 20 64 65 73 63 2d 3e 64 79 6e 5f 74 72 65   = desc->dyn_tre
4130: 65 3b 0a 20 20 20 20 69 6e 74 20 6d 61 78 5f 63  e;.    int max_c
4140: 6f 64 65 20 20 20 20 20 20 20 20 20 3d 20 64 65  ode         = de
4150: 73 63 2d 3e 6d 61 78 5f 63 6f 64 65 3b 0a 20 20  sc->max_code;.  
4160: 20 20 63 6f 6e 73 74 20 63 74 5f 64 61 74 61 20    const ct_data 
4170: 2a 73 74 72 65 65 20 3d 20 64 65 73 63 2d 3e 73  *stree = desc->s
4180: 74 61 74 5f 64 65 73 63 2d 3e 73 74 61 74 69 63  tat_desc->static
4190: 5f 74 72 65 65 3b 0a 20 20 20 20 63 6f 6e 73 74  _tree;.    const
41a0: 20 69 6e 74 66 20 2a 65 78 74 72 61 20 20 20 20   intf *extra    
41b0: 3d 20 64 65 73 63 2d 3e 73 74 61 74 5f 64 65 73  = desc->stat_des
41c0: 63 2d 3e 65 78 74 72 61 5f 62 69 74 73 3b 0a 20  c->extra_bits;. 
41d0: 20 20 20 69 6e 74 20 62 61 73 65 20 20 20 20 20     int base     
41e0: 20 20 20 20 20 20 20 20 3d 20 64 65 73 63 2d 3e          = desc->
41f0: 73 74 61 74 5f 64 65 73 63 2d 3e 65 78 74 72 61  stat_desc->extra
4200: 5f 62 61 73 65 3b 0a 20 20 20 20 69 6e 74 20 6d  _base;.    int m
4210: 61 78 5f 6c 65 6e 67 74 68 20 20 20 20 20 20 20  ax_length       
4220: 3d 20 64 65 73 63 2d 3e 73 74 61 74 5f 64 65 73  = desc->stat_des
4230: 63 2d 3e 6d 61 78 5f 6c 65 6e 67 74 68 3b 0a 20  c->max_length;. 
4240: 20 20 20 69 6e 74 20 68 3b 20 20 20 20 20 20 20     int h;       
4250: 20 20 20 20 20 20 20 2f 2a 20 68 65 61 70 20 69         /* heap i
4260: 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
4270: 6e 2c 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  n, m;           
4280: 2f 2a 20 69 74 65 72 61 74 65 20 6f 76 65 72 20  /* iterate over 
4290: 74 68 65 20 74 72 65 65 20 65 6c 65 6d 65 6e 74  the tree element
42a0: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 69 74  s */.    int bit
42b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
42c0: 62 69 74 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  bit length */.  
42d0: 20 20 69 6e 74 20 78 62 69 74 73 3b 20 20 20 20    int xbits;    
42e0: 20 20 20 20 20 20 2f 2a 20 65 78 74 72 61 20 62        /* extra b
42f0: 69 74 73 20 2a 2f 0a 20 20 20 20 75 73 68 20 66  its */.    ush f
4300: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
4310: 2a 20 66 72 65 71 75 65 6e 63 79 20 2a 2f 0a 20  * frequency */. 
4320: 20 20 20 69 6e 74 20 6f 76 65 72 66 6c 6f 77 20     int overflow 
4330: 3d 20 30 3b 20 20 20 2f 2a 20 6e 75 6d 62 65 72  = 0;   /* number
4340: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 77 69 74   of elements wit
4350: 68 20 62 69 74 20 6c 65 6e 67 74 68 20 74 6f 6f  h bit length too
4360: 20 6c 61 72 67 65 20 2a 2f 0a 0a 20 20 20 20 66   large */..    f
4370: 6f 72 20 28 62 69 74 73 20 3d 20 30 3b 20 62 69  or (bits = 0; bi
4380: 74 73 20 3c 3d 20 4d 41 58 5f 42 49 54 53 3b 20  ts <= MAX_BITS; 
4390: 62 69 74 73 2b 2b 29 20 73 2d 3e 62 6c 5f 63 6f  bits++) s->bl_co
43a0: 75 6e 74 5b 62 69 74 73 5d 20 3d 20 30 3b 0a 0a  unt[bits] = 0;..
43b0: 20 20 20 20 2f 2a 20 49 6e 20 61 20 66 69 72 73      /* In a firs
43c0: 74 20 70 61 73 73 2c 20 63 6f 6d 70 75 74 65 20  t pass, compute 
43d0: 74 68 65 20 6f 70 74 69 6d 61 6c 20 62 69 74 20  the optimal bit 
43e0: 6c 65 6e 67 74 68 73 20 28 77 68 69 63 68 20 6d  lengths (which m
43f0: 61 79 0a 20 20 20 20 20 2a 20 6f 76 65 72 66 6c  ay.     * overfl
4400: 6f 77 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ow in the case o
4410: 66 20 74 68 65 20 62 69 74 20 6c 65 6e 67 74 68  f the bit length
4420: 20 74 72 65 65 29 2e 0a 20 20 20 20 20 2a 2f 0a   tree)..     */.
4430: 20 20 20 20 74 72 65 65 5b 73 2d 3e 68 65 61 70      tree[s->heap
4440: 5b 73 2d 3e 68 65 61 70 5f 6d 61 78 5d 5d 2e 4c  [s->heap_max]].L
4450: 65 6e 20 3d 20 30 3b 20 2f 2a 20 72 6f 6f 74 20  en = 0; /* root 
4460: 6f 66 20 74 68 65 20 68 65 61 70 20 2a 2f 0a 0a  of the heap */..
4470: 20 20 20 20 66 6f 72 20 28 68 20 3d 20 73 2d 3e      for (h = s->
4480: 68 65 61 70 5f 6d 61 78 2b 31 3b 20 68 20 3c 20  heap_max+1; h < 
4490: 48 45 41 50 5f 53 49 5a 45 3b 20 68 2b 2b 29 20  HEAP_SIZE; h++) 
44a0: 7b 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 73 2d  {.        n = s-
44b0: 3e 68 65 61 70 5b 68 5d 3b 0a 20 20 20 20 20 20  >heap[h];.      
44c0: 20 20 62 69 74 73 20 3d 20 74 72 65 65 5b 74 72    bits = tree[tr
44d0: 65 65 5b 6e 5d 2e 44 61 64 5d 2e 4c 65 6e 20 2b  ee[n].Dad].Len +
44e0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28   1;.        if (
44f0: 62 69 74 73 20 3e 20 6d 61 78 5f 6c 65 6e 67 74  bits > max_lengt
4500: 68 29 20 62 69 74 73 20 3d 20 6d 61 78 5f 6c 65  h) bits = max_le
4510: 6e 67 74 68 2c 20 6f 76 65 72 66 6c 6f 77 2b 2b  ngth, overflow++
4520: 3b 0a 20 20 20 20 20 20 20 20 74 72 65 65 5b 6e  ;.        tree[n
4530: 5d 2e 4c 65 6e 20 3d 20 28 75 73 68 29 62 69 74  ].Len = (ush)bit
4540: 73 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 65  s;.        /* We
4550: 20 6f 76 65 72 77 72 69 74 65 20 74 72 65 65 5b   overwrite tree[
4560: 6e 5d 2e 44 61 64 20 77 68 69 63 68 20 69 73 20  n].Dad which is 
4570: 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64  no longer needed
4580: 20 2a 2f 0a 0a 20 20 20 20 20 20 20 20 69 66 20   */..        if 
4590: 28 6e 20 3e 20 6d 61 78 5f 63 6f 64 65 29 20 63  (n > max_code) c
45a0: 6f 6e 74 69 6e 75 65 3b 20 2f 2a 20 6e 6f 74 20  ontinue; /* not 
45b0: 61 20 6c 65 61 66 20 6e 6f 64 65 20 2a 2f 0a 0a  a leaf node */..
45c0: 20 20 20 20 20 20 20 20 73 2d 3e 62 6c 5f 63 6f          s->bl_co
45d0: 75 6e 74 5b 62 69 74 73 5d 2b 2b 3b 0a 20 20 20  unt[bits]++;.   
45e0: 20 20 20 20 20 78 62 69 74 73 20 3d 20 30 3b 0a       xbits = 0;.
45f0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 3d          if (n >=
4600: 20 62 61 73 65 29 20 78 62 69 74 73 20 3d 20 65   base) xbits = e
4610: 78 74 72 61 5b 6e 2d 62 61 73 65 5d 3b 0a 20 20  xtra[n-base];.  
4620: 20 20 20 20 20 20 66 20 3d 20 74 72 65 65 5b 6e        f = tree[n
4630: 5d 2e 46 72 65 71 3b 0a 20 20 20 20 20 20 20 20  ].Freq;.        
4640: 73 2d 3e 6f 70 74 5f 6c 65 6e 20 2b 3d 20 28 75  s->opt_len += (u
4650: 6c 67 29 66 20 2a 20 28 62 69 74 73 20 2b 20 78  lg)f * (bits + x
4660: 62 69 74 73 29 3b 0a 20 20 20 20 20 20 20 20 69  bits);.        i
4670: 66 20 28 73 74 72 65 65 29 20 73 2d 3e 73 74 61  f (stree) s->sta
4680: 74 69 63 5f 6c 65 6e 20 2b 3d 20 28 75 6c 67 29  tic_len += (ulg)
4690: 66 20 2a 20 28 73 74 72 65 65 5b 6e 5d 2e 4c 65  f * (stree[n].Le
46a0: 6e 20 2b 20 78 62 69 74 73 29 3b 0a 20 20 20 20  n + xbits);.    
46b0: 7d 0a 20 20 20 20 69 66 20 28 6f 76 65 72 66 6c  }.    if (overfl
46c0: 6f 77 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 3b  ow == 0) return;
46d0: 0a 0a 20 20 20 20 54 72 61 63 65 28 28 73 74 64  ..    Trace((std
46e0: 65 72 72 2c 22 5c 6e 62 69 74 20 6c 65 6e 67 74  err,"\nbit lengt
46f0: 68 20 6f 76 65 72 66 6c 6f 77 5c 6e 22 29 29 3b  h overflow\n"));
4700: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4710: 70 65 6e 73 20 66 6f 72 20 65 78 61 6d 70 6c 65  pens for example
4720: 20 6f 6e 20 6f 62 6a 32 20 61 6e 64 20 70 69 63   on obj2 and pic
4730: 20 6f 66 20 74 68 65 20 43 61 6c 67 61 72 79 20   of the Calgary 
4740: 63 6f 72 70 75 73 20 2a 2f 0a 0a 20 20 20 20 2f  corpus */..    /
4750: 2a 20 46 69 6e 64 20 74 68 65 20 66 69 72 73 74  * Find the first
4760: 20 62 69 74 20 6c 65 6e 67 74 68 20 77 68 69 63   bit length whic
4770: 68 20 63 6f 75 6c 64 20 69 6e 63 72 65 61 73 65  h could increase
4780: 3a 20 2a 2f 0a 20 20 20 20 64 6f 20 7b 0a 20 20  : */.    do {.  
4790: 20 20 20 20 20 20 62 69 74 73 20 3d 20 6d 61 78        bits = max
47a0: 5f 6c 65 6e 67 74 68 2d 31 3b 0a 20 20 20 20 20  _length-1;.     
47b0: 20 20 20 77 68 69 6c 65 20 28 73 2d 3e 62 6c 5f     while (s->bl_
47c0: 63 6f 75 6e 74 5b 62 69 74 73 5d 20 3d 3d 20 30  count[bits] == 0
47d0: 29 20 62 69 74 73 2d 2d 3b 0a 20 20 20 20 20 20  ) bits--;.      
47e0: 20 20 73 2d 3e 62 6c 5f 63 6f 75 6e 74 5b 62 69    s->bl_count[bi
47f0: 74 73 5d 2d 2d 3b 20 20 20 20 20 20 2f 2a 20 6d  ts]--;      /* m
4800: 6f 76 65 20 6f 6e 65 20 6c 65 61 66 20 64 6f 77  ove one leaf dow
4810: 6e 20 74 68 65 20 74 72 65 65 20 2a 2f 0a 20 20  n the tree */.  
4820: 20 20 20 20 20 20 73 2d 3e 62 6c 5f 63 6f 75 6e        s->bl_coun
4830: 74 5b 62 69 74 73 2b 31 5d 20 2b 3d 20 32 3b 20  t[bits+1] += 2; 
4840: 2f 2a 20 6d 6f 76 65 20 6f 6e 65 20 6f 76 65 72  /* move one over
4850: 66 6c 6f 77 20 69 74 65 6d 20 61 73 20 69 74 73  flow item as its
4860: 20 62 72 6f 74 68 65 72 20 2a 2f 0a 20 20 20 20   brother */.    
4870: 20 20 20 20 73 2d 3e 62 6c 5f 63 6f 75 6e 74 5b      s->bl_count[
4880: 6d 61 78 5f 6c 65 6e 67 74 68 5d 2d 2d 3b 0a 20  max_length]--;. 
4890: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62 72         /* The br
48a0: 6f 74 68 65 72 20 6f 66 20 74 68 65 20 6f 76 65  other of the ove
48b0: 72 66 6c 6f 77 20 69 74 65 6d 20 61 6c 73 6f 20  rflow item also 
48c0: 6d 6f 76 65 73 20 6f 6e 65 20 73 74 65 70 20 75  moves one step u
48d0: 70 2c 0a 20 20 20 20 20 20 20 20 20 2a 20 62 75  p,.         * bu
48e0: 74 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 20  t this does not 
48f0: 61 66 66 65 63 74 20 62 6c 5f 63 6f 75 6e 74 5b  affect bl_count[
4900: 6d 61 78 5f 6c 65 6e 67 74 68 5d 0a 20 20 20 20  max_length].    
4910: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4920: 6f 76 65 72 66 6c 6f 77 20 2d 3d 20 32 3b 0a 20  overflow -= 2;. 
4930: 20 20 20 7d 20 77 68 69 6c 65 20 28 6f 76 65 72     } while (over
4940: 66 6c 6f 77 20 3e 20 30 29 3b 0a 0a 20 20 20 20  flow > 0);..    
4950: 2f 2a 20 4e 6f 77 20 72 65 63 6f 6d 70 75 74 65  /* Now recompute
4960: 20 61 6c 6c 20 62 69 74 20 6c 65 6e 67 74 68 73   all bit lengths
4970: 2c 20 73 63 61 6e 6e 69 6e 67 20 69 6e 20 69 6e  , scanning in in
4980: 63 72 65 61 73 69 6e 67 20 66 72 65 71 75 65 6e  creasing frequen
4990: 63 79 2e 0a 20 20 20 20 20 2a 20 68 20 69 73 20  cy..     * h is 
49a0: 73 74 69 6c 6c 20 65 71 75 61 6c 20 74 6f 20 48  still equal to H
49b0: 45 41 50 5f 53 49 5a 45 2e 20 28 49 74 20 69 73  EAP_SIZE. (It is
49c0: 20 73 69 6d 70 6c 65 72 20 74 6f 20 72 65 63 6f   simpler to reco
49d0: 6e 73 74 72 75 63 74 20 61 6c 6c 0a 20 20 20 20  nstruct all.    
49e0: 20 2a 20 6c 65 6e 67 74 68 73 20 69 6e 73 74 65   * lengths inste
49f0: 61 64 20 6f 66 20 66 69 78 69 6e 67 20 6f 6e 6c  ad of fixing onl
4a00: 79 20 74 68 65 20 77 72 6f 6e 67 20 6f 6e 65 73  y the wrong ones
4a10: 2e 20 54 68 69 73 20 69 64 65 61 20 69 73 20 74  . This idea is t
4a20: 61 6b 65 6e 0a 20 20 20 20 20 2a 20 66 72 6f 6d  aken.     * from
4a30: 20 27 61 72 27 20 77 72 69 74 74 65 6e 20 62 79   'ar' written by
4a40: 20 48 61 72 75 68 69 6b 6f 20 4f 6b 75 6d 75 72   Haruhiko Okumur
4a50: 61 2e 29 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  a.).     */.    
4a60: 66 6f 72 20 28 62 69 74 73 20 3d 20 6d 61 78 5f  for (bits = max_
4a70: 6c 65 6e 67 74 68 3b 20 62 69 74 73 20 21 3d 20  length; bits != 
4a80: 30 3b 20 62 69 74 73 2d 2d 29 20 7b 0a 20 20 20  0; bits--) {.   
4a90: 20 20 20 20 20 6e 20 3d 20 73 2d 3e 62 6c 5f 63       n = s->bl_c
4aa0: 6f 75 6e 74 5b 62 69 74 73 5d 3b 0a 20 20 20 20  ount[bits];.    
4ab0: 20 20 20 20 77 68 69 6c 65 20 28 6e 20 21 3d 20      while (n != 
4ac0: 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0) {.           
4ad0: 20 6d 20 3d 20 73 2d 3e 68 65 61 70 5b 2d 2d 68   m = s->heap[--h
4ae0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ];.            i
4af0: 66 20 28 6d 20 3e 20 6d 61 78 5f 63 6f 64 65 29  f (m > max_code)
4b00: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
4b10: 20 20 20 20 20 20 20 69 66 20 28 74 72 65 65 5b         if (tree[
4b20: 6d 5d 2e 4c 65 6e 20 21 3d 20 28 75 6e 73 69 67  m].Len != (unsig
4b30: 6e 65 64 29 20 62 69 74 73 29 20 7b 0a 20 20 20  ned) bits) {.   
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
4b50: 63 65 28 28 73 74 64 65 72 72 2c 22 63 6f 64 65  ce((stderr,"code
4b60: 20 25 64 20 62 69 74 73 20 25 64 2d 3e 25 64 5c   %d bits %d->%d\
4b70: 6e 22 2c 20 6d 2c 20 74 72 65 65 5b 6d 5d 2e 4c  n", m, tree[m].L
4b80: 65 6e 2c 20 62 69 74 73 29 29 3b 0a 20 20 20 20  en, bits));.    
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 73 2d 3e 6f              s->o
4ba0: 70 74 5f 6c 65 6e 20 2b 3d 20 28 28 6c 6f 6e 67  pt_len += ((long
4bb0: 29 62 69 74 73 20 2d 20 28 6c 6f 6e 67 29 74 72  )bits - (long)tr
4bc0: 65 65 5b 6d 5d 2e 4c 65 6e 29 0a 20 20 20 20 20  ee[m].Len).     
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4be0: 20 20 20 20 20 20 20 20 20 2a 28 6c 6f 6e 67 29           *(long)
4bf0: 74 72 65 65 5b 6d 5d 2e 46 72 65 71 3b 0a 20 20  tree[m].Freq;.  
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
4c10: 65 65 5b 6d 5d 2e 4c 65 6e 20 3d 20 28 75 73 68  ee[m].Len = (ush
4c20: 29 62 69 74 73 3b 0a 20 20 20 20 20 20 20 20 20  )bits;.         
4c30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
4c40: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a   n--;.        }.
4c50: 20 20 20 20 7d 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d      }.}../* ====
4c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4ca0: 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 47 65 6e 65 72  =======. * Gener
4cb0: 61 74 65 20 74 68 65 20 63 6f 64 65 73 20 66 6f  ate the codes fo
4cc0: 72 20 61 20 67 69 76 65 6e 20 74 72 65 65 20 61  r a given tree a
4cd0: 6e 64 20 62 69 74 20 63 6f 75 6e 74 73 20 28 77  nd bit counts (w
4ce0: 68 69 63 68 20 6e 65 65 64 20 6e 6f 74 20 62 65  hich need not be
4cf0: 0a 20 2a 20 6f 70 74 69 6d 61 6c 29 2e 0a 20 2a  . * optimal).. *
4d00: 20 49 4e 20 61 73 73 65 72 74 69 6f 6e 3a 20 74   IN assertion: t
4d10: 68 65 20 61 72 72 61 79 20 62 6c 5f 63 6f 75 6e  he array bl_coun
4d20: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4d30: 69 74 20 6c 65 6e 67 74 68 20 73 74 61 74 69 73  it length statis
4d40: 74 69 63 73 20 66 6f 72 0a 20 2a 20 74 68 65 20  tics for. * the 
4d50: 67 69 76 65 6e 20 74 72 65 65 20 61 6e 64 20 74  given tree and t
4d60: 68 65 20 66 69 65 6c 64 20 6c 65 6e 20 69 73 20  he field len is 
4d70: 73 65 74 20 66 6f 72 20 61 6c 6c 20 74 72 65 65  set for all tree
4d80: 20 65 6c 65 6d 65 6e 74 73 2e 0a 20 2a 20 4f 55   elements.. * OU
4d90: 54 20 61 73 73 65 72 74 69 6f 6e 3a 20 74 68 65  T assertion: the
4da0: 20 66 69 65 6c 64 20 63 6f 64 65 20 69 73 20 73   field code is s
4db0: 65 74 20 66 6f 72 20 61 6c 6c 20 74 72 65 65 20  et for all tree 
4dc0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 6e 6f 6e 0a  elements of non.
4dd0: 20 2a 20 20 20 20 20 7a 65 72 6f 20 63 6f 64 65   *     zero code
4de0: 20 6c 65 6e 67 74 68 2e 0a 20 2a 2f 0a 6c 6f 63   length.. */.loc
4df0: 61 6c 20 76 6f 69 64 20 67 65 6e 5f 63 6f 64 65  al void gen_code
4e00: 73 20 28 74 72 65 65 2c 20 6d 61 78 5f 63 6f 64  s (tree, max_cod
4e10: 65 2c 20 62 6c 5f 63 6f 75 6e 74 29 0a 20 20 20  e, bl_count).   
4e20: 20 63 74 5f 64 61 74 61 20 2a 74 72 65 65 3b 20   ct_data *tree; 
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
4e40: 68 65 20 74 72 65 65 20 74 6f 20 64 65 63 6f 72  he tree to decor
4e50: 61 74 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6d  ate */.    int m
4e60: 61 78 5f 63 6f 64 65 3b 20 20 20 20 20 20 20 20  ax_code;        
4e70: 20 20 20 20 20 20 2f 2a 20 6c 61 72 67 65 73 74        /* largest
4e80: 20 63 6f 64 65 20 77 69 74 68 20 6e 6f 6e 20 7a   code with non z
4e90: 65 72 6f 20 66 72 65 71 75 65 6e 63 79 20 2a 2f  ero frequency */
4ea0: 0a 20 20 20 20 75 73 68 66 20 2a 62 6c 5f 63 6f  .    ushf *bl_co
4eb0: 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
4ec0: 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 64  /* number of cod
4ed0: 65 73 20 61 74 20 65 61 63 68 20 62 69 74 20 6c  es at each bit l
4ee0: 65 6e 67 74 68 20 2a 2f 0a 7b 0a 20 20 20 20 75  ength */.{.    u
4ef0: 73 68 20 6e 65 78 74 5f 63 6f 64 65 5b 4d 41 58  sh next_code[MAX
4f00: 5f 42 49 54 53 2b 31 5d 3b 20 2f 2a 20 6e 65 78  _BITS+1]; /* nex
4f10: 74 20 63 6f 64 65 20 76 61 6c 75 65 20 66 6f 72  t code value for
4f20: 20 65 61 63 68 20 62 69 74 20 6c 65 6e 67 74 68   each bit length
4f30: 20 2a 2f 0a 20 20 20 20 75 73 68 20 63 6f 64 65   */.    ush code
4f40: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4f50: 20 20 20 2f 2a 20 72 75 6e 6e 69 6e 67 20 63 6f     /* running co
4f60: 64 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  de value */.    
4f70: 69 6e 74 20 62 69 74 73 3b 20 20 20 20 20 20 20  int bits;       
4f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 62 69             /* bi
4f90: 74 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  t index */.    i
4fa0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
4fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 64            /* cod
4fc0: 65 20 69 6e 64 65 78 20 2a 2f 0a 0a 20 20 20 20  e index */..    
4fd0: 2f 2a 20 54 68 65 20 64 69 73 74 72 69 62 75 74  /* The distribut
4fe0: 69 6f 6e 20 63 6f 75 6e 74 73 20 61 72 65 20 66  ion counts are f
4ff0: 69 72 73 74 20 75 73 65 64 20 74 6f 20 67 65 6e  irst used to gen
5000: 65 72 61 74 65 20 74 68 65 20 63 6f 64 65 20 76  erate the code v
5010: 61 6c 75 65 73 0a 20 20 20 20 20 2a 20 77 69 74  alues.     * wit
5020: 68 6f 75 74 20 62 69 74 20 72 65 76 65 72 73 61  hout bit reversa
5030: 6c 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66  l..     */.    f
5040: 6f 72 20 28 62 69 74 73 20 3d 20 31 3b 20 62 69  or (bits = 1; bi
5050: 74 73 20 3c 3d 20 4d 41 58 5f 42 49 54 53 3b 20  ts <= MAX_BITS; 
5060: 62 69 74 73 2b 2b 29 20 7b 0a 20 20 20 20 20 20  bits++) {.      
5070: 20 20 6e 65 78 74 5f 63 6f 64 65 5b 62 69 74 73    next_code[bits
5080: 5d 20 3d 20 63 6f 64 65 20 3d 20 28 63 6f 64 65  ] = code = (code
5090: 20 2b 20 62 6c 5f 63 6f 75 6e 74 5b 62 69 74 73   + bl_count[bits
50a0: 2d 31 5d 29 20 3c 3c 20 31 3b 0a 20 20 20 20 7d  -1]) << 1;.    }
50b0: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 68  .    /* Check th
50c0: 61 74 20 74 68 65 20 62 69 74 20 63 6f 75 6e 74  at the bit count
50d0: 73 20 69 6e 20 62 6c 5f 63 6f 75 6e 74 20 61 72  s in bl_count ar
50e0: 65 20 63 6f 6e 73 69 73 74 65 6e 74 2e 20 54 68  e consistent. Th
50f0: 65 20 6c 61 73 74 20 63 6f 64 65 0a 20 20 20 20  e last code.    
5100: 20 2a 20 6d 75 73 74 20 62 65 20 61 6c 6c 20 6f   * must be all o
5110: 6e 65 73 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20  nes..     */.   
5120: 20 41 73 73 65 72 74 20 28 63 6f 64 65 20 2b 20   Assert (code + 
5130: 62 6c 5f 63 6f 75 6e 74 5b 4d 41 58 5f 42 49 54  bl_count[MAX_BIT
5140: 53 5d 2d 31 20 3d 3d 20 28 31 3c 3c 4d 41 58 5f  S]-1 == (1<<MAX_
5150: 42 49 54 53 29 2d 31 2c 0a 20 20 20 20 20 20 20  BITS)-1,.       
5160: 20 20 20 20 20 22 69 6e 63 6f 6e 73 69 73 74 65       "inconsiste
5170: 6e 74 20 62 69 74 20 63 6f 75 6e 74 73 22 29 3b  nt bit counts");
5180: 0a 20 20 20 20 54 72 61 63 65 76 28 28 73 74 64  .    Tracev((std
5190: 65 72 72 2c 22 5c 6e 67 65 6e 5f 63 6f 64 65 73  err,"\ngen_codes
51a0: 3a 20 6d 61 78 5f 63 6f 64 65 20 25 64 20 22 2c  : max_code %d ",
51b0: 20 6d 61 78 5f 63 6f 64 65 29 29 3b 0a 0a 20 20   max_code));..  
51c0: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 20 6e    for (n = 0;  n
51d0: 20 3c 3d 20 6d 61 78 5f 63 6f 64 65 3b 20 6e 2b   <= max_code; n+
51e0: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  +) {.        int
51f0: 20 6c 65 6e 20 3d 20 74 72 65 65 5b 6e 5d 2e 4c   len = tree[n].L
5200: 65 6e 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  en;.        if (
5210: 6c 65 6e 20 3d 3d 20 30 29 20 63 6f 6e 74 69 6e  len == 0) contin
5220: 75 65 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e  ue;.        /* N
5230: 6f 77 20 72 65 76 65 72 73 65 20 74 68 65 20 62  ow reverse the b
5240: 69 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 74  its */.        t
5250: 72 65 65 5b 6e 5d 2e 43 6f 64 65 20 3d 20 62 69  ree[n].Code = bi
5260: 5f 72 65 76 65 72 73 65 28 6e 65 78 74 5f 63 6f  _reverse(next_co
5270: 64 65 5b 6c 65 6e 5d 2b 2b 2c 20 6c 65 6e 29 3b  de[len]++, len);
5280: 0a 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 63  ..        Tracec
5290: 76 28 74 72 65 65 20 21 3d 20 73 74 61 74 69 63  v(tree != static
52a0: 5f 6c 74 72 65 65 2c 20 28 73 74 64 65 72 72 2c  _ltree, (stderr,
52b0: 22 5c 6e 6e 20 25 33 64 20 25 63 20 6c 20 25 32  "\nn %3d %c l %2
52c0: 64 20 63 20 25 34 78 20 28 25 78 29 20 22 2c 0a  d c %4x (%x) ",.
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 2c 20               n, 
52e0: 28 69 73 67 72 61 70 68 28 6e 29 20 3f 20 6e 20  (isgraph(n) ? n 
52f0: 3a 20 27 20 27 29 2c 20 6c 65 6e 2c 20 74 72 65  : ' '), len, tre
5300: 65 5b 6e 5d 2e 43 6f 64 65 2c 20 6e 65 78 74 5f  e[n].Code, next_
5310: 63 6f 64 65 5b 6c 65 6e 5d 2d 31 29 29 3b 0a 20  code[len]-1));. 
5320: 20 20 20 7d 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d     }.}../* =====
5330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5370: 3d 3d 3d 3d 3d 3d 0a 20 2a 20 43 6f 6e 73 74 72  ======. * Constr
5380: 75 63 74 20 6f 6e 65 20 48 75 66 66 6d 61 6e 20  uct one Huffman 
5390: 74 72 65 65 20 61 6e 64 20 61 73 73 69 67 6e 73  tree and assigns
53a0: 20 74 68 65 20 63 6f 64 65 20 62 69 74 20 73 74   the code bit st
53b0: 72 69 6e 67 73 20 61 6e 64 20 6c 65 6e 67 74 68  rings and length
53c0: 73 2e 0a 20 2a 20 55 70 64 61 74 65 20 74 68 65  s.. * Update the
53d0: 20 74 6f 74 61 6c 20 62 69 74 20 6c 65 6e 67 74   total bit lengt
53e0: 68 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  h for the curren
53f0: 74 20 62 6c 6f 63 6b 2e 0a 20 2a 20 49 4e 20 61  t block.. * IN a
5400: 73 73 65 72 74 69 6f 6e 3a 20 74 68 65 20 66 69  ssertion: the fi
5410: 65 6c 64 20 66 72 65 71 20 69 73 20 73 65 74 20  eld freq is set 
5420: 66 6f 72 20 61 6c 6c 20 74 72 65 65 20 65 6c 65  for all tree ele
5430: 6d 65 6e 74 73 2e 0a 20 2a 20 4f 55 54 20 61 73  ments.. * OUT as
5440: 73 65 72 74 69 6f 6e 73 3a 20 74 68 65 20 66 69  sertions: the fi
5450: 65 6c 64 73 20 6c 65 6e 20 61 6e 64 20 63 6f 64  elds len and cod
5460: 65 20 61 72 65 20 73 65 74 20 74 6f 20 74 68 65  e are set to the
5470: 20 6f 70 74 69 6d 61 6c 20 62 69 74 20 6c 65 6e   optimal bit len
5480: 67 74 68 0a 20 2a 20 20 20 20 20 61 6e 64 20 63  gth. *     and c
5490: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 64  orresponding cod
54a0: 65 2e 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 70  e. The length op
54b0: 74 5f 6c 65 6e 20 69 73 20 75 70 64 61 74 65 64  t_len is updated
54c0: 3b 20 73 74 61 74 69 63 5f 6c 65 6e 20 69 73 0a  ; static_len is.
54d0: 20 2a 20 20 20 20 20 61 6c 73 6f 20 75 70 64 61   *     also upda
54e0: 74 65 64 20 69 66 20 73 74 72 65 65 20 69 73 20  ted if stree is 
54f0: 6e 6f 74 20 6e 75 6c 6c 2e 20 54 68 65 20 66 69  not null. The fi
5500: 65 6c 64 20 6d 61 78 5f 63 6f 64 65 20 69 73 20  eld max_code is 
5510: 73 65 74 2e 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 76  set.. */.local v
5520: 6f 69 64 20 62 75 69 6c 64 5f 74 72 65 65 28 73  oid build_tree(s
5530: 2c 20 64 65 73 63 29 0a 20 20 20 20 64 65 66 6c  , desc).    defl
5540: 61 74 65 5f 73 74 61 74 65 20 2a 73 3b 0a 20 20  ate_state *s;.  
5550: 20 20 74 72 65 65 5f 64 65 73 63 20 2a 64 65 73    tree_desc *des
5560: 63 3b 20 2f 2a 20 74 68 65 20 74 72 65 65 20 64  c; /* the tree d
5570: 65 73 63 72 69 70 74 6f 72 20 2a 2f 0a 7b 0a 20  escriptor */.{. 
5580: 20 20 20 63 74 5f 64 61 74 61 20 2a 74 72 65 65     ct_data *tree
5590: 20 20 20 20 20 20 20 20 20 3d 20 64 65 73 63 2d           = desc-
55a0: 3e 64 79 6e 5f 74 72 65 65 3b 0a 20 20 20 20 63  >dyn_tree;.    c
55b0: 6f 6e 73 74 20 63 74 5f 64 61 74 61 20 2a 73 74  onst ct_data *st
55c0: 72 65 65 20 20 3d 20 64 65 73 63 2d 3e 73 74 61  ree  = desc->sta
55d0: 74 5f 64 65 73 63 2d 3e 73 74 61 74 69 63 5f 74  t_desc->static_t
55e0: 72 65 65 3b 0a 20 20 20 20 69 6e 74 20 65 6c 65  ree;.    int ele
55f0: 6d 73 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ms             =
5600: 20 64 65 73 63 2d 3e 73 74 61 74 5f 64 65 73 63   desc->stat_desc
5610: 2d 3e 65 6c 65 6d 73 3b 0a 20 20 20 20 69 6e 74  ->elems;.    int
5620: 20 6e 2c 20 6d 3b 20 20 20 20 20 20 20 20 20 20   n, m;          
5630: 2f 2a 20 69 74 65 72 61 74 65 20 6f 76 65 72 20  /* iterate over 
5640: 68 65 61 70 20 65 6c 65 6d 65 6e 74 73 20 2a 2f  heap elements */
5650: 0a 20 20 20 20 69 6e 74 20 6d 61 78 5f 63 6f 64  .    int max_cod
5660: 65 20 3d 20 2d 31 3b 20 2f 2a 20 6c 61 72 67 65  e = -1; /* large
5670: 73 74 20 63 6f 64 65 20 77 69 74 68 20 6e 6f 6e  st code with non
5680: 20 7a 65 72 6f 20 66 72 65 71 75 65 6e 63 79 20   zero frequency 
5690: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 6f 64 65 3b  */.    int node;
56a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e 65 77            /* new
56b0: 20 6e 6f 64 65 20 62 65 69 6e 67 20 63 72 65 61   node being crea
56c0: 74 65 64 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 43  ted */..    /* C
56d0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 69 6e 69  onstruct the ini
56e0: 74 69 61 6c 20 68 65 61 70 2c 20 77 69 74 68 20  tial heap, with 
56f0: 6c 65 61 73 74 20 66 72 65 71 75 65 6e 74 20 65  least frequent e
5700: 6c 65 6d 65 6e 74 20 69 6e 0a 20 20 20 20 20 2a  lement in.     *
5710: 20 68 65 61 70 5b 53 4d 41 4c 4c 45 53 54 5d 2e   heap[SMALLEST].
5720: 20 54 68 65 20 73 6f 6e 73 20 6f 66 20 68 65 61   The sons of hea
5730: 70 5b 6e 5d 20 61 72 65 20 68 65 61 70 5b 32 2a  p[n] are heap[2*
5740: 6e 5d 20 61 6e 64 20 68 65 61 70 5b 32 2a 6e 2b  n] and heap[2*n+
5750: 31 5d 2e 0a 20 20 20 20 20 2a 20 68 65 61 70 5b  1]..     * heap[
5760: 30 5d 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  0] is not used..
5770: 20 20 20 20 20 2a 2f 0a 20 20 20 20 73 2d 3e 68       */.    s->h
5780: 65 61 70 5f 6c 65 6e 20 3d 20 30 2c 20 73 2d 3e  eap_len = 0, s->
5790: 68 65 61 70 5f 6d 61 78 20 3d 20 48 45 41 50 5f  heap_max = HEAP_
57a0: 53 49 5a 45 3b 0a 0a 20 20 20 20 66 6f 72 20 28  SIZE;..    for (
57b0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 65 6c 65 6d 73  n = 0; n < elems
57c0: 3b 20 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20  ; n++) {.       
57d0: 20 69 66 20 28 74 72 65 65 5b 6e 5d 2e 46 72 65   if (tree[n].Fre
57e0: 71 20 21 3d 20 30 29 20 7b 0a 20 20 20 20 20 20  q != 0) {.      
57f0: 20 20 20 20 20 20 73 2d 3e 68 65 61 70 5b 2b 2b        s->heap[++
5800: 28 73 2d 3e 68 65 61 70 5f 6c 65 6e 29 5d 20 3d  (s->heap_len)] =
5810: 20 6d 61 78 5f 63 6f 64 65 20 3d 20 6e 3b 0a 20   max_code = n;. 
5820: 20 20 20 20 20 20 20 20 20 20 20 73 2d 3e 64 65             s->de
5830: 70 74 68 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  pth[n] = 0;.    
5840: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
5850: 20 20 20 20 20 20 20 20 20 74 72 65 65 5b 6e 5d           tree[n]
5860: 2e 4c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  .Len = 0;.      
5870: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
5880: 2a 20 54 68 65 20 70 6b 7a 69 70 20 66 6f 72 6d  * The pkzip form
5890: 61 74 20 72 65 71 75 69 72 65 73 20 74 68 61 74  at requires that
58a0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 64 69   at least one di
58b0: 73 74 61 6e 63 65 20 63 6f 64 65 20 65 78 69 73  stance code exis
58c0: 74 73 2c 0a 20 20 20 20 20 2a 20 61 6e 64 20 74  ts,.     * and t
58d0: 68 61 74 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  hat at least one
58e0: 20 62 69 74 20 73 68 6f 75 6c 64 20 62 65 20 73   bit should be s
58f0: 65 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 72  ent even if ther
5900: 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 0a 20 20  e is only one.  
5910: 20 20 20 2a 20 70 6f 73 73 69 62 6c 65 20 63 6f     * possible co
5920: 64 65 2e 20 53 6f 20 74 6f 20 61 76 6f 69 64 20  de. So to avoid 
5930: 73 70 65 63 69 61 6c 20 63 68 65 63 6b 73 20 6c  special checks l
5940: 61 74 65 72 20 6f 6e 20 77 65 20 66 6f 72 63 65  ater on we force
5950: 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 2a   at least.     *
5960: 20 74 77 6f 20 63 6f 64 65 73 20 6f 66 20 6e 6f   two codes of no
5970: 6e 20 7a 65 72 6f 20 66 72 65 71 75 65 6e 63 79  n zero frequency
5980: 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 77 68  ..     */.    wh
5990: 69 6c 65 20 28 73 2d 3e 68 65 61 70 5f 6c 65 6e  ile (s->heap_len
59a0: 20 3c 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20   < 2) {.        
59b0: 6e 6f 64 65 20 3d 20 73 2d 3e 68 65 61 70 5b 2b  node = s->heap[+
59c0: 2b 28 73 2d 3e 68 65 61 70 5f 6c 65 6e 29 5d 20  +(s->heap_len)] 
59d0: 3d 20 28 6d 61 78 5f 63 6f 64 65 20 3c 20 32 20  = (max_code < 2 
59e0: 3f 20 2b 2b 6d 61 78 5f 63 6f 64 65 20 3a 20 30  ? ++max_code : 0
59f0: 29 3b 0a 20 20 20 20 20 20 20 20 74 72 65 65 5b  );.        tree[
5a00: 6e 6f 64 65 5d 2e 46 72 65 71 20 3d 20 31 3b 0a  node].Freq = 1;.
5a10: 20 20 20 20 20 20 20 20 73 2d 3e 64 65 70 74 68          s->depth
5a20: 5b 6e 6f 64 65 5d 20 3d 20 30 3b 0a 20 20 20 20  [node] = 0;.    
5a30: 20 20 20 20 73 2d 3e 6f 70 74 5f 6c 65 6e 2d 2d      s->opt_len--
5a40: 3b 20 69 66 20 28 73 74 72 65 65 29 20 73 2d 3e  ; if (stree) s->
5a50: 73 74 61 74 69 63 5f 6c 65 6e 20 2d 3d 20 73 74  static_len -= st
5a60: 72 65 65 5b 6e 6f 64 65 5d 2e 4c 65 6e 3b 0a 20  ree[node].Len;. 
5a70: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 64 65 20 69         /* node i
5a80: 73 20 30 20 6f 72 20 31 20 73 6f 20 69 74 20 64  s 0 or 1 so it d
5a90: 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 65 78 74  oes not have ext
5aa0: 72 61 20 62 69 74 73 20 2a 2f 0a 20 20 20 20 7d  ra bits */.    }
5ab0: 0a 20 20 20 20 64 65 73 63 2d 3e 6d 61 78 5f 63  .    desc->max_c
5ac0: 6f 64 65 20 3d 20 6d 61 78 5f 63 6f 64 65 3b 0a  ode = max_code;.
5ad0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 65 6c 65 6d  .    /* The elem
5ae0: 65 6e 74 73 20 68 65 61 70 5b 68 65 61 70 5f 6c  ents heap[heap_l
5af0: 65 6e 2f 32 2b 31 20 2e 2e 20 68 65 61 70 5f 6c  en/2+1 .. heap_l
5b00: 65 6e 5d 20 61 72 65 20 6c 65 61 76 65 73 20 6f  en] are leaves o
5b10: 66 20 74 68 65 20 74 72 65 65 2c 0a 20 20 20 20  f the tree,.    
5b20: 20 2a 20 65 73 74 61 62 6c 69 73 68 20 73 75 62   * establish sub
5b30: 2d 68 65 61 70 73 20 6f 66 20 69 6e 63 72 65 61  -heaps of increa
5b40: 73 69 6e 67 20 6c 65 6e 67 74 68 73 3a 0a 20 20  sing lengths:.  
5b50: 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 6e     */.    for (n
5b60: 20 3d 20 73 2d 3e 68 65 61 70 5f 6c 65 6e 2f 32   = s->heap_len/2
5b70: 3b 20 6e 20 3e 3d 20 31 3b 20 6e 2d 2d 29 20 70  ; n >= 1; n--) p
5b80: 71 64 6f 77 6e 68 65 61 70 28 73 2c 20 74 72 65  qdownheap(s, tre
5b90: 65 2c 20 6e 29 3b 0a 0a 20 20 20 20 2f 2a 20 43  e, n);..    /* C
5ba0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 48 75 66  onstruct the Huf
5bb0: 66 6d 61 6e 20 74 72 65 65 20 62 79 20 72 65 70  fman tree by rep
5bc0: 65 61 74 65 64 6c 79 20 63 6f 6d 62 69 6e 69 6e  eatedly combinin
5bd0: 67 20 74 68 65 20 6c 65 61 73 74 20 74 77 6f 0a  g the least two.
5be0: 20 20 20 20 20 2a 20 66 72 65 71 75 65 6e 74 20       * frequent 
5bf0: 6e 6f 64 65 73 2e 0a 20 20 20 20 20 2a 2f 0a 20  nodes..     */. 
5c00: 20 20 20 6e 6f 64 65 20 3d 20 65 6c 65 6d 73 3b     node = elems;
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5c20: 20 6e 65 78 74 20 69 6e 74 65 72 6e 61 6c 20 6e   next internal n
5c30: 6f 64 65 20 6f 66 20 74 68 65 20 74 72 65 65 20  ode of the tree 
5c40: 2a 2f 0a 20 20 20 20 64 6f 20 7b 0a 20 20 20 20  */.    do {.    
5c50: 20 20 20 20 70 71 72 65 6d 6f 76 65 28 73 2c 20      pqremove(s, 
5c60: 74 72 65 65 2c 20 6e 29 3b 20 20 2f 2a 20 6e 20  tree, n);  /* n 
5c70: 3d 20 6e 6f 64 65 20 6f 66 20 6c 65 61 73 74 20  = node of least 
5c80: 66 72 65 71 75 65 6e 63 79 20 2a 2f 0a 20 20 20  frequency */.   
5c90: 20 20 20 20 20 6d 20 3d 20 73 2d 3e 68 65 61 70       m = s->heap
5ca0: 5b 53 4d 41 4c 4c 45 53 54 5d 3b 20 2f 2a 20 6d  [SMALLEST]; /* m
5cb0: 20 3d 20 6e 6f 64 65 20 6f 66 20 6e 65 78 74 20   = node of next 
5cc0: 6c 65 61 73 74 20 66 72 65 71 75 65 6e 63 79 20  least frequency 
5cd0: 2a 2f 0a 0a 20 20 20 20 20 20 20 20 73 2d 3e 68  */..        s->h
5ce0: 65 61 70 5b 2d 2d 28 73 2d 3e 68 65 61 70 5f 6d  eap[--(s->heap_m
5cf0: 61 78 29 5d 20 3d 20 6e 3b 20 2f 2a 20 6b 65 65  ax)] = n; /* kee
5d00: 70 20 74 68 65 20 6e 6f 64 65 73 20 73 6f 72 74  p the nodes sort
5d10: 65 64 20 62 79 20 66 72 65 71 75 65 6e 63 79 20  ed by frequency 
5d20: 2a 2f 0a 20 20 20 20 20 20 20 20 73 2d 3e 68 65  */.        s->he
5d30: 61 70 5b 2d 2d 28 73 2d 3e 68 65 61 70 5f 6d 61  ap[--(s->heap_ma
5d40: 78 29 5d 20 3d 20 6d 3b 0a 0a 20 20 20 20 20 20  x)] = m;..      
5d50: 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
5d60: 77 20 6e 6f 64 65 20 66 61 74 68 65 72 20 6f 66  w node father of
5d70: 20 6e 20 61 6e 64 20 6d 20 2a 2f 0a 20 20 20 20   n and m */.    
5d80: 20 20 20 20 74 72 65 65 5b 6e 6f 64 65 5d 2e 46      tree[node].F
5d90: 72 65 71 20 3d 20 74 72 65 65 5b 6e 5d 2e 46 72  req = tree[n].Fr
5da0: 65 71 20 2b 20 74 72 65 65 5b 6d 5d 2e 46 72 65  eq + tree[m].Fre
5db0: 71 3b 0a 20 20 20 20 20 20 20 20 73 2d 3e 64 65  q;.        s->de
5dc0: 70 74 68 5b 6e 6f 64 65 5d 20 3d 20 28 75 63 68  pth[node] = (uch
5dd0: 29 20 28 4d 41 58 28 73 2d 3e 64 65 70 74 68 5b  ) (MAX(s->depth[
5de0: 6e 5d 2c 20 73 2d 3e 64 65 70 74 68 5b 6d 5d 29  n], s->depth[m])
5df0: 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74   + 1);.        t
5e00: 72 65 65 5b 6e 5d 2e 44 61 64 20 3d 20 74 72 65  ree[n].Dad = tre
5e10: 65 5b 6d 5d 2e 44 61 64 20 3d 20 28 75 73 68 29  e[m].Dad = (ush)
5e20: 6e 6f 64 65 3b 0a 23 69 66 64 65 66 20 44 55 4d  node;.#ifdef DUM
5e30: 50 5f 42 4c 5f 54 52 45 45 0a 20 20 20 20 20 20  P_BL_TREE.      
5e40: 20 20 69 66 20 28 74 72 65 65 20 3d 3d 20 73 2d    if (tree == s-
5e50: 3e 62 6c 5f 74 72 65 65 29 20 7b 0a 20 20 20 20  >bl_tree) {.    
5e60: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
5e70: 73 74 64 65 72 72 2c 22 5c 6e 6e 6f 64 65 20 25  stderr,"\nnode %
5e80: 64 28 25 64 29 2c 20 73 6f 6e 73 20 25 64 28 25  d(%d), sons %d(%
5e90: 64 29 20 25 64 28 25 64 29 22 2c 0a 20 20 20 20  d) %d(%d)",.    
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 6e 6f 64 65 2c 20 74 72 65 65 5b 6e 6f 64 65 5d  node, tree[node]
5ec0: 2e 46 72 65 71 2c 20 6e 2c 20 74 72 65 65 5b 6e  .Freq, n, tree[n
5ed0: 5d 2e 46 72 65 71 2c 20 6d 2c 20 74 72 65 65 5b  ].Freq, m, tree[
5ee0: 6d 5d 2e 46 72 65 71 29 3b 0a 20 20 20 20 20 20  m].Freq);.      
5ef0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
5f00: 20 20 20 2f 2a 20 61 6e 64 20 69 6e 73 65 72 74     /* and insert
5f10: 20 74 68 65 20 6e 65 77 20 6e 6f 64 65 20 69 6e   the new node in
5f20: 20 74 68 65 20 68 65 61 70 20 2a 2f 0a 20 20 20   the heap */.   
5f30: 20 20 20 20 20 73 2d 3e 68 65 61 70 5b 53 4d 41       s->heap[SMA
5f40: 4c 4c 45 53 54 5d 20 3d 20 6e 6f 64 65 2b 2b 3b  LLEST] = node++;
5f50: 0a 20 20 20 20 20 20 20 20 70 71 64 6f 77 6e 68  .        pqdownh
5f60: 65 61 70 28 73 2c 20 74 72 65 65 2c 20 53 4d 41  eap(s, tree, SMA
5f70: 4c 4c 45 53 54 29 3b 0a 0a 20 20 20 20 7d 20 77  LLEST);..    } w
5f80: 68 69 6c 65 20 28 73 2d 3e 68 65 61 70 5f 6c 65  hile (s->heap_le
5f90: 6e 20 3e 3d 20 32 29 3b 0a 0a 20 20 20 20 73 2d  n >= 2);..    s-
5fa0: 3e 68 65 61 70 5b 2d 2d 28 73 2d 3e 68 65 61 70  >heap[--(s->heap
5fb0: 5f 6d 61 78 29 5d 20 3d 20 73 2d 3e 68 65 61 70  _max)] = s->heap
5fc0: 5b 53 4d 41 4c 4c 45 53 54 5d 3b 0a 0a 20 20 20  [SMALLEST];..   
5fd0: 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   /* At this poin
5fe0: 74 2c 20 74 68 65 20 66 69 65 6c 64 73 20 66 72  t, the fields fr
5ff0: 65 71 20 61 6e 64 20 64 61 64 20 61 72 65 20 73  eq and dad are s
6000: 65 74 2e 20 57 65 20 63 61 6e 20 6e 6f 77 0a 20  et. We can now. 
6010: 20 20 20 20 2a 20 67 65 6e 65 72 61 74 65 20 74      * generate t
6020: 68 65 20 62 69 74 20 6c 65 6e 67 74 68 73 2e 0a  he bit lengths..
6030: 20 20 20 20 20 2a 2f 0a 20 20 20 20 67 65 6e 5f       */.    gen_
6040: 62 69 74 6c 65 6e 28 73 2c 20 28 74 72 65 65 5f  bitlen(s, (tree_
6050: 64 65 73 63 20 2a 29 64 65 73 63 29 3b 0a 0a 20  desc *)desc);.. 
6060: 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 20     /* The field 
6070: 6c 65 6e 20 69 73 20 6e 6f 77 20 73 65 74 2c 20  len is now set, 
6080: 77 65 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20  we can generate 
6090: 74 68 65 20 62 69 74 20 63 6f 64 65 73 20 2a 2f  the bit codes */
60a0: 0a 20 20 20 20 67 65 6e 5f 63 6f 64 65 73 20 28  .    gen_codes (
60b0: 28 63 74 5f 64 61 74 61 20 2a 29 74 72 65 65 2c  (ct_data *)tree,
60c0: 20 6d 61 78 5f 63 6f 64 65 2c 20 73 2d 3e 62 6c   max_code, s->bl
60d0: 5f 63 6f 75 6e 74 29 3b 0a 7d 0a 0a 2f 2a 20 3d  _count);.}../* =
60e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
60f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 53 63  ==========. * Sc
6130: 61 6e 20 61 20 6c 69 74 65 72 61 6c 20 6f 72 20  an a literal or 
6140: 64 69 73 74 61 6e 63 65 20 74 72 65 65 20 74 6f  distance tree to
6150: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 66   determine the f
6160: 72 65 71 75 65 6e 63 69 65 73 20 6f 66 20 74 68  requencies of th
6170: 65 20 63 6f 64 65 73 0a 20 2a 20 69 6e 20 74 68  e codes. * in th
6180: 65 20 62 69 74 20 6c 65 6e 67 74 68 20 74 72 65  e bit length tre
6190: 65 2e 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 76 6f 69  e.. */.local voi
61a0: 64 20 73 63 61 6e 5f 74 72 65 65 20 28 73 2c 20  d scan_tree (s, 
61b0: 74 72 65 65 2c 20 6d 61 78 5f 63 6f 64 65 29 0a  tree, max_code).
61c0: 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61 74      deflate_stat
61d0: 65 20 2a 73 3b 0a 20 20 20 20 63 74 5f 64 61 74  e *s;.    ct_dat
61e0: 61 20 2a 74 72 65 65 3b 20 20 20 2f 2a 20 74 68  a *tree;   /* th
61f0: 65 20 74 72 65 65 20 74 6f 20 62 65 20 73 63 61  e tree to be sca
6200: 6e 6e 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nned */.    int 
6210: 6d 61 78 5f 63 6f 64 65 3b 20 20 20 20 2f 2a 20  max_code;    /* 
6220: 61 6e 64 20 69 74 73 20 6c 61 72 67 65 73 74 20  and its largest 
6230: 63 6f 64 65 20 6f 66 20 6e 6f 6e 20 7a 65 72 6f  code of non zero
6240: 20 66 72 65 71 75 65 6e 63 79 20 2a 2f 0a 7b 0a   frequency */.{.
6250: 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6270: 2a 20 69 74 65 72 61 74 65 73 20 6f 76 65 72 20  * iterates over 
6280: 61 6c 6c 20 74 72 65 65 20 65 6c 65 6d 65 6e 74  all tree element
6290: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 72 65  s */.    int pre
62a0: 76 6c 65 6e 20 3d 20 2d 31 3b 20 20 20 20 20 20  vlen = -1;      
62b0: 20 20 20 20 2f 2a 20 6c 61 73 74 20 65 6d 69 74      /* last emit
62c0: 74 65 64 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ted length */.  
62d0: 20 20 69 6e 74 20 63 75 72 6c 65 6e 3b 20 20 20    int curlen;   
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
62f0: 6c 65 6e 67 74 68 20 6f 66 20 63 75 72 72 65 6e  length of curren
6300: 74 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20 69 6e  t code */.    in
6310: 74 20 6e 65 78 74 6c 65 6e 20 3d 20 74 72 65 65  t nextlen = tree
6320: 5b 30 5d 2e 4c 65 6e 3b 20 2f 2a 20 6c 65 6e 67  [0].Len; /* leng
6330: 74 68 20 6f 66 20 6e 65 78 74 20 63 6f 64 65 20  th of next code 
6340: 2a 2f 0a 20 20 20 20 69 6e 74 20 63 6f 75 6e 74  */.    int count
6350: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
6360: 20 20 2f 2a 20 72 65 70 65 61 74 20 63 6f 75 6e    /* repeat coun
6370: 74 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  t of the current
6380: 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20 69 6e 74   code */.    int
6390: 20 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 37 3b 20   max_count = 7; 
63a0: 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 20 72          /* max r
63b0: 65 70 65 61 74 20 63 6f 75 6e 74 20 2a 2f 0a 20  epeat count */. 
63c0: 20 20 20 69 6e 74 20 6d 69 6e 5f 63 6f 75 6e 74     int min_count
63d0: 20 3d 20 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 4;         /*
63e0: 20 6d 69 6e 20 72 65 70 65 61 74 20 63 6f 75 6e   min repeat coun
63f0: 74 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 6e 65  t */..    if (ne
6400: 78 74 6c 65 6e 20 3d 3d 20 30 29 20 6d 61 78 5f  xtlen == 0) max_
6410: 63 6f 75 6e 74 20 3d 20 31 33 38 2c 20 6d 69 6e  count = 138, min
6420: 5f 63 6f 75 6e 74 20 3d 20 33 3b 0a 20 20 20 20  _count = 3;.    
6430: 74 72 65 65 5b 6d 61 78 5f 63 6f 64 65 2b 31 5d  tree[max_code+1]
6440: 2e 4c 65 6e 20 3d 20 28 75 73 68 29 30 78 66 66  .Len = (ush)0xff
6450: 66 66 3b 20 2f 2a 20 67 75 61 72 64 20 2a 2f 0a  ff; /* guard */.
6460: 0a 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b  .    for (n = 0;
6470: 20 6e 20 3c 3d 20 6d 61 78 5f 63 6f 64 65 3b 20   n <= max_code; 
6480: 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 63  n++) {.        c
6490: 75 72 6c 65 6e 20 3d 20 6e 65 78 74 6c 65 6e 3b  urlen = nextlen;
64a0: 20 6e 65 78 74 6c 65 6e 20 3d 20 74 72 65 65 5b   nextlen = tree[
64b0: 6e 2b 31 5d 2e 4c 65 6e 3b 0a 20 20 20 20 20 20  n+1].Len;.      
64c0: 20 20 69 66 20 28 2b 2b 63 6f 75 6e 74 20 3c 20    if (++count < 
64d0: 6d 61 78 5f 63 6f 75 6e 74 20 26 26 20 63 75 72  max_count && cur
64e0: 6c 65 6e 20 3d 3d 20 6e 65 78 74 6c 65 6e 29 20  len == nextlen) 
64f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  {.            co
6500: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
6510: 7d 20 65 6c 73 65 20 69 66 20 28 63 6f 75 6e 74  } else if (count
6520: 20 3c 20 6d 69 6e 5f 63 6f 75 6e 74 29 20 7b 0a   < min_count) {.
6530: 20 20 20 20 20 20 20 20 20 20 20 20 73 2d 3e 62              s->b
6540: 6c 5f 74 72 65 65 5b 63 75 72 6c 65 6e 5d 2e 46  l_tree[curlen].F
6550: 72 65 71 20 2b 3d 20 63 6f 75 6e 74 3b 0a 20 20  req += count;.  
6560: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
6570: 28 63 75 72 6c 65 6e 20 21 3d 20 30 29 20 7b 0a  (curlen != 0) {.
6580: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6590: 63 75 72 6c 65 6e 20 21 3d 20 70 72 65 76 6c 65  curlen != prevle
65a0: 6e 29 20 73 2d 3e 62 6c 5f 74 72 65 65 5b 63 75  n) s->bl_tree[cu
65b0: 72 6c 65 6e 5d 2e 46 72 65 71 2b 2b 3b 0a 20 20  rlen].Freq++;.  
65c0: 20 20 20 20 20 20 20 20 20 20 73 2d 3e 62 6c 5f            s->bl_
65d0: 74 72 65 65 5b 52 45 50 5f 33 5f 36 5d 2e 46 72  tree[REP_3_6].Fr
65e0: 65 71 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 20  eq++;.        } 
65f0: 65 6c 73 65 20 69 66 20 28 63 6f 75 6e 74 20 3c  else if (count <
6600: 3d 20 31 30 29 20 7b 0a 20 20 20 20 20 20 20 20  = 10) {.        
6610: 20 20 20 20 73 2d 3e 62 6c 5f 74 72 65 65 5b 52      s->bl_tree[R
6620: 45 50 5a 5f 33 5f 31 30 5d 2e 46 72 65 71 2b 2b  EPZ_3_10].Freq++
6630: 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ;.        } else
6640: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
6650: 2d 3e 62 6c 5f 74 72 65 65 5b 52 45 50 5a 5f 31  ->bl_tree[REPZ_1
6660: 31 5f 31 33 38 5d 2e 46 72 65 71 2b 2b 3b 0a 20  1_138].Freq++;. 
6670: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6680: 20 63 6f 75 6e 74 20 3d 20 30 3b 20 70 72 65 76   count = 0; prev
6690: 6c 65 6e 20 3d 20 63 75 72 6c 65 6e 3b 0a 20 20  len = curlen;.  
66a0: 20 20 20 20 20 20 69 66 20 28 6e 65 78 74 6c 65        if (nextle
66b0: 6e 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20  n == 0) {.      
66c0: 20 20 20 20 20 20 6d 61 78 5f 63 6f 75 6e 74 20        max_count 
66d0: 3d 20 31 33 38 2c 20 6d 69 6e 5f 63 6f 75 6e 74  = 138, min_count
66e0: 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 7d 20   = 3;.        } 
66f0: 65 6c 73 65 20 69 66 20 28 63 75 72 6c 65 6e 20  else if (curlen 
6700: 3d 3d 20 6e 65 78 74 6c 65 6e 29 20 7b 0a 20 20  == nextlen) {.  
6710: 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 63 6f            max_co
6720: 75 6e 74 20 3d 20 36 2c 20 6d 69 6e 5f 63 6f 75  unt = 6, min_cou
6730: 6e 74 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20  nt = 3;.        
6740: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
6750: 20 20 20 20 20 6d 61 78 5f 63 6f 75 6e 74 20 3d       max_count =
6760: 20 37 2c 20 6d 69 6e 5f 63 6f 75 6e 74 20 3d 20   7, min_count = 
6770: 34 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  4;.        }.   
6780: 20 7d 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d   }.}../* =======
6790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
67a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
67b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
67c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
67d0: 3d 3d 3d 3d 0a 20 2a 20 53 65 6e 64 20 61 20 6c  ====. * Send a l
67e0: 69 74 65 72 61 6c 20 6f 72 20 64 69 73 74 61 6e  iteral or distan
67f0: 63 65 20 74 72 65 65 20 69 6e 20 63 6f 6d 70 72  ce tree in compr
6800: 65 73 73 65 64 20 66 6f 72 6d 2c 20 75 73 69 6e  essed form, usin
6810: 67 20 74 68 65 20 63 6f 64 65 73 20 69 6e 0a 20  g the codes in. 
6820: 2a 20 62 6c 5f 74 72 65 65 2e 0a 20 2a 2f 0a 6c  * bl_tree.. */.l
6830: 6f 63 61 6c 20 76 6f 69 64 20 73 65 6e 64 5f 74  ocal void send_t
6840: 72 65 65 20 28 73 2c 20 74 72 65 65 2c 20 6d 61  ree (s, tree, ma
6850: 78 5f 63 6f 64 65 29 0a 20 20 20 20 64 65 66 6c  x_code).    defl
6860: 61 74 65 5f 73 74 61 74 65 20 2a 73 3b 0a 20 20  ate_state *s;.  
6870: 20 20 63 74 5f 64 61 74 61 20 2a 74 72 65 65 3b    ct_data *tree;
6880: 20 2f 2a 20 74 68 65 20 74 72 65 65 20 74 6f 20   /* the tree to 
6890: 62 65 20 73 63 61 6e 6e 65 64 20 2a 2f 0a 20 20  be scanned */.  
68a0: 20 20 69 6e 74 20 6d 61 78 5f 63 6f 64 65 3b 20    int max_code; 
68b0: 20 20 20 20 20 20 2f 2a 20 61 6e 64 20 69 74 73        /* and its
68c0: 20 6c 61 72 67 65 73 74 20 63 6f 64 65 20 6f 66   largest code of
68d0: 20 6e 6f 6e 20 7a 65 72 6f 20 66 72 65 71 75 65   non zero freque
68e0: 6e 63 79 20 2a 2f 0a 7b 0a 20 20 20 20 69 6e 74  ncy */.{.    int
68f0: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
6900: 20 20 20 20 20 20 20 20 2f 2a 20 69 74 65 72 61          /* itera
6910: 74 65 73 20 6f 76 65 72 20 61 6c 6c 20 74 72 65  tes over all tre
6920: 65 20 65 6c 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  e elements */.  
6930: 20 20 69 6e 74 20 70 72 65 76 6c 65 6e 20 3d 20    int prevlen = 
6940: 2d 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  -1;          /* 
6950: 6c 61 73 74 20 65 6d 69 74 74 65 64 20 6c 65 6e  last emitted len
6960: 67 74 68 20 2a 2f 0a 20 20 20 20 69 6e 74 20 63  gth */.    int c
6970: 75 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  urlen;          
6980: 20 20 20 20 20 20 2f 2a 20 6c 65 6e 67 74 68 20        /* length 
6990: 6f 66 20 63 75 72 72 65 6e 74 20 63 6f 64 65 20  of current code 
69a0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 78 74 6c  */.    int nextl
69b0: 65 6e 20 3d 20 74 72 65 65 5b 30 5d 2e 4c 65 6e  en = tree[0].Len
69c0: 3b 20 2f 2a 20 6c 65 6e 67 74 68 20 6f 66 20 6e  ; /* length of n
69d0: 65 78 74 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20  ext code */.    
69e0: 69 6e 74 20 63 6f 75 6e 74 20 3d 20 30 3b 20 20  int count = 0;  
69f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
6a00: 70 65 61 74 20 63 6f 75 6e 74 20 6f 66 20 74 68  peat count of th
6a10: 65 20 63 75 72 72 65 6e 74 20 63 6f 64 65 20 2a  e current code *
6a20: 2f 0a 20 20 20 20 69 6e 74 20 6d 61 78 5f 63 6f  /.    int max_co
6a30: 75 6e 74 20 3d 20 37 3b 20 20 20 20 20 20 20 20  unt = 7;        
6a40: 20 2f 2a 20 6d 61 78 20 72 65 70 65 61 74 20 63   /* max repeat c
6a50: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ount */.    int 
6a60: 6d 69 6e 5f 63 6f 75 6e 74 20 3d 20 34 3b 20 20  min_count = 4;  
6a70: 20 20 20 20 20 20 20 2f 2a 20 6d 69 6e 20 72 65         /* min re
6a80: 70 65 61 74 20 63 6f 75 6e 74 20 2a 2f 0a 0a 20  peat count */.. 
6a90: 20 20 20 2f 2a 20 74 72 65 65 5b 6d 61 78 5f 63     /* tree[max_c
6aa0: 6f 64 65 2b 31 5d 2e 4c 65 6e 20 3d 20 2d 31 3b  ode+1].Len = -1;
6ab0: 20 2a 2f 20 20 2f 2a 20 67 75 61 72 64 20 61 6c   */  /* guard al
6ac0: 72 65 61 64 79 20 73 65 74 20 2a 2f 0a 20 20 20  ready set */.   
6ad0: 20 69 66 20 28 6e 65 78 74 6c 65 6e 20 3d 3d 20   if (nextlen == 
6ae0: 30 29 20 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 31  0) max_count = 1
6af0: 33 38 2c 20 6d 69 6e 5f 63 6f 75 6e 74 20 3d 20  38, min_count = 
6b00: 33 3b 0a 0a 20 20 20 20 66 6f 72 20 28 6e 20 3d  3;..    for (n =
6b10: 20 30 3b 20 6e 20 3c 3d 20 6d 61 78 5f 63 6f 64   0; n <= max_cod
6b20: 65 3b 20 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20  e; n++) {.      
6b30: 20 20 63 75 72 6c 65 6e 20 3d 20 6e 65 78 74 6c    curlen = nextl
6b40: 65 6e 3b 20 6e 65 78 74 6c 65 6e 20 3d 20 74 72  en; nextlen = tr
6b50: 65 65 5b 6e 2b 31 5d 2e 4c 65 6e 3b 0a 20 20 20  ee[n+1].Len;.   
6b60: 20 20 20 20 20 69 66 20 28 2b 2b 63 6f 75 6e 74       if (++count
6b70: 20 3c 20 6d 61 78 5f 63 6f 75 6e 74 20 26 26 20   < max_count && 
6b80: 63 75 72 6c 65 6e 20 3d 3d 20 6e 65 78 74 6c 65  curlen == nextle
6b90: 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  n) {.           
6ba0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
6bb0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 6f     } else if (co
6bc0: 75 6e 74 20 3c 20 6d 69 6e 5f 63 6f 75 6e 74 29  unt < min_count)
6bd0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64   {.            d
6be0: 6f 20 7b 20 73 65 6e 64 5f 63 6f 64 65 28 73 2c  o { send_code(s,
6bf0: 20 63 75 72 6c 65 6e 2c 20 73 2d 3e 62 6c 5f 74   curlen, s->bl_t
6c00: 72 65 65 29 3b 20 7d 20 77 68 69 6c 65 20 28 2d  ree); } while (-
6c10: 2d 63 6f 75 6e 74 20 21 3d 20 30 29 3b 0a 0a 20  -count != 0);.. 
6c20: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
6c30: 20 28 63 75 72 6c 65 6e 20 21 3d 20 30 29 20 7b   (curlen != 0) {
6c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6c50: 28 63 75 72 6c 65 6e 20 21 3d 20 70 72 65 76 6c  (curlen != prevl
6c60: 65 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  en) {.          
6c70: 20 20 20 20 20 20 73 65 6e 64 5f 63 6f 64 65 28        send_code(
6c80: 73 2c 20 63 75 72 6c 65 6e 2c 20 73 2d 3e 62 6c  s, curlen, s->bl
6c90: 5f 74 72 65 65 29 3b 20 63 6f 75 6e 74 2d 2d 3b  _tree); count--;
6ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
6cb0: 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 72             Asser
6cc0: 74 28 63 6f 75 6e 74 20 3e 3d 20 33 20 26 26 20  t(count >= 3 && 
6cd0: 63 6f 75 6e 74 20 3c 3d 20 36 2c 20 22 20 33 5f  count <= 6, " 3_
6ce0: 36 3f 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  6?");.          
6cf0: 20 20 73 65 6e 64 5f 63 6f 64 65 28 73 2c 20 52    send_code(s, R
6d00: 45 50 5f 33 5f 36 2c 20 73 2d 3e 62 6c 5f 74 72  EP_3_6, s->bl_tr
6d10: 65 65 29 3b 20 73 65 6e 64 5f 62 69 74 73 28 73  ee); send_bits(s
6d20: 2c 20 63 6f 75 6e 74 2d 33 2c 20 32 29 3b 0a 0a  , count-3, 2);..
6d30: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
6d40: 66 20 28 63 6f 75 6e 74 20 3c 3d 20 31 30 29 20  f (count <= 10) 
6d50: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
6d60: 6e 64 5f 63 6f 64 65 28 73 2c 20 52 45 50 5a 5f  nd_code(s, REPZ_
6d70: 33 5f 31 30 2c 20 73 2d 3e 62 6c 5f 74 72 65 65  3_10, s->bl_tree
6d80: 29 3b 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20  ); send_bits(s, 
6d90: 63 6f 75 6e 74 2d 33 2c 20 33 29 3b 0a 0a 20 20  count-3, 3);..  
6da0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
6db0: 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 5f             send_
6dc0: 63 6f 64 65 28 73 2c 20 52 45 50 5a 5f 31 31 5f  code(s, REPZ_11_
6dd0: 31 33 38 2c 20 73 2d 3e 62 6c 5f 74 72 65 65 29  138, s->bl_tree)
6de0: 3b 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20 63  ; send_bits(s, c
6df0: 6f 75 6e 74 2d 31 31 2c 20 37 29 3b 0a 20 20 20  ount-11, 7);.   
6e00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63       }.        c
6e10: 6f 75 6e 74 20 3d 20 30 3b 20 70 72 65 76 6c 65  ount = 0; prevle
6e20: 6e 20 3d 20 63 75 72 6c 65 6e 3b 0a 20 20 20 20  n = curlen;.    
6e30: 20 20 20 20 69 66 20 28 6e 65 78 74 6c 65 6e 20      if (nextlen 
6e40: 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20  == 0) {.        
6e50: 20 20 20 20 6d 61 78 5f 63 6f 75 6e 74 20 3d 20      max_count = 
6e60: 31 33 38 2c 20 6d 69 6e 5f 63 6f 75 6e 74 20 3d  138, min_count =
6e70: 20 33 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   3;.        } el
6e80: 73 65 20 69 66 20 28 63 75 72 6c 65 6e 20 3d 3d  se if (curlen ==
6e90: 20 6e 65 78 74 6c 65 6e 29 20 7b 0a 20 20 20 20   nextlen) {.    
6ea0: 20 20 20 20 20 20 20 20 6d 61 78 5f 63 6f 75 6e          max_coun
6eb0: 74 20 3d 20 36 2c 20 6d 69 6e 5f 63 6f 75 6e 74  t = 6, min_count
6ec0: 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 7d 20   = 3;.        } 
6ed0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
6ee0: 20 20 20 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 37     max_count = 7
6ef0: 2c 20 6d 69 6e 5f 63 6f 75 6e 74 20 3d 20 34 3b  , min_count = 4;
6f00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
6f10: 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d  .}../* =========
6f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6f60: 3d 3d 0a 20 2a 20 43 6f 6e 73 74 72 75 63 74 20  ==. * Construct 
6f70: 74 68 65 20 48 75 66 66 6d 61 6e 20 74 72 65 65  the Huffman tree
6f80: 20 66 6f 72 20 74 68 65 20 62 69 74 20 6c 65 6e   for the bit len
6f90: 67 74 68 73 20 61 6e 64 20 72 65 74 75 72 6e 20  gths and return 
6fa0: 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 20 2a 20  the index in. * 
6fb0: 62 6c 5f 6f 72 64 65 72 20 6f 66 20 74 68 65 20  bl_order of the 
6fc0: 6c 61 73 74 20 62 69 74 20 6c 65 6e 67 74 68 20  last bit length 
6fd0: 63 6f 64 65 20 74 6f 20 73 65 6e 64 2e 0a 20 2a  code to send.. *
6fe0: 2f 0a 6c 6f 63 61 6c 20 69 6e 74 20 62 75 69 6c  /.local int buil
6ff0: 64 5f 62 6c 5f 74 72 65 65 28 73 29 0a 20 20 20  d_bl_tree(s).   
7000: 20 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20 2a   deflate_state *
7010: 73 3b 0a 7b 0a 20 20 20 20 69 6e 74 20 6d 61 78  s;.{.    int max
7020: 5f 62 6c 69 6e 64 65 78 3b 20 20 2f 2a 20 69 6e  _blindex;  /* in
7030: 64 65 78 20 6f 66 20 6c 61 73 74 20 62 69 74 20  dex of last bit 
7040: 6c 65 6e 67 74 68 20 63 6f 64 65 20 6f 66 20 6e  length code of n
7050: 6f 6e 20 7a 65 72 6f 20 66 72 65 71 20 2a 2f 0a  on zero freq */.
7060: 0a 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e  .    /* Determin
7070: 65 20 74 68 65 20 62 69 74 20 6c 65 6e 67 74 68  e the bit length
7080: 20 66 72 65 71 75 65 6e 63 69 65 73 20 66 6f 72   frequencies for
7090: 20 6c 69 74 65 72 61 6c 20 61 6e 64 20 64 69 73   literal and dis
70a0: 74 61 6e 63 65 20 74 72 65 65 73 20 2a 2f 0a 20  tance trees */. 
70b0: 20 20 20 73 63 61 6e 5f 74 72 65 65 28 73 2c 20     scan_tree(s, 
70c0: 28 63 74 5f 64 61 74 61 20 2a 29 73 2d 3e 64 79  (ct_data *)s->dy
70d0: 6e 5f 6c 74 72 65 65 2c 20 73 2d 3e 6c 5f 64 65  n_ltree, s->l_de
70e0: 73 63 2e 6d 61 78 5f 63 6f 64 65 29 3b 0a 20 20  sc.max_code);.  
70f0: 20 20 73 63 61 6e 5f 74 72 65 65 28 73 2c 20 28    scan_tree(s, (
7100: 63 74 5f 64 61 74 61 20 2a 29 73 2d 3e 64 79 6e  ct_data *)s->dyn
7110: 5f 64 74 72 65 65 2c 20 73 2d 3e 64 5f 64 65 73  _dtree, s->d_des
7120: 63 2e 6d 61 78 5f 63 6f 64 65 29 3b 0a 0a 20 20  c.max_code);..  
7130: 20 20 2f 2a 20 42 75 69 6c 64 20 74 68 65 20 62    /* Build the b
7140: 69 74 20 6c 65 6e 67 74 68 20 74 72 65 65 3a 20  it length tree: 
7150: 2a 2f 0a 20 20 20 20 62 75 69 6c 64 5f 74 72 65  */.    build_tre
7160: 65 28 73 2c 20 28 74 72 65 65 5f 64 65 73 63 20  e(s, (tree_desc 
7170: 2a 29 28 26 28 73 2d 3e 62 6c 5f 64 65 73 63 29  *)(&(s->bl_desc)
7180: 29 29 3b 0a 20 20 20 20 2f 2a 20 6f 70 74 5f 6c  ));.    /* opt_l
7190: 65 6e 20 6e 6f 77 20 69 6e 63 6c 75 64 65 73 20  en now includes 
71a0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
71b0: 65 20 74 72 65 65 20 72 65 70 72 65 73 65 6e 74  e tree represent
71c0: 61 74 69 6f 6e 73 2c 20 65 78 63 65 70 74 0a 20  ations, except. 
71d0: 20 20 20 20 2a 20 74 68 65 20 6c 65 6e 67 74 68      * the length
71e0: 73 20 6f 66 20 74 68 65 20 62 69 74 20 6c 65 6e  s of the bit len
71f0: 67 74 68 73 20 63 6f 64 65 73 20 61 6e 64 20 74  gths codes and t
7200: 68 65 20 35 2b 35 2b 34 20 62 69 74 73 20 66 6f  he 5+5+4 bits fo
7210: 72 20 74 68 65 20 63 6f 75 6e 74 73 2e 0a 20 20  r the counts..  
7220: 20 20 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 65     */..    /* De
7230: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
7240: 65 72 20 6f 66 20 62 69 74 20 6c 65 6e 67 74 68  er of bit length
7250: 20 63 6f 64 65 73 20 74 6f 20 73 65 6e 64 2e 20   codes to send. 
7260: 54 68 65 20 70 6b 7a 69 70 20 66 6f 72 6d 61 74  The pkzip format
7270: 0a 20 20 20 20 20 2a 20 72 65 71 75 69 72 65 73  .     * requires
7280: 20 74 68 61 74 20 61 74 20 6c 65 61 73 74 20 34   that at least 4
7290: 20 62 69 74 20 6c 65 6e 67 74 68 20 63 6f 64 65   bit length code
72a0: 73 20 62 65 20 73 65 6e 74 2e 20 28 61 70 70 6e  s be sent. (appn
72b0: 6f 74 65 2e 74 78 74 20 73 61 79 73 0a 20 20 20  ote.txt says.   
72c0: 20 20 2a 20 33 20 62 75 74 20 74 68 65 20 61 63    * 3 but the ac
72d0: 74 75 61 6c 20 76 61 6c 75 65 20 75 73 65 64 20  tual value used 
72e0: 69 73 20 34 2e 29 0a 20 20 20 20 20 2a 2f 0a 20  is 4.).     */. 
72f0: 20 20 20 66 6f 72 20 28 6d 61 78 5f 62 6c 69 6e     for (max_blin
7300: 64 65 78 20 3d 20 42 4c 5f 43 4f 44 45 53 2d 31  dex = BL_CODES-1
7310: 3b 20 6d 61 78 5f 62 6c 69 6e 64 65 78 20 3e 3d  ; max_blindex >=
7320: 20 33 3b 20 6d 61 78 5f 62 6c 69 6e 64 65 78 2d   3; max_blindex-
7330: 2d 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  -) {.        if 
7340: 28 73 2d 3e 62 6c 5f 74 72 65 65 5b 62 6c 5f 6f  (s->bl_tree[bl_o
7350: 72 64 65 72 5b 6d 61 78 5f 62 6c 69 6e 64 65 78  rder[max_blindex
7360: 5d 5d 2e 4c 65 6e 20 21 3d 20 30 29 20 62 72 65  ]].Len != 0) bre
7370: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  ak;.    }.    /*
7380: 20 55 70 64 61 74 65 20 6f 70 74 5f 6c 65 6e 20   Update opt_len 
7390: 74 6f 20 69 6e 63 6c 75 64 65 20 74 68 65 20 62  to include the b
73a0: 69 74 20 6c 65 6e 67 74 68 20 74 72 65 65 20 61  it length tree a
73b0: 6e 64 20 63 6f 75 6e 74 73 20 2a 2f 0a 20 20 20  nd counts */.   
73c0: 20 73 2d 3e 6f 70 74 5f 6c 65 6e 20 2b 3d 20 33   s->opt_len += 3
73d0: 2a 28 6d 61 78 5f 62 6c 69 6e 64 65 78 2b 31 29  *(max_blindex+1)
73e0: 20 2b 20 35 2b 35 2b 34 3b 0a 20 20 20 20 54 72   + 5+5+4;.    Tr
73f0: 61 63 65 76 28 28 73 74 64 65 72 72 2c 20 22 5c  acev((stderr, "\
7400: 6e 64 79 6e 20 74 72 65 65 73 3a 20 64 79 6e 20  ndyn trees: dyn 
7410: 25 6c 64 2c 20 73 74 61 74 20 25 6c 64 22 2c 0a  %ld, stat %ld",.
7420: 20 20 20 20 20 20 20 20 20 20 20 20 73 2d 3e 6f              s->o
7430: 70 74 5f 6c 65 6e 2c 20 73 2d 3e 73 74 61 74 69  pt_len, s->stati
7440: 63 5f 6c 65 6e 29 29 3b 0a 0a 20 20 20 20 72 65  c_len));..    re
7450: 74 75 72 6e 20 6d 61 78 5f 62 6c 69 6e 64 65 78  turn max_blindex
7460: 3b 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d  ;.}../* ========
7470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7490: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
74a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
74b0: 3d 3d 3d 0a 20 2a 20 53 65 6e 64 20 74 68 65 20  ===. * Send the 
74c0: 68 65 61 64 65 72 20 66 6f 72 20 61 20 62 6c 6f  header for a blo
74d0: 63 6b 20 75 73 69 6e 67 20 64 79 6e 61 6d 69 63  ck using dynamic
74e0: 20 48 75 66 66 6d 61 6e 20 74 72 65 65 73 3a 20   Huffman trees: 
74f0: 74 68 65 20 63 6f 75 6e 74 73 2c 20 74 68 65 0a  the counts, the.
7500: 20 2a 20 6c 65 6e 67 74 68 73 20 6f 66 20 74 68   * lengths of th
7510: 65 20 62 69 74 20 6c 65 6e 67 74 68 20 63 6f 64  e bit length cod
7520: 65 73 2c 20 74 68 65 20 6c 69 74 65 72 61 6c 20  es, the literal 
7530: 74 72 65 65 20 61 6e 64 20 74 68 65 20 64 69 73  tree and the dis
7540: 74 61 6e 63 65 20 74 72 65 65 2e 0a 20 2a 20 49  tance tree.. * I
7550: 4e 20 61 73 73 65 72 74 69 6f 6e 3a 20 6c 63 6f  N assertion: lco
7560: 64 65 73 20 3e 3d 20 32 35 37 2c 20 64 63 6f 64  des >= 257, dcod
7570: 65 73 20 3e 3d 20 31 2c 20 62 6c 63 6f 64 65 73  es >= 1, blcodes
7580: 20 3e 3d 20 34 2e 0a 20 2a 2f 0a 6c 6f 63 61 6c   >= 4.. */.local
7590: 20 76 6f 69 64 20 73 65 6e 64 5f 61 6c 6c 5f 74   void send_all_t
75a0: 72 65 65 73 28 73 2c 20 6c 63 6f 64 65 73 2c 20  rees(s, lcodes, 
75b0: 64 63 6f 64 65 73 2c 20 62 6c 63 6f 64 65 73 29  dcodes, blcodes)
75c0: 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61  .    deflate_sta
75d0: 74 65 20 2a 73 3b 0a 20 20 20 20 69 6e 74 20 6c  te *s;.    int l
75e0: 63 6f 64 65 73 2c 20 64 63 6f 64 65 73 2c 20 62  codes, dcodes, b
75f0: 6c 63 6f 64 65 73 3b 20 2f 2a 20 6e 75 6d 62 65  lcodes; /* numbe
7600: 72 20 6f 66 20 63 6f 64 65 73 20 66 6f 72 20 65  r of codes for e
7610: 61 63 68 20 74 72 65 65 20 2a 2f 0a 7b 0a 20 20  ach tree */.{.  
7620: 20 20 69 6e 74 20 72 61 6e 6b 3b 20 20 20 20 20    int rank;     
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7640: 2a 20 69 6e 64 65 78 20 69 6e 20 62 6c 5f 6f 72  * index in bl_or
7650: 64 65 72 20 2a 2f 0a 0a 20 20 20 20 41 73 73 65  der */..    Asse
7660: 72 74 20 28 6c 63 6f 64 65 73 20 3e 3d 20 32 35  rt (lcodes >= 25
7670: 37 20 26 26 20 64 63 6f 64 65 73 20 3e 3d 20 31  7 && dcodes >= 1
7680: 20 26 26 20 62 6c 63 6f 64 65 73 20 3e 3d 20 34   && blcodes >= 4
7690: 2c 20 22 6e 6f 74 20 65 6e 6f 75 67 68 20 63 6f  , "not enough co
76a0: 64 65 73 22 29 3b 0a 20 20 20 20 41 73 73 65 72  des");.    Asser
76b0: 74 20 28 6c 63 6f 64 65 73 20 3c 3d 20 4c 5f 43  t (lcodes <= L_C
76c0: 4f 44 45 53 20 26 26 20 64 63 6f 64 65 73 20 3c  ODES && dcodes <
76d0: 3d 20 44 5f 43 4f 44 45 53 20 26 26 20 62 6c 63  = D_CODES && blc
76e0: 6f 64 65 73 20 3c 3d 20 42 4c 5f 43 4f 44 45 53  odes <= BL_CODES
76f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74  ,.            "t
7700: 6f 6f 20 6d 61 6e 79 20 63 6f 64 65 73 22 29 3b  oo many codes");
7710: 0a 20 20 20 20 54 72 61 63 65 76 28 28 73 74 64  .    Tracev((std
7720: 65 72 72 2c 20 22 5c 6e 62 6c 20 63 6f 75 6e 74  err, "\nbl count
7730: 73 3a 20 22 29 29 3b 0a 20 20 20 20 73 65 6e 64  s: "));.    send
7740: 5f 62 69 74 73 28 73 2c 20 6c 63 6f 64 65 73 2d  _bits(s, lcodes-
7750: 32 35 37 2c 20 35 29 3b 20 2f 2a 20 6e 6f 74 20  257, 5); /* not 
7760: 2b 32 35 35 20 61 73 20 73 74 61 74 65 64 20 69  +255 as stated i
7770: 6e 20 61 70 70 6e 6f 74 65 2e 74 78 74 20 2a 2f  n appnote.txt */
7780: 0a 20 20 20 20 73 65 6e 64 5f 62 69 74 73 28 73  .    send_bits(s
7790: 2c 20 64 63 6f 64 65 73 2d 31 2c 20 20 20 35 29  , dcodes-1,   5)
77a0: 3b 0a 20 20 20 20 73 65 6e 64 5f 62 69 74 73 28  ;.    send_bits(
77b0: 73 2c 20 62 6c 63 6f 64 65 73 2d 34 2c 20 20 34  s, blcodes-4,  4
77c0: 29 3b 20 2f 2a 20 6e 6f 74 20 2d 33 20 61 73 20  ); /* not -3 as 
77d0: 73 74 61 74 65 64 20 69 6e 20 61 70 70 6e 6f 74  stated in appnot
77e0: 65 2e 74 78 74 20 2a 2f 0a 20 20 20 20 66 6f 72  e.txt */.    for
77f0: 20 28 72 61 6e 6b 20 3d 20 30 3b 20 72 61 6e 6b   (rank = 0; rank
7800: 20 3c 20 62 6c 63 6f 64 65 73 3b 20 72 61 6e 6b   < blcodes; rank
7810: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 54 72  ++) {.        Tr
7820: 61 63 65 76 28 28 73 74 64 65 72 72 2c 20 22 5c  acev((stderr, "\
7830: 6e 62 6c 20 63 6f 64 65 20 25 32 64 20 22 2c 20  nbl code %2d ", 
7840: 62 6c 5f 6f 72 64 65 72 5b 72 61 6e 6b 5d 29 29  bl_order[rank]))
7850: 3b 0a 20 20 20 20 20 20 20 20 73 65 6e 64 5f 62  ;.        send_b
7860: 69 74 73 28 73 2c 20 73 2d 3e 62 6c 5f 74 72 65  its(s, s->bl_tre
7870: 65 5b 62 6c 5f 6f 72 64 65 72 5b 72 61 6e 6b 5d  e[bl_order[rank]
7880: 5d 2e 4c 65 6e 2c 20 33 29 3b 0a 20 20 20 20 7d  ].Len, 3);.    }
7890: 0a 20 20 20 20 54 72 61 63 65 76 28 28 73 74 64  .    Tracev((std
78a0: 65 72 72 2c 20 22 5c 6e 62 6c 20 74 72 65 65 3a  err, "\nbl tree:
78b0: 20 73 65 6e 74 20 25 6c 64 22 2c 20 73 2d 3e 62   sent %ld", s->b
78c0: 69 74 73 5f 73 65 6e 74 29 29 3b 0a 0a 20 20 20  its_sent));..   
78d0: 20 73 65 6e 64 5f 74 72 65 65 28 73 2c 20 28 63   send_tree(s, (c
78e0: 74 5f 64 61 74 61 20 2a 29 73 2d 3e 64 79 6e 5f  t_data *)s->dyn_
78f0: 6c 74 72 65 65 2c 20 6c 63 6f 64 65 73 2d 31 29  ltree, lcodes-1)
7900: 3b 20 2f 2a 20 6c 69 74 65 72 61 6c 20 74 72 65  ; /* literal tre
7910: 65 20 2a 2f 0a 20 20 20 20 54 72 61 63 65 76 28  e */.    Tracev(
7920: 28 73 74 64 65 72 72 2c 20 22 5c 6e 6c 69 74 20  (stderr, "\nlit 
7930: 74 72 65 65 3a 20 73 65 6e 74 20 25 6c 64 22 2c  tree: sent %ld",
7940: 20 73 2d 3e 62 69 74 73 5f 73 65 6e 74 29 29 3b   s->bits_sent));
7950: 0a 0a 20 20 20 20 73 65 6e 64 5f 74 72 65 65 28  ..    send_tree(
7960: 73 2c 20 28 63 74 5f 64 61 74 61 20 2a 29 73 2d  s, (ct_data *)s-
7970: 3e 64 79 6e 5f 64 74 72 65 65 2c 20 64 63 6f 64  >dyn_dtree, dcod
7980: 65 73 2d 31 29 3b 20 2f 2a 20 64 69 73 74 61 6e  es-1); /* distan
7990: 63 65 20 74 72 65 65 20 2a 2f 0a 20 20 20 20 54  ce tree */.    T
79a0: 72 61 63 65 76 28 28 73 74 64 65 72 72 2c 20 22  racev((stderr, "
79b0: 5c 6e 64 69 73 74 20 74 72 65 65 3a 20 73 65 6e  \ndist tree: sen
79c0: 74 20 25 6c 64 22 2c 20 73 2d 3e 62 69 74 73 5f  t %ld", s->bits_
79d0: 73 65 6e 74 29 29 3b 0a 7d 0a 0a 2f 2a 20 3d 3d  sent));.}../* ==
79e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
79f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 53 65 6e  =========. * Sen
7a30: 64 20 61 20 73 74 6f 72 65 64 20 62 6c 6f 63 6b  d a stored block
7a40: 0a 20 2a 2f 0a 76 6f 69 64 20 5f 74 72 5f 73 74  . */.void _tr_st
7a50: 6f 72 65 64 5f 62 6c 6f 63 6b 28 73 2c 20 62 75  ored_block(s, bu
7a60: 66 2c 20 73 74 6f 72 65 64 5f 6c 65 6e 2c 20 65  f, stored_len, e
7a70: 6f 66 29 0a 20 20 20 20 64 65 66 6c 61 74 65 5f  of).    deflate_
7a80: 73 74 61 74 65 20 2a 73 3b 0a 20 20 20 20 63 68  state *s;.    ch
7a90: 61 72 66 20 2a 62 75 66 3b 20 20 20 20 20 20 20  arf *buf;       
7aa0: 2f 2a 20 69 6e 70 75 74 20 62 6c 6f 63 6b 20 2a  /* input block *
7ab0: 2f 0a 20 20 20 20 75 6c 67 20 73 74 6f 72 65 64  /.    ulg stored
7ac0: 5f 6c 65 6e 3b 20 20 20 2f 2a 20 6c 65 6e 67 74  _len;   /* lengt
7ad0: 68 20 6f 66 20 69 6e 70 75 74 20 62 6c 6f 63 6b  h of input block
7ae0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 65 6f 66 3b   */.    int eof;
7af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
7b00: 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
7b10: 20 6c 61 73 74 20 62 6c 6f 63 6b 20 66 6f 72 20   last block for 
7b20: 61 20 66 69 6c 65 20 2a 2f 0a 7b 0a 20 20 20 20  a file */.{.    
7b30: 73 65 6e 64 5f 62 69 74 73 28 73 2c 20 28 53 54  send_bits(s, (ST
7b40: 4f 52 45 44 5f 42 4c 4f 43 4b 3c 3c 31 29 2b 65  ORED_BLOCK<<1)+e
7b50: 6f 66 2c 20 33 29 3b 20 20 2f 2a 20 73 65 6e 64  of, 3);  /* send
7b60: 20 62 6c 6f 63 6b 20 74 79 70 65 20 2a 2f 0a 23   block type */.#
7b70: 69 66 64 65 66 20 44 45 42 55 47 0a 20 20 20 20  ifdef DEBUG.    
7b80: 73 2d 3e 63 6f 6d 70 72 65 73 73 65 64 5f 6c 65  s->compressed_le
7b90: 6e 20 3d 20 28 73 2d 3e 63 6f 6d 70 72 65 73 73  n = (s->compress
7ba0: 65 64 5f 6c 65 6e 20 2b 20 33 20 2b 20 37 29 20  ed_len + 3 + 7) 
7bb0: 26 20 28 75 6c 67 29 7e 37 4c 3b 0a 20 20 20 20  & (ulg)~7L;.    
7bc0: 73 2d 3e 63 6f 6d 70 72 65 73 73 65 64 5f 6c 65  s->compressed_le
7bd0: 6e 20 2b 3d 20 28 73 74 6f 72 65 64 5f 6c 65 6e  n += (stored_len
7be0: 20 2b 20 34 29 20 3c 3c 20 33 3b 0a 23 65 6e 64   + 4) << 3;.#end
7bf0: 69 66 0a 20 20 20 20 63 6f 70 79 5f 62 6c 6f 63  if.    copy_bloc
7c00: 6b 28 73 2c 20 62 75 66 2c 20 28 75 6e 73 69 67  k(s, buf, (unsig
7c10: 6e 65 64 29 73 74 6f 72 65 64 5f 6c 65 6e 2c 20  ned)stored_len, 
7c20: 31 29 3b 20 2f 2a 20 77 69 74 68 20 68 65 61 64  1); /* with head
7c30: 65 72 20 2a 2f 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d  er */.}../* ====
7c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7c80: 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 53 65 6e 64 20  =======. * Send 
7c90: 6f 6e 65 20 65 6d 70 74 79 20 73 74 61 74 69 63  one empty static
7ca0: 20 62 6c 6f 63 6b 20 74 6f 20 67 69 76 65 20 65   block to give e
7cb0: 6e 6f 75 67 68 20 6c 6f 6f 6b 61 68 65 61 64 20  nough lookahead 
7cc0: 66 6f 72 20 69 6e 66 6c 61 74 65 2e 0a 20 2a 20  for inflate.. * 
7cd0: 54 68 69 73 20 74 61 6b 65 73 20 31 30 20 62 69  This takes 10 bi
7ce0: 74 73 2c 20 6f 66 20 77 68 69 63 68 20 37 20 6d  ts, of which 7 m
7cf0: 61 79 20 72 65 6d 61 69 6e 20 69 6e 20 74 68 65  ay remain in the
7d00: 20 62 69 74 20 62 75 66 66 65 72 2e 0a 20 2a 20   bit buffer.. * 
7d10: 54 68 65 20 63 75 72 72 65 6e 74 20 69 6e 66 6c  The current infl
7d20: 61 74 65 20 63 6f 64 65 20 72 65 71 75 69 72 65  ate code require
7d30: 73 20 39 20 62 69 74 73 20 6f 66 20 6c 6f 6f 6b  s 9 bits of look
7d40: 61 68 65 61 64 2e 20 49 66 20 74 68 65 0a 20 2a  ahead. If the. *
7d50: 20 6c 61 73 74 20 74 77 6f 20 63 6f 64 65 73 20   last two codes 
7d60: 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73  for the previous
7d70: 20 62 6c 6f 63 6b 20 28 72 65 61 6c 20 63 6f 64   block (real cod
7d80: 65 20 70 6c 75 73 20 45 4f 42 29 20 77 65 72 65  e plus EOB) were
7d90: 20 63 6f 64 65 64 0a 20 2a 20 6f 6e 20 35 20 62   coded. * on 5 b
7da0: 69 74 73 20 6f 72 20 6c 65 73 73 2c 20 69 6e 66  its or less, inf
7db0: 6c 61 74 65 20 6d 61 79 20 68 61 76 65 20 6f 6e  late may have on
7dc0: 6c 79 20 35 2b 33 20 62 69 74 73 20 6f 66 20 6c  ly 5+3 bits of l
7dd0: 6f 6f 6b 61 68 65 61 64 20 74 6f 20 64 65 63 6f  ookahead to deco
7de0: 64 65 0a 20 2a 20 74 68 65 20 6c 61 73 74 20 72  de. * the last r
7df0: 65 61 6c 20 63 6f 64 65 2e 20 49 6e 20 74 68 69  eal code. In thi
7e00: 73 20 63 61 73 65 20 77 65 20 73 65 6e 64 20 74  s case we send t
7e10: 77 6f 20 65 6d 70 74 79 20 73 74 61 74 69 63 20  wo empty static 
7e20: 62 6c 6f 63 6b 73 20 69 6e 73 74 65 61 64 0a 20  blocks instead. 
7e30: 2a 20 6f 66 20 6f 6e 65 2e 20 28 54 68 65 72 65  * of one. (There
7e40: 20 61 72 65 20 6e 6f 20 70 72 6f 62 6c 65 6d 73   are no problems
7e50: 20 69 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   if the previous
7e60: 20 62 6c 6f 63 6b 20 69 73 20 73 74 6f 72 65 64   block is stored
7e70: 20 6f 72 20 66 69 78 65 64 2e 29 0a 20 2a 20 54   or fixed.). * T
7e80: 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20 63  o simplify the c
7e90: 6f 64 65 2c 20 77 65 20 61 73 73 75 6d 65 20 74  ode, we assume t
7ea0: 68 65 20 77 6f 72 73 74 20 63 61 73 65 20 6f 66  he worst case of
7eb0: 20 6c 61 73 74 20 72 65 61 6c 20 63 6f 64 65 20   last real code 
7ec0: 65 6e 63 6f 64 65 64 0a 20 2a 20 6f 6e 20 6f 6e  encoded. * on on
7ed0: 65 20 62 69 74 20 6f 6e 6c 79 2e 0a 20 2a 2f 0a  e bit only.. */.
7ee0: 76 6f 69 64 20 5f 74 72 5f 61 6c 69 67 6e 28 73  void _tr_align(s
7ef0: 29 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74  ).    deflate_st
7f00: 61 74 65 20 2a 73 3b 0a 7b 0a 20 20 20 20 73 65  ate *s;.{.    se
7f10: 6e 64 5f 62 69 74 73 28 73 2c 20 53 54 41 54 49  nd_bits(s, STATI
7f20: 43 5f 54 52 45 45 53 3c 3c 31 2c 20 33 29 3b 0a  C_TREES<<1, 3);.
7f30: 20 20 20 20 73 65 6e 64 5f 63 6f 64 65 28 73 2c      send_code(s,
7f40: 20 45 4e 44 5f 42 4c 4f 43 4b 2c 20 73 74 61 74   END_BLOCK, stat
7f50: 69 63 5f 6c 74 72 65 65 29 3b 0a 23 69 66 64 65  ic_ltree);.#ifde
7f60: 66 20 44 45 42 55 47 0a 20 20 20 20 73 2d 3e 63  f DEBUG.    s->c
7f70: 6f 6d 70 72 65 73 73 65 64 5f 6c 65 6e 20 2b 3d  ompressed_len +=
7f80: 20 31 30 4c 3b 20 2f 2a 20 33 20 66 6f 72 20 62   10L; /* 3 for b
7f90: 6c 6f 63 6b 20 74 79 70 65 2c 20 37 20 66 6f 72  lock type, 7 for
7fa0: 20 45 4f 42 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EOB */.#endif. 
7fb0: 20 20 20 62 69 5f 66 6c 75 73 68 28 73 29 3b 0a     bi_flush(s);.
7fc0: 20 20 20 20 2f 2a 20 4f 66 20 74 68 65 20 31 30      /* Of the 10
7fd0: 20 62 69 74 73 20 66 6f 72 20 74 68 65 20 65 6d   bits for the em
7fe0: 70 74 79 20 62 6c 6f 63 6b 2c 20 77 65 20 68 61  pty block, we ha
7ff0: 76 65 20 61 6c 72 65 61 64 79 20 73 65 6e 74 0a  ve already sent.
8000: 20 20 20 20 20 2a 20 28 31 30 20 2d 20 62 69 5f       * (10 - bi_
8010: 76 61 6c 69 64 29 20 62 69 74 73 2e 20 54 68 65  valid) bits. The
8020: 20 6c 6f 6f 6b 61 68 65 61 64 20 66 6f 72 20 74   lookahead for t
8030: 68 65 20 6c 61 73 74 20 72 65 61 6c 20 63 6f 64  he last real cod
8040: 65 20 28 62 65 66 6f 72 65 0a 20 20 20 20 20 2a  e (before.     *
8050: 20 74 68 65 20 45 4f 42 20 6f 66 20 74 68 65 20   the EOB of the 
8060: 70 72 65 76 69 6f 75 73 20 62 6c 6f 63 6b 29 20  previous block) 
8070: 77 61 73 20 74 68 75 73 20 61 74 20 6c 65 61 73  was thus at leas
8080: 74 20 6f 6e 65 20 70 6c 75 73 20 74 68 65 20 6c  t one plus the l
8090: 65 6e 67 74 68 0a 20 20 20 20 20 2a 20 6f 66 20  ength.     * of 
80a0: 74 68 65 20 45 4f 42 20 70 6c 75 73 20 77 68 61  the EOB plus wha
80b0: 74 20 77 65 20 68 61 76 65 20 6a 75 73 74 20 73  t we have just s
80c0: 65 6e 74 20 6f 66 20 74 68 65 20 65 6d 70 74 79  ent of the empty
80d0: 20 73 74 61 74 69 63 20 62 6c 6f 63 6b 2e 0a 20   static block.. 
80e0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 20 28 31      */.    if (1
80f0: 20 2b 20 73 2d 3e 6c 61 73 74 5f 65 6f 62 5f 6c   + s->last_eob_l
8100: 65 6e 20 2b 20 31 30 20 2d 20 73 2d 3e 62 69 5f  en + 10 - s->bi_
8110: 76 61 6c 69 64 20 3c 20 39 29 20 7b 0a 20 20 20  valid < 9) {.   
8120: 20 20 20 20 20 73 65 6e 64 5f 62 69 74 73 28 73       send_bits(s
8130: 2c 20 53 54 41 54 49 43 5f 54 52 45 45 53 3c 3c  , STATIC_TREES<<
8140: 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  1, 3);.        s
8150: 65 6e 64 5f 63 6f 64 65 28 73 2c 20 45 4e 44 5f  end_code(s, END_
8160: 42 4c 4f 43 4b 2c 20 73 74 61 74 69 63 5f 6c 74  BLOCK, static_lt
8170: 72 65 65 29 3b 0a 23 69 66 64 65 66 20 44 45 42  ree);.#ifdef DEB
8180: 55 47 0a 20 20 20 20 20 20 20 20 73 2d 3e 63 6f  UG.        s->co
8190: 6d 70 72 65 73 73 65 64 5f 6c 65 6e 20 2b 3d 20  mpressed_len += 
81a0: 31 30 4c 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  10L;.#endif.    
81b0: 20 20 20 20 62 69 5f 66 6c 75 73 68 28 73 29 3b      bi_flush(s);
81c0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 2d 3e 6c 61  .    }.    s->la
81d0: 73 74 5f 65 6f 62 5f 6c 65 6e 20 3d 20 37 3b 0a  st_eob_len = 7;.
81e0: 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  }../* ==========
81f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8230: 3d 0a 20 2a 20 44 65 74 65 72 6d 69 6e 65 20 74  =. * Determine t
8240: 68 65 20 62 65 73 74 20 65 6e 63 6f 64 69 6e 67  he best encoding
8250: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
8260: 20 62 6c 6f 63 6b 3a 20 64 79 6e 61 6d 69 63 20   block: dynamic 
8270: 74 72 65 65 73 2c 20 73 74 61 74 69 63 0a 20 2a  trees, static. *
8280: 20 74 72 65 65 73 20 6f 72 20 73 74 6f 72 65 2c   trees or store,
8290: 20 61 6e 64 20 6f 75 74 70 75 74 20 74 68 65 20   and output the 
82a0: 65 6e 63 6f 64 65 64 20 62 6c 6f 63 6b 20 74 6f  encoded block to
82b0: 20 74 68 65 20 7a 69 70 20 66 69 6c 65 2e 0a 20   the zip file.. 
82c0: 2a 2f 0a 76 6f 69 64 20 5f 74 72 5f 66 6c 75 73  */.void _tr_flus
82d0: 68 5f 62 6c 6f 63 6b 28 73 2c 20 62 75 66 2c 20  h_block(s, buf, 
82e0: 73 74 6f 72 65 64 5f 6c 65 6e 2c 20 65 6f 66 29  stored_len, eof)
82f0: 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61  .    deflate_sta
8300: 74 65 20 2a 73 3b 0a 20 20 20 20 63 68 61 72 66  te *s;.    charf
8310: 20 2a 62 75 66 3b 20 20 20 20 20 20 20 2f 2a 20   *buf;       /* 
8320: 69 6e 70 75 74 20 62 6c 6f 63 6b 2c 20 6f 72 20  input block, or 
8330: 4e 55 4c 4c 20 69 66 20 74 6f 6f 20 6f 6c 64 20  NULL if too old 
8340: 2a 2f 0a 20 20 20 20 75 6c 67 20 73 74 6f 72 65  */.    ulg store
8350: 64 5f 6c 65 6e 3b 20 20 20 2f 2a 20 6c 65 6e 67  d_len;   /* leng
8360: 74 68 20 6f 66 20 69 6e 70 75 74 20 62 6c 6f 63  th of input bloc
8370: 6b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 65 6f 66  k */.    int eof
8380: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  ;          /* tr
8390: 75 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ue if this is th
83a0: 65 20 6c 61 73 74 20 62 6c 6f 63 6b 20 66 6f 72  e last block for
83b0: 20 61 20 66 69 6c 65 20 2a 2f 0a 7b 0a 20 20 20   a file */.{.   
83c0: 20 75 6c 67 20 6f 70 74 5f 6c 65 6e 62 2c 20 73   ulg opt_lenb, s
83d0: 74 61 74 69 63 5f 6c 65 6e 62 3b 20 2f 2a 20 6f  tatic_lenb; /* o
83e0: 70 74 5f 6c 65 6e 20 61 6e 64 20 73 74 61 74 69  pt_len and stati
83f0: 63 5f 6c 65 6e 20 69 6e 20 62 79 74 65 73 20 2a  c_len in bytes *
8400: 2f 0a 20 20 20 20 69 6e 74 20 6d 61 78 5f 62 6c  /.    int max_bl
8410: 69 6e 64 65 78 20 3d 20 30 3b 20 20 2f 2a 20 69  index = 0;  /* i
8420: 6e 64 65 78 20 6f 66 20 6c 61 73 74 20 62 69 74  ndex of last bit
8430: 20 6c 65 6e 67 74 68 20 63 6f 64 65 20 6f 66 20   length code of 
8440: 6e 6f 6e 20 7a 65 72 6f 20 66 72 65 71 20 2a 2f  non zero freq */
8450: 0a 0a 20 20 20 20 2f 2a 20 42 75 69 6c 64 20 74  ..    /* Build t
8460: 68 65 20 48 75 66 66 6d 61 6e 20 74 72 65 65 73  he Huffman trees
8470: 20 75 6e 6c 65 73 73 20 61 20 73 74 6f 72 65 64   unless a stored
8480: 20 62 6c 6f 63 6b 20 69 73 20 66 6f 72 63 65 64   block is forced
8490: 20 2a 2f 0a 20 20 20 20 69 66 20 28 73 2d 3e 6c   */.    if (s->l
84a0: 65 76 65 6c 20 3e 20 30 29 20 7b 0a 0a 09 20 2f  evel > 0) {... /
84b0: 2a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66  * Check if the f
84c0: 69 6c 65 20 69 73 20 61 73 63 69 69 20 6f 72 20  ile is ascii or 
84d0: 62 69 6e 61 72 79 20 2a 2f 0a 09 69 66 20 28 73  binary */..if (s
84e0: 2d 3e 64 61 74 61 5f 74 79 70 65 20 3d 3d 20 5a  ->data_type == Z
84f0: 5f 55 4e 4b 4e 4f 57 4e 29 20 73 65 74 5f 64 61  _UNKNOWN) set_da
8500: 74 61 5f 74 79 70 65 28 73 29 3b 0a 0a 09 2f 2a  ta_type(s);.../*
8510: 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6c   Construct the l
8520: 69 74 65 72 61 6c 20 61 6e 64 20 64 69 73 74 61  iteral and dista
8530: 6e 63 65 20 74 72 65 65 73 20 2a 2f 0a 09 62 75  nce trees */..bu
8540: 69 6c 64 5f 74 72 65 65 28 73 2c 20 28 74 72 65  ild_tree(s, (tre
8550: 65 5f 64 65 73 63 20 2a 29 28 26 28 73 2d 3e 6c  e_desc *)(&(s->l
8560: 5f 64 65 73 63 29 29 29 3b 0a 09 54 72 61 63 65  _desc)));..Trace
8570: 76 28 28 73 74 64 65 72 72 2c 20 22 5c 6e 6c 69  v((stderr, "\nli
8580: 74 20 64 61 74 61 3a 20 64 79 6e 20 25 6c 64 2c  t data: dyn %ld,
8590: 20 73 74 61 74 20 25 6c 64 22 2c 20 73 2d 3e 6f   stat %ld", s->o
85a0: 70 74 5f 6c 65 6e 2c 0a 09 09 73 2d 3e 73 74 61  pt_len,...s->sta
85b0: 74 69 63 5f 6c 65 6e 29 29 3b 0a 0a 09 62 75 69  tic_len));...bui
85c0: 6c 64 5f 74 72 65 65 28 73 2c 20 28 74 72 65 65  ld_tree(s, (tree
85d0: 5f 64 65 73 63 20 2a 29 28 26 28 73 2d 3e 64 5f  _desc *)(&(s->d_
85e0: 64 65 73 63 29 29 29 3b 0a 09 54 72 61 63 65 76  desc)));..Tracev
85f0: 28 28 73 74 64 65 72 72 2c 20 22 5c 6e 64 69 73  ((stderr, "\ndis
8600: 74 20 64 61 74 61 3a 20 64 79 6e 20 25 6c 64 2c  t data: dyn %ld,
8610: 20 73 74 61 74 20 25 6c 64 22 2c 20 73 2d 3e 6f   stat %ld", s->o
8620: 70 74 5f 6c 65 6e 2c 0a 09 09 73 2d 3e 73 74 61  pt_len,...s->sta
8630: 74 69 63 5f 6c 65 6e 29 29 3b 0a 09 2f 2a 20 41  tic_len));../* A
8640: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 6f 70  t this point, op
8650: 74 5f 6c 65 6e 20 61 6e 64 20 73 74 61 74 69 63  t_len and static
8660: 5f 6c 65 6e 20 61 72 65 20 74 68 65 20 74 6f 74  _len are the tot
8670: 61 6c 20 62 69 74 20 6c 65 6e 67 74 68 73 20 6f  al bit lengths o
8680: 66 0a 09 20 2a 20 74 68 65 20 63 6f 6d 70 72 65  f.. * the compre
8690: 73 73 65 64 20 62 6c 6f 63 6b 20 64 61 74 61 2c  ssed block data,
86a0: 20 65 78 63 6c 75 64 69 6e 67 20 74 68 65 20 74   excluding the t
86b0: 72 65 65 20 72 65 70 72 65 73 65 6e 74 61 74 69  ree representati
86c0: 6f 6e 73 2e 0a 09 20 2a 2f 0a 0a 09 2f 2a 20 42  ons... */.../* B
86d0: 75 69 6c 64 20 74 68 65 20 62 69 74 20 6c 65 6e  uild the bit len
86e0: 67 74 68 20 74 72 65 65 20 66 6f 72 20 74 68 65  gth tree for the
86f0: 20 61 62 6f 76 65 20 74 77 6f 20 74 72 65 65 73   above two trees
8700: 2c 20 61 6e 64 20 67 65 74 20 74 68 65 20 69 6e  , and get the in
8710: 64 65 78 0a 09 20 2a 20 69 6e 20 62 6c 5f 6f 72  dex.. * in bl_or
8720: 64 65 72 20 6f 66 20 74 68 65 20 6c 61 73 74 20  der of the last 
8730: 62 69 74 20 6c 65 6e 67 74 68 20 63 6f 64 65 20  bit length code 
8740: 74 6f 20 73 65 6e 64 2e 0a 09 20 2a 2f 0a 09 6d  to send... */..m
8750: 61 78 5f 62 6c 69 6e 64 65 78 20 3d 20 62 75 69  ax_blindex = bui
8760: 6c 64 5f 62 6c 5f 74 72 65 65 28 73 29 3b 0a 0a  ld_bl_tree(s);..
8770: 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 74 68  ./* Determine th
8780: 65 20 62 65 73 74 20 65 6e 63 6f 64 69 6e 67 2e  e best encoding.
8790: 20 43 6f 6d 70 75 74 65 20 66 69 72 73 74 20 74   Compute first t
87a0: 68 65 20 62 6c 6f 63 6b 20 6c 65 6e 67 74 68 20  he block length 
87b0: 69 6e 20 62 79 74 65 73 2a 2f 0a 09 6f 70 74 5f  in bytes*/..opt_
87c0: 6c 65 6e 62 20 3d 20 28 73 2d 3e 6f 70 74 5f 6c  lenb = (s->opt_l
87d0: 65 6e 2b 33 2b 37 29 3e 3e 33 3b 0a 09 73 74 61  en+3+7)>>3;..sta
87e0: 74 69 63 5f 6c 65 6e 62 20 3d 20 28 73 2d 3e 73  tic_lenb = (s->s
87f0: 74 61 74 69 63 5f 6c 65 6e 2b 33 2b 37 29 3e 3e  tatic_len+3+7)>>
8800: 33 3b 0a 0a 09 54 72 61 63 65 76 28 28 73 74 64  3;...Tracev((std
8810: 65 72 72 2c 20 22 5c 6e 6f 70 74 20 25 6c 75 28  err, "\nopt %lu(
8820: 25 6c 75 29 20 73 74 61 74 20 25 6c 75 28 25 6c  %lu) stat %lu(%l
8830: 75 29 20 73 74 6f 72 65 64 20 25 6c 75 20 6c 69  u) stored %lu li
8840: 74 20 25 75 20 22 2c 0a 09 09 6f 70 74 5f 6c 65  t %u ",...opt_le
8850: 6e 62 2c 20 73 2d 3e 6f 70 74 5f 6c 65 6e 2c 20  nb, s->opt_len, 
8860: 73 74 61 74 69 63 5f 6c 65 6e 62 2c 20 73 2d 3e  static_lenb, s->
8870: 73 74 61 74 69 63 5f 6c 65 6e 2c 20 73 74 6f 72  static_len, stor
8880: 65 64 5f 6c 65 6e 2c 0a 09 09 73 2d 3e 6c 61 73  ed_len,...s->las
8890: 74 5f 6c 69 74 29 29 3b 0a 0a 09 69 66 20 28 73  t_lit));...if (s
88a0: 74 61 74 69 63 5f 6c 65 6e 62 20 3c 3d 20 6f 70  tatic_lenb <= op
88b0: 74 5f 6c 65 6e 62 29 20 6f 70 74 5f 6c 65 6e 62  t_lenb) opt_lenb
88c0: 20 3d 20 73 74 61 74 69 63 5f 6c 65 6e 62 3b 0a   = static_lenb;.
88d0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
88e0: 20 20 20 20 20 20 41 73 73 65 72 74 28 62 75 66        Assert(buf
88f0: 20 21 3d 20 28 63 68 61 72 2a 29 30 2c 20 22 6c   != (char*)0, "l
8900: 6f 73 74 20 62 75 66 22 29 3b 0a 09 6f 70 74 5f  ost buf");..opt_
8910: 6c 65 6e 62 20 3d 20 73 74 61 74 69 63 5f 6c 65  lenb = static_le
8920: 6e 62 20 3d 20 73 74 6f 72 65 64 5f 6c 65 6e 20  nb = stored_len 
8930: 2b 20 35 3b 20 2f 2a 20 66 6f 72 63 65 20 61 20  + 5; /* force a 
8940: 73 74 6f 72 65 64 20 62 6c 6f 63 6b 20 2a 2f 0a  stored block */.
8950: 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 46 4f      }..#ifdef FO
8960: 52 43 45 5f 53 54 4f 52 45 44 0a 20 20 20 20 69  RCE_STORED.    i
8970: 66 20 28 62 75 66 20 21 3d 20 28 63 68 61 72 2a  f (buf != (char*
8980: 29 30 29 20 7b 20 2f 2a 20 66 6f 72 63 65 20 73  )0) { /* force s
8990: 74 6f 72 65 64 20 62 6c 6f 63 6b 20 2a 2f 0a 23  tored block */.#
89a0: 65 6c 73 65 0a 20 20 20 20 69 66 20 28 73 74 6f  else.    if (sto
89b0: 72 65 64 5f 6c 65 6e 2b 34 20 3c 3d 20 6f 70 74  red_len+4 <= opt
89c0: 5f 6c 65 6e 62 20 26 26 20 62 75 66 20 21 3d 20  _lenb && buf != 
89d0: 28 63 68 61 72 2a 29 30 29 20 7b 0a 20 20 20 20  (char*)0) {.    
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 20 20 2f 2a 20 34 3a 20 74 77 6f 20 77 6f 72     /* 4: two wor
8a00: 64 73 20 66 6f 72 20 74 68 65 20 6c 65 6e 67 74  ds for the lengt
8a10: 68 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  hs */.#endif.   
8a20: 20 20 20 20 20 2f 2a 20 54 68 65 20 74 65 73 74       /* The test
8a30: 20 62 75 66 20 21 3d 20 4e 55 4c 4c 20 69 73 20   buf != NULL is 
8a40: 6f 6e 6c 79 20 6e 65 63 65 73 73 61 72 79 20 69  only necessary i
8a50: 66 20 4c 49 54 5f 42 55 46 53 49 5a 45 20 3e 20  f LIT_BUFSIZE > 
8a60: 57 53 49 5a 45 2e 0a 20 20 20 20 20 20 20 20 20  WSIZE..         
8a70: 2a 20 4f 74 68 65 72 77 69 73 65 20 77 65 20 63  * Otherwise we c
8a80: 61 6e 27 74 20 68 61 76 65 20 70 72 6f 63 65 73  an't have proces
8a90: 73 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 57 53  sed more than WS
8aa0: 49 5a 45 20 69 6e 70 75 74 20 62 79 74 65 73 20  IZE input bytes 
8ab0: 73 69 6e 63 65 0a 20 20 20 20 20 20 20 20 20 2a  since.         *
8ac0: 20 74 68 65 20 6c 61 73 74 20 62 6c 6f 63 6b 20   the last block 
8ad0: 66 6c 75 73 68 2c 20 62 65 63 61 75 73 65 20 63  flush, because c
8ae0: 6f 6d 70 72 65 73 73 69 6f 6e 20 77 6f 75 6c 64  ompression would
8af0: 20 68 61 76 65 20 62 65 65 6e 0a 20 20 20 20 20   have been.     
8b00: 20 20 20 20 2a 20 73 75 63 63 65 73 73 66 75 6c      * successful
8b10: 2e 20 49 66 20 4c 49 54 5f 42 55 46 53 49 5a 45  . If LIT_BUFSIZE
8b20: 20 3c 3d 20 57 53 49 5a 45 2c 20 69 74 20 69 73   <= WSIZE, it is
8b30: 20 6e 65 76 65 72 20 74 6f 6f 20 6c 61 74 65 20   never too late 
8b40: 74 6f 0a 20 20 20 20 20 20 20 20 20 2a 20 74 72  to.         * tr
8b50: 61 6e 73 66 6f 72 6d 20 61 20 62 6c 6f 63 6b 20  ansform a block 
8b60: 69 6e 74 6f 20 61 20 73 74 6f 72 65 64 20 62 6c  into a stored bl
8b70: 6f 63 6b 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f  ock..         */
8b80: 0a 20 20 20 20 20 20 20 20 5f 74 72 5f 73 74 6f  .        _tr_sto
8b90: 72 65 64 5f 62 6c 6f 63 6b 28 73 2c 20 62 75 66  red_block(s, buf
8ba0: 2c 20 73 74 6f 72 65 64 5f 6c 65 6e 2c 20 65 6f  , stored_len, eo
8bb0: 66 29 3b 0a 0a 23 69 66 64 65 66 20 46 4f 52 43  f);..#ifdef FORC
8bc0: 45 5f 53 54 41 54 49 43 0a 20 20 20 20 7d 20 65  E_STATIC.    } e
8bd0: 6c 73 65 20 69 66 20 28 73 74 61 74 69 63 5f 6c  lse if (static_l
8be0: 65 6e 62 20 3e 3d 20 30 29 20 7b 20 2f 2a 20 66  enb >= 0) { /* f
8bf0: 6f 72 63 65 20 73 74 61 74 69 63 20 74 72 65 65  orce static tree
8c00: 73 20 2a 2f 0a 23 65 6c 73 65 0a 20 20 20 20 7d  s */.#else.    }
8c10: 20 65 6c 73 65 20 69 66 20 28 73 74 61 74 69 63   else if (static
8c20: 5f 6c 65 6e 62 20 3d 3d 20 6f 70 74 5f 6c 65 6e  _lenb == opt_len
8c30: 62 29 20 7b 0a 23 65 6e 64 69 66 0a 20 20 20 20  b) {.#endif.    
8c40: 20 20 20 20 73 65 6e 64 5f 62 69 74 73 28 73 2c      send_bits(s,
8c50: 20 28 53 54 41 54 49 43 5f 54 52 45 45 53 3c 3c   (STATIC_TREES<<
8c60: 31 29 2b 65 6f 66 2c 20 33 29 3b 0a 20 20 20 20  1)+eof, 3);.    
8c70: 20 20 20 20 63 6f 6d 70 72 65 73 73 5f 62 6c 6f      compress_blo
8c80: 63 6b 28 73 2c 20 28 63 74 5f 64 61 74 61 20 2a  ck(s, (ct_data *
8c90: 29 73 74 61 74 69 63 5f 6c 74 72 65 65 2c 20 28  )static_ltree, (
8ca0: 63 74 5f 64 61 74 61 20 2a 29 73 74 61 74 69 63  ct_data *)static
8cb0: 5f 64 74 72 65 65 29 3b 0a 23 69 66 64 65 66 20  _dtree);.#ifdef 
8cc0: 44 45 42 55 47 0a 20 20 20 20 20 20 20 20 73 2d  DEBUG.        s-
8cd0: 3e 63 6f 6d 70 72 65 73 73 65 64 5f 6c 65 6e 20  >compressed_len 
8ce0: 2b 3d 20 33 20 2b 20 73 2d 3e 73 74 61 74 69 63  += 3 + s->static
8cf0: 5f 6c 65 6e 3b 0a 23 65 6e 64 69 66 0a 20 20 20  _len;.#endif.   
8d00: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
8d10: 20 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20 28    send_bits(s, (
8d20: 44 59 4e 5f 54 52 45 45 53 3c 3c 31 29 2b 65 6f  DYN_TREES<<1)+eo
8d30: 66 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  f, 3);.        s
8d40: 65 6e 64 5f 61 6c 6c 5f 74 72 65 65 73 28 73 2c  end_all_trees(s,
8d50: 20 73 2d 3e 6c 5f 64 65 73 63 2e 6d 61 78 5f 63   s->l_desc.max_c
8d60: 6f 64 65 2b 31 2c 20 73 2d 3e 64 5f 64 65 73 63  ode+1, s->d_desc
8d70: 2e 6d 61 78 5f 63 6f 64 65 2b 31 2c 0a 20 20 20  .max_code+1,.   
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d90: 20 20 20 20 6d 61 78 5f 62 6c 69 6e 64 65 78 2b      max_blindex+
8da0: 31 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  1);.        comp
8db0: 72 65 73 73 5f 62 6c 6f 63 6b 28 73 2c 20 28 63  ress_block(s, (c
8dc0: 74 5f 64 61 74 61 20 2a 29 73 2d 3e 64 79 6e 5f  t_data *)s->dyn_
8dd0: 6c 74 72 65 65 2c 20 28 63 74 5f 64 61 74 61 20  ltree, (ct_data 
8de0: 2a 29 73 2d 3e 64 79 6e 5f 64 74 72 65 65 29 3b  *)s->dyn_dtree);
8df0: 0a 23 69 66 64 65 66 20 44 45 42 55 47 0a 20 20  .#ifdef DEBUG.  
8e00: 20 20 20 20 20 20 73 2d 3e 63 6f 6d 70 72 65 73        s->compres
8e10: 73 65 64 5f 6c 65 6e 20 2b 3d 20 33 20 2b 20 73  sed_len += 3 + s
8e20: 2d 3e 6f 70 74 5f 6c 65 6e 3b 0a 23 65 6e 64 69  ->opt_len;.#endi
8e30: 66 0a 20 20 20 20 7d 0a 20 20 20 20 41 73 73 65  f.    }.    Asse
8e40: 72 74 20 28 73 2d 3e 63 6f 6d 70 72 65 73 73 65  rt (s->compresse
8e50: 64 5f 6c 65 6e 20 3d 3d 20 73 2d 3e 62 69 74 73  d_len == s->bits
8e60: 5f 73 65 6e 74 2c 20 22 62 61 64 20 63 6f 6d 70  _sent, "bad comp
8e70: 72 65 73 73 65 64 20 73 69 7a 65 22 29 3b 0a 20  ressed size");. 
8e80: 20 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20     /* The above 
8e90: 63 68 65 63 6b 20 69 73 20 6d 61 64 65 20 6d 6f  check is made mo
8ea0: 64 20 32 5e 33 32 2c 20 66 6f 72 20 66 69 6c 65  d 2^32, for file
8eb0: 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 35 31  s larger than 51
8ec0: 32 20 4d 42 0a 20 20 20 20 20 2a 20 61 6e 64 20  2 MB.     * and 
8ed0: 75 4c 6f 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 65  uLong implemente
8ee0: 64 20 6f 6e 20 33 32 20 62 69 74 73 2e 0a 20 20  d on 32 bits..  
8ef0: 20 20 20 2a 2f 0a 20 20 20 20 69 6e 69 74 5f 62     */.    init_b
8f00: 6c 6f 63 6b 28 73 29 3b 0a 0a 20 20 20 20 69 66  lock(s);..    if
8f10: 20 28 65 6f 66 29 20 7b 0a 20 20 20 20 20 20 20   (eof) {.       
8f20: 20 62 69 5f 77 69 6e 64 75 70 28 73 29 3b 0a 23   bi_windup(s);.#
8f30: 69 66 64 65 66 20 44 45 42 55 47 0a 20 20 20 20  ifdef DEBUG.    
8f40: 20 20 20 20 73 2d 3e 63 6f 6d 70 72 65 73 73 65      s->compresse
8f50: 64 5f 6c 65 6e 20 2b 3d 20 37 3b 20 20 2f 2a 20  d_len += 7;  /* 
8f60: 61 6c 69 67 6e 20 6f 6e 20 62 79 74 65 20 62 6f  align on byte bo
8f70: 75 6e 64 61 72 79 20 2a 2f 0a 23 65 6e 64 69 66  undary */.#endif
8f80: 0a 20 20 20 20 7d 0a 20 20 20 20 54 72 61 63 65  .    }.    Trace
8f90: 76 28 28 73 74 64 65 72 72 2c 22 5c 6e 63 6f 6d  v((stderr,"\ncom
8fa0: 70 72 6c 65 6e 20 25 6c 75 28 25 6c 75 29 20 22  prlen %lu(%lu) "
8fb0: 2c 20 73 2d 3e 63 6f 6d 70 72 65 73 73 65 64 5f  , s->compressed_
8fc0: 6c 65 6e 3e 3e 33 2c 0a 20 20 20 20 20 20 20 20  len>>3,.        
8fd0: 20 20 20 73 2d 3e 63 6f 6d 70 72 65 73 73 65 64     s->compressed
8fe0: 5f 6c 65 6e 2d 37 2a 65 6f 66 29 29 3b 0a 7d 0a  _len-7*eof));.}.
8ff0: 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ./* ============
9000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
9040: 20 2a 20 53 61 76 65 20 74 68 65 20 6d 61 74 63   * Save the matc
9050: 68 20 69 6e 66 6f 20 61 6e 64 20 74 61 6c 6c 79  h info and tally
9060: 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 63   the frequency c
9070: 6f 75 6e 74 73 2e 20 52 65 74 75 72 6e 20 74 72  ounts. Return tr
9080: 75 65 20 69 66 0a 20 2a 20 74 68 65 20 63 75 72  ue if. * the cur
9090: 72 65 6e 74 20 62 6c 6f 63 6b 20 6d 75 73 74 20  rent block must 
90a0: 62 65 20 66 6c 75 73 68 65 64 2e 0a 20 2a 2f 0a  be flushed.. */.
90b0: 69 6e 74 20 5f 74 72 5f 74 61 6c 6c 79 20 28 73  int _tr_tally (s
90c0: 2c 20 64 69 73 74 2c 20 6c 63 29 0a 20 20 20 20  , dist, lc).    
90d0: 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20 2a 73  deflate_state *s
90e0: 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  ;.    unsigned d
90f0: 69 73 74 3b 20 20 2f 2a 20 64 69 73 74 61 6e 63  ist;  /* distanc
9100: 65 20 6f 66 20 6d 61 74 63 68 65 64 20 73 74 72  e of matched str
9110: 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ing */.    unsig
9120: 6e 65 64 20 6c 63 3b 20 20 20 20 2f 2a 20 6d 61  ned lc;    /* ma
9130: 74 63 68 20 6c 65 6e 67 74 68 2d 4d 49 4e 5f 4d  tch length-MIN_M
9140: 41 54 43 48 20 6f 72 20 75 6e 6d 61 74 63 68 65  ATCH or unmatche
9150: 64 20 63 68 61 72 20 28 69 66 20 64 69 73 74 3d  d char (if dist=
9160: 3d 30 29 20 2a 2f 0a 7b 0a 20 20 20 20 73 2d 3e  =0) */.{.    s->
9170: 64 5f 62 75 66 5b 73 2d 3e 6c 61 73 74 5f 6c 69  d_buf[s->last_li
9180: 74 5d 20 3d 20 28 75 73 68 29 64 69 73 74 3b 0a  t] = (ush)dist;.
9190: 20 20 20 20 73 2d 3e 6c 5f 62 75 66 5b 73 2d 3e      s->l_buf[s->
91a0: 6c 61 73 74 5f 6c 69 74 2b 2b 5d 20 3d 20 28 75  last_lit++] = (u
91b0: 63 68 29 6c 63 3b 0a 20 20 20 20 69 66 20 28 64  ch)lc;.    if (d
91c0: 69 73 74 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20  ist == 0) {.    
91d0: 20 20 20 20 2f 2a 20 6c 63 20 69 73 20 74 68 65      /* lc is the
91e0: 20 75 6e 6d 61 74 63 68 65 64 20 63 68 61 72 20   unmatched char 
91f0: 2a 2f 0a 20 20 20 20 20 20 20 20 73 2d 3e 64 79  */.        s->dy
9200: 6e 5f 6c 74 72 65 65 5b 6c 63 5d 2e 46 72 65 71  n_ltree[lc].Freq
9210: 2b 2b 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  ++;.    } else {
9220: 0a 20 20 20 20 20 20 20 20 73 2d 3e 6d 61 74 63  .        s->matc
9230: 68 65 73 2b 2b 3b 0a 20 20 20 20 20 20 20 20 2f  hes++;.        /
9240: 2a 20 48 65 72 65 2c 20 6c 63 20 69 73 20 74 68  * Here, lc is th
9250: 65 20 6d 61 74 63 68 20 6c 65 6e 67 74 68 20 2d  e match length -
9260: 20 4d 49 4e 5f 4d 41 54 43 48 20 2a 2f 0a 20 20   MIN_MATCH */.  
9270: 20 20 20 20 20 20 64 69 73 74 2d 2d 3b 20 20 20        dist--;   
9280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 64 69 73            /* dis
9290: 74 20 3d 20 6d 61 74 63 68 20 64 69 73 74 61 6e  t = match distan
92a0: 63 65 20 2d 20 31 20 2a 2f 0a 20 20 20 20 20 20  ce - 1 */.      
92b0: 20 20 41 73 73 65 72 74 28 28 75 73 68 29 64 69    Assert((ush)di
92c0: 73 74 20 3c 20 28 75 73 68 29 4d 41 58 5f 44 49  st < (ush)MAX_DI
92d0: 53 54 28 73 29 20 26 26 0a 20 20 20 20 20 20 20  ST(s) &&.       
92e0: 20 20 20 20 20 20 20 20 28 75 73 68 29 6c 63 20          (ush)lc 
92f0: 3c 3d 20 28 75 73 68 29 28 4d 41 58 5f 4d 41 54  <= (ush)(MAX_MAT
9300: 43 48 2d 4d 49 4e 5f 4d 41 54 43 48 29 20 26 26  CH-MIN_MATCH) &&
9310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9320: 28 75 73 68 29 64 5f 63 6f 64 65 28 64 69 73 74  (ush)d_code(dist
9330: 29 20 3c 20 28 75 73 68 29 44 5f 43 4f 44 45 53  ) < (ush)D_CODES
9340: 2c 20 20 22 5f 74 72 5f 74 61 6c 6c 79 3a 20 62  ,  "_tr_tally: b
9350: 61 64 20 6d 61 74 63 68 22 29 3b 0a 0a 20 20 20  ad match");..   
9360: 20 20 20 20 20 73 2d 3e 64 79 6e 5f 6c 74 72 65       s->dyn_ltre
9370: 65 5b 5f 6c 65 6e 67 74 68 5f 63 6f 64 65 5b 6c  e[_length_code[l
9380: 63 5d 2b 4c 49 54 45 52 41 4c 53 2b 31 5d 2e 46  c]+LITERALS+1].F
9390: 72 65 71 2b 2b 3b 0a 20 20 20 20 20 20 20 20 73  req++;.        s
93a0: 2d 3e 64 79 6e 5f 64 74 72 65 65 5b 64 5f 63 6f  ->dyn_dtree[d_co
93b0: 64 65 28 64 69 73 74 29 5d 2e 46 72 65 71 2b 2b  de(dist)].Freq++
93c0: 3b 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  ;.    }..#ifdef 
93d0: 54 52 55 4e 43 41 54 45 5f 42 4c 4f 43 4b 0a 20  TRUNCATE_BLOCK. 
93e0: 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 67 75 65     /* Try to gue
93f0: 73 73 20 69 66 20 69 74 20 69 73 20 70 72 6f 66  ss if it is prof
9400: 69 74 61 62 6c 65 20 74 6f 20 73 74 6f 70 20 74  itable to stop t
9410: 68 65 20 63 75 72 72 65 6e 74 20 62 6c 6f 63 6b  he current block
9420: 20 68 65 72 65 20 2a 2f 0a 20 20 20 20 69 66 20   here */.    if 
9430: 28 28 73 2d 3e 6c 61 73 74 5f 6c 69 74 20 26 20  ((s->last_lit & 
9440: 30 78 31 66 66 66 29 20 3d 3d 20 30 20 26 26 20  0x1fff) == 0 && 
9450: 73 2d 3e 6c 65 76 65 6c 20 3e 20 32 29 20 7b 0a  s->level > 2) {.
9460: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 75          /* Compu
9470: 74 65 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  te an upper boun
9480: 64 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 72 65  d for the compre
9490: 73 73 65 64 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ssed length */. 
94a0: 20 20 20 20 20 20 20 75 6c 67 20 6f 75 74 5f 6c         ulg out_l
94b0: 65 6e 67 74 68 20 3d 20 28 75 6c 67 29 73 2d 3e  ength = (ulg)s->
94c0: 6c 61 73 74 5f 6c 69 74 2a 38 4c 3b 0a 20 20 20  last_lit*8L;.   
94d0: 20 20 20 20 20 75 6c 67 20 69 6e 5f 6c 65 6e 67       ulg in_leng
94e0: 74 68 20 3d 20 28 75 6c 67 29 28 28 6c 6f 6e 67  th = (ulg)((long
94f0: 29 73 2d 3e 73 74 72 73 74 61 72 74 20 2d 20 73  )s->strstart - s
9500: 2d 3e 62 6c 6f 63 6b 5f 73 74 61 72 74 29 3b 0a  ->block_start);.
9510: 20 20 20 20 20 20 20 20 69 6e 74 20 64 63 6f 64          int dcod
9520: 65 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  e;.        for (
9530: 64 63 6f 64 65 20 3d 20 30 3b 20 64 63 6f 64 65  dcode = 0; dcode
9540: 20 3c 20 44 5f 43 4f 44 45 53 3b 20 64 63 6f 64   < D_CODES; dcod
9550: 65 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20  e++) {.         
9560: 20 20 20 6f 75 74 5f 6c 65 6e 67 74 68 20 2b 3d     out_length +=
9570: 20 28 75 6c 67 29 73 2d 3e 64 79 6e 5f 64 74 72   (ulg)s->dyn_dtr
9580: 65 65 5b 64 63 6f 64 65 5d 2e 46 72 65 71 20 2a  ee[dcode].Freq *
9590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95a0: 20 28 35 4c 2b 65 78 74 72 61 5f 64 62 69 74 73   (5L+extra_dbits
95b0: 5b 64 63 6f 64 65 5d 29 3b 0a 20 20 20 20 20 20  [dcode]);.      
95c0: 20 20 7d 0a 20 20 20 20 20 20 20 20 6f 75 74 5f    }.        out_
95d0: 6c 65 6e 67 74 68 20 3e 3e 3d 20 33 3b 0a 20 20  length >>= 3;.  
95e0: 20 20 20 20 20 20 54 72 61 63 65 76 28 28 73 74        Tracev((st
95f0: 64 65 72 72 2c 22 5c 6e 6c 61 73 74 5f 6c 69 74  derr,"\nlast_lit
9600: 20 25 75 2c 20 69 6e 20 25 6c 64 2c 20 6f 75 74   %u, in %ld, out
9610: 20 7e 25 6c 64 28 25 6c 64 25 25 29 20 22 2c 0a   ~%ld(%ld%%) ",.
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9630: 2d 3e 6c 61 73 74 5f 6c 69 74 2c 20 69 6e 5f 6c  ->last_lit, in_l
9640: 65 6e 67 74 68 2c 20 6f 75 74 5f 6c 65 6e 67 74  ength, out_lengt
9650: 68 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h,.             
9660: 20 20 31 30 30 4c 20 2d 20 6f 75 74 5f 6c 65 6e    100L - out_len
9670: 67 74 68 2a 31 30 30 4c 2f 69 6e 5f 6c 65 6e 67  gth*100L/in_leng
9680: 74 68 29 29 3b 0a 20 20 20 20 20 20 20 20 69 66  th));.        if
9690: 20 28 73 2d 3e 6d 61 74 63 68 65 73 20 3c 20 73   (s->matches < s
96a0: 2d 3e 6c 61 73 74 5f 6c 69 74 2f 32 20 26 26 20  ->last_lit/2 && 
96b0: 6f 75 74 5f 6c 65 6e 67 74 68 20 3c 20 69 6e 5f  out_length < in_
96c0: 6c 65 6e 67 74 68 2f 32 29 20 72 65 74 75 72 6e  length/2) return
96d0: 20 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   1;.    }.#endif
96e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 73 2d 3e  .    return (s->
96f0: 6c 61 73 74 5f 6c 69 74 20 3d 3d 20 73 2d 3e 6c  last_lit == s->l
9700: 69 74 5f 62 75 66 73 69 7a 65 2d 31 29 3b 0a 20  it_bufsize-1);. 
9710: 20 20 20 2f 2a 20 57 65 20 61 76 6f 69 64 20 65     /* We avoid e
9720: 71 75 61 6c 69 74 79 20 77 69 74 68 20 6c 69 74  quality with lit
9730: 5f 62 75 66 73 69 7a 65 20 62 65 63 61 75 73 65  _bufsize because
9740: 20 6f 66 20 77 72 61 70 61 72 6f 75 6e 64 20 61   of wraparound a
9750: 74 20 36 34 4b 0a 20 20 20 20 20 2a 20 6f 6e 20  t 64K.     * on 
9760: 31 36 20 62 69 74 20 6d 61 63 68 69 6e 65 73 20  16 bit machines 
9770: 61 6e 64 20 62 65 63 61 75 73 65 20 73 74 6f 72  and because stor
9780: 65 64 20 62 6c 6f 63 6b 73 20 61 72 65 20 72 65  ed blocks are re
9790: 73 74 72 69 63 74 65 64 20 74 6f 0a 20 20 20 20  stricted to.    
97a0: 20 2a 20 36 34 4b 2d 31 20 62 79 74 65 73 2e 0a   * 64K-1 bytes..
97b0: 20 20 20 20 20 2a 2f 0a 7d 0a 0a 2f 2a 20 3d 3d       */.}../* ==
97c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
97d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
97e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
97f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 53 65 6e  =========. * Sen
9810: 64 20 74 68 65 20 62 6c 6f 63 6b 20 64 61 74 61  d the block data
9820: 20 63 6f 6d 70 72 65 73 73 65 64 20 75 73 69 6e   compressed usin
9830: 67 20 74 68 65 20 67 69 76 65 6e 20 48 75 66 66  g the given Huff
9840: 6d 61 6e 20 74 72 65 65 73 0a 20 2a 2f 0a 6c 6f  man trees. */.lo
9850: 63 61 6c 20 76 6f 69 64 20 63 6f 6d 70 72 65 73  cal void compres
9860: 73 5f 62 6c 6f 63 6b 28 73 2c 20 6c 74 72 65 65  s_block(s, ltree
9870: 2c 20 64 74 72 65 65 29 0a 20 20 20 20 64 65 66  , dtree).    def
9880: 6c 61 74 65 5f 73 74 61 74 65 20 2a 73 3b 0a 20  late_state *s;. 
9890: 20 20 20 63 74 5f 64 61 74 61 20 2a 6c 74 72 65     ct_data *ltre
98a0: 65 3b 20 2f 2a 20 6c 69 74 65 72 61 6c 20 74 72  e; /* literal tr
98b0: 65 65 20 2a 2f 0a 20 20 20 20 63 74 5f 64 61 74  ee */.    ct_dat
98c0: 61 20 2a 64 74 72 65 65 3b 20 2f 2a 20 64 69 73  a *dtree; /* dis
98d0: 74 61 6e 63 65 20 74 72 65 65 20 2a 2f 0a 7b 0a  tance tree */.{.
98e0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 69 73      unsigned dis
98f0: 74 3b 20 20 20 20 20 20 2f 2a 20 64 69 73 74 61  t;      /* dista
9900: 6e 63 65 20 6f 66 20 6d 61 74 63 68 65 64 20 73  nce of matched s
9910: 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74  tring */.    int
9920: 20 6c 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   lc;            
9930: 20 2f 2a 20 6d 61 74 63 68 20 6c 65 6e 67 74 68   /* match length
9940: 20 6f 72 20 75 6e 6d 61 74 63 68 65 64 20 63 68   or unmatched ch
9950: 61 72 20 28 69 66 20 64 69 73 74 20 3d 3d 20 30  ar (if dist == 0
9960: 29 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  ) */.    unsigne
9970: 64 20 6c 78 20 3d 20 30 3b 20 20 20 20 2f 2a 20  d lx = 0;    /* 
9980: 72 75 6e 6e 69 6e 67 20 69 6e 64 65 78 20 69 6e  running index in
9990: 20 6c 5f 62 75 66 20 2a 2f 0a 20 20 20 20 75 6e   l_buf */.    un
99a0: 73 69 67 6e 65 64 20 63 6f 64 65 3b 20 20 20 20  signed code;    
99b0: 20 20 2f 2a 20 74 68 65 20 63 6f 64 65 20 74 6f    /* the code to
99c0: 20 73 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74   send */.    int
99d0: 20 65 78 74 72 61 3b 20 20 20 20 20 20 20 20 20   extra;         
99e0: 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 65 78   /* number of ex
99f0: 74 72 61 20 62 69 74 73 20 74 6f 20 73 65 6e 64  tra bits to send
9a00: 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 73 2d 3e   */..    if (s->
9a10: 6c 61 73 74 5f 6c 69 74 20 21 3d 20 30 29 20 64  last_lit != 0) d
9a20: 6f 20 7b 0a 20 20 20 20 20 20 20 20 64 69 73 74  o {.        dist
9a30: 20 3d 20 73 2d 3e 64 5f 62 75 66 5b 6c 78 5d 3b   = s->d_buf[lx];
9a40: 0a 20 20 20 20 20 20 20 20 6c 63 20 3d 20 73 2d  .        lc = s-
9a50: 3e 6c 5f 62 75 66 5b 6c 78 2b 2b 5d 3b 0a 20 20  >l_buf[lx++];.  
9a60: 20 20 20 20 20 20 69 66 20 28 64 69 73 74 20 3d        if (dist =
9a70: 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20  = 0) {.         
9a80: 20 20 20 73 65 6e 64 5f 63 6f 64 65 28 73 2c 20     send_code(s, 
9a90: 6c 63 2c 20 6c 74 72 65 65 29 3b 20 2f 2a 20 73  lc, ltree); /* s
9aa0: 65 6e 64 20 61 20 6c 69 74 65 72 61 6c 20 62 79  end a literal by
9ab0: 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  te */.          
9ac0: 20 20 54 72 61 63 65 63 76 28 69 73 67 72 61 70    Tracecv(isgrap
9ad0: 68 28 6c 63 29 2c 20 28 73 74 64 65 72 72 2c 22  h(lc), (stderr,"
9ae0: 20 27 25 63 27 20 22 2c 20 6c 63 29 29 3b 0a 20   '%c' ", lc));. 
9af0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
9b10: 65 72 65 2c 20 6c 63 20 69 73 20 74 68 65 20 6d  ere, lc is the m
9b20: 61 74 63 68 20 6c 65 6e 67 74 68 20 2d 20 4d 49  atch length - MI
9b30: 4e 5f 4d 41 54 43 48 20 2a 2f 0a 20 20 20 20 20  N_MATCH */.     
9b40: 20 20 20 20 20 20 20 63 6f 64 65 20 3d 20 5f 6c         code = _l
9b50: 65 6e 67 74 68 5f 63 6f 64 65 5b 6c 63 5d 3b 0a  ength_code[lc];.
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64              send
9b70: 5f 63 6f 64 65 28 73 2c 20 63 6f 64 65 2b 4c 49  _code(s, code+LI
9b80: 54 45 52 41 4c 53 2b 31 2c 20 6c 74 72 65 65 29  TERALS+1, ltree)
9b90: 3b 20 2f 2a 20 73 65 6e 64 20 74 68 65 20 6c 65  ; /* send the le
9ba0: 6e 67 74 68 20 63 6f 64 65 20 2a 2f 0a 20 20 20  ngth code */.   
9bb0: 20 20 20 20 20 20 20 20 20 65 78 74 72 61 20 3d           extra =
9bc0: 20 65 78 74 72 61 5f 6c 62 69 74 73 5b 63 6f 64   extra_lbits[cod
9bd0: 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e];.            
9be0: 69 66 20 28 65 78 74 72 61 20 21 3d 20 30 29 20  if (extra != 0) 
9bf0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
9c00: 20 20 6c 63 20 2d 3d 20 62 61 73 65 5f 6c 65 6e    lc -= base_len
9c10: 67 74 68 5b 63 6f 64 65 5d 3b 0a 20 20 20 20 20  gth[code];.     
9c20: 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 5f             send_
9c30: 62 69 74 73 28 73 2c 20 6c 63 2c 20 65 78 74 72  bits(s, lc, extr
9c40: 61 29 3b 20 20 20 20 20 20 20 2f 2a 20 73 65 6e  a);       /* sen
9c50: 64 20 74 68 65 20 65 78 74 72 61 20 6c 65 6e 67  d the extra leng
9c60: 74 68 20 62 69 74 73 20 2a 2f 0a 20 20 20 20 20  th bits */.     
9c70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9c80: 20 20 20 20 20 64 69 73 74 2d 2d 3b 20 2f 2a 20       dist--; /* 
9c90: 64 69 73 74 20 69 73 20 6e 6f 77 20 74 68 65 20  dist is now the 
9ca0: 6d 61 74 63 68 20 64 69 73 74 61 6e 63 65 20 2d  match distance -
9cb0: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   1 */.          
9cc0: 20 20 63 6f 64 65 20 3d 20 64 5f 63 6f 64 65 28    code = d_code(
9cd0: 64 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20  dist);.         
9ce0: 20 20 20 41 73 73 65 72 74 20 28 63 6f 64 65 20     Assert (code 
9cf0: 3c 20 44 5f 43 4f 44 45 53 2c 20 22 62 61 64 20  < D_CODES, "bad 
9d00: 64 5f 63 6f 64 65 22 29 3b 0a 0a 20 20 20 20 20  d_code");..     
9d10: 20 20 20 20 20 20 20 73 65 6e 64 5f 63 6f 64 65         send_code
9d20: 28 73 2c 20 63 6f 64 65 2c 20 64 74 72 65 65 29  (s, code, dtree)
9d30: 3b 20 20 20 20 20 20 20 2f 2a 20 73 65 6e 64 20  ;       /* send 
9d40: 74 68 65 20 64 69 73 74 61 6e 63 65 20 63 6f 64  the distance cod
9d50: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
9d60: 20 65 78 74 72 61 20 3d 20 65 78 74 72 61 5f 64   extra = extra_d
9d70: 62 69 74 73 5b 63 6f 64 65 5d 3b 0a 20 20 20 20  bits[code];.    
9d80: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 72          if (extr
9d90: 61 20 21 3d 20 30 29 20 7b 0a 20 20 20 20 20 20  a != 0) {.      
9da0: 20 20 20 20 20 20 20 20 20 20 64 69 73 74 20 2d            dist -
9db0: 3d 20 62 61 73 65 5f 64 69 73 74 5b 63 6f 64 65  = base_dist[code
9dc0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
9dd0: 20 20 20 73 65 6e 64 5f 62 69 74 73 28 73 2c 20     send_bits(s, 
9de0: 64 69 73 74 2c 20 65 78 74 72 61 29 3b 20 20 20  dist, extra);   
9df0: 2f 2a 20 73 65 6e 64 20 74 68 65 20 65 78 74 72  /* send the extr
9e00: 61 20 64 69 73 74 61 6e 63 65 20 62 69 74 73 20  a distance bits 
9e10: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  */.            }
9e20: 0a 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 6c 69  .        } /* li
9e30: 74 65 72 61 6c 20 6f 72 20 6d 61 74 63 68 20 70  teral or match p
9e40: 61 69 72 20 3f 20 2a 2f 0a 0a 20 20 20 20 20 20  air ? */..      
9e50: 20 20 2f 2a 20 43 68 65 63 6b 20 74 68 61 74 20    /* Check that 
9e60: 74 68 65 20 6f 76 65 72 6c 61 79 20 62 65 74 77  the overlay betw
9e70: 65 65 6e 20 70 65 6e 64 69 6e 67 5f 62 75 66 20  een pending_buf 
9e80: 61 6e 64 20 64 5f 62 75 66 2b 6c 5f 62 75 66 20  and d_buf+l_buf 
9e90: 69 73 20 6f 6b 3a 20 2a 2f 0a 20 20 20 20 20 20  is ok: */.      
9ea0: 20 20 41 73 73 65 72 74 28 73 2d 3e 70 65 6e 64    Assert(s->pend
9eb0: 69 6e 67 20 3c 20 73 2d 3e 6c 69 74 5f 62 75 66  ing < s->lit_buf
9ec0: 73 69 7a 65 20 2b 20 32 2a 6c 78 2c 20 22 70 65  size + 2*lx, "pe
9ed0: 6e 64 69 6e 67 42 75 66 20 6f 76 65 72 66 6c 6f  ndingBuf overflo
9ee0: 77 22 29 3b 0a 0a 20 20 20 20 7d 20 77 68 69 6c  w");..    } whil
9ef0: 65 20 28 6c 78 20 3c 20 73 2d 3e 6c 61 73 74 5f  e (lx < s->last_
9f00: 6c 69 74 29 3b 0a 0a 20 20 20 20 73 65 6e 64 5f  lit);..    send_
9f10: 63 6f 64 65 28 73 2c 20 45 4e 44 5f 42 4c 4f 43  code(s, END_BLOC
9f20: 4b 2c 20 6c 74 72 65 65 29 3b 0a 20 20 20 20 73  K, ltree);.    s
9f30: 2d 3e 6c 61 73 74 5f 65 6f 62 5f 6c 65 6e 20 3d  ->last_eob_len =
9f40: 20 6c 74 72 65 65 5b 45 4e 44 5f 42 4c 4f 43 4b   ltree[END_BLOCK
9f50: 5d 2e 4c 65 6e 3b 0a 7d 0a 0a 2f 2a 20 3d 3d 3d  ].Len;.}../* ===
9f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9fa0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 53 65 74 20  ========. * Set 
9fb0: 74 68 65 20 64 61 74 61 20 74 79 70 65 20 74 6f  the data type to
9fc0: 20 41 53 43 49 49 20 6f 72 20 42 49 4e 41 52 59   ASCII or BINARY
9fd0: 2c 20 75 73 69 6e 67 20 61 20 63 72 75 64 65 20  , using a crude 
9fe0: 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 3a 0a 20  approximation:. 
9ff0: 2a 20 62 69 6e 61 72 79 20 69 66 20 6d 6f 72 65  * binary if more
a000: 20 74 68 61 6e 20 32 30 25 20 6f 66 20 74 68 65   than 20% of the
a010: 20 62 79 74 65 73 20 61 72 65 20 3c 3d 20 36 20   bytes are <= 6 
a020: 6f 72 20 3e 3d 20 31 32 38 2c 20 61 73 63 69 69  or >= 128, ascii
a030: 20 6f 74 68 65 72 77 69 73 65 2e 0a 20 2a 20 49   otherwise.. * I
a040: 4e 20 61 73 73 65 72 74 69 6f 6e 3a 20 74 68 65  N assertion: the
a050: 20 66 69 65 6c 64 73 20 66 72 65 71 20 6f 66 20   fields freq of 
a060: 64 79 6e 5f 6c 74 72 65 65 20 61 72 65 20 73 65  dyn_ltree are se
a070: 74 20 61 6e 64 20 74 68 65 20 74 6f 74 61 6c 20  t and the total 
a080: 6f 66 20 61 6c 6c 0a 20 2a 20 66 72 65 71 75 65  of all. * freque
a090: 6e 63 69 65 73 20 64 6f 65 73 20 6e 6f 74 20 65  ncies does not e
a0a0: 78 63 65 65 64 20 36 34 4b 20 28 74 6f 20 66 69  xceed 64K (to fi
a0b0: 74 20 69 6e 20 61 6e 20 69 6e 74 20 6f 6e 20 31  t in an int on 1
a0c0: 36 20 62 69 74 20 6d 61 63 68 69 6e 65 73 29 2e  6 bit machines).
a0d0: 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 76 6f 69 64 20  . */.local void 
a0e0: 73 65 74 5f 64 61 74 61 5f 74 79 70 65 28 73 29  set_data_type(s)
a0f0: 0a 20 20 20 20 64 65 66 6c 61 74 65 5f 73 74 61  .    deflate_sta
a100: 74 65 20 2a 73 3b 0a 7b 0a 20 20 20 20 69 6e 74  te *s;.{.    int
a110: 20 6e 20 3d 20 30 3b 0a 20 20 20 20 75 6e 73 69   n = 0;.    unsi
a120: 67 6e 65 64 20 61 73 63 69 69 5f 66 72 65 71 20  gned ascii_freq 
a130: 3d 20 30 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65  = 0;.    unsigne
a140: 64 20 62 69 6e 5f 66 72 65 71 20 3d 20 30 3b 0a  d bin_freq = 0;.
a150: 20 20 20 20 77 68 69 6c 65 20 28 6e 20 3c 20 37      while (n < 7
a160: 29 20 20 20 20 20 20 20 20 62 69 6e 5f 66 72 65  )        bin_fre
a170: 71 20 2b 3d 20 73 2d 3e 64 79 6e 5f 6c 74 72 65  q += s->dyn_ltre
a180: 65 5b 6e 2b 2b 5d 2e 46 72 65 71 3b 0a 20 20 20  e[n++].Freq;.   
a190: 20 77 68 69 6c 65 20 28 6e 20 3c 20 31 32 38 29   while (n < 128)
a1a0: 20 20 20 20 61 73 63 69 69 5f 66 72 65 71 20 2b      ascii_freq +
a1b0: 3d 20 73 2d 3e 64 79 6e 5f 6c 74 72 65 65 5b 6e  = s->dyn_ltree[n
a1c0: 2b 2b 5d 2e 46 72 65 71 3b 0a 20 20 20 20 77 68  ++].Freq;.    wh
a1d0: 69 6c 65 20 28 6e 20 3c 20 4c 49 54 45 52 41 4c  ile (n < LITERAL
a1e0: 53 29 20 62 69 6e 5f 66 72 65 71 20 2b 3d 20 73  S) bin_freq += s
a1f0: 2d 3e 64 79 6e 5f 6c 74 72 65 65 5b 6e 2b 2b 5d  ->dyn_ltree[n++]
a200: 2e 46 72 65 71 3b 0a 20 20 20 20 73 2d 3e 64 61  .Freq;.    s->da
a210: 74 61 5f 74 79 70 65 20 3d 20 28 42 79 74 65 29  ta_type = (Byte)
a220: 28 62 69 6e 5f 66 72 65 71 20 3e 20 28 61 73 63  (bin_freq > (asc
a230: 69 69 5f 66 72 65 71 20 3e 3e 20 32 29 20 3f 20  ii_freq >> 2) ? 
a240: 5a 5f 42 49 4e 41 52 59 20 3a 20 5a 5f 41 53 43  Z_BINARY : Z_ASC
a250: 49 49 29 3b 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d  II);.}../* =====
a260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a2a0: 3d 3d 3d 3d 3d 3d 0a 20 2a 20 52 65 76 65 72 73  ======. * Revers
a2b0: 65 20 74 68 65 20 66 69 72 73 74 20 6c 65 6e 20  e the first len 
a2c0: 62 69 74 73 20 6f 66 20 61 20 63 6f 64 65 2c 20  bits of a code, 
a2d0: 75 73 69 6e 67 20 73 74 72 61 69 67 68 74 66 6f  using straightfo
a2e0: 72 77 61 72 64 20 63 6f 64 65 20 28 61 20 66 61  rward code (a fa
a2f0: 73 74 65 72 0a 20 2a 20 6d 65 74 68 6f 64 20 77  ster. * method w
a300: 6f 75 6c 64 20 75 73 65 20 61 20 74 61 62 6c 65  ould use a table
a310: 29 0a 20 2a 20 49 4e 20 61 73 73 65 72 74 69 6f  ). * IN assertio
a320: 6e 3a 20 31 20 3c 3d 20 6c 65 6e 20 3c 3d 20 31  n: 1 <= len <= 1
a330: 35 0a 20 2a 2f 0a 6c 6f 63 61 6c 20 75 6e 73 69  5. */.local unsi
a340: 67 6e 65 64 20 62 69 5f 72 65 76 65 72 73 65 28  gned bi_reverse(
a350: 63 6f 64 65 2c 20 6c 65 6e 29 0a 20 20 20 20 75  code, len).    u
a360: 6e 73 69 67 6e 65 64 20 63 6f 64 65 3b 20 2f 2a  nsigned code; /*
a370: 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 69 6e   the value to in
a380: 76 65 72 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  vert */.    int 
a390: 6c 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 69 74  len;       /* it
a3a0: 73 20 62 69 74 20 6c 65 6e 67 74 68 20 2a 2f 0a  s bit length */.
a3b0: 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 75  {.    register u
a3c0: 6e 73 69 67 6e 65 64 20 72 65 73 20 3d 20 30 3b  nsigned res = 0;
a3d0: 0a 20 20 20 20 64 6f 20 7b 0a 20 20 20 20 20 20  .    do {.      
a3e0: 20 20 72 65 73 20 7c 3d 20 63 6f 64 65 20 26 20    res |= code & 
a3f0: 31 3b 0a 20 20 20 20 20 20 20 20 63 6f 64 65 20  1;.        code 
a400: 3e 3e 3d 20 31 2c 20 72 65 73 20 3c 3c 3d 20 31  >>= 1, res <<= 1
a410: 3b 0a 20 20 20 20 7d 20 77 68 69 6c 65 20 28 2d  ;.    } while (-
a420: 2d 6c 65 6e 20 3e 20 30 29 3b 0a 20 20 20 20 72  -len > 0);.    r
a430: 65 74 75 72 6e 20 72 65 73 20 3e 3e 20 31 3b 0a  eturn res >> 1;.
a440: 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  }../* ==========
a450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a490: 3d 0a 20 2a 20 46 6c 75 73 68 20 74 68 65 20 62  =. * Flush the b
a4a0: 69 74 20 62 75 66 66 65 72 2c 20 6b 65 65 70 69  it buffer, keepi
a4b0: 6e 67 20 61 74 20 6d 6f 73 74 20 37 20 62 69 74  ng at most 7 bit
a4c0: 73 20 69 6e 20 69 74 2e 0a 20 2a 2f 0a 6c 6f 63  s in it.. */.loc
a4d0: 61 6c 20 76 6f 69 64 20 62 69 5f 66 6c 75 73 68  al void bi_flush
a4e0: 28 73 29 0a 20 20 20 20 64 65 66 6c 61 74 65 5f  (s).    deflate_
a4f0: 73 74 61 74 65 20 2a 73 3b 0a 7b 0a 20 20 20 20  state *s;.{.    
a500: 69 66 20 28 73 2d 3e 62 69 5f 76 61 6c 69 64 20  if (s->bi_valid 
a510: 3d 3d 20 31 36 29 20 7b 0a 20 20 20 20 20 20 20  == 16) {.       
a520: 20 70 75 74 5f 73 68 6f 72 74 28 73 2c 20 73 2d   put_short(s, s-
a530: 3e 62 69 5f 62 75 66 29 3b 0a 20 20 20 20 20 20  >bi_buf);.      
a540: 20 20 73 2d 3e 62 69 5f 62 75 66 20 3d 20 30 3b    s->bi_buf = 0;
a550: 0a 20 20 20 20 20 20 20 20 73 2d 3e 62 69 5f 76  .        s->bi_v
a560: 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 20  alid = 0;.    } 
a570: 65 6c 73 65 20 69 66 20 28 73 2d 3e 62 69 5f 76  else if (s->bi_v
a580: 61 6c 69 64 20 3e 3d 20 38 29 20 7b 0a 20 20 20  alid >= 8) {.   
a590: 20 20 20 20 20 70 75 74 5f 62 79 74 65 28 73 2c       put_byte(s,
a5a0: 20 28 42 79 74 65 29 73 2d 3e 62 69 5f 62 75 66   (Byte)s->bi_buf
a5b0: 29 3b 0a 20 20 20 20 20 20 20 20 73 2d 3e 62 69  );.        s->bi
a5c0: 5f 62 75 66 20 3e 3e 3d 20 38 3b 0a 20 20 20 20  _buf >>= 8;.    
a5d0: 20 20 20 20 73 2d 3e 62 69 5f 76 61 6c 69 64 20      s->bi_valid 
a5e0: 2d 3d 20 38 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 2f  -= 8;.    }.}../
a5f0: 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  * ==============
a600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a  =============. *
a640: 20 46 6c 75 73 68 20 74 68 65 20 62 69 74 20 62   Flush the bit b
a650: 75 66 66 65 72 20 61 6e 64 20 61 6c 69 67 6e 20  uffer and align 
a660: 74 68 65 20 6f 75 74 70 75 74 20 6f 6e 20 61 20  the output on a 
a670: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 0a 20 2a  byte boundary. *
a680: 2f 0a 6c 6f 63 61 6c 20 76 6f 69 64 20 62 69 5f  /.local void bi_
a690: 77 69 6e 64 75 70 28 73 29 0a 20 20 20 20 64 65  windup(s).    de
a6a0: 66 6c 61 74 65 5f 73 74 61 74 65 20 2a 73 3b 0a  flate_state *s;.
a6b0: 7b 0a 20 20 20 20 69 66 20 28 73 2d 3e 62 69 5f  {.    if (s->bi_
a6c0: 76 61 6c 69 64 20 3e 20 38 29 20 7b 0a 20 20 20  valid > 8) {.   
a6d0: 20 20 20 20 20 70 75 74 5f 73 68 6f 72 74 28 73       put_short(s
a6e0: 2c 20 73 2d 3e 62 69 5f 62 75 66 29 3b 0a 20 20  , s->bi_buf);.  
a6f0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 2d 3e    } else if (s->
a700: 62 69 5f 76 61 6c 69 64 20 3e 20 30 29 20 7b 0a  bi_valid > 0) {.
a710: 20 20 20 20 20 20 20 20 70 75 74 5f 62 79 74 65          put_byte
a720: 28 73 2c 20 28 42 79 74 65 29 73 2d 3e 62 69 5f  (s, (Byte)s->bi_
a730: 62 75 66 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  buf);.    }.    
a740: 73 2d 3e 62 69 5f 62 75 66 20 3d 20 30 3b 0a 20  s->bi_buf = 0;. 
a750: 20 20 20 73 2d 3e 62 69 5f 76 61 6c 69 64 20 3d     s->bi_valid =
a760: 20 30 3b 0a 23 69 66 64 65 66 20 44 45 42 55 47   0;.#ifdef DEBUG
a770: 0a 20 20 20 20 73 2d 3e 62 69 74 73 5f 73 65 6e  .    s->bits_sen
a780: 74 20 3d 20 28 73 2d 3e 62 69 74 73 5f 73 65 6e  t = (s->bits_sen
a790: 74 2b 37 29 20 26 20 7e 37 3b 0a 23 65 6e 64 69  t+7) & ~7;.#endi
a7a0: 66 0a 7d 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d  f.}../* ========
a7b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7f0: 3d 3d 3d 0a 20 2a 20 43 6f 70 79 20 61 20 73 74  ===. * Copy a st
a800: 6f 72 65 64 20 62 6c 6f 63 6b 2c 20 73 74 6f 72  ored block, stor
a810: 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 6c 65  ing first the le
a820: 6e 67 74 68 20 61 6e 64 20 69 74 73 0a 20 2a 20  ngth and its. * 
a830: 6f 6e 65 27 73 20 63 6f 6d 70 6c 65 6d 65 6e 74  one's complement
a840: 20 69 66 20 72 65 71 75 65 73 74 65 64 2e 0a 20   if requested.. 
a850: 2a 2f 0a 6c 6f 63 61 6c 20 76 6f 69 64 20 63 6f  */.local void co
a860: 70 79 5f 62 6c 6f 63 6b 28 73 2c 20 62 75 66 2c  py_block(s, buf,
a870: 20 6c 65 6e 2c 20 68 65 61 64 65 72 29 0a 20 20   len, header).  
a880: 20 20 64 65 66 6c 61 74 65 5f 73 74 61 74 65 20    deflate_state 
a890: 2a 73 3b 0a 20 20 20 20 63 68 61 72 66 20 20 20  *s;.    charf   
a8a0: 20 2a 62 75 66 3b 20 20 20 20 2f 2a 20 74 68 65   *buf;    /* the
a8b0: 20 69 6e 70 75 74 20 64 61 74 61 20 2a 2f 0a 20   input data */. 
a8c0: 20 20 20 75 6e 73 69 67 6e 65 64 20 6c 65 6e 3b     unsigned len;
a8d0: 20 20 20 20 20 2f 2a 20 69 74 73 20 6c 65 6e 67       /* its leng
a8e0: 74 68 20 2a 2f 0a 20 20 20 20 69 6e 74 20 20 20  th */.    int   
a8f0: 20 20 20 68 65 61 64 65 72 3b 20 20 2f 2a 20 74     header;  /* t
a900: 72 75 65 20 69 66 20 62 6c 6f 63 6b 20 68 65 61  rue if block hea
a910: 64 65 72 20 6d 75 73 74 20 62 65 20 77 72 69 74  der must be writ
a920: 74 65 6e 20 2a 2f 0a 7b 0a 20 20 20 20 62 69 5f  ten */.{.    bi_
a930: 77 69 6e 64 75 70 28 73 29 3b 20 20 20 20 20 20  windup(s);      
a940: 20 20 2f 2a 20 61 6c 69 67 6e 20 6f 6e 20 62 79    /* align on by
a950: 74 65 20 62 6f 75 6e 64 61 72 79 20 2a 2f 0a 20  te boundary */. 
a960: 20 20 20 73 2d 3e 6c 61 73 74 5f 65 6f 62 5f 6c     s->last_eob_l
a970: 65 6e 20 3d 20 38 3b 20 2f 2a 20 65 6e 6f 75 67  en = 8; /* enoug
a980: 68 20 6c 6f 6f 6b 61 68 65 61 64 20 66 6f 72 20  h lookahead for 
a990: 69 6e 66 6c 61 74 65 20 2a 2f 0a 0a 20 20 20 20  inflate */..    
a9a0: 69 66 20 28 68 65 61 64 65 72 29 20 7b 0a 20 20  if (header) {.  
a9b0: 20 20 20 20 20 20 70 75 74 5f 73 68 6f 72 74 28        put_short(
a9c0: 73 2c 20 28 75 73 68 29 6c 65 6e 29 3b 20 20 20  s, (ush)len);   
a9d0: 0a 20 20 20 20 20 20 20 20 70 75 74 5f 73 68 6f  .        put_sho
a9e0: 72 74 28 73 2c 20 28 75 73 68 29 7e 6c 65 6e 29  rt(s, (ush)~len)
a9f0: 3b 0a 23 69 66 64 65 66 20 44 45 42 55 47 0a 20  ;.#ifdef DEBUG. 
aa00: 20 20 20 20 20 20 20 73 2d 3e 62 69 74 73 5f 73         s->bits_s
aa10: 65 6e 74 20 2b 3d 20 32 2a 31 36 3b 0a 23 65 6e  ent += 2*16;.#en
aa20: 64 69 66 0a 20 20 20 20 7d 0a 23 69 66 64 65 66  dif.    }.#ifdef
aa30: 20 44 45 42 55 47 0a 20 20 20 20 73 2d 3e 62 69   DEBUG.    s->bi
aa40: 74 73 5f 73 65 6e 74 20 2b 3d 20 28 75 6c 67 29  ts_sent += (ulg)
aa50: 6c 65 6e 3c 3c 33 3b 0a 23 65 6e 64 69 66 0a 20  len<<3;.#endif. 
aa60: 20 20 20 77 68 69 6c 65 20 28 6c 65 6e 2d 2d 29     while (len--)
aa70: 20 7b 0a 20 20 20 20 20 20 20 20 70 75 74 5f 62   {.        put_b
aa80: 79 74 65 28 73 2c 20 2a 62 75 66 2b 2b 29 3b 0a  yte(s, *buf++);.
aa90: 20 20 20 20 7d 0a 7d 0a                              }.}.