7 #include "../vfile/vfile.h"
9 typedef unsigned long int t_freq;
11 typedef struct t_freqnode {
12 unsigned short int symbol;
14 struct t_freqnode *lchild;
15 struct t_freqnode *rchild;
18 typedef struct t_code {
19 unsigned long int code;
20 unsigned char codelength;
23 typedef struct t_huff {
24 FILE *coderfp; /* fpointer usado en el coder de bychunk para el temp */
25 VFILE *decoderfp; /* fpointer al archivo a descomrimir */
26 char *sourcefile; /* Nombre del archivo a comprimir */
27 char *targetfile; /* Nombre del archivo comprimido */
28 long volsize; /* Tamanio de volumen para multivol */
29 char bychunk; /* 0 works byfile, 1 works bychunk */
30 char canonic; /* 1 Huffman Canonico con preloaded freqtable */
31 t_freq *freqtable; /* Tabla de frecuencias */
32 t_freq sumfreq; /* Frecuencia total acumulada */
33 SHUFFNODE *codetree; /* Puntero al arbol de codigos prefijos */
34 unsigned long int bytesleft; /* Cuanto falta descomprimir en un bychunk */
35 unsigned long int codebuffer; /* Buffer de descompresion para bychunk */
36 int bitsleft; /* Posicion en el buffer de descompresion para bychunk */
40 HUFF_STATE *shuff_init_encoder_byfile(char *inputfile, char *outputfile, long volsize);
41 HUFF_STATE *shuff_init_encoder_bychunk(char *outputfile, long volsize);
42 HUFF_STATE *shuff_init_decoder(char *inputfile, char *outputfile);
43 void shuff_deinit_encoder(HUFF_STATE *shuff);
44 void shuff_deinit_decoder(HUFF_STATE *shuff);
45 int shuff_encode_file(HUFF_STATE *shuff);
46 int shuff_decode_file(HUFF_STATE *shuff);
47 int shuff_scanfreq_chunk(HUFF_STATE *chunkshuff, char* chunk, int chunksize);
48 int shuff_decode_chunk(HUFF_STATE *shuff, char *chunk, int chunksize, int *decodedbytes);
49 int shuff_savemodel(HUFF_STATE *shuff);
50 int shuff_loadmodel(HUFF_STATE *shuff, char *modelfile);
52 #endif /* _STATICHUFF_H_ */