#define WSIZE 0x8000 /* Window size must be at least 32k, */ /* and a power of two */
static uch *inbuf; /* input buffer */ static uch *window; /* Sliding window buffer */
staticunsigned insize; /* valid bytes in inbuf */ staticunsigned inptr; /* index of next byte to be processed in inbuf */ staticunsigned outcnt; /* bytes in output buffer */
/* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ #define RESERVED 0xC0 /* bit 6,7: reserved */
/* =========================================================================== *Filltheinputbuffer.Thisiscalledonlywhenthebufferisempty *andatleastonebyteisreallyneeded.
*/ int fill_inbuf(void)
{ if (insize != 0)
error("ran out of input data");
inbuf = input_data;
insize = input_data_size;
inptr = 1; return inbuf[0];
}
/* =========================================================================== *Writetheoutputwindowwindow[0..outcnt-1]andupdatecrcandbytes_out. *(Usedforthedecompresseddataonly.)
*/ void flush_window(void)
{
ulg c = crc; unsigned n;
uch *in, *out, ch;
in = window;
out = &output_data[output_ptr]; for (n = 0; n < outcnt; n++) {
ch = *out++ = *in++;
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
}
crc = c;
bytes_out += (ulg)outcnt;
output_ptr += (ulg)outcnt;
outcnt = 0; /* puts("."); */
}
staticvoid error(char *x)
{
puts("\n\n");
puts(x);
puts("\n\n -- System halted");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.