home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1999 October / VPR9910A.BIN / OLS / bz2l003 / bz2l003.lzh / BZ2LIB / MINIBZ2.C < prev    next >
C/C++ Source or Header  |  1998-06-02  |  2KB  |  117 lines

  1. #ifdef _WIN32
  2. #include "bz2dll.h"
  3. #else
  4. #include "bz2lib.h"
  5. #endif
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. void usage(void)
  11. {
  12.     puts("usage: minibz2 [-d] [-{1,2,..9}]");
  13. }
  14.  
  15. void main(int argc,char *argv[])
  16. {
  17.     int decompress = 0;
  18.     int level = 9;
  19.     char *fn_r,*fn_w;
  20.  
  21. #ifdef _WIN32
  22.     if(BZ2DLLLoadLibrary()<0){
  23.         puts("can't load dll");
  24.         exit(1);
  25.     }
  26. #endif
  27.     while(++argv,--argc){
  28.         if(**argv =='-'){
  29.             char *p;
  30.  
  31.             for(p=*argv+1;*p;p++){
  32.                 if(*p=='d'){
  33.                     decompress = 1;
  34.                 }else if('1'<=*p && *p<='9'){
  35.                     level = *p - '0';
  36.                 }else{
  37.                     usage();
  38.                     exit(1);
  39.                 }
  40.             }
  41.         }else{
  42.             break;
  43.         }
  44.     }
  45.     if(argc>=1){
  46.         fn_r = *argv;
  47.         argc--;argv++;
  48.     }else{
  49.         fn_r = NULL;
  50.     }
  51.     if(argc>=1){
  52.         fn_w = *argv;
  53.         argc--;argv++;
  54.     }else{
  55.         fn_w = NULL;
  56.     }
  57.     {
  58.         int len;
  59.         char buff[0x1000];
  60.         char mode[10];
  61.  
  62.         if(decompress){
  63.             BZ2FILE *BZ2fp_r;
  64.             FILE *fp_w;
  65.  
  66.             if(fn_w){
  67.                 if((fp_w = fopen(fn_w,"wb"))==NULL){
  68.                     printf("can't open [%s]\n",fn_w);
  69.                     perror("reason:");
  70.                     exit(1);
  71.                 }
  72.             }else{
  73.                 fp_w = stdout;
  74.             }
  75.             
  76.             if((BZ2fp_r = BZ2Open(fn_r,"r"))==NULL){
  77.                 printf("can't bz2openstream\n");
  78.                 exit(1);
  79.             }
  80.             while((len=BZ2Read(BZ2fp_r,buff,0x1000))>0){
  81.                 fwrite(buff,1,len,fp_w);
  82.             }
  83.             BZ2Close(BZ2fp_r);
  84.             if(fp_w != stdout) fclose(fp_w);
  85.         }else{
  86.             BZ2FILE *BZ2fp_w;
  87.             FILE *fp_r;
  88.  
  89.             if(fn_r){
  90.                 if((fp_r = fopen(fn_r,"rb"))==NULL){
  91.                     printf("can't open [%s]\n",fn_r);
  92.                     perror("reason:");
  93.                     exit(1);
  94.                 }
  95.             }else{
  96.                 fp_r = stdin;
  97.             }
  98.             mode[0]='w';
  99.             mode[1] = '0' + level;
  100.             mode[2] = '\0';
  101.  
  102.             if((BZ2fp_w = BZ2Open(fn_w,mode))==NULL){
  103.                 printf("can't bz2openstream\n");
  104.                 exit(1);
  105.             }
  106.             while((len=fread(buff,1,0x1000,fp_r))>0){
  107.                 BZ2Write(BZ2fp_w,buff,len);
  108.             }
  109.             BZ2Close(BZ2fp_w);
  110.             if(fp_r!=stdin)fclose(fp_r);
  111.         }
  112.     }
  113. #ifdef _WIN32
  114.     BZ2DLLFreeLibrary();
  115. #endif
  116. }
  117.