| 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 | 
  */ |