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:
avolkov
2005-02-17 01:26:11 +00:00
parent 866b2159f4
commit 7dcdc701bc
7 changed files with 2314 additions and 0 deletions
+72
View File
@@ -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_ */