DOS SC2 .ani (frame-pack) unpacker; first version
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1542 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
Executable
+72
@@ -0,0 +1,72 @@
|
||||
/**************************************************************
|
||||
lzhuf.h
|
||||
|
||||
Lib-like reentrant definition of lzhuf.c
|
||||
Please see lzhuf.c for authorship info
|
||||
**************************************************************/
|
||||
|
||||
#ifndef LZHUF_H_INCL_
|
||||
#define LZHUF_H_INCL_
|
||||
|
||||
/********** LZSS compression **********/
|
||||
|
||||
#define LZHUF_N 4096 /* buffer size */
|
||||
#define LZHUF_F 60 /* lookahead buffer size */
|
||||
#define LZHUF_THRESHOLD 2
|
||||
#define LZHUF_NIL LZHUF_N /* leaf of tree */
|
||||
|
||||
/* Huffman coding */
|
||||
|
||||
#define LZHUF_N_CHAR (256 - LZHUF_THRESHOLD + LZHUF_F)
|
||||
/* kinds of characters (character code = 0..LZHUF_N_CHAR-1) */
|
||||
#define LZHUF_T (LZHUF_N_CHAR * 2 - 1) /* size of table */
|
||||
#define LZHUF_R (LZHUF_T - 1) /* position of root */
|
||||
#define LZHUF_MAX_FREQ 0x8000 /* updates tree when the */
|
||||
|
||||
|
||||
typedef void* lzhuf_handle_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned long int codesize;
|
||||
unsigned char text_buf[LZHUF_N + LZHUF_F - 1];
|
||||
int match_position;
|
||||
int match_length;
|
||||
int lson[LZHUF_N + 1];
|
||||
int rson[LZHUF_N + 257];
|
||||
int dad[LZHUF_N + 1];
|
||||
|
||||
unsigned freq[LZHUF_T + 1]; /* frequency table */
|
||||
|
||||
int prnt[LZHUF_T + LZHUF_N_CHAR]; /* pointers to parent nodes, except for the */
|
||||
/* elements [LZHUF_T..LZHUF_T + LZHUF_N_CHAR - 1] which are used to get */
|
||||
/* the positions of leaves corresponding to the codes. */
|
||||
|
||||
int son[LZHUF_T]; /* pointers to child nodes (son[], son[] + 1) */
|
||||
|
||||
unsigned getbuf;
|
||||
unsigned char getlen;
|
||||
|
||||
unsigned putbuf;
|
||||
unsigned char putlen;
|
||||
|
||||
/* user-settable data */
|
||||
void* userdata;
|
||||
|
||||
lzhuf_handle_t infile;
|
||||
lzhuf_handle_t outfile;
|
||||
|
||||
size_t (* read)(void*, size_t, size_t, lzhuf_handle_t);
|
||||
size_t (* write)(const void*, size_t, size_t, lzhuf_handle_t);
|
||||
int (* seek)(lzhuf_handle_t, long, int);
|
||||
long (* tell)(lzhuf_handle_t);
|
||||
|
||||
} lzhuf_session_t;
|
||||
|
||||
void lzhuf_startSession(lzhuf_session_t *);
|
||||
void lzhuf_endSession(lzhuf_session_t *);
|
||||
int lzhuf_encode(lzhuf_session_t *); /* compression */
|
||||
int lzhuf_decode(lzhuf_session_t *); /* recover */
|
||||
|
||||
|
||||
#endif /* LZHUF_H_INCL_ */
|
||||
Reference in New Issue
Block a user