]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/statichuff/statichuff.h
Listo Huffman Canonico, con dos nuevos parametros s y m se permite grabar una tabla...
[z.facultad/75.06/jacu.git] / src / statichuff / statichuff.h
1
2 #ifndef _STATICHUFF_H_
3 #define _STATICHUFF_H_
4
5 #include <stdio.h>
6 #include <unistd.h>
7 #include "../vfile/vfile.h"
8
9 typedef unsigned long int t_freq;
10
11 typedef struct t_freqnode {
12         unsigned short int symbol;
13         t_freq freq;
14         struct t_freqnode *lchild;
15         struct t_freqnode *rchild;
16 } SHUFFNODE;
17
18 typedef struct t_code {
19         unsigned long int code;
20         unsigned char codelength;
21 } SHUFFCODE;
22
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 */
37 } HUFF_STATE;
38
39
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);
51
52 #endif /* _STATICHUFF_H_ */