annotate src/zlib-1.2.8/contrib/blast/blast.h @ 128:5b4145a0d408

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