123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- #ifndef DEFLATE_H
- #define DEFLATE_H
- #include "zutil.h"
- #ifndef NO_GZIP
- # define GZIP
- #endif
- #define LENGTH_CODES 29
- #define LITERALS 256
- #define L_CODES (LITERALS+1+LENGTH_CODES)
- #define D_CODES 30
- #define BL_CODES 19
- #define HEAP_SIZE (2*L_CODES+1)
- #define MAX_BITS 15
- #define Buf_size 16
- #define INIT_STATE 42
- #ifdef GZIP
- # define GZIP_STATE 57
- #endif
- #define EXTRA_STATE 69
- #define NAME_STATE 73
- #define COMMENT_STATE 91
- #define HCRC_STATE 103
- #define BUSY_STATE 113
- #define FINISH_STATE 666
- typedef struct ct_data_s {
- union {
- ush freq;
- ush code;
- } fc;
- union {
- ush dad;
- ush len;
- } dl;
- } FAR ct_data;
- #define Freq fc.freq
- #define Code fc.code
- #define Dad dl.dad
- #define Len dl.len
- typedef struct static_tree_desc_s static_tree_desc;
- typedef struct tree_desc_s {
- ct_data *dyn_tree;
- int max_code;
- const static_tree_desc *stat_desc;
- } FAR tree_desc;
- typedef ush Pos;
- typedef Pos FAR Posf;
- typedef unsigned IPos;
- typedef struct internal_state {
- z_streamp strm;
- int status;
- Bytef *pending_buf;
- ulg pending_buf_size;
- Bytef *pending_out;
- ulg pending;
- int wrap;
- gz_headerp gzhead;
- ulg gzindex;
- Byte method;
- int last_flush;
-
- uInt w_size;
- uInt w_bits;
- uInt w_mask;
- Bytef *window;
-
- ulg window_size;
-
- Posf *prev;
-
- Posf *head;
- uInt ins_h;
- uInt hash_size;
- uInt hash_bits;
- uInt hash_mask;
- uInt hash_shift;
-
- long block_start;
-
- uInt match_length;
- IPos prev_match;
- int match_available;
- uInt strstart;
- uInt match_start;
- uInt lookahead;
- uInt prev_length;
-
- uInt max_chain_length;
-
- uInt max_lazy_match;
-
- # define max_insert_length max_lazy_match
-
- int level;
- int strategy;
- uInt good_match;
-
- int nice_match;
-
-
- struct ct_data_s dyn_ltree[HEAP_SIZE];
- struct ct_data_s dyn_dtree[2*D_CODES+1];
- struct ct_data_s bl_tree[2*BL_CODES+1];
- struct tree_desc_s l_desc;
- struct tree_desc_s d_desc;
- struct tree_desc_s bl_desc;
- ush bl_count[MAX_BITS+1];
-
- int heap[2*L_CODES+1];
- int heap_len;
- int heap_max;
-
- uch depth[2*L_CODES+1];
-
- uchf *l_buf;
- uInt lit_bufsize;
-
- uInt last_lit;
- ushf *d_buf;
-
- ulg opt_len;
- ulg static_len;
- uInt matches;
- uInt insert;
- #ifdef ZLIB_DEBUG
- ulg compressed_len;
- ulg bits_sent;
- #endif
- ush bi_buf;
-
- int bi_valid;
-
- ulg high_water;
-
- } FAR deflate_state;
- #define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
- #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
- #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
- #define WIN_INIT MAX_MATCH
-
- void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
- int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
- void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
- ulg stored_len, int last));
- void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
- void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
- void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
- ulg stored_len, int last));
- #define d_code(dist) \
- ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
- #ifndef ZLIB_DEBUG
- #if defined(GEN_TREES_H) || !defined(STDC)
- extern uch ZLIB_INTERNAL _length_code[];
- extern uch ZLIB_INTERNAL _dist_code[];
- #else
- extern const uch ZLIB_INTERNAL _length_code[];
- extern const uch ZLIB_INTERNAL _dist_code[];
- #endif
- # define _tr_tally_lit(s, c, flush) \
- { uch cc = (c); \
- s->d_buf[s->last_lit] = 0; \
- s->l_buf[s->last_lit++] = cc; \
- s->dyn_ltree[cc].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
- }
- # define _tr_tally_dist(s, distance, length, flush) \
- { uch len = (uch)(length); \
- ush dist = (ush)(distance); \
- s->d_buf[s->last_lit] = dist; \
- s->l_buf[s->last_lit++] = len; \
- dist--; \
- s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
- s->dyn_dtree[d_code(dist)].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
- }
- #else
- # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
- # define _tr_tally_dist(s, distance, length, flush) \
- flush = _tr_tally(s, distance, length)
- #endif
- #endif
|