annotate packages/services/compress/zlib/current/src/deflate.h @ 1651:91a37e2314f4

Upgrade to zlib-1.2.1
author gthomas
date Mon, 24 May 2004 19:33:34 +0000
parents c92d7972c02c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
1 /* deflate.h -- internal compression state
1369
c92d7972c02c * tests/zlib[12].c: Modified the text to the gcc3.3 friendly.
asl
parents: 156
diff changeset
2 * Copyright (C) 1995-2002 Jean-loup Gailly
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
3 * For conditions of distribution and use, see copyright notice in zlib.h
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
4 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
5
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
6 /* WARNING: this file should *not* be used by applications. It is
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
7 part of the implementation of the compression library and is
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
8 subject to change. Applications should only use zlib.h.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
9 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
10
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
11 /* @(#) $Id$ */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
12
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
13 #ifndef DEFLATE_H
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
14 #define DEFLATE_H
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
15
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
16 #include "zutil.h"
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
17
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
18 /* define NO_GZIP when compiling if you want to disable gzip header and
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
19 trailer creation by deflate(). NO_GZIP would be used to avoid linking in
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
20 the crc code when it is not needed. For shared libraries, gzip encoding
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
21 should be left enabled. */
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
22 #ifndef NO_GZIP
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
23 # define GZIP
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
24 #endif
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
25
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
26 /* ===========================================================================
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
27 * Internal compression state.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
28 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
29
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
30 #define LENGTH_CODES 29
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
31 /* number of length codes, not counting the special END_BLOCK code */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
32
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
33 #define LITERALS 256
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
34 /* number of literal bytes 0..255 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
35
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
36 #define L_CODES (LITERALS+1+LENGTH_CODES)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
37 /* number of Literal or Length codes, including the END_BLOCK code */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
38
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
39 #define D_CODES 30
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
40 /* number of distance codes */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
41
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
42 #define BL_CODES 19
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
43 /* number of codes used to transfer the bit lengths */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
44
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
45 #define HEAP_SIZE (2*L_CODES+1)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
46 /* maximum heap size */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
47
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
48 #define MAX_BITS 15
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
49 /* All codes must not exceed MAX_BITS bits */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
50
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
51 #define INIT_STATE 42
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
52 #define BUSY_STATE 113
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
53 #define FINISH_STATE 666
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
54 /* Stream status */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
55
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
56
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
57 /* Data structure describing a single value and its code string. */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
58 typedef struct ct_data_s {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
59 union {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
60 ush freq; /* frequency count */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
61 ush code; /* bit string */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
62 } fc;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
63 union {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
64 ush dad; /* father node in Huffman tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
65 ush len; /* length of bit string */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
66 } dl;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
67 } FAR ct_data;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
68
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
69 #define Freq fc.freq
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
70 #define Code fc.code
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
71 #define Dad dl.dad
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
72 #define Len dl.len
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
73
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
74 typedef struct static_tree_desc_s static_tree_desc;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
75
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
76 typedef struct tree_desc_s {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
77 ct_data *dyn_tree; /* the dynamic tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
78 int max_code; /* largest code with non zero frequency */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
79 static_tree_desc *stat_desc; /* the corresponding static tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
80 } FAR tree_desc;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
81
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
82 typedef ush Pos;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
83 typedef Pos FAR Posf;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
84 typedef unsigned IPos;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
85
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
86 /* A Pos is an index in the character window. We use short instead of int to
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
87 * save space in the various tables. IPos is used only for parameter passing.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
88 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
89
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
90 typedef struct internal_state {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
91 z_streamp strm; /* pointer back to this zlib stream */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
92 int status; /* as the name implies */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
93 Bytef *pending_buf; /* output still pending */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
94 ulg pending_buf_size; /* size of pending_buf */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
95 Bytef *pending_out; /* next pending byte to output to the stream */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
96 int pending; /* nb of bytes in the pending buffer */
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
97 int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
98 Byte data_type; /* UNKNOWN, BINARY or ASCII */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
99 Byte method; /* STORED (for zip only) or DEFLATED */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
100 int last_flush; /* value of flush param for previous deflate call */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
101
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
102 /* used by deflate.c: */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
103
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
104 uInt w_size; /* LZ77 window size (32K by default) */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
105 uInt w_bits; /* log2(w_size) (8..16) */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
106 uInt w_mask; /* w_size - 1 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
107
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
108 Bytef *window;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
109 /* Sliding window. Input bytes are read into the second half of the window,
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
110 * and move to the first half later to keep a dictionary of at least wSize
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
111 * bytes. With this organization, matches are limited to a distance of
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
112 * wSize-MAX_MATCH bytes, but this ensures that IO is always
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
113 * performed with a length multiple of the block size. Also, it limits
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
114 * the window size to 64K, which is quite useful on MSDOS.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
115 * To do: use the user input buffer as sliding window.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
116 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
117
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
118 ulg window_size;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
119 /* Actual size of window: 2*wSize, except when the user input buffer
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
120 * is directly used as sliding window.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
121 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
122
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
123 Posf *prev;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
124 /* Link to older string with same hash index. To limit the size of this
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
125 * array to 64K, this link is maintained only for the last 32K strings.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
126 * An index in this array is thus a window index modulo 32K.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
127 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
128
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
129 Posf *head; /* Heads of the hash chains or NIL. */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
130
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
131 uInt ins_h; /* hash index of string to be inserted */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
132 uInt hash_size; /* number of elements in hash table */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
133 uInt hash_bits; /* log2(hash_size) */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
134 uInt hash_mask; /* hash_size-1 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
135
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
136 uInt hash_shift;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
137 /* Number of bits by which ins_h must be shifted at each input
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
138 * step. It must be such that after MIN_MATCH steps, the oldest
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
139 * byte no longer takes part in the hash key, that is:
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
140 * hash_shift * MIN_MATCH >= hash_bits
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
141 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
142
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
143 long block_start;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
144 /* Window position at the beginning of the current output block. Gets
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
145 * negative when the window is moved backwards.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
146 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
147
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
148 uInt match_length; /* length of best match */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
149 IPos prev_match; /* previous match */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
150 int match_available; /* set if previous match exists */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
151 uInt strstart; /* start of string to insert */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
152 uInt match_start; /* start of matching string */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
153 uInt lookahead; /* number of valid bytes ahead in window */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
154
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
155 uInt prev_length;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
156 /* Length of the best match at previous step. Matches not greater than this
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
157 * are discarded. This is used in the lazy match evaluation.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
158 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
159
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
160 uInt max_chain_length;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
161 /* To speed up deflation, hash chains are never searched beyond this
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
162 * length. A higher limit improves compression ratio but degrades the
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
163 * speed.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
164 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
165
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
166 uInt max_lazy_match;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
167 /* Attempt to find a better match only when the current match is strictly
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
168 * smaller than this value. This mechanism is used only for compression
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
169 * levels >= 4.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
170 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
171 # define max_insert_length max_lazy_match
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
172 /* Insert new strings in the hash table only if the match length is not
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
173 * greater than this length. This saves time but degrades compression.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
174 * max_insert_length is used only for compression levels <= 3.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
175 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
176
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
177 int level; /* compression level (1..9) */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
178 int strategy; /* favor or force Huffman coding*/
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
179
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
180 uInt good_match;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
181 /* Use a faster search when the previous match is longer than this */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
182
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
183 int nice_match; /* Stop searching when current match exceeds this */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
184
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
185 /* used by trees.c: */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
186 /* Didn't use ct_data typedef below to supress compiler warning */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
187 struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
188 struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
189 struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
190
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
191 struct tree_desc_s l_desc; /* desc. for literal tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
192 struct tree_desc_s d_desc; /* desc. for distance tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
193 struct tree_desc_s bl_desc; /* desc. for bit length tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
194
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
195 ush bl_count[MAX_BITS+1];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
196 /* number of codes at each bit length for an optimal tree */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
197
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
198 int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
199 int heap_len; /* number of elements in the heap */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
200 int heap_max; /* element of largest frequency */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
201 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
202 * The same heap array is used to build all trees.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
203 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
204
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
205 uch depth[2*L_CODES+1];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
206 /* Depth of each subtree used as tie breaker for trees of equal frequency
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
207 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
208
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
209 uchf *l_buf; /* buffer for literals or lengths */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
210
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
211 uInt lit_bufsize;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
212 /* Size of match buffer for literals/lengths. There are 4 reasons for
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
213 * limiting lit_bufsize to 64K:
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
214 * - frequencies can be kept in 16 bit counters
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
215 * - if compression is not successful for the first block, all input
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
216 * data is still in the window so we can still emit a stored block even
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
217 * when input comes from standard input. (This can also be done for
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
218 * all blocks if lit_bufsize is not greater than 32K.)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
219 * - if compression is not successful for a file smaller than 64K, we can
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
220 * even emit a stored file instead of a stored block (saving 5 bytes).
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
221 * This is applicable only for zip (not gzip or zlib).
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
222 * - creating new Huffman trees less frequently may not provide fast
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
223 * adaptation to changes in the input data statistics. (Take for
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
224 * example a binary file with poorly compressible code followed by
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
225 * a highly compressible string table.) Smaller buffer sizes give
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
226 * fast adaptation but have of course the overhead of transmitting
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
227 * trees more frequently.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
228 * - I can't count above 4
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
229 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
230
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
231 uInt last_lit; /* running index in l_buf */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
232
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
233 ushf *d_buf;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
234 /* Buffer for distances. To simplify the code, d_buf and l_buf have
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
235 * the same number of elements. To use different lengths, an extra flag
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
236 * array would be necessary.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
237 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
238
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
239 ulg opt_len; /* bit length of current block with optimal trees */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
240 ulg static_len; /* bit length of current block with static trees */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
241 uInt matches; /* number of string matches in current block */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
242 int last_eob_len; /* bit length of EOB code for last block */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
243
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
244 #ifdef DEBUG
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
245 ulg compressed_len; /* total bit length of compressed file mod 2^32 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
246 ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
247 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
248
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
249 ush bi_buf;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
250 /* Output buffer. bits are inserted starting at the bottom (least
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
251 * significant bits).
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
252 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
253 int bi_valid;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
254 /* Number of valid bits in bi_buf. All bits above the last valid bit
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
255 * are always zero.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
256 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
257
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
258 } FAR deflate_state;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
259
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
260 /* Output a byte on the stream.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
261 * IN assertion: there is enough room in pending_buf.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
262 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
263 #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
264
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
265
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
266 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
267 /* Minimum amount of lookahead, except at the end of the input file.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
268 * See deflate.c for comments about the MIN_MATCH+1.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
269 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
270
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
271 #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
272 /* In order to simplify the code, particularly on 16 bit machines, match
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
273 * distances are limited to MAX_DIST instead of WSIZE.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
274 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
275
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
276 /* in trees.c */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
277 void _tr_init OF((deflate_state *s));
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
278 int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
279 void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
280 int eof));
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
281 void _tr_align OF((deflate_state *s));
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
282 void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
283 int eof));
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
284
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
285 #define d_code(dist) \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
286 ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
287 /* Mapping from a distance to a distance code. dist is the distance - 1 and
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
288 * must not have side effects. _dist_code[256] and _dist_code[257] are never
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
289 * used.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
290 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
291
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
292 #ifndef DEBUG
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
293 /* Inline versions of _tr_tally for speed: */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
294
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
295 #if defined(GEN_TREES_H) || !defined(STDC)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
296 extern uch _length_code[];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
297 extern uch _dist_code[];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
298 #else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
299 extern const uch _length_code[];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
300 extern const uch _dist_code[];
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
301 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
302
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
303 # define _tr_tally_lit(s, c, flush) \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
304 { uch cc = (c); \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
305 s->d_buf[s->last_lit] = 0; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
306 s->l_buf[s->last_lit++] = cc; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
307 s->dyn_ltree[cc].Freq++; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
308 flush = (s->last_lit == s->lit_bufsize-1); \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
309 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
310 # define _tr_tally_dist(s, distance, length, flush) \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
311 { uch len = (length); \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
312 ush dist = (distance); \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
313 s->d_buf[s->last_lit] = dist; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
314 s->l_buf[s->last_lit++] = len; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
315 dist--; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
316 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
317 s->dyn_dtree[d_code(dist)].Freq++; \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
318 flush = (s->last_lit == s->lit_bufsize-1); \
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
319 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
320 #else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
321 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
322 # define _tr_tally_dist(s, distance, length, flush) \
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
323 flush = _tr_tally(s, distance, length)
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
324 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
diff changeset
325
1651
91a37e2314f4 Upgrade to zlib-1.2.1
gthomas
parents: 1369
diff changeset
326 #endif /* DEFLATE_H */