]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/main.c
Cambios minimos, no se si entraran en la impresion :(
[z.facultad/75.06/jacu.git] / src / blocksorting / main.c
1 /*----------------------------------------------------------------------------
2  *                   jacu - Just Another Compression Utility
3  *----------------------------------------------------------------------------
4  * This file is part of jacu.
5  *
6  * jacu is free software; you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation; either version 2 of the License, or (at your option) any later
9  * version.
10  *
11  * jacu is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with jacu; if not, write to the Free Software Foundation, Inc., 59 Temple
18  * Place, Suite 330, Boston, MA  02111-1307  USA
19  *----------------------------------------------------------------------------
20  */
21
22
23 #include "bs.h"
24
25 void print_v(char *txt, char *data, Uint32 len)
26 {
27         Uint32 i;
28
29         printf("%s", txt);
30         
31         for(i=0; i<len; i++) {
32                 if (data[i] == '\n')
33                         printf("#");
34                 else
35                         printf("%c", data[i]);
36         }
37         printf("\n");
38 }
39
40 int main(int argc, char *argv[])
41 {
42         char *data; 
43         char *salida;
44         char *orig;
45         unsigned long int len, i, k, total;
46         FILE *fp;
47         char c;
48         t_BlockSort *bs;
49         
50         if (argc == 3) {
51                 fp = fopen(argv[1], "r");
52                 len = atoi(argv[2]);
53         } else if (argc == 2) {
54                 fp = stdin;
55                 len = atoi(argv[1]);
56         } else {
57                 printf("no, no\n");
58                 return 1;
59         }
60
61         data = malloc(sizeof(char)*len);
62         salida = malloc(sizeof(char)*(len+1+sizeof(unsigned long int)));
63         orig = malloc(sizeof(char)*(len+1));
64
65         salida[len] = '\0';
66         orig[len] = '\0';
67
68         bs = bs_create(len);
69
70         total = 0;
71         while (!feof(fp)) {
72                 i = 0;
73                 i = bs_readblock(fp, data, len, 1);
74                 
75                 total += i;
76                 
77                 bs_solve(data, salida, bs, &k, i);
78
79                 /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
80                 if (argc == 3) {
81                         bs_restore(orig, salida+sizeof(Uint32), k, i);
82                         print_v("Leido     : ", data, i);
83                         print_v("BS        : ", salida+sizeof(Uint32), i);
84                         /*print_v("Restorado : ", orig, i);*/
85                 } else
86                         fwrite(salida, 1, i, stdout);
87         }
88         fclose(fp);
89         bs_destroy(bs);
90
91         /*printf("Total bytes : %ld\n", total);*/
92         free(salida);
93         free(orig);
94         return 0;
95 }
96
97