1 #ifndef AFX_ARCDLL_H__911C109D_A40E_4722_A6F7_E3ACB8C2D2E3__INCLUDED_
2 #define AFX_ARCDLL_H__911C109D_A40E_4722_A6F7_E3ACB8C2D2E3__INCLUDED_
3
4 #include "Archiver.h"
5
6 class CArcDLL : public CArchiver
7 {
8 public:
9 CArcDLL(
10 const char* Dllname, // DLL名
11 const char* Exts, // 対応拡張子
12 const char* Ecmd, // 解凍用コマンド
13 const char* Xcmd, // 部分解凍用コマンド
14 unsigned int Wild=1, // ワイルドカードの形式( 0=no(*) 1=* 2=*.* )
15 const char* Scmd=NULL )// SFX変換用コマンド
16 : dll( Dllname ), CArchiver( Exts ), m_Ecmd( Ecmd ),
17 m_Xcmd( Xcmd ), m_Wild( Wild ), m_Scmd( Scmd ) {}
18
19 protected: //-- 派生してもよし
20 virtual DWORD set_cmpr_mhd()
21 { return 0; }
22 virtual const char* get_cmpr_ext( int method )
23 { return cmp_ext(); }
24 virtual const char* get_cmpr_cmd( int method )
25 { return ""; }
26 virtual void decorate_add_cmpr( kiStr& lst, const char* fname );
27 virtual void decorate_add_melt( kiStr& lst, const char* fname );
28
29 protected: //-- 内部処理
30 CArcModule dll;
31 bool v_ver( kiStr& str ){ dll.ver(str); return true; }
32 bool v_check( const kiPath& aname ){ return dll.chk(aname); }
33 int v_contents( const kiPath& aname, kiPath& dname ){ return dll.cnt(aname,dname,m_Wild==2?"*.*":"*"); }
34 bool v_list( const arcname& aname, aflArray& files ){ return dll.lst_dll(aname,files,m_Wild==2?"*.*":"*"); }
35
36 int v_load();
37 int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
38 int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
39 kiStr v_name(const char*) const { return dll.name(); }
40
41 private:
42 const char *m_Ecmd, *m_Xcmd, *m_Scmd;
43 unsigned int m_Wild;
44 int cmpr( int mhd, kiStr& aname,const kiPath& to,const kiStr& lst );
45 bool arc2sfx( const kiStr& aname );
46 };
47
48 //------------------------------------------------------------//
49
50 class CArcDLL_DotSlash : public CArcDLL
51 {
52 // "./-" や "./@" とすることでとりあえず無理矢理圧縮する形式
53 virtual void decorate_add_cmpr( kiStr& lst, const char* fname );
54
55 protected:
56 CArcDLL_DotSlash(
57 const char* Dllname,
58 const char* Exts,
59 const char* Ecmd,
60 const char* Xcmd,
61 unsigned int Wild=1,
62 const char* Scmd=NULL )
63 : CArcDLL( Dllname, Exts, Ecmd, Xcmd, Wild, Scmd ) {}
64 };
65
66 //------------------------------------------------------------//
67
68 class CArcRar : public CArcDLL
69 {
70 public:
71 CArcRar() : CArcDLL(
72 "Unrar32.dll",
73 "rar.",
74 "-x",
75 "-x -s -y --" ) {}
76
77 private:
78 kiStr v_name(const char*) const { return "RAR"; }
79 // 特別に派生
80 bool v_check( const kiPath& aname );
81 int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
82 };
83
84 //------------------------------------------------------------//
85
86 class CArcUnZip : public CArcDLL
87 {
88 public:
89 CArcUnZip() : CArcDLL(
90 "UnZip32.dll",
91 "zip.jar.",
92 "-x",
93 "-x --i -o" ) {}
94 private:
95 kiStr v_name(const char*) const { return "ZIP"; }
96 // 特別に派生
97 int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
98 };
99
100 //------------------------------------------------------------//
101
102 class CArcLzh : public CArcDLL
103 {
104 public:
105 CArcLzh() : CArcDLL(
106 "Unlha32.dll",
107 "lzh.lha.lzs.",
108 "x -a1 -jf0",
109 "x -a1 -jf0 -jyo -p1 -n -gm --",
110 0,
111 "s -gw3 -x1" ) {}
112 private:
113 kiStr v_name(const char*) const { return "LZH"; }
114 DWORD set_cmpr_mhd();
115 const char* get_cmpr_cmd( int method );
116 void decorate_add_cmpr( kiStr& lst, const char* fname );
117 void decorate_add_melt( kiStr& lst, const char* fname );
118 };
119
120 //------------------------------------------------------------//
121
122 class CArcZip : public CArcDLL
123 {
124 public:
125 CArcZip() : CArcDLL(
126 "Zip32j.dll",
127 "",
128 NULL,
129 NULL,
130 1,
131 "--sfx" ) {}
132 private:
133 DWORD set_cmpr_mhd();
134 const char* get_cmpr_cmd( int method );
135 void decorate_add_cmpr( kiStr& lst, const char* fname );
136 };
137
138 //------------------------------------------------------------//
139
140 class CArcCab : public CArcDLL_DotSlash
141 {
142 public:
143 CArcCab() : CArcDLL_DotSlash(
144 "Cab32.dll",
145 "cab.",
146 "-x",
147 "-x -i -o",
148 1,
149 "-f" ) {}
150 private:
151 kiStr v_name(const char*) const { return "CAB"; }
152 DWORD set_cmpr_mhd();
153 const char* get_cmpr_cmd( int method );
154 };
155
156 //------------------------------------------------------------//
157
158 class CArcTar : public CArcDLL_DotSlash
159 {
160 public:
161 CArcTar() : CArcDLL_DotSlash(
162 "Tar32.dll",
163 "tar.tgz.tbz.gz.bz2.z.taz.rpm.deb.ar.xz.lzma.",
164 "-xvf",
165 "--check-all-path=1 --display-dialog=0 -xvf",
166 2 ) {}
167 private:
168 #define ARCHIVETYPE_NORMAL 0
169 #define ARCHIVETYPE_TAR 1
170 #define ARCHIVETYPE_TARGZ 2
171 #define ARCHIVETYPE_TARZ 3
172 #define ARCHIVETYPE_GZ 4
173 #define ARCHIVETYPE_Z 5
174 #define ARCHIVETYPE_TARBZ2 6
175 #define ARCHIVETYPE_BZ2 7
176
177 #define ARCHIVETYPE_CPIO 32
178 #define ARCHIVETYPE_CPIOGZ 32+4
179 #define ARCHIVETYPE_CPIOZ 32+5
180 #define ARCHIVETYPE_CPIOBZ2 32+7
181
182 #define ARCHIVETYPE_AR 48
183 #define ARCHIVETYPE_ARGZ 48+4
184 #define ARCHIVETYPE_ARZ 48+5
185 #define ARCHIVETYPE_ARBZ2 48+7
186 kiStr v_name(const char* an) const { switch(dll.arctype(an)) {
187 case ARCHIVETYPE_GZ: return "GZ";
188 case ARCHIVETYPE_Z: return "Z";
189 case ARCHIVETYPE_BZ2: return "BZ2";
190 case ARCHIVETYPE_TARGZ: return "TAR+GZ";
191 case ARCHIVETYPE_TARZ: return "TAR+Z";
192 case ARCHIVETYPE_TARBZ2: return "TAR+BZ2";
193 case ARCHIVETYPE_CPIOGZ: return kiStr("rpm").isSame(kiPath::ext(an)) ? "RPM" : "CPIO+GZ";
194 case ARCHIVETYPE_CPIOZ: return "CPIO+Z";
195 case ARCHIVETYPE_CPIOBZ2:return "CPIO+BZ2";
196 case ARCHIVETYPE_ARGZ: return "AR+GZ";
197 case ARCHIVETYPE_ARZ: return "AR+Z";
198 case ARCHIVETYPE_ARBZ2: return "AR+BZ2";
199 case ARCHIVETYPE_AR: return "AR";
200 case ARCHIVETYPE_CPIO: return "CPIO";
201 default: return "TAR";
202 }}
203 const char* get_cmpr_ext( int method );
204 DWORD set_cmpr_mhd();
205 const char* get_cmpr_cmd( int method );
206 };
207
208 //------------------------------------------------------------//
209
210 class CArcBga : public CArcDLL_DotSlash
211 {
212 public:
213 CArcBga() : CArcDLL_DotSlash(
214 "Bga32.dll",
215 "gza.bza.",
216 "x -a",
217 "x -a -i -o",
218 0,
219 "s" ) {}
220 private:
221 kiStr v_name(const char* an) const { return dll.arctype(an)==2 ? "BZA" : "GZA"; }
222 const char* get_cmpr_ext( int method );
223 DWORD set_cmpr_mhd();
224 const char* get_cmpr_cmd( int method );
225 };
226
227 //------------------------------------------------------------//
228
229 class CArcYz1 : public CArcDLL
230 {
231 public:
232 CArcYz1() : CArcDLL(
233 "Yz1.dll",
234 "yz1.",
235 "x",
236 "x -y -z -i2 --",
237 0,
238 "s" ) {}
239 private:
240 kiStr v_name(const char*) const { return "YZ1"; }
241 DWORD set_cmpr_mhd();
242 const char* get_cmpr_cmd( int method );
243 };
244
245 //------------------------------------------------------------//
246
247 class CArcArj : public CArcDLL
248 {
249 public:
250 CArcArj() : CArcDLL
251 ( "Unarj32j.dll", "arj.", "x -jyc", "x -y -p -hm -i -!" ) {}
252
253 private:
254 kiStr v_name(const char*) const { return "ARJ"; }
255 };
256
257 //------------------------------------------------------------//
258
259 class CArcGca : public CArcDLL
260 {
261 public:
262 CArcGca() : CArcDLL
263 ( "UnGCA32.dll", "gca.", "e -sx1", "ex -xx1 -sx0 -yx0" ) {}
264
265 private:
266 kiStr v_name(const char*) const { return "GCA"; }
267 };
268
269 //------------------------------------------------------------//
270
271 class CArc7z : public CArcDLL_DotSlash
272 {
273 public:
274 CArc7z() : CArcDLL_DotSlash(
275 "7-zip32.dll",
276 "7z.zip.jar.",
277 "x --",
278 "x -y -hide --",
279 1,
280 "" ) {}
281 private:
282 kiStr v_name(const char* an) const { return dll.arctype(an)==1 ? "ZIP" : "7Z"; }
283 DWORD set_cmpr_mhd();
284 const char* get_cmpr_cmd( int method );
285 const char* get_cmpr_ext( int method );
286 virtual int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
287 bool m_SfxMode;
288 };
289
290 //------------------------------------------------------------//
291
292 class CArc7zZip : public CArcDLL_DotSlash
293 {
294 public:
295 CArc7zZip() : CArcDLL_DotSlash(
296 "7-zip32.dll",
297 "",NULL,NULL,1,"" ) {}
298 private:
299 DWORD set_cmpr_mhd();
300 const char* get_cmpr_cmd( int method );
301 virtual bool v_ver( kiStr& ){return false;}//CArc7zに任せる
302 virtual int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
303 };
304
305 //------------------------------------------------------------//
306
307 #endif