mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11148 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			72 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* blast.h -- interface for blast.c
 | |
|   Copyright (C) 2003 Mark Adler
 | |
|   version 1.1, 16 Feb 2003
 | |
| 
 | |
|   This software is provided 'as-is', without any express or implied
 | |
|   warranty.  In no event will the author be held liable for any damages
 | |
|   arising from the use of this software.
 | |
| 
 | |
|   Permission is granted to anyone to use this software for any purpose,
 | |
|   including commercial applications, and to alter it and redistribute it
 | |
|   freely, subject to the following restrictions:
 | |
| 
 | |
|   1. The origin of this software must not be misrepresented; you must not
 | |
|      claim that you wrote the original software. If you use this software
 | |
|      in a product, an acknowledgment in the product documentation would be
 | |
|      appreciated but is not required.
 | |
|   2. Altered source versions must be plainly marked as such, and must not be
 | |
|      misrepresented as being the original software.
 | |
|   3. This notice may not be removed or altered from any source distribution.
 | |
| 
 | |
|   Mark Adler    madler@alumni.caltech.edu
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * blast() decompresses the PKWare Data Compression Library (DCL) compressed
 | |
|  * format.  It provides the same functionality as the explode() function in
 | |
|  * that library.  (Note: PKWare overused the "implode" verb, and the format
 | |
|  * used by their library implode() function is completely different and
 | |
|  * incompatible with the implode compression method supported by PKZIP.)
 | |
|  */
 | |
| 
 | |
| 
 | |
| typedef unsigned (*blast_in)(void *how, unsigned char **buf);
 | |
| typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len);
 | |
| /* Definitions for input/output functions passed to blast().  See below for
 | |
|  * what the provided functions need to do.
 | |
|  */
 | |
| 
 | |
| 
 | |
| int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow);
 | |
| /* Decompress input to output using the provided infun() and outfun() calls.
 | |
|  * On success, the return value of blast() is zero.  If there is an error in
 | |
|  * the source data, i.e. it is not in the proper format, then a negative value
 | |
|  * is returned.  If there is not enough input available or there is not enough
 | |
|  * output space, then a positive error is returned.
 | |
|  *
 | |
|  * The input function is invoked: len = infun(how, &buf), where buf is set by
 | |
|  * infun() to point to the input buffer, and infun() returns the number of
 | |
|  * available bytes there.  If infun() returns zero, then blast() returns with
 | |
|  * an input error.  (blast() only asks for input if it needs it.)  inhow is for
 | |
|  * use by the application to pass an input descriptor to infun(), if desired.
 | |
|  *
 | |
|  * The output function is invoked: err = outfun(how, buf, len), where the bytes
 | |
|  * to be written are buf[0..len-1].  If err is not zero, then blast() returns
 | |
|  * with an output error.  outfun() is always called with len <= 4096.  outhow
 | |
|  * is for use by the application to pass an output descriptor to outfun(), if
 | |
|  * desired.
 | |
|  *
 | |
|  * The return codes are:
 | |
|  *
 | |
|  *   2:  ran out of input before completing decompression
 | |
|  *   1:  output error before completing decompression
 | |
|  *   0:  successful decompression
 | |
|  *  -1:  literal flag not zero or one
 | |
|  *  -2:  dictionary size not in 4..6
 | |
|  *  -3:  distance is too far back
 | |
|  *
 | |
|  * At the bottom of blast.c is an example program that uses blast() that can be
 | |
|  * compiled to produce a command-line decompression filter by defining TEST.
 | |
|  */
 |