| /* | |
| minibz2 | |
| libbz2.dll test program. | |
| by Yoshioka Tsuneo ([email protected]) | |
| This file is Public Domain. Welcome any email to me. | |
| usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] | |
| */ | |
| #define BZ_IMPORT | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include "bzlib.h" | |
| #ifdef _WIN32 | |
| #include <io.h> | |
| #endif | |
| #ifdef _WIN32 | |
| #define BZ2_LIBNAME "libbz2-1.0.2.DLL" | |
| #include <windows.h> | |
| static int BZ2DLLLoaded = 0; | |
| static HINSTANCE BZ2DLLhLib; | |
| int BZ2DLLLoadLibrary(void) | |
| { | |
| HINSTANCE hLib; | |
| if(BZ2DLLLoaded==1){return 0;} | |
| hLib=LoadLibrary(BZ2_LIBNAME); | |
| if(hLib == NULL){ | |
| fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME); | |
| return -1; | |
| } | |
| BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion"); | |
| BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen"); | |
| BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen"); | |
| BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread"); | |
| BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite"); | |
| BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush"); | |
| BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose"); | |
| BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror"); | |
| if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen | |
| || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush | |
| || !BZ2_bzclose || !BZ2_bzerror) { | |
| fprintf(stderr,"GetProcAddress failed.\n"); | |
| return -1; | |
| } | |
| BZ2DLLLoaded=1; | |
| BZ2DLLhLib=hLib; | |
| return 0; | |
| } | |
| int BZ2DLLFreeLibrary(void) | |
| { | |
| if(BZ2DLLLoaded==0){return 0;} | |
| FreeLibrary(BZ2DLLhLib); | |
| BZ2DLLLoaded=0; | |
| } | |
| #endif /* WIN32 */ | |
| void usage(void) | |
| { | |
| puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); | |
| } | |
| int main(int argc,char *argv[]) | |
| { | |
| int decompress = 0; | |
| int level = 9; | |
| char *fn_r = NULL; | |
| char *fn_w = NULL; | |
| #ifdef _WIN32 | |
| if(BZ2DLLLoadLibrary()<0){ | |
| fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME); | |
| exit(1); | |
| } | |
| printf("Loading of %s succeeded. Library version is %s.\n", | |
| BZ2_LIBNAME, BZ2_bzlibVersion() ); | |
| #endif | |
| while(++argv,--argc){ | |
| if(**argv =='-' || **argv=='/'){ | |
| char *p; | |
| for(p=*argv+1;*p;p++){ | |
| if(*p=='d'){ | |
| decompress = 1; | |
| }else if('1'<=*p && *p<='9'){ | |
| level = *p - '0'; | |
| }else{ | |
| usage(); | |
| exit(1); | |
| } | |
| } | |
| }else{ | |
| break; | |
| } | |
| } | |
| if(argc>=1){ | |
| fn_r = *argv; | |
| argc--;argv++; | |
| }else{ | |
| fn_r = NULL; | |
| } | |
| if(argc>=1){ | |
| fn_w = *argv; | |
| argc--;argv++; | |
| }else{ | |
| fn_w = NULL; | |
| } | |
| { | |
| int len; | |
| char buff[0x1000]; | |
| char mode[10]; | |
| if(decompress){ | |
| BZFILE *BZ2fp_r = NULL; | |
| FILE *fp_w = NULL; | |
| if(fn_w){ | |
| if((fp_w = fopen(fn_w,"wb"))==NULL){ | |
| printf("can't open [%s]\n",fn_w); | |
| perror("reason:"); | |
| exit(1); | |
| } | |
| }else{ | |
| fp_w = stdout; | |
| } | |
| if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL) | |
| || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){ | |
| printf("can't bz2openstream\n"); | |
| exit(1); | |
| } | |
| while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){ | |
| fwrite(buff,1,len,fp_w); | |
| } | |
| BZ2_bzclose(BZ2fp_r); | |
| if(fp_w != stdout) fclose(fp_w); | |
| }else{ | |
| BZFILE *BZ2fp_w = NULL; | |
| FILE *fp_r = NULL; | |
| if(fn_r){ | |
| if((fp_r = fopen(fn_r,"rb"))==NULL){ | |
| printf("can't open [%s]\n",fn_r); | |
| perror("reason:"); | |
| exit(1); | |
| } | |
| }else{ | |
| fp_r = stdin; | |
| } | |
| mode[0]='w'; | |
| mode[1] = '0' + level; | |
| mode[2] = '\0'; | |
| if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL) | |
| || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){ | |
| printf("can't bz2openstream\n"); | |
| exit(1); | |
| } | |
| while((len=fread(buff,1,0x1000,fp_r))>0){ | |
| BZ2_bzwrite(BZ2fp_w,buff,len); | |
| } | |
| BZ2_bzclose(BZ2fp_w); | |
| if(fp_r!=stdin)fclose(fp_r); | |
| } | |
| } | |
| #ifdef _WIN32 | |
| BZ2DLLFreeLibrary(); | |
| #endif | |
| return 0; | |
| } |