diff options
author | Julian Seward <jseward@acm.org> | 1998-08-23 22:13:13 +0200 |
---|---|---|
committer | Julian Seward <jseward@acm.org> | 1998-08-23 22:13:13 +0200 |
commit | 977101ad5f833f5c0a574bfeea408e5301a6b052 (patch) | |
tree | fc1e8fed202869c116cbf6b8c362456042494a0a /dlltest.c | |
parent | 1eb67a9d8f7f05ae310bc9ef297d176f3a3f8a37 (diff) | |
download | bzip2-977101ad5f833f5c0a574bfeea408e5301a6b052.tar.gz bzip2-977101ad5f833f5c0a574bfeea408e5301a6b052.tar.bz2 bzip2-977101ad5f833f5c0a574bfeea408e5301a6b052.zip |
bzip2-0.9.0cbzip2-0.9.0c
Diffstat (limited to 'dlltest.c')
-rw-r--r-- | dlltest.c | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/dlltest.c b/dlltest.c new file mode 100644 index 0000000..ee81bcd --- /dev/null +++ b/dlltest.c | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | minibz2 | ||
3 | libbz2.dll test program. | ||
4 | by Yoshioka Tsuneo(QWF00133@nifty.ne.jp/tsuneo-y@is.aist-nara.ac.jp) | ||
5 | This file is Public Domain. | ||
6 | welcome any email to me. | ||
7 | |||
8 | usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] | ||
9 | */ | ||
10 | |||
11 | #define BZ_IMPORT | ||
12 | #include "bzlib.h" | ||
13 | #include <stdio.h> | ||
14 | #include <stdlib.h> | ||
15 | #ifdef _WIN32 | ||
16 | #include <io.h> | ||
17 | #endif | ||
18 | |||
19 | |||
20 | #ifdef _WIN32 | ||
21 | |||
22 | #include <windows.h> | ||
23 | static int BZ2DLLLoaded = 0; | ||
24 | static HINSTANCE BZ2DLLhLib; | ||
25 | int BZ2DLLLoadLibrary(void) | ||
26 | { | ||
27 | HINSTANCE hLib; | ||
28 | |||
29 | if(BZ2DLLLoaded==1){return 0;} | ||
30 | hLib=LoadLibrary("libbz2.dll"); | ||
31 | if(hLib == NULL){ | ||
32 | puts("Can't load libbz2.dll"); | ||
33 | return -1; | ||
34 | } | ||
35 | BZ2DLLLoaded=1; | ||
36 | BZ2DLLhLib=hLib; | ||
37 | bzlibVersion=GetProcAddress(hLib,"bzlibVersion"); | ||
38 | bzopen=GetProcAddress(hLib,"bzopen"); | ||
39 | bzdopen=GetProcAddress(hLib,"bzdopen"); | ||
40 | bzread=GetProcAddress(hLib,"bzread"); | ||
41 | bzwrite=GetProcAddress(hLib,"bzwrite"); | ||
42 | bzflush=GetProcAddress(hLib,"bzflush"); | ||
43 | bzclose=GetProcAddress(hLib,"bzclose"); | ||
44 | bzerror=GetProcAddress(hLib,"bzerror"); | ||
45 | return 0; | ||
46 | |||
47 | } | ||
48 | int BZ2DLLFreeLibrary(void) | ||
49 | { | ||
50 | if(BZ2DLLLoaded==0){return 0;} | ||
51 | FreeLibrary(BZ2DLLhLib); | ||
52 | BZ2DLLLoaded=0; | ||
53 | } | ||
54 | #endif /* WIN32 */ | ||
55 | |||
56 | void usage(void) | ||
57 | { | ||
58 | puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); | ||
59 | } | ||
60 | |||
61 | void main(int argc,char *argv[]) | ||
62 | { | ||
63 | int decompress = 0; | ||
64 | int level = 9; | ||
65 | char *fn_r,*fn_w; | ||
66 | |||
67 | #ifdef _WIN32 | ||
68 | if(BZ2DLLLoadLibrary()<0){ | ||
69 | puts("can't load dll"); | ||
70 | exit(1); | ||
71 | } | ||
72 | #endif | ||
73 | while(++argv,--argc){ | ||
74 | if(**argv =='-' || **argv=='/'){ | ||
75 | char *p; | ||
76 | |||
77 | for(p=*argv+1;*p;p++){ | ||
78 | if(*p=='d'){ | ||
79 | decompress = 1; | ||
80 | }else if('1'<=*p && *p<='9'){ | ||
81 | level = *p - '0'; | ||
82 | }else{ | ||
83 | usage(); | ||
84 | exit(1); | ||
85 | } | ||
86 | } | ||
87 | }else{ | ||
88 | break; | ||
89 | } | ||
90 | } | ||
91 | if(argc>=1){ | ||
92 | fn_r = *argv; | ||
93 | argc--;argv++; | ||
94 | }else{ | ||
95 | fn_r = NULL; | ||
96 | } | ||
97 | if(argc>=1){ | ||
98 | fn_w = *argv; | ||
99 | argc--;argv++; | ||
100 | }else{ | ||
101 | fn_w = NULL; | ||
102 | } | ||
103 | { | ||
104 | int len; | ||
105 | char buff[0x1000]; | ||
106 | char mode[10]; | ||
107 | |||
108 | if(decompress){ | ||
109 | BZFILE *BZ2fp_r; | ||
110 | FILE *fp_w; | ||
111 | |||
112 | if(fn_w){ | ||
113 | if((fp_w = fopen(fn_w,"wb"))==NULL){ | ||
114 | printf("can't open [%s]\n",fn_w); | ||
115 | perror("reason:"); | ||
116 | exit(1); | ||
117 | } | ||
118 | }else{ | ||
119 | fp_w = stdout; | ||
120 | } | ||
121 | if((BZ2fp_r == NULL && (BZ2fp_r = bzdopen(fileno(stdin),"rb"))==NULL) | ||
122 | || (BZ2fp_r != NULL && (BZ2fp_r = bzopen(fn_r,"rb"))==NULL)){ | ||
123 | printf("can't bz2openstream\n"); | ||
124 | exit(1); | ||
125 | } | ||
126 | while((len=bzread(BZ2fp_r,buff,0x1000))>0){ | ||
127 | fwrite(buff,1,len,fp_w); | ||
128 | } | ||
129 | bzclose(BZ2fp_r); | ||
130 | if(fp_w != stdout) fclose(fp_w); | ||
131 | }else{ | ||
132 | BZFILE *BZ2fp_w; | ||
133 | FILE *fp_r; | ||
134 | |||
135 | if(fn_r){ | ||
136 | if((fp_r = fopen(fn_r,"rb"))==NULL){ | ||
137 | printf("can't open [%s]\n",fn_r); | ||
138 | perror("reason:"); | ||
139 | exit(1); | ||
140 | } | ||
141 | }else{ | ||
142 | fp_r = stdin; | ||
143 | } | ||
144 | mode[0]='w'; | ||
145 | mode[1] = '0' + level; | ||
146 | mode[2] = '\0'; | ||
147 | |||
148 | if((fn_w == NULL && (BZ2fp_w = bzdopen(fileno(stdout),mode))==NULL) | ||
149 | || (fn_w !=NULL && (BZ2fp_w = bzopen(fn_w,mode))==NULL)){ | ||
150 | printf("can't bz2openstream\n"); | ||
151 | exit(1); | ||
152 | } | ||
153 | while((len=fread(buff,1,0x1000,fp_r))>0){ | ||
154 | bzwrite(BZ2fp_w,buff,len); | ||
155 | } | ||
156 | bzclose(BZ2fp_w); | ||
157 | if(fp_r!=stdin)fclose(fp_r); | ||
158 | } | ||
159 | } | ||
160 | #ifdef _WIN32 | ||
161 | BZ2DLLFreeLibrary(); | ||
162 | #endif | ||
163 | } | ||