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