int dflag = 0;
int tflag = 0;
long int volumesize = 0;
- int lastchunk,i,j,ch;
+ int lastchunk,i,j,ch,decoded = 0;
while ((ch = getopt(argc, argv, "cdt:")) != -1) {
if (cflag == 1) {
/* Inicio un compresor huffman estatico por chunks */
- if ((shuff = shuff_init_static_bychunk(argv[optind+1],volumesize*1024)) == NULL) return 0;
+ if ((shuff = shuff_init_encoder_bychunk(argv[optind+1],volumesize*1024)) == NULL) return 0;
/* Comprimo por chunks */
if ((fp = fopen(argv[optind],"rb")) == NULL) return 1;
i++;
}
/* Comprimo el chunk con huffman estatico */
- shuff_encode_chunk(shuff,chunk,i,0);
+ shuff_scanfreq_chunk(shuff,chunk,i);
}
/* Le indico al huffman que efectivamente comprima los chunks */
shuff_encode_file(shuff);
- /* De init shuffman by chunks */
- shuff_deinit_static_bychunk(shuff);
+ /* De init encoder */
+ shuff_deinit_encoder(shuff);
/* Free mem allocated by main */
free(shuff);
}
if (dflag == 1) {
- /* Descomprimo */
- return shuff_decode_file(argv[optind],argv[optind+1]);
+ /* Init decoder */
+ shuff = shuff_init_decoder(argv[optind],NULL);
+ fp = fopen(argv[optind+1],"w");
+
+ /* Gimme chunks till last one */
+ while (shuff_decode_chunk(shuff,chunk,4,&decoded))
+ fwrite(chunk,decoded,1,fp);
+
+ /* Last chunk written alone */
+ fwrite(chunk,decoded,1,fp);
+ fclose(fp);
+
+ /* Deinit decoder */
+ shuff_deinit_decoder(shuff);
+ free(shuff);
}
return 0;