Lines Matching refs:zs

163 #define	htabof(i)	zs->zs_htab[i]
164 #define codetabof(i) zs->zs_codetab[i]
167 #define tab_suffixof(i) ((u_char *)(zs->zs_htab))[i]
214 struct s_zstate *zs;
219 zs = cookie;
222 switch (zs->zs_state) {
228 zs->zs_state = S_MIDDLE;
230 zs->zs_maxmaxcode = 1L << zs->zs_maxbits;
231 if (write(zs->zs_fd, z_magic, sizeof(z_magic)) !=
234 tmp = (u_char)(zs->zs_maxbits | zs->zs_block_compress);
235 if (write(zs->zs_fd, &tmp, sizeof(tmp)) != sizeof(tmp))
238 zs->zs_bp = zs->zs_buf;
239 zs->zs_offset = 0;
240 zs->zs_bytes_out = 3; /* Includes 3-byte header mojo. */
241 zs->zs_out_count = 0;
242 zs->zs_clear_flg = 0;
243 zs->zs_ratio = 0;
244 zs->zs_in_count = 1;
245 zs->zs_checkpoint = CHECK_GAP;
246 zs->zs_maxcode = MAXCODE(zs->zs_n_bits = INIT_BITS);
247 zs->zs_free_ent = ((zs->zs_block_compress) ? FIRST : 256);
249 zs->zs_ent = *bp++;
252 zs->zs_hshift = 0;
253 for (zs->zs_fcode = (long)zs->zs_hsize; zs->zs_fcode < 65536L;
254 zs->zs_fcode *= 2L)
255 zs->zs_hshift++;
257 zs->zs_hshift = 8 - zs->zs_hshift;
259 zs->zs_hsize_reg = zs->zs_hsize;
261 cl_hash(zs, (count_int)zs->zs_hsize_reg);
266 zs->zs_in_count++;
267 zs->zs_fcode = (long)(((long)c << zs->zs_maxbits) +
268 zs->zs_ent);
270 i = ((c << zs->zs_hshift) ^ zs->zs_ent);
272 if (htabof(i) == zs->zs_fcode) {
273 zs->zs_ent = codetabof(i);
278 disp = zs->zs_hsize_reg - i;
282 i += zs->zs_hsize_reg;
284 if (htabof(i) == zs->zs_fcode) {
285 zs->zs_ent = codetabof(i);
290 nomatch: if (output(zs, (code_int) zs->zs_ent) == -1)
292 zs->zs_out_count++;
293 zs->zs_ent = c;
294 if (zs->zs_free_ent < zs->zs_maxmaxcode) {
296 codetabof(i) = zs->zs_free_ent++;
297 htabof(i) = zs->zs_fcode;
298 } else if ((count_int)zs->zs_in_count >=
299 zs->zs_checkpoint && zs->zs_block_compress) {
300 if (cl_block(zs) == -1)
311 struct s_zstate *zs;
314 zs = cookie;
315 if (zs->zs_mode == 'w') { /* Put out the final code. */
316 if (output(zs, (code_int) zs->zs_ent) == -1) {
317 (void)close(zs->zs_fd);
318 free(zs);
321 zs->zs_out_count++;
322 if (output(zs, (code_int) - 1) == -1) {
323 (void)close(zs->zs_fd);
324 free(zs);
333 info->total_in = (off_t)zs->zs_in_count;
334 info->total_out = (off_t)zs->zs_bytes_out;
337 rval = close(zs->zs_fd);
338 free(zs);
369 output(struct s_zstate *zs, code_int ocode)
378 bp = zs->zs_bp + (zs->zs_offset >> 3);
379 r_off = zs->zs_offset & 7;
380 bits = zs->zs_n_bits;
399 zs->zs_offset += zs->zs_n_bits;
400 if (zs->zs_offset == (zs->zs_n_bits << 3)) {
401 zs->zs_bp += zs->zs_n_bits;
402 zs->zs_offset = 0;
408 if (zs->zs_free_ent > zs->zs_maxcode ||
409 (zs->zs_clear_flg > 0)) {
414 if (zs->zs_offset > 0) {
415 zs->zs_bp += zs->zs_n_bits;
416 zs->zs_offset = 0;
419 if (zs->zs_clear_flg) {
420 zs->zs_maxcode =
421 MAXCODE(zs->zs_n_bits = INIT_BITS);
422 zs->zs_clear_flg = 0;
424 zs->zs_n_bits++;
425 if (zs->zs_n_bits == zs->zs_maxbits)
426 zs->zs_maxcode = zs->zs_maxmaxcode;
428 zs->zs_maxcode =
429 MAXCODE(zs->zs_n_bits);
433 if (zs->zs_bp + zs->zs_n_bits > &zs->zs_buf[ZBUFSIZ]) {
434 bits = zs->zs_bp - zs->zs_buf;
435 if (write(zs->zs_fd, zs->zs_buf, bits) != bits)
437 zs->zs_bytes_out += bits;
438 if (zs->zs_offset > 0)
440 zs->zs_bp = zs->zs_buf;
444 if (zs->zs_offset > 0)
445 zs->zs_bp += (zs->zs_offset + 7) / 8;
446 if (zs->zs_bp > zs->zs_buf) {
447 bits = zs->zs_bp - zs->zs_buf;
448 if (write(zs->zs_fd, zs->zs_buf, bits) != bits)
450 zs->zs_bytes_out += bits;
452 zs->zs_offset = 0;
453 zs->zs_bp = zs->zs_buf;
460 cl_block(struct s_zstate *zs)
464 zs->zs_checkpoint = zs->zs_in_count + CHECK_GAP;
466 if (zs->zs_in_count > 0x007fffff) { /* Shift will overflow. */
467 rat = zs->zs_bytes_out >> 8;
471 rat = zs->zs_in_count / rat;
474 rat = (zs->zs_in_count << 8) / zs->zs_bytes_out;
476 if (rat > zs->zs_ratio)
477 zs->zs_ratio = rat;
479 zs->zs_ratio = 0;
480 cl_hash(zs, (count_int) zs->zs_hsize);
481 zs->zs_free_ent = FIRST;
482 zs->zs_clear_flg = 1;
483 if (output(zs, (code_int) CLEAR) == -1)
491 cl_hash(struct s_zstate *zs, count_int cl_hsize)
497 htab_p = zs->zs_htab + cl_hsize;
548 struct s_zstate *zs;
556 if ((zs = calloc(1, sizeof(struct s_zstate))) == NULL)
560 zs->zs_maxbits = bits ? bits : BITS;
562 zs->zs_maxmaxcode = 1 << zs->zs_maxbits;
563 zs->zs_hsize = HSIZE; /* For dynamic table sizing. */
564 zs->zs_free_ent = 0; /* First unused entry. */
565 zs->zs_block_compress = BLOCK_MASK;
566 zs->zs_clear_flg = 0;
567 zs->zs_ratio = 0;
568 zs->zs_checkpoint = CHECK_GAP;
569 zs->zs_in_count = 0; /* Length of input. */
570 zs->zs_out_count = 0; /* # of codes output (for debugging).*/
571 zs->zs_state = gotmagic ? S_MAGIC : S_START;
572 zs->zs_offset = 0;
573 zs->zs_size = 0;
574 zs->zs_mode = mode[0];
575 zs->zs_bp = zs->zs_ebp = zs->zs_buf;
577 zs->zs_fd = fd;
578 return zs;