30 #define LENGTH_CODES 29
36 #define L_CODES (LITERALS+1+LENGTH_CODES)
45 #define HEAP_SIZE (2*L_CODES+1)
52 #define EXTRA_STATE 69
54 #define COMMENT_STATE 91
55 #define HCRC_STATE 103
56 #define BUSY_STATE 113
57 #define FINISH_STATE 666
78 typedef struct static_tree_desc_s static_tree_desc;
88 typedef unsigned IPos;
176 # define max_insert_length max_lazy_match
263 #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
266 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
271 #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
278 int _tr_tally OF((
deflate_state *s,
unsigned dist,
unsigned lc));
279 void _tr_flush_block OF((
deflate_state *s, charf *buf, ulg stored_len,
282 void _tr_stored_block OF((
deflate_state *s, charf *buf, ulg stored_len,
285 #define d_code(dist) \
286 ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
295 #if defined(GEN_TREES_H) || !defined(STDC)
296 extern uch _length_code[];
297 extern uch _dist_code[];
299 extern const uch _length_code[];
300 extern const uch _dist_code[];
303 # define _tr_tally_lit(s, c, flush) \
305 s->sym_buf[s->sym_next++] = 0; \
306 s->sym_buf[s->sym_next++] = 0; \
307 s->sym_buf[s->sym_next++] = cc; \
308 s->dyn_ltree[cc].Freq++; \
309 flush = (s->sym_next == s->sym_end); \
311 # define _tr_tally_dist(s, distance, length, flush) \
312 { uch len = (length); \
313 ush dist = (ush)(distance); \
314 s->sym_buf[s->sym_next++] = dist; \
315 s->sym_buf[s->sym_next++] = dist >> 8; \
316 s->sym_buf[s->sym_next++] = len; \
318 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
319 s->dyn_dtree[d_code(dist)].Freq++; \
320 flush = (s->sym_next == s->sym_end); \
323 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
324 # define _tr_tally_dist(s, distance, length, flush) \
325 flush = _tr_tally(s, distance, length)
struct tree_desc_s l_desc
struct ct_data_s dyn_dtree[2 *D_CODES+1]
struct ct_data_s bl_tree[2 *BL_CODES+1]
struct tree_desc_s bl_desc
struct tree_desc_s d_desc
struct ct_data_s dyn_ltree[HEAP_SIZE]
static_tree_desc * stat_desc