[1050] | 1 | /* blast.h -- interface for blast.c
|
---|
| 2 | Copyright (C) 2003, 2012 Mark Adler
|
---|
| 3 | version 1.2, 24 Oct 2012
|
---|
| 4 |
|
---|
| 5 | This software is provided 'as-is', without any express or implied
|
---|
| 6 | warranty. In no event will the author be held liable for any damages
|
---|
| 7 | arising from the use of this software.
|
---|
| 8 |
|
---|
| 9 | Permission is granted to anyone to use this software for any purpose,
|
---|
| 10 | including commercial applications, and to alter it and redistribute it
|
---|
| 11 | freely, subject to the following restrictions:
|
---|
| 12 |
|
---|
| 13 | 1. The origin of this software must not be misrepresented; you must not
|
---|
| 14 | claim that you wrote the original software. If you use this software
|
---|
| 15 | in a product, an acknowledgment in the product documentation would be
|
---|
| 16 | appreciated but is not required.
|
---|
| 17 | 2. Altered source versions must be plainly marked as such, and must not be
|
---|
| 18 | misrepresented as being the original software.
|
---|
| 19 | 3. This notice may not be removed or altered from any source distribution.
|
---|
| 20 |
|
---|
| 21 | Mark Adler madler@alumni.caltech.edu
|
---|
| 22 | */
|
---|
| 23 |
|
---|
| 24 |
|
---|
| 25 | /*
|
---|
| 26 | * blast() decompresses the PKWare Data Compression Library (DCL) compressed
|
---|
| 27 | * format. It provides the same functionality as the explode() function in
|
---|
| 28 | * that library. (Note: PKWare overused the "implode" verb, and the format
|
---|
| 29 | * used by their library implode() function is completely different and
|
---|
| 30 | * incompatible with the implode compression method supported by PKZIP.)
|
---|
| 31 | *
|
---|
| 32 | * The binary mode for stdio functions should be used to assure that the
|
---|
| 33 | * compressed data is not corrupted when read or written. For example:
|
---|
| 34 | * fopen(..., "rb") and fopen(..., "wb").
|
---|
| 35 | */
|
---|
| 36 |
|
---|
| 37 |
|
---|
| 38 | typedef unsigned (*blast_in)(void *how, unsigned char **buf);
|
---|
| 39 | typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len);
|
---|
| 40 | /* Definitions for input/output functions passed to blast(). See below for
|
---|
| 41 | * what the provided functions need to do.
|
---|
| 42 | */
|
---|
| 43 |
|
---|
| 44 |
|
---|
| 45 | int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow);
|
---|
| 46 | /* Decompress input to output using the provided infun() and outfun() calls.
|
---|
| 47 | * On success, the return value of blast() is zero. If there is an error in
|
---|
| 48 | * the source data, i.e. it is not in the proper format, then a negative value
|
---|
| 49 | * is returned. If there is not enough input available or there is not enough
|
---|
| 50 | * output space, then a positive error is returned.
|
---|
| 51 | *
|
---|
| 52 | * The input function is invoked: len = infun(how, &buf), where buf is set by
|
---|
| 53 | * infun() to point to the input buffer, and infun() returns the number of
|
---|
| 54 | * available bytes there. If infun() returns zero, then blast() returns with
|
---|
| 55 | * an input error. (blast() only asks for input if it needs it.) inhow is for
|
---|
| 56 | * use by the application to pass an input descriptor to infun(), if desired.
|
---|
| 57 | *
|
---|
| 58 | * The output function is invoked: err = outfun(how, buf, len), where the bytes
|
---|
| 59 | * to be written are buf[0..len-1]. If err is not zero, then blast() returns
|
---|
| 60 | * with an output error. outfun() is always called with len <= 4096. outhow
|
---|
| 61 | * is for use by the application to pass an output descriptor to outfun(), if
|
---|
| 62 | * desired.
|
---|
| 63 | *
|
---|
| 64 | * The return codes are:
|
---|
| 65 | *
|
---|
| 66 | * 2: ran out of input before completing decompression
|
---|
| 67 | * 1: output error before completing decompression
|
---|
| 68 | * 0: successful decompression
|
---|
| 69 | * -1: literal flag not zero or one
|
---|
| 70 | * -2: dictionary size not in 4..6
|
---|
| 71 | * -3: distance is too far back
|
---|
| 72 | *
|
---|
| 73 | * At the bottom of blast.c is an example program that uses blast() that can be
|
---|
| 74 | * compiled to produce a command-line decompression filter by defining TEST.
|
---|
| 75 | */
|
---|