Index: mnzip.c =================================================================== --- mnzip.c (revision 36) +++ mnzip.c (working copy) @@ -458,7 +458,7 @@ 6,5 ( 3) -> 689 */ -static int ibwt(uint8_t *in, unsigned int len, unsigned int start, unsigned int histogram[256], int low_mem, int pretype){ +static int ibwt(uint8_t *in, FILE *fo, unsigned int len, unsigned int start, unsigned int histogram[256], int low_mem, int pretype){ int shift= low_mem*3; int shift2= shift + 8; int mask= (1< 1) { for(i=0; argv[1][i]; i++){ switch(argv[1][i]){ case 'c' : comp=1 ; break; @@ -873,26 +880,36 @@ default : help() ; } } + } - if (! (fi = fopen(argv[2], "rb"))) { + if (argc < 3 || !strcmp(argv[2], "-")) + fi = stdin; + else if (! (fi = fopen(argv[2], "rb"))) { perror("Error opening input file"); exit(1); } + if (argc < 4 || !strcmp(argv[3], "-")) + fo = stdout; + else if (! (fo = fopen(argv[3], "w+b"))) { + perror("Error opening output file"); + exit(1); + } + init_prob(prob); if(comp){ in = malloc(block_size+RADIX_PASSES); out= malloc(2*block_size + 5000);//FIXME int and buffer overfl - fwrite(header, 7, 1, stdout); + fwrite(header, 7, 1, fo); while(!feof(fi)){ block_size= fread(in, 1, block_size, fi); fprintf(stderr, "bwt in %p %p %d\n", out, in, block_size); outsize= compress(out, in, block_size); fprintf(stderr, "bwt out %d\n", outsize); - fwrite(out, outsize, 1, stdout); + fwrite(out, outsize, 1, fo); } }else{ uint8_t tmp[256]; @@ -903,7 +920,7 @@ exit(1); } while(!feof(fi)){ - if(decompress(fi, low_mem)<0) + if(decompress(fi, fo, low_mem)<0) exit(1); } }