1*012771d8Swdenk /*------------------------------------------------------------------------- 2*012771d8Swdenk * Filename: mini_inflate.h 3*012771d8Swdenk * Version: $Id: mini_inflate.h,v 1.2 2002/01/17 00:53:20 nyet Exp $ 4*012771d8Swdenk * Copyright: Copyright (C) 2001, Russ Dill 5*012771d8Swdenk * Author: Russ Dill <Russ.Dill@asu.edu> 6*012771d8Swdenk * Description: Mini deflate implementation 7*012771d8Swdenk *-----------------------------------------------------------------------*/ 8*012771d8Swdenk /* 9*012771d8Swdenk * 10*012771d8Swdenk * This program is free software; you can redistribute it and/or modify 11*012771d8Swdenk * it under the terms of the GNU General Public License as published by 12*012771d8Swdenk * the Free Software Foundation; either version 2 of the License, or 13*012771d8Swdenk * (at your option) any later version. 14*012771d8Swdenk * 15*012771d8Swdenk * This program is distributed in the hope that it will be useful, 16*012771d8Swdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*012771d8Swdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*012771d8Swdenk * GNU General Public License for more details. 19*012771d8Swdenk * 20*012771d8Swdenk * You should have received a copy of the GNU General Public License 21*012771d8Swdenk * along with this program; if not, write to the Free Software 22*012771d8Swdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23*012771d8Swdenk * 24*012771d8Swdenk */ 25*012771d8Swdenk 26*012771d8Swdenk typedef __SIZE_TYPE__ size; 27*012771d8Swdenk 28*012771d8Swdenk #define NO_ERROR 0 29*012771d8Swdenk #define COMP_UNKNOWN 1 /* The specififed bytype is invalid */ 30*012771d8Swdenk #define CODE_NOT_FOUND 2 /* a huffman code in the stream could not be decoded */ 31*012771d8Swdenk #define TOO_MANY_BITS 3 /* pull_bits was passed an argument that is too 32*012771d8Swdenk * large */ 33*012771d8Swdenk 34*012771d8Swdenk /* This struct represents an entire huffman code set. It has various lookup 35*012771d8Swdenk * tables to speed decoding */ 36*012771d8Swdenk struct huffman_set { 37*012771d8Swdenk int bits; /* maximum bit length */ 38*012771d8Swdenk int num_symbols; /* Number of symbols this code can represent */ 39*012771d8Swdenk int *lengths; /* The bit length of symbols */ 40*012771d8Swdenk int *symbols; /* All of the symbols, sorted by the huffman code */ 41*012771d8Swdenk int *count; /* the number of codes of this bit length */ 42*012771d8Swdenk int *first; /* the first code of this bit length */ 43*012771d8Swdenk int *pos; /* the symbol that first represents (in the symbols 44*012771d8Swdenk * array) */ 45*012771d8Swdenk }; 46*012771d8Swdenk 47*012771d8Swdenk struct bitstream { 48*012771d8Swdenk unsigned char *data; /* increments as we move from byte to byte */ 49*012771d8Swdenk unsigned char bit; /* 0 to 7 */ 50*012771d8Swdenk void *(*memcpy)(void *, const void *, size); 51*012771d8Swdenk unsigned long decoded; /* The number of bytes decoded */ 52*012771d8Swdenk int error; 53*012771d8Swdenk 54*012771d8Swdenk int distance_count[16]; 55*012771d8Swdenk int distance_first[16]; 56*012771d8Swdenk int distance_pos[16]; 57*012771d8Swdenk int distance_lengths[32]; 58*012771d8Swdenk int distance_symbols[32]; 59*012771d8Swdenk 60*012771d8Swdenk int code_count[8]; 61*012771d8Swdenk int code_first[8]; 62*012771d8Swdenk int code_pos[8]; 63*012771d8Swdenk int code_lengths[19]; 64*012771d8Swdenk int code_symbols[19]; 65*012771d8Swdenk 66*012771d8Swdenk int length_count[16]; 67*012771d8Swdenk int length_first[16]; 68*012771d8Swdenk int length_pos[16]; 69*012771d8Swdenk int length_lengths[288]; 70*012771d8Swdenk int length_symbols[288]; 71*012771d8Swdenk 72*012771d8Swdenk struct huffman_set codes; 73*012771d8Swdenk struct huffman_set lengths; 74*012771d8Swdenk struct huffman_set distance; 75*012771d8Swdenk }; 76*012771d8Swdenk 77*012771d8Swdenk #define NO_COMP 0 78*012771d8Swdenk #define FIXED_COMP 1 79*012771d8Swdenk #define DYNAMIC_COMP 2 80*012771d8Swdenk 81*012771d8Swdenk long decompress_block(unsigned char *dest, unsigned char *source, 82*012771d8Swdenk void *(*inflate_memcpy)(void *dest, const void *src, size n)); 83