Artifact Content

Not logged in

Artifact a694505ce13887baa7c5e3fd9a367335f1bf4637


     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