]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/main.c
Listo Huffman Canonico, con dos nuevos parametros s y m se permite grabar una tabla...
[z.facultad/75.06/jacu.git] / src / blocksorting / main.c
1
2 #include "bs.h"
3
4 int main(int argc, char *argv[])
5 {
6         char *data; 
7         char *salida;
8         char *orig;
9         unsigned long int len, i, k, total;
10         FILE *fp;
11         char c;
12         t_BlockSort *bs;
13         
14         if (argc == 3) {
15                 fp = fopen(argv[1], "r");
16                 len = atoi(argv[2]);
17         } else if (argc == 2) {
18                 fp = stdin;
19                 len = atoi(argv[1]);
20         } else {
21                 printf("no, no\n");
22                 return 1;
23         }
24
25         data = malloc(sizeof(char)*len);
26         salida = malloc(sizeof(char)*(len+1+sizeof(unsigned long int)*2));
27         orig = malloc(sizeof(char)*(len+1));
28
29         salida[len] = '\0';
30         orig[len] = '\0';
31
32         bs = bs_create(len);
33
34         c = fgetc(fp);
35         total = 0;
36         while (!feof(fp)) {
37                 i = 0;
38                 while ((!feof(fp)) && (i < len)) {
39                         data[i++] = c;
40                         c = fgetc(fp);
41                         total++;
42                 }
43                 bs_solve(data, salida, bs, &k, i);
44
45                 /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
46                 if (argc == 3) {
47                         printf("BS : %s -> %ld\n", salida, k);
48                         bs_restore(orig, salida, k, i);
49                         printf("Orig : %s\n", orig);
50                 } else
51                         fwrite(salida, 1, i, stdout);
52         }
53         fclose(fp);
54         bs_destroy(bs);
55
56         /*printf("Total bytes : %ld\n", total);*/
57         free(salida);
58         free(orig);
59         return 0;
60 }
61
62