rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 1 | .TH FLATE 3 |
| 2 | .SH NAME |
| 3 | deflateinit, deflate, deflatezlib, deflateblock, deflatezlibblock, inflateinit, inflate, inflatezlib, inflateblock, inflatezlibblock, flateerr, mkcrctab, blockcrc, adler32 \- deflate compression |
| 4 | .SH SYNOPSIS |
| 5 | .B #include <u.h> |
| 6 | .br |
| 7 | .B #include <libc.h> |
| 8 | .br |
| 9 | .B #include <flate.h> |
| 10 | .PP |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 11 | .ta \w'\fLulongmm'u +\w'\fL 'u |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 12 | .PP |
| 13 | .B |
| 14 | int deflateinit(void) |
| 15 | .PP |
| 16 | .B |
| 17 | int deflate(void *wr, int (*w)(void*,void*,int), |
| 18 | .br |
| 19 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 20 | void *rr, int (*r)(void*,void*,int), |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 21 | .br |
| 22 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 23 | int level, int debug) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 24 | .PP |
| 25 | .B |
| 26 | int deflatezlib(void *wr, int (*w)(void*,void*,int), |
| 27 | .br |
| 28 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 29 | void *rr, int (*r)(void*,void*,int), |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 30 | .br |
| 31 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 32 | int level, int debug) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 33 | .PP |
| 34 | .B |
| 35 | int deflateblock(uchar *dst, int dsize, |
| 36 | .br |
| 37 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 38 | uchar *src, int ssize, |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 39 | .br |
| 40 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 41 | int level, int debug) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 42 | .PP |
| 43 | .B |
| 44 | int deflatezlibblock(uchar *dst, int dsize, |
| 45 | .br |
| 46 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 47 | uchar *src, int ssize, |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 48 | .br |
| 49 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 50 | int level, int debug) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 51 | .PP |
| 52 | .B |
| 53 | int inflateinit(void) |
| 54 | .PP |
| 55 | .B |
| 56 | int inflate(void *wr, int (*w)(void*, void*, int), |
| 57 | .br |
| 58 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 59 | void *getr, int (*get)(void*)) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 60 | .PP |
| 61 | .B |
| 62 | int inflatezlib(void *wr, int (*w)(void*, void*, int), |
| 63 | .br |
| 64 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 65 | void *getr, int (*get)(void*)) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 66 | .PP |
| 67 | .B |
| 68 | int inflateblock(uchar *dst, int dsize, |
| 69 | .br |
| 70 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 71 | uchar *src, int ssize) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 72 | .PP |
| 73 | .B |
| 74 | int inflatezlibblock(uchar *dst, int dsize, |
| 75 | .br |
| 76 | .B |
rsc | c8b6342 | 2005-01-13 04:49:19 +0000 | [diff] [blame] | 77 | uchar *src, int ssize) |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 78 | .PP |
| 79 | .B |
| 80 | char *flateerr(int error) |
| 81 | .PP |
| 82 | .B |
| 83 | ulong *mkcrctab(ulong poly) |
| 84 | .PP |
| 85 | .B |
| 86 | ulong blockcrc(ulong *tab, ulong crc, void *buf, int n) |
| 87 | .PP |
| 88 | .B |
| 89 | ulong adler32(ulong adler, void *buf, int n) |
| 90 | .SH DESCRIPTION |
| 91 | These routines compress and decompress data using the deflate compression algorithm, |
| 92 | which is used for most gzip, zip, and zlib files. |
| 93 | .PP |
| 94 | .I Deflate |
| 95 | compresses input data retrieved by calls to |
| 96 | .I r |
| 97 | with arguments |
| 98 | .IR rr , |
| 99 | an input buffer, and a count of bytes to read. |
| 100 | .I R |
| 101 | should return the number of bytes read; |
| 102 | end of input is signaled by returning zero, an input error by |
| 103 | returning a negative number. |
| 104 | The compressed output is written to |
| 105 | .I w |
| 106 | with arguments |
| 107 | .IR wr , |
| 108 | the output data, and the number of bytes to write. |
| 109 | .I W |
| 110 | should return the number of bytes written; |
| 111 | writing fewer than the requested number of bytes is an error. |
| 112 | .I Level |
| 113 | indicates the amount of computation deflate should do while compressing the data. |
| 114 | Higher |
| 115 | .I levels |
| 116 | usually take more time and produce smaller outputs. |
| 117 | Valid values are 1 to 9, inclusive; 6 is a good compromise. |
| 118 | If |
| 119 | .I debug |
| 120 | is non-zero, cryptic debugging information is produced on standard error. |
| 121 | .PP |
| 122 | .I Inflate |
| 123 | reverses the process, converting compressed data into uncompressed output. |
| 124 | Input is retrieved one byte at a time by calling |
| 125 | .I get |
| 126 | with the argument |
| 127 | .IR getr . |
| 128 | End of input of signaled by returning a negative value. |
| 129 | The uncompressed output is written to |
| 130 | .IR w , |
| 131 | which has the same interface as for |
| 132 | .IR deflate . |
| 133 | .PP |
| 134 | .I |
| 135 | Deflateblock |
| 136 | and |
| 137 | .I inflateblock |
| 138 | operate on blocks of memory but are otherwise similar to |
| 139 | .I deflate |
| 140 | and |
| 141 | .IR inflate . |
| 142 | .PP |
| 143 | The zlib functions are similar, but operate on files with a zlib header and trailer. |
| 144 | .PP |
| 145 | .I Deflateinit |
| 146 | or |
| 147 | .I inflateinit |
| 148 | must be called once before any call to the corresponding routines. |
| 149 | .PP |
| 150 | If the above routines fail, |
| 151 | they return a negative number indicating the problem. |
| 152 | The possible values are |
| 153 | .IR FlateNoMem , |
| 154 | .IR FlateInputFail , |
| 155 | .IR FlateOutputFail , |
| 156 | .IR FlateCorrupted , |
| 157 | and |
| 158 | .IR FlateInternal . |
| 159 | .I Flateerr |
| 160 | converts the number into a printable message. |
| 161 | .I FlateOk |
| 162 | is defined to be zero, |
| 163 | the successful return value for |
| 164 | .IR deflateinit , |
| 165 | .IR deflate , |
| 166 | .IR deflatezlib , |
| 167 | .IR inflateinit , |
| 168 | .IR inflate , |
| 169 | and |
| 170 | .IR inflatezlib . |
| 171 | The block functions return the number of bytes produced when they succeed. |
| 172 | .PP |
| 173 | .I Mkcrctab |
| 174 | allocates |
| 175 | (using |
rsc | bf8a59f | 2004-04-11 03:42:27 +0000 | [diff] [blame] | 176 | .IR malloc (3)), |
rsc | cfa37a7 | 2004-04-10 18:53:55 +0000 | [diff] [blame] | 177 | initializes, and returns a table for rapid computation of 32 bit CRC values using the polynomial |
| 178 | .IR poly . |
| 179 | .I Blockcrc |
| 180 | uses |
| 181 | .IR tab , |
| 182 | a table returned by |
| 183 | .IR mkcrctab , |
| 184 | to update |
| 185 | .I crc |
| 186 | for the |
| 187 | .I n |
| 188 | bytes of data in |
| 189 | .IR buf , |
| 190 | and returns the new value. |
| 191 | .I Crc |
| 192 | should initially be zero. |
| 193 | .I Blockcrc |
| 194 | pre-conditions and post-conditions |
| 195 | .I crc |
| 196 | by ones complementation. |
| 197 | .PP |
| 198 | .I Adler32 |
| 199 | updates the Adler 32-bit checksum of the |
| 200 | .I n |
| 201 | butes of data in |
| 202 | .IR buf. |
| 203 | The initial value of |
| 204 | .I adler |
| 205 | (that is, its value after seeing zero bytes) should be 1. |
| 206 | .SH SOURCE |
rsc | c3674de | 2005-01-11 17:37:33 +0000 | [diff] [blame] | 207 | .B \*9/src/libflate |