} SHUFFCODE;
typedef struct t_huff {
- FILE *coderfp; /* filepointer usado en el coder de bychunk */
- VFILE *decoderfp; /* filepointer usado en ambos decoders */
+ FILE *coderfp; /* fpointer usado en el coder de bychunk para el temp */
+ VFILE *decoderfp; /* fpointer al archivo a descomrimir */
char *sourcefile; /* Nombre del archivo a comprimir */
char *targetfile; /* Nombre del archivo comprimido */
long volsize; /* Tamanio de volumen para multivol */
- char preloadfreq; /* 1 Freqtable preloaded (bychunk | canonico) - 0 byfile */
+ char bychunk; /* 0 works byfile, 1 works bychunk */
+ char canonic; /* 1 Huffman Canonico con preloaded freqtable */
t_freq *freqtable; /* Tabla de frecuencias */
t_freq sumfreq; /* Frecuencia total acumulada */
SHUFFNODE *codetree; /* Puntero al arbol de codigos prefijos */
- unsigned long int bytesleft; /* cuanto falta descomprimir en un bychunk */
+ unsigned long int bytesleft; /* Cuanto falta descomprimir en un bychunk */
+ unsigned long int codebuffer; /* Buffer de descompresion para bychunk */
+ int bitsleft; /* Posicion en el buffer de descompresion para bychunk */
} HUFF_STATE;
HUFF_STATE *shuff_init_encoder_bychunk(char *outputfile, long volsize);
HUFF_STATE *shuff_init_decoder(char *inputfile, char *outputfile);
void shuff_deinit_encoder(HUFF_STATE *shuff);
+void shuff_deinit_decoder(HUFF_STATE *shuff);
int shuff_encode_file(HUFF_STATE *shuff);
int shuff_decode_file(HUFF_STATE *shuff);
+int shuff_scanfreq_chunk(HUFF_STATE *chunkshuff, char* chunk, int chunksize);
+int shuff_decode_chunk(HUFF_STATE *shuff, char *chunk, int chunksize, int *decodedbytes);
+int shuff_savemodel(HUFF_STATE *shuff);
+int shuff_loadmodel(HUFF_STATE *shuff, char *modelfile);
#endif /* _STATICHUFF_H_ */