+/** Carga un modelo estadistico para huffman */
+int shuff_loadmodel(HUFF_STATE *shuff, char *modelfile) {
+
+ FILE *fp;
+
+ if ((shuff) && (shuff->freqtable) && (modelfile)) {
+ /* Cargo el modelo de disco */
+ if ((fp = fopen(modelfile,"r")) == NULL) return 0;
+ if (fread(shuff->freqtable,sizeof(t_freq),256,fp) != 256) return 0;
+ shuff->canonic = 1;
+ if (fp) fclose(fp);
+ return 1;
+ }
+ return 0;
+}
+
+/** Graba un modelo estadístico de huffman */
+int shuff_savemodel(HUFF_STATE *shuff) {
+
+ FILE *fp;
+ char *auxfilename;
+ char *stopchar;
+
+ if ((shuff) && (shuff->targetfile) && (shuff->freqtable)) {
+ /* Preparo el nombre del archivo con la tabla */
+ auxfilename = (char*)malloc(strlen(shuff->targetfile)+1);
+ stopchar = strrchr(shuff->targetfile,'.');
+ strncpy(auxfilename,shuff->targetfile,stopchar - shuff->targetfile);
+ auxfilename[stopchar - shuff->targetfile] = 0;
+ strcat(auxfilename,".ftb");
+
+ /* Lo creamos y dumpeamos la tabla de frecuencias (modelo) */
+ if ((fp = fopen(auxfilename,"w")) == NULL) return 0;
+ fwrite(shuff->freqtable,sizeof(t_freq),256,fp);
+ if (fp) fclose(fp);
+
+ return 1;
+ }
+ return 0;
+}
+
+/** Desinicializa un compresor de huffman */