59 #define REPZ_11_138 18
63 = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
66 = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
69 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
72 = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
81 #define DIST_CODE_LEN 512
83 #if defined(GEN_TREES_H) || !defined(STDC)
157 local void gen_trees_header
OF((
void));
161 # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
165 # define send_code(s, c, tree) \
166 { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
167 send_bits(s, tree[c].Code, tree[c].Len); }
174 #define put_short(s, w) { \
175 put_byte(s, (uch)((w) & 0xff)); \
176 put_byte(s, (uch)((ush)(w) >> 8)); \
211 #define send_bits(s, value, length) \
213 if (s->bi_valid > (int)Buf_size - len) {\
214 int val = (int)value;\
215 s->bi_buf |= (ush)val << s->bi_valid;\
216 put_short(s, s->bi_buf);\
217 s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
218 s->bi_valid += len - Buf_size;\
220 s->bi_buf |= (ush)(value) << s->bi_valid;\
234 #if defined(GEN_TREES_H) || !defined(STDC)
235 static int static_init_done = 0;
244 if (static_init_done)
return;
247 #ifdef NO_INIT_GLOBAL_POINTERS
263 Assert (
length == 256,
"tr_static_init: length != 256");
278 Assert (dist == 256,
"tr_static_init: dist != 256");
286 Assert (dist == 256,
"tr_static_init: 256+dist != 512");
306 static_init_done = 1;
322 # define SEPARATOR(i, last, width) \
323 ((i) == (last)? "\n};\n\n" : \
324 ((i) % (width) == (width)-1 ? ",\n" : ", "))
326 void gen_trees_header()
333 "/* header created automatically with -DGEN_TREES_H */\n\n");
335 fprintf(
header,
"local const ct_data static_ltree[L_CODES+2] = {\n");
341 fprintf(
header,
"local const ct_data static_dtree[D_CODES] = {\n");
347 fprintf(
header,
"const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
354 "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
360 fprintf(
header,
"local const int base_length[LENGTH_CODES] = {\n");
366 fprintf(
header,
"local const int base_dist[D_CODES] = {\n");
384 s->l_desc.dyn_tree =
s->dyn_ltree;
387 s->d_desc.dyn_tree =
s->dyn_dtree;
390 s->bl_desc.dyn_tree =
s->bl_tree;
396 s->compressed_len = 0
L;
418 s->opt_len =
s->static_len = 0
L;
419 s->sym_next =
s->matches = 0;
430 #define pqremove(s, tree, top) \
432 top = s->heap[SMALLEST]; \
433 s->heap[SMALLEST] = s->heap[s->heap_len--]; \
434 pqdownheap(s, tree, SMALLEST); \
441 #define smaller(tree, n, m, depth) \
442 (tree[n].Freq < tree[m].Freq || \
443 (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
458 while (j <= s->heap_len) {
460 if (j < s->heap_len &&
461 smaller(tree,
s->heap[j+1],
s->heap[j],
s->depth)) {
465 if (
smaller(tree,
v,
s->heap[j],
s->depth))
break;
468 s->heap[
k] =
s->heap[j];
k = j;
491 int max_code =
desc->max_code;
492 const ct_data *stree =
desc->stat_desc->static_tree;
493 const intf *extra =
desc->stat_desc->extra_bits;
494 int base =
desc->stat_desc->extra_base;
495 int max_length =
desc->stat_desc->max_length;
508 tree[
s->heap[
s->heap_max]].Len = 0;
512 bits = tree[tree[
n].Dad].Len + 1;
513 if (
bits > max_length)
bits = max_length, overflow++;
517 if (
n > max_code)
continue;
521 if (
n >= base) xbits = extra[
n-base];
523 s->opt_len += (
ulg)
f * (
unsigned)(
bits + xbits);
524 if (stree)
s->static_len += (
ulg)
f * (
unsigned)(stree[
n].Len + xbits);
526 if (overflow == 0)
return;
528 Tracev((stderr,
"\nbit length overflow\n"));
536 s->bl_count[
bits+1] += 2;
537 s->bl_count[max_length]--;
542 }
while (overflow > 0);
553 if (
m > max_code)
continue;
554 if ((
unsigned) tree[
m].
Len != (
unsigned)
bits) {
593 "inconsistent bit counts");
594 Tracev((stderr,
"\ngen_codes: max_code %d ", max_code));
596 for (
n = 0;
n <= max_code;
n++) {
597 int len = tree[
n].Len;
598 if (
len == 0)
continue;
620 const ct_data *stree =
desc->stat_desc->static_tree;
621 int elems =
desc->stat_desc->elems;
632 for (
n = 0;
n < elems;
n++) {
633 if (tree[
n].
Freq != 0) {
634 s->heap[++(
s->heap_len)] = max_code =
n;
646 while (
s->heap_len < 2) {
647 node =
s->heap[++(
s->heap_len)] = (max_code < 2 ? ++max_code : 0);
650 s->opt_len--;
if (stree)
s->static_len -= stree[node].Len;
653 desc->max_code = max_code;
668 s->heap[--(
s->heap_max)] =
n;
669 s->heap[--(
s->heap_max)] =
m;
672 tree[node].Freq = tree[
n].Freq + tree[
m].Freq;
673 s->depth[node] = (
uch)((
s->depth[
n] >=
s->depth[
m] ?
674 s->depth[
n] :
s->depth[
m]) + 1);
675 tree[
n].Dad = tree[
m].Dad = (
ush)node;
677 if (tree ==
s->bl_tree) {
678 fprintf(stderr,
"\nnode %d(%d), sons %d(%d) %d(%d)",
686 }
while (
s->heap_len >= 2);
711 int nextlen = tree[0].Len;
716 if (nextlen == 0)
max_count = 138, min_count = 3;
717 tree[max_code+1].Len = (
ush)0xffff;
719 for (
n = 0;
n <= max_code;
n++) {
720 curlen = nextlen; nextlen = tree[
n+1].Len;
723 }
else if (
count < min_count) {
724 s->bl_tree[curlen].Freq +=
count;
725 }
else if (curlen != 0) {
726 if (curlen != prevlen)
s->bl_tree[curlen].Freq++;
728 }
else if (
count <= 10) {
733 count = 0; prevlen = curlen;
736 }
else if (curlen == nextlen) {
756 int nextlen = tree[0].Len;
762 if (nextlen == 0)
max_count = 138, min_count = 3;
764 for (
n = 0;
n <= max_code;
n++) {
765 curlen = nextlen; nextlen = tree[
n+1].Len;
768 }
else if (
count < min_count) {
771 }
else if (curlen != 0) {
772 if (curlen != prevlen) {
778 }
else if (
count <= 10) {
784 count = 0; prevlen = curlen;
787 }
else if (curlen == nextlen) {
818 for (max_blindex =
BL_CODES-1; max_blindex >= 3; max_blindex--) {
819 if (
s->bl_tree[
bl_order[max_blindex]].Len != 0)
break;
822 s->opt_len += 3*((
ulg)max_blindex+1) + 5+5+4;
823 Tracev((stderr,
"\ndyn trees: dyn %ld, stat %ld",
824 s->opt_len,
s->static_len));
836 int lcodes, dcodes, blcodes;
840 Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4,
"not enough codes");
843 Tracev((stderr,
"\nbl counts: "));
847 for (rank = 0; rank < blcodes; rank++) {
851 Tracev((stderr,
"\nbl tree: sent %ld",
s->bits_sent));
854 Tracev((stderr,
"\nlit tree: sent %ld",
s->bits_sent));
857 Tracev((stderr,
"\ndist tree: sent %ld",
s->bits_sent));
875 s->pending += stored_len;
877 s->compressed_len = (
s->compressed_len + 3 + 7) & (
ulg)~7L;
878 s->compressed_len += (stored_len + 4) << 3;
879 s->bits_sent += 2*16;
880 s->bits_sent += stored_len<<3;
903 s->compressed_len += 10L;
918 ulg opt_lenb, static_lenb;
930 Tracev((stderr,
"\nlit data: dyn %ld, stat %ld",
s->opt_len,
934 Tracev((stderr,
"\ndist data: dyn %ld, stat %ld",
s->opt_len,
946 opt_lenb = (
s->opt_len+3+7)>>3;
947 static_lenb = (
s->static_len+3+7)>>3;
949 Tracev((stderr,
"\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
950 opt_lenb,
s->opt_len, static_lenb,
s->static_len, stored_len,
953 if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
957 opt_lenb = static_lenb = stored_len + 5;
961 if (
buf != (
char*)0) {
963 if (stored_len+4 <= opt_lenb &&
buf != (
char*)0) {
975 }
else if (static_lenb >= 0) {
977 }
else if (
s->strategy ==
Z_FIXED || static_lenb == opt_lenb) {
983 s->compressed_len += 3 +
s->static_len;
992 s->compressed_len += 3 +
s->opt_len;
995 Assert (
s->compressed_len ==
s->bits_sent,
"bad compressed size");
1004 s->compressed_len += 7;
1007 Tracev((stderr,
"\ncomprlen %lu(%lu) ",
s->compressed_len>>3,
1008 s->compressed_len-7*last));
1020 s->sym_buf[
s->sym_next++] = dist;
1021 s->sym_buf[
s->sym_next++] = dist >> 8;
1022 s->sym_buf[
s->sym_next++] = lc;
1025 s->dyn_ltree[lc].Freq++;
1035 s->dyn_dtree[
d_code(dist)].Freq++;
1037 return (
s->sym_next ==
s->sym_end);
1054 if (
s->sym_next != 0)
do {
1055 dist =
s->sym_buf[sx++] & 0xff;
1056 dist += (
unsigned)(
s->sym_buf[sx++] & 0xff) << 8;
1057 lc =
s->sym_buf[sx++];
1083 Assert(
s->pending <
s->lit_bufsize + sx,
"pendingBuf overflow");
1085 }
while (sx < s->sym_next);
1110 unsigned long block_mask = 0xf3ffc07fUL;
1114 for (
n = 0; n <= 31; n++, block_mask >>= 1)
1115 if ((block_mask & 1) && (
s->dyn_ltree[
n].Freq != 0))
1119 if (
s->dyn_ltree[9].Freq != 0 ||
s->dyn_ltree[10].Freq != 0
1120 ||
s->dyn_ltree[13].Freq != 0)
1123 if (
s->dyn_ltree[
n].Freq != 0)
1141 register unsigned res = 0;
1144 code >>= 1, res <<= 1;
1145 }
while (--
len > 0);
1155 if (
s->bi_valid == 16) {
1159 }
else if (
s->bi_valid >= 8) {
1172 if (
s->bi_valid > 8) {
1174 }
else if (
s->bi_valid > 0) {
1180 s->bits_sent = (
s->bits_sent+7) & ~7;
int bits(struct state *s, int need)
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void count
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len static semflg const void static shmflg const struct timespec struct timespec static rem const char static group const void length
static void struct sockaddr socklen_t static fromlen static backlog static fork char char char static envp int struct rusage static rusage struct utsname static buf struct sembuf unsigned
#define header(is_bt, len_min, ret_op)
const ct_data * static_tree
void send_all_trees(deflate_state *s, int lcodes, int dcodes, int blcodes)
void build_tree(deflate_state *s, tree_desc *desc)
const static_tree_desc static_d_desc
void tr_static_init OF((void))
void init_block(deflate_state *s)
void bi_flush(deflate_state *s)
int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc)
const int extra_blbits[BL_CODES]
void ZLIB_INTERNAL _tr_init(deflate_state *s)
int detect_data_type(deflate_state *s)
const static_tree_desc static_bl_desc
#define send_code(s, c, tree)
ct_data static_dtree[D_CODES]
unsigned bi_reverse(unsigned code, int len)
void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, ulg stored_len, int last)
const int extra_lbits[LENGTH_CODES]
const int extra_dbits[D_CODES]
void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s)
void send_tree(deflate_state *s, ct_data *tree, int max_code)
ct_data static_ltree[L_CODES+2]
#define smaller(tree, n, m, depth)
const uch bl_order[BL_CODES]
int base_length[LENGTH_CODES]
uch _length_code[MAX_MATCH-MIN_MATCH+1]
void compress_block(deflate_state *s, const ct_data *ltree, const ct_data *dtree)
uch _dist_code[DIST_CODE_LEN]
void bi_windup(deflate_state *s)
void scan_tree(deflate_state *s, ct_data *tree, int max_code)
void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, ulg stored_len, int last)
void ZLIB_INTERNAL _tr_align(deflate_state *s)
#define pqremove(s, tree, top)
void gen_codes(ct_data *tree, int max_code, ushf *bl_count)
void gen_bitlen(deflate_state *s, tree_desc *desc)
const static_tree_desc static_l_desc
void pqdownheap(deflate_state *s, ct_data *tree, int k)
#define send_bits(s, value, length)
int build_bl_tree(deflate_state *s)
void ZLIB_INTERNAL zmemcpy(Bytef *dest, const Bytef *source, uInt len)
#define Assert(cond, msg)