#include "statichuff/statichuff.h"
#include "blocksorting/bs.h"
#include "mtf/mtf.h"
+#include "vfile/vfile.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
/* No me gusta el tmpfile ... es para probar como anda todo junto */
FILE *fp, *fp_out;
unsigned long int i, j, total, k;
- int *mtf;
+ char *mtf;
char *salida, *data, c;
data = malloc(sizeof(char)*pagesize);
- salida = malloc(sizeof(char)*(pagesize));
+ /* Reservo lugar tambien para guardar el k y el tamaño */
+ salida = malloc(sizeof(char)*(pagesize)+sizeof(unsigned long int)*2);
bs = bs_create(pagesize);
+
fp = fopen(argv[optind], "rb");
fp_out = fopen("tmp.comp", "wb");
+
c = fgetc(fp);
total = 0;
while (!feof(fp)) {
c = fgetc(fp);
total++;
}
+
/* Hago el BS */
bs_solve(data, salida, bs, &k, i);
- /* Le aplico el MTF */
- mtf = jacu_mtf(salida, i);
+
+ /* Le aplico el MTF, salteo el tamaño del bloque para que no se pierda. */
+ mtf = jacu_mtf(salida+sizeof(unsigned long int), i+sizeof(unsigned long int));
for(j=0; j<i; j++)
fputc(mtf[j], fp_out);
+ free(mtf);
}
+
+ /* Limpiando */
fclose(fp);
fclose(fp_out);
bs_destroy(bs);
- i = shuff_encode_file("tmp.comp",argv[optind+1],volumesize);
+
+ /* Comprimo con huffman */
+ i = shuff_encode_file("tmp.comp",argv[optind+1], volumesize);
+
/* borro el temporal */
unlink("tmp.comp");
return i;