]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/main.c
56e849b34caa8239de7c17023beb5b272a71eb66
[z.facultad/75.06/jacu.git] / src / blocksorting / main.c
1
2 #include "bs.h"
3
4 void print_v(char *txt, char *data, Uint32 len)
5 {
6         Uint32 i;
7
8         printf("%s", txt);
9         
10         for(i=0; i<len; i++) {
11                 if (data[i] == '\n')
12                         printf("#");
13                 else
14                         printf("%c", data[i]);
15         }
16         printf("\n");
17 }
18
19 int main(int argc, char *argv[])
20 {
21         char *data; 
22         char *salida;
23         char *orig;
24         unsigned long int len, i, k, total;
25         FILE *fp;
26         char c;
27         t_BlockSort *bs;
28         
29         if (argc == 3) {
30                 fp = fopen(argv[1], "r");
31                 len = atoi(argv[2]);
32         } else if (argc == 2) {
33                 fp = stdin;
34                 len = atoi(argv[1]);
35         } else {
36                 printf("no, no\n");
37                 return 1;
38         }
39
40         data = malloc(sizeof(char)*len);
41         salida = malloc(sizeof(char)*(len+1+sizeof(unsigned long int)));
42         orig = malloc(sizeof(char)*(len+1));
43
44         salida[len] = '\0';
45         orig[len] = '\0';
46
47         bs = bs_create(len);
48
49         total = 0;
50         while (!feof(fp)) {
51                 i = 0;
52                 i = bs_readblock(fp, data, len, 1);
53                 
54                 total += i;
55                 
56                 bs_solve(data, salida, bs, &k, i);
57
58                 /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
59                 if (argc == 3) {
60                         bs_restore(orig, salida+sizeof(Uint32), k, i);
61                         print_v("Leido     : ", data, i);
62                         print_v("BS        : ", salida+sizeof(Uint32), i);
63                         /*print_v("Restorado : ", orig, i);*/
64                 } else
65                         fwrite(salida, 1, i, stdout);
66         }
67         fclose(fp);
68         bs_destroy(bs);
69
70         /*printf("Total bytes : %ld\n", total);*/
71         free(salida);
72         free(orig);
73         return 0;
74 }
75
76