From 581c6c4f1d70b1928ae2946aa0482a4d36ea56d9 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Mon, 28 Jun 2004 04:43:21 +0000 Subject: [PATCH] Agrego manejo de flags en el header, en total se puden usar hasta 8 flahs. 2 usadas actualmente y 6 RESERVED --- src/blocksorting/bs.c | 13 ++++------- src/jacu.c | 53 +++++++++++++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/blocksorting/bs.c b/src/blocksorting/bs.c index 1b7c0e3..a71e261 100644 --- a/src/blocksorting/bs.c +++ b/src/blocksorting/bs.c @@ -313,6 +313,11 @@ int bs_readblock(FILE *fp, char *data, Uint32 pagesize, int usar_dic) while ((!feof(fp)) && ((i+buffer_pos) < pagesize)) { c = fgetc(fp); + if (usar_dic != 1) { + data[i++] = c; + continue; + } + if (c == ESCAPE_CHARACTER) { data[i++] = c; data[i++] = 0xF; @@ -322,11 +327,6 @@ int bs_readblock(FILE *fp, char *data, Uint32 pagesize, int usar_dic) hint = check_hint(c); - if (usar_dic != 1) { - data[i++] = c; - continue; - } - switch (hint) { case -1: /* No hay hints, vacio el buffer y luego saco el c */ @@ -382,14 +382,11 @@ char *bs_finalblock(char *data, Uint32 len, Uint32 *new_size) } else { /* Va una palabra!! */ tmp = data[i]; - printf("%d\n", data[i]); size += dic[(size_t)tmp].len; out = (char *)realloc(out, size*sizeof(char)); for(j=0; jzflag) - shuff_scanfreq_chunk(shuff, "\001", 1); - else - shuff_scanfreq_chunk(shuff, "\000", 1); + file_flags = flag_on(file_flags, FLAGS_ZG); + if (flags->rflag) + file_flags = flag_on(file_flags, FLAGS_WS); + + shuff_scanfreq_chunk(shuff, &file_flags, 1); total = 0; while (!feof(fp)) { @@ -219,7 +247,7 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags return 0; } -int descomprimir(char *src, char *dst, t_Flags *flags) +int descomprimir(char *src, char *dst) { /* Descomprimo */ FILE *fp_out; @@ -227,7 +255,7 @@ int descomprimir(char *src, char *dst, t_Flags *flags) unsigned char *block, *mtf, *orig; unsigned char *z; Uint32 z_len=0,moredata = 0,decoded = 0; - unsigned char use_zg = 0,retbytes = 0; + unsigned char file_flags = 0,retbytes = 0; HUFF_STATE *shuff; /* Inicializo el descompresor */ @@ -240,7 +268,7 @@ int descomprimir(char *src, char *dst, t_Flags *flags) if (!(moredata = shuff_decode_chunk(shuff,(char*)&block_size,sizeof(Uint32),&decoded))) return 1; /* Descomprimo byte que indica si se usa ZG */ - if (!(moredata = shuff_decode_chunk(shuff, &use_zg, 1, &decoded))) return 1; + if (!(moredata = shuff_decode_chunk(shuff, &file_flags, 1, &decoded))) return 1; /* Creo buffers */ block = malloc(block_size*sizeof(unsigned char)+sizeof(Uint32)); @@ -255,7 +283,7 @@ int descomprimir(char *src, char *dst, t_Flags *flags) moredata = shuff_decode_chunk(shuff,z,z_len,&decoded); /* Veo si se uso Zero Grouping para comprimir */ - if (use_zg) { + if (is_flags_on(file_flags, FLAGS_ZG)) { ZG zg; unsigned char zgbuffer[255]; unsigned char zgbyte = 0; @@ -298,9 +326,10 @@ int descomprimir(char *src, char *dst, t_Flags *flags) /* Obtengo el chunk original aplicando BS Inverso */ bs_restore(orig, mtf+sizeof(Uint32), k, decoded - sizeof(Uint32)); - /* XXX AHORA METO EL FLAG EN EL ARCHIVO; DON'T WORRRRRYYYYYYY XXX */ - if (flags->rflag == 1) - orig = bs_finalblock(orig, decoded-sizeof(Uint32), &decoded); + decoded -= sizeof(Uint32); + if (is_flags_on(file_flags, FLAGS_WS)) { + orig = bs_finalblock(orig, decoded, &decoded); + } fwrite(orig, decoded, sizeof(unsigned char), fp_out); free(mtf); -- 2.43.0