Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 4th Edition

Media Vault

Software Library

Restoration Projects

Artifacts Sought

FLATE(2)

NAME

deflateinit, deflate, deflatezlib, deflateblock, deflatezlibblock, inflateinit, inflate, inflatezlib, inflateblock, inflatezlibblock, flateerr, mkcrctab, blockcrc, adler32 − deflate compression

SYNOPSIS

­#include <u.h>
­#include <libc.h>
­#include <flate.h>

intdeflateinit(void)

intdeflate(void ∗wr, int (∗w)(void∗,void∗,int),
void ∗rr, int (∗r)(void∗,void∗,int),
int level, int debug)

intdeflatezlib(void ∗wr, int (∗w)(void∗,void∗,int),
void ∗rr, int (∗r)(void∗,void∗,int),
int level, int debug)

intdeflateblock(uchar ∗dst, int dsize,
uchar ∗src, int ssize,
int level, int debug)

intdeflatezlibblock(uchar ∗dst, int dsize,
uchar ∗src, int ssize,
int level, int debug)

intinflateinit(void)

intinflate(void ∗wr, int (∗w)(void∗, void∗, int),
void ∗getr, int (∗get)(void∗))

intinflatezlib(void ∗wr, int (∗w)(void∗, void∗, int),
void ∗getr, int (∗get)(void∗))

intinflateblock(uchar ∗dst, int dsize,
uchar ∗src, int ssize)

intinflatezlibblock(uchar ∗dst, int dsize,
uchar ∗src, int ssize)

char∗flateerr(int error)

ulong∗mkcrctab(ulong poly)

ulongblockcrc(ulong ∗tab, ulong crc, void ∗buf, int n)

ulongadler32(ulong adler, void ∗buf, int n)

DESCRIPTION

These routines compress and decompress data using the deflate compression algorithm, which is used for most gzip, zip, and zlib files. 

­Deflate compresses input data retrieved by calls to ­r with arguments rr, an input buffer, and a count of bytes to read. ­R should return the number of bytes read; end of input is signaled by returning zero, an input error by returning a negative number.  The compressed output is written to ­w with arguments wr, the output data, and the number of bytes to write. ­W should return the number of bytes written; writing fewer than the requested number of bytes is an error.  ­Level indicates the amount of computation deflate should do while compressing the data.  Higher ­levels usually take more time and produce smaller outputs.  Valid values are 1 to 9, inclusive; 6 is a good compromise.  If ­debug is non-zero, cryptic debugging information is produced on standard error. 

­Inflate reverses the process, converting compressed data into uncompressed output.  Input is retrieved one byte at a time by calling ­get with the argument getr. End of input of signaled by returning a negative value. The uncompressed output is written to w, which has the same interface as for deflate.

Deflateblock and ­inflateblock operate on blocks of memory but are otherwise similar to ­deflate and inflate.

The zlib functions are similar, but operate on files with a zlib header and trailer. 

­Deflateinit or ­inflateinit must be called once before any call to the corresponding routines. 

If the above routines fail, they return a negative number indicating the problem.  The possible values are FlateNoMem, FlateInputFail, FlateOutputFail, FlateCorrupted, and FlateInternal. ­Flateerr converts the number into a printable message.  ­FlateOk is defined to be zero, the successful return value for deflateinit, deflate, deflatezlib, inflateinit, inflate, and inflatezlib. The block functions return the number of bytes produced when they succeed.

­Mkcrctab allocates (using malloc(2)), initializes, and returns a table for rapid computation of 32 bit CRC values using the polynomial poly. ­Blockcrc uses tab, a table returned by mkcrctab, to update ­crc for the ­n bytes of data in buf, and returns the new value. ­Crc should initially be zero.  ­Blockcrc pre-conditions and post-conditions ­crc by ones complementation. 

­Adler32 updates the Adler 32-bit checksum of the ­n butes of data in buf.  The initial value of ­adler (that is, its value after seeing zero bytes) should be 1. 

SOURCE

­/sys/src/libflate

Plan 9  —  April 09, 2002

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026