#ifndef AFX_ARCDLL_H__911C109D_A40E_4722_A6F7_E3ACB8C2D2E3__INCLUDED_
#define AFX_ARCDLL_H__911C109D_A40E_4722_A6F7_E3ACB8C2D2E3__INCLUDED_
#include "Archiver.h"
class CArcDLL : public CArchiver
{
public:
CArcDLL(
const char* Dllname, // DLL名
const char* Exts, // 対応拡張子
const char* Ecmd, // 解凍用コマンド
const char* Xcmd, // 部分解凍用コマンド
unsigned int Wild=1, // ワイルドカードの形式( 0=no(*) 1=* 2=*.* )
const char* Scmd=NULL )// SFX変換用コマンド
: dll( Dllname ), CArchiver( Exts ), m_Ecmd( Ecmd ),
m_Xcmd( Xcmd ), m_Wild( Wild ), m_Scmd( Scmd ) {}
protected: //-- 派生してもよし
virtual DWORD set_cmpr_mhd()
{ return 0; }
virtual const char* get_cmpr_ext( int method )
{ return cmp_ext(); }
virtual const char* get_cmpr_cmd( int method )
{ return ""; }
virtual void decorate_add_cmpr( kiStr& lst, const char* fname );
virtual void decorate_add_melt( kiStr& lst, const char* fname );
protected: //-- 内部処理
CArcModule dll;
bool v_ver( kiStr& str ){ dll.ver(str); return true; }
bool v_check( const kiPath& aname ){ return dll.chk(aname); }
int v_contents( const kiPath& aname, kiPath& dname ){ return dll.cnt(aname,dname,m_Wild==2?"*.*":"*"); }
bool v_list( const arcname& aname, aflArray& files ){ return dll.lst_dll(aname,files,m_Wild==2?"*.*":"*"); }
int v_load();
int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
kiStr v_name(const char*) const { return dll.name(); }
private:
const char *m_Ecmd, *m_Xcmd, *m_Scmd;
unsigned int m_Wild;
int cmpr( int mhd, kiStr& aname,const kiPath& to,const kiStr& lst );
bool arc2sfx( const kiStr& aname );
};
//------------------------------------------------------------//
class CArcDLL_DotSlash : public CArcDLL
{
// "./-" や "./@" とすることでとりあえず無理矢理圧縮する形式
virtual void decorate_add_cmpr( kiStr& lst, const char* fname );
protected:
CArcDLL_DotSlash(
const char* Dllname,
const char* Exts,
const char* Ecmd,
const char* Xcmd,
unsigned int Wild=1,
const char* Scmd=NULL )
: CArcDLL( Dllname, Exts, Ecmd, Xcmd, Wild, Scmd ) {}
};
//------------------------------------------------------------//
class CArcRar : public CArcDLL
{
public:
CArcRar() : CArcDLL(
"Unrar32.dll",
"rar.",
"-x",
"-x -s -y --" ) {}
private:
kiStr v_name(const char*) const { return "RAR"; }
// 特別に派生
bool v_check( const kiPath& aname );
int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
};
//------------------------------------------------------------//
class CArcUnZip : public CArcDLL
{
public:
CArcUnZip() : CArcDLL(
"UnZip32.dll",
"zip.jar.",
"-x",
"-x --i -o" ) {}
private:
kiStr v_name(const char*) const { return "ZIP"; }
// 特別に派生
int v_melt( const arcname& aname, const kiPath& ddir, const aflArray* files );
};
//------------------------------------------------------------//
class CArcLzh : public CArcDLL
{
public:
CArcLzh() : CArcDLL(
"Unlha32.dll",
"lzh.lha.lzs.",
"x -a1 -jf0",
"x -a1 -jf0 -jyo -p1 -n -gm --",
0,
"s -gw3 -x1" ) {}
private:
kiStr v_name(const char*) const { return "LZH"; }
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
void decorate_add_cmpr( kiStr& lst, const char* fname );
void decorate_add_melt( kiStr& lst, const char* fname );
};
//------------------------------------------------------------//
class CArcZip : public CArcDLL
{
public:
CArcZip() : CArcDLL(
"Zip32j.dll",
"",
NULL,
NULL,
1,
"--sfx" ) {}
private:
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
void decorate_add_cmpr( kiStr& lst, const char* fname );
};
//------------------------------------------------------------//
class CArcCab : public CArcDLL_DotSlash
{
public:
CArcCab() : CArcDLL_DotSlash(
"Cab32.dll",
"cab.",
"-x",
"-x -i -o",
1,
"-f" ) {}
private:
kiStr v_name(const char*) const { return "CAB"; }
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
};
//------------------------------------------------------------//
class CArcTar : public CArcDLL_DotSlash
{
public:
CArcTar() : CArcDLL_DotSlash(
"Tar32.dll",
"tar.tgz.tbz.gz.bz2.z.taz.rpm.deb.ar.xz.lzma.",
"-xvf",
"--check-all-path=1 --display-dialog=0 -xvf",
2 ) {}
private:
#define ARCHIVETYPE_NORMAL 0
#define ARCHIVETYPE_TAR 1
#define ARCHIVETYPE_TARGZ 2
#define ARCHIVETYPE_TARZ 3
#define ARCHIVETYPE_GZ 4
#define ARCHIVETYPE_Z 5
#define ARCHIVETYPE_TARBZ2 6
#define ARCHIVETYPE_BZ2 7
#define ARCHIVETYPE_CPIO 32
#define ARCHIVETYPE_CPIOGZ 32+4
#define ARCHIVETYPE_CPIOZ 32+5
#define ARCHIVETYPE_CPIOBZ2 32+7
#define ARCHIVETYPE_AR 48
#define ARCHIVETYPE_ARGZ 48+4
#define ARCHIVETYPE_ARZ 48+5
#define ARCHIVETYPE_ARBZ2 48+7
kiStr v_name(const char* an) const { switch(dll.arctype(an)) {
case ARCHIVETYPE_GZ: return "GZ";
case ARCHIVETYPE_Z: return "Z";
case ARCHIVETYPE_BZ2: return "BZ2";
case ARCHIVETYPE_TARGZ: return "TAR+GZ";
case ARCHIVETYPE_TARZ: return "TAR+Z";
case ARCHIVETYPE_TARBZ2: return "TAR+BZ2";
case ARCHIVETYPE_CPIOGZ: return kiStr("rpm").isSame(kiPath::ext(an)) ? "RPM" : "CPIO+GZ";
case ARCHIVETYPE_CPIOZ: return "CPIO+Z";
case ARCHIVETYPE_CPIOBZ2:return "CPIO+BZ2";
case ARCHIVETYPE_ARGZ: return "AR+GZ";
case ARCHIVETYPE_ARZ: return "AR+Z";
case ARCHIVETYPE_ARBZ2: return "AR+BZ2";
case ARCHIVETYPE_AR: return "AR";
case ARCHIVETYPE_CPIO: return "CPIO";
default: return "TAR";
}}
const char* get_cmpr_ext( int method );
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
};
//------------------------------------------------------------//
class CArcBga : public CArcDLL_DotSlash
{
public:
CArcBga() : CArcDLL_DotSlash(
"Bga32.dll",
"gza.bza.",
"x -a",
"x -a -i -o",
0,
"s" ) {}
private:
kiStr v_name(const char* an) const { return dll.arctype(an)==2 ? "BZA" : "GZA"; }
const char* get_cmpr_ext( int method );
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
};
//------------------------------------------------------------//
class CArcYz1 : public CArcDLL
{
public:
CArcYz1() : CArcDLL(
"Yz1.dll",
"yz1.",
"x",
"x -y -z -i2 --",
0,
"s" ) {}
private:
kiStr v_name(const char*) const { return "YZ1"; }
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
};
//------------------------------------------------------------//
class CArcArj : public CArcDLL
{
public:
CArcArj() : CArcDLL
( "Unarj32j.dll", "arj.", "x -jyc", "x -y -p -hm -i -!" ) {}
private:
kiStr v_name(const char*) const { return "ARJ"; }
};
//------------------------------------------------------------//
class CArcGca : public CArcDLL
{
public:
CArcGca() : CArcDLL
( "UnGCA32.dll", "gca.", "e -sx1", "ex -xx1 -sx0 -yx0" ) {}
private:
kiStr v_name(const char*) const { return "GCA"; }
};
//------------------------------------------------------------//
class CArc7z : public CArcDLL_DotSlash
{
public:
CArc7z() : CArcDLL_DotSlash(
"7-zip32.dll",
"7z.zip.jar.",
"x --",
"x -y -hide --",
1,
"" ) {}
private:
kiStr v_name(const char* an) const { return dll.arctype(an)==1 ? "ZIP" : "7Z"; }
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
const char* get_cmpr_ext( int method );
virtual int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
bool m_SfxMode;
};
//------------------------------------------------------------//
class CArc7zZip : public CArcDLL_DotSlash
{
public:
CArc7zZip() : CArcDLL_DotSlash(
"7-zip32.dll",
"",NULL,NULL,1,"" ) {}
private:
DWORD set_cmpr_mhd();
const char* get_cmpr_cmd( int method );
virtual bool v_ver( kiStr& ){return false;}//CArc7zに任せる
virtual int v_compress( const kiPath& base, const wfdArray& files, const kiPath& ddir, int method, bool sfx );
};
//------------------------------------------------------------//
#endif