+
+/** Estructura que representa el estado del compresor Huffman Estático */
+typedef struct t_huff {
+ 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 o a descomprimir */
+ char *targetfile; /**< Nombre del archivo comprimido o descomprimido */
+ long volsize; /**< Tamanio de volumen para multivol */
+ 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 codebuffer; /**< Buffer de descompresion para bychunk */
+ int bitsleft; /**< Posicion en el buffer de descompresion para bychunk */
+} HUFF_STATE;
+
+/** Crea una estructura <em>HUFF_STATE<em> y la inicializa para utilizarla
+ * para comprimir archivos.
+ *
+ * \param inputfile Archivo a comprimir.
+ * \param outputfile Archivo destino de la compresión.
+ * \param volsize Size del volumen en caso de compresión multivolumen.
+ * \return \b HUFF_STATE* Puntero a estructura creada e inicializada.
+ */
+HUFF_STATE *shuff_init_encoder_byfile(char *inputfile, char *outputfile, long volsize);
+
+/** Crea una estructura <em>HUFF_STATE<em> y la inicializa para utilizarla
+ * para comprimir una secuencia de chunks de datos.
+ *
+ * \param outputfile Archivo destino de la compresión.
+ * \param volsize Size del volumen en caso de compresión multivolumen.
+ * \return \b HUFF_STATE* Puntero a estructura creada e inicializada.
+ */
+HUFF_STATE *shuff_init_encoder_bychunk(char *outputfile, long volsize);
+
+/** Crea una estructura <em>HUFF_STATE<em> y la inicializa para utilizarla
+ * en la descompresión de un archivo.
+ *
+ * \param inputfile Archivo a descomprimir.
+ * \param outputfile Archivo destino de la descompresión.
+ * \return \b HUFF_STATE* Puntero a estructura creada e inicializada.
+ */
+HUFF_STATE *shuff_init_decoder(char *inputfile, char *outputfile);
+
+/** Desinicializa el compresor Huffman, cerrando files y liberando memoria.
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ */
+void shuff_deinit_encoder(HUFF_STATE *shuff);
+
+/** Desinicializa el compresor Huffman, cerrando files y liberando memoria.
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ */
+void shuff_deinit_decoder(HUFF_STATE *shuff);
+
+/** Ejecuta la compresión de un archivo previamente indicado a través de
+ * las rutinas de inicializacion de Huffman.
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ * \return \b int Indica éxito de la operacion. (1 Exito, 0 Error)
+ */
+int shuff_encode_file(HUFF_STATE *shuff);
+
+/** Ejecuta la descompresión de un archivo previamente indicado a través de
+ * las rutinas de inicializacion de Huffman.
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ * \return \b int Indica éxito de la operacion. (1 Exito, 0 Error)
+ */
+int shuff_decode_file(HUFF_STATE *shuff);
+
+/** Recibe un chunk de datos y analiza la frecuencia de sus caracteres
+ * actualizando el modelo de frecuencias en consecuencia.
+ *
+ * \param chunkshuff Puntero a la estructura usada para el estado del compresor.
+ * \param chunk Puntero al chunk de datos.
+ * \param chunksize Size del chunk de datos.
+ * \return \b int Indica éxito de la operacion. (1 Exito, 0 Error)
+ */
+int shuff_scanfreq_chunk(HUFF_STATE *shuff, char* chunk, int chunksize);
+
+/** Descomprime un chunk de datos cuyo size es especificado en la rutina.
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ * \param chunk Puntero al buffer donde se decodificara el chunk.
+ * \param chunksize Size del buffer o chunk que se quiere obtener.
+ * \return \b int Indica si hay mas datos a descomprimir o no (1 hay, 0 no hay)
+ */
+int shuff_decode_chunk(HUFF_STATE *shuff, char *chunk, int chunksize, unsigned long int *decodedbytes);
+
+/** Graba el modelo de un archivo que se ha comprimido. (Tabla de Freq)
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ * \return \b int Indica éxito de la operación. (1 Exito, 0 Error);
+ */
+int shuff_savemodel(HUFF_STATE *shuff);
+
+/** Carga un modelo de huffman (Tabla de Freq) para ser usando en Huff Canonico
+ *
+ * \param shuff Puntero a la estructura usada para el estado del compresor.
+ * \param modelfile Nombre del archivo que posee el modelo a cargar.
+ * \return \b int Indica éxito de la operación. (1 Exito, 0 Error);
+ */
+int shuff_loadmodel(HUFF_STATE *shuff, char *modelfile);
+
+#endif /* _STATICHUFF_H_ */