s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++;
s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
int _tr_tally (s, dist, lc)    deflate_state *s;    unsigned dist;  /* distance of matched string */    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */{    s->d_buf[s->last_lit] = (ush)dist;    s->l_buf[s->last_lit++] = (uch)lc;    if (dist == 0) {        /* lc is the unmatched char */        s->dyn_ltree[lc].Freq++;    } else {        s->matches++;        /* Here, lc is the match length - MIN_MATCH */        dist--;             /* dist = match distance - 1 */        Assert((ush)dist < (ush)MAX_DIST(s) &&               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");        s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++;        s->dyn_dtree[d_code(dist)].Freq++;    }    /* Try to guess if it is profitable to stop the current block here */    if (s->level > 2 && (s->last_lit & 0xfff) == 0) {        /* Compute an upper bound for the compressed length */        ulg out_length = (ulg)s->last_lit*8L;        ulg in_length = (ulg)((long)s->strstart - s->block_start);        int dcode;        for (dcode = 0; dcode < D_CODES; dcode++) {            out_length += (ulg)s->dyn_dtree[dcode].Freq *                (5L+extra_dbits[dcode]);        }        out_length >>= 3;        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",               s->last_lit, in_length, out_length,               100L - out_length*100L/in_length));        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;    }    return (s->last_lit == s->lit_bufsize-1);    /* We avoid equality with lit_bufsize because of wraparound at 64K     * on 16 bit machines and because stored blocks are restricted to     * 64K-1 bytes.     */}