]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/main.c
Zero Leaks
[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                 /* lleno data mano! */
44                 srand(time(NULL));
45                 {
46                         size_t jj;
47                         for(jj=0; jj<i;jj++)
48                                 data[jj] = rand()%255;
49                 }
50                 bs_solve(data, salida, bs, &k, i);
51
52                 /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
53                 if (argc == 3) {
54                         bs_restore(orig, salida+sizeof(Uint32)*2, k, i);
55                 } else
56                         fwrite(salida, 1, i, stdout);
57         }
58         fclose(fp);
59         bs_destroy(bs);
60
61         /*printf("Total bytes : %ld\n", total);*/
62         free(salida);
63         free(orig);
64         return 0;
65 }
66
67