home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / zkuste / delphi / kompon / d5 / cak / CAKINST.ZIP / cmarc139.lzh / TAR32.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-07-16  |  14.9 KB  |  380 lines

  1. // ô¥ìçâAü[âJâCâoâRâôâ|ü[âlâôâg for Delphi/C++Builder
  2. // Common Archivers Component for Delphi/C++Builder
  3. // Copyright(C) NORG1964/M.Yoneda 1997,1998,1999,2000
  4. //
  5. // TAR32è╓ÿAâéâWâàü[âï    TAR32.PAS
  6. //
  7. // v1.10:Åëè·î÷èJâoü[âWâçâô
  8. // v1.11:èeâNâëâXé╠âüâ\âbâhÉΘî╛é╠îδéΦé≡Æ∙É│
  9. //       òsùvò╧Éöé╠ÉΘî╛é≡ìφÅ£
  10. // v1.12:TArchiveFile é╔ Output/OutputSize âvâìâpâeâBé≡Æ╟ë┴
  11. //       tgz/zip î`Ä«é╠ê│ÅkâîâxâïâIâvâVâçâô( jm )é≡Ä└æò
  12. //       tar ïNô«îπé╔Ä⌐ò¬é╔âtâHü[âJâXé≡û▀é╖Åêù¥é≡Æ╟ë┴
  13. //       ôαòöâüâ\âbâhé╠Ä└æòé≡Äßè▒ò╧ìX
  14. // v1.13:uses É▀é⌐éτòsÄgùpâåâjâbâg Forms é≡èOé╡é╜ü⌐é╚é║é⌐ò£èêé╡é─éóé╜
  15. //       ôαòöâüâ\âbâhé╠Ä└æòé≡Äßè▒ò╧ìX
  16. // v1.14:TGZ é╠Ä⌐î╚ë≡ôÇî`Ä«ì∞ɼï@ö\âTâ|ü[âgèJÄnü|TAR32.DLL 0.31 ê╚ì~é¬òKùv
  17. //       BZ2 î`Ä«Åæî╔é╠âTâ|ü[âgèJÄnü|TAR32.DLL 0.40 ê╚ì~é¬òKùv
  18. // v1.16:û{ôûé╔Ä⌐î╚ë≡ôÇÅæî╔é≡ì∞ɼé┼é½éΘéµéñé╔é╡é╜
  19. //       Ä⌐î╚ë≡ôÇÅæî╔é╠ö╗ÆΦé≡ò╧ìX
  20. // v1.17:LoadDll/FreeDll/IsXXXArchive é╠ì\ɼò╧ìX
  21. // v1.20:Ä⌐î╚ë≡ôÇÅæî╔ì∞ɼâpâXÄwÆΦï@ö\Æ╟ë┴
  22. // v1.22:îoë▀âCâxâôâgâTâ|ü[âgé≡Æ╟ë┴
  23. // v1.23:CheckArchive âüâ\âbâhé≡Æ╟ë┴
  24. //       Äσé╚âüâ\âbâhé╠ëⁿû╝
  25. // v1.25:ZIP32J.DLLé┼é╠û╝æOé╔"["é≡è▄é▐âtâ@âCâïé╓é╠æ╬ë₧
  26. // v1.28:âüâéâèôWèJï@ö\é╠âTâ|ü[âgé≡Æ╟ë┴
  27. //          CheckArchive âüâ\âbâhé╠û▀éΦÆlé╠î^é≡ò╧ìX
  28. // v1.30:èeâüâ\âbâhé╠ FileList ê°Éöé╠î^é≡ò╧ìX
  29. // v1.32:IsSetOwnerWinow/KillOwnerWindow é╠Ä└æòé≡ò╧ìX
  30. // v1.35:TTar32.Tar é¬ CmdLine ê°Éöé≡î⌐é─éóé╚é⌐é┴é╜òsï∩ìçé╠ÅCÉ│
  31. // v1.38:DLL é⌐éτé╠âGâôâgâèâ|âCâôâgé╠ĵô╛ò√û@é≡ò╧ìXé╡é╜
  32. //
  33. unit TAR32;
  34.  
  35. interface
  36.  
  37. uses Windows,SysUtils,Classes,Archives;
  38.  
  39. const
  40.     //    tar è╓ÿAé╠Åæî╔î`Ä«Äφò╩
  41.     ARCHIVETYPE_TAR      = 1;    //    TARî`Ä«
  42.     ARCHIVETYPE_TARGZ    = 2;    //    GZ(TGZ)î`Ä«
  43.     ARCHIVETYPE_TARZ     = 3;    //    TAR.Z(TAZ)î`Ä«
  44.     ARCHIVETYPE_GZ       = 4;    //    GZî`Ä«
  45.     ARCHIVETYPE_Z        = 5;    //    Zî`Ä«
  46.     ARCHIVETYPE_TARBZ2   = 6;    //    TAR.BZ2î`Ä«
  47.     ARCHIVETYPE_BZ2      = 7;    //    BZ2î`Ä«
  48.  
  49. type
  50.     TTar32 = class( TArchiver )
  51.     protected
  52.         class procedure LoadDll; override;
  53.         class procedure FreeDll; override;
  54.  
  55.     protected
  56.         function BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String;
  57.  
  58.         function FindOpen ( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; override;
  59.         function FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer; override;
  60.         function FindNext ( hArc:THArc;var IndivisualInfo:TIndivisualInfo                 ):integer; override;
  61.         function FindClose( hArc:THArc                                                    ):integer; override;
  62.  
  63.     public
  64.         function tar( Handle:HWND;CmdLine:string;var Output:string ):integer;
  65.         function UnpackFiles  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  66.         function PackFiles    ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  67. //        function RemoveItems  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  68.         function MakeSfx      ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String                                           ;var Output:string ):Integer; override;
  69.         function UnpackToMem  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD         ):Integer; override;
  70.         function CheckArchive ( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD; override;
  71.  
  72.         function SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean; override;
  73.         function KillOwnerWindowEx( Handle:HWND                          ):boolean; override;
  74.     end;
  75.  
  76.     TTgz32 = class( TTar32 )
  77.     end;
  78.  
  79.     TBZ232 = class( TTar32 )
  80.     end;
  81.  
  82.     function IsTarArchive( ArchiveFileName:string ):TArchiverType;
  83.  
  84. implementation
  85.  
  86. uses
  87.     Filters;
  88.  
  89. //---------------------------------------------------------------------
  90. var
  91.     FArchiver:        TArchiverDLL;
  92.  
  93. procedure LoadDll;
  94. begin
  95.     if Assigned( FArchiver ) then exit;
  96.     FArchiver := TArchiverDll.Create( 'tar/tgz/taz/bz2 î`Ä«Åæî╔','TAR32.DLL','Tar' );
  97.     FArchiver.LoadDLL;
  98. end;
  99.  
  100. procedure FreeDll;
  101. begin
  102.     FArchiver.Free;
  103.     FArchiver := nil;
  104. end;
  105.  
  106. //---------------------------------------------------------------------
  107. class procedure TTar32.LoadDll;
  108. begin
  109.     Tar32.LoadDll;
  110. end;
  111.  
  112. class procedure TTar32.FreeDll;
  113. begin
  114.     Tar32.FreeDll;
  115. end;
  116.  
  117. function TTar32.UnpackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  118. begin
  119.     FCmdLine := BuildCmdLine( 'x',ArchiveFileName,Options,DstPath,FileList,ruOnUnpack in Options.ResFileUsage );
  120.     result := Tar( Handle,FCmdLine,Output );
  121. end;
  122.  
  123. function TTar32.PackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  124. begin
  125.     FCmdLine := BuildCmdLine( 'c',ArchiveFileName,Options,BaseDir,FileList,ruOnPack in Options.ResFileUsage );
  126.     result := Tar( Handle,FCmdLine,Output );
  127. end;
  128.  
  129. //    function TTar32.RemoveItem( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  130. //    begin
  131. //    end;
  132.  
  133. function TTar32.MakeSfx( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;var Output:string ):Integer;
  134. var
  135.     SfxName:    string;
  136.     SfxHead:    TFileStream;
  137.     SfxFile:    TFileStream;
  138.     ArcFile:    TFileStream;
  139.     P:            PAnsiChar;
  140.     TarSef:    array[0..511] of char;
  141. begin
  142.     if Self is TBZ232
  143.     then raise EArchiver.Create( 'BZ2 î`Ä«Åæî╔é═Ä⌐î╚ë≡ôÇî`Ä«é╔é┼é½é▄é╣é±üB' );
  144.  
  145.     P := nil;
  146.     if SearchPath( nil,'kmtarsef.exe',nil,SizeOf( TarSef ),TarSef,P ) = 0
  147.     then raise EArchiver.Create( 'tar/tgz Åæî╔é⌐éτé╠Ä⌐î╚ë≡ôÇÅæî╔é╠ì∞ɼé╔é═ kmtarsef.exe é¬òKùvé┼é╖üB' );
  148.  
  149.     SfxName := ChangeFileExt( ArchiveFileName,'.EXE' );
  150.     if DstPath <> ''
  151.     then begin
  152.         SfxName := ExtractFileName( SfxName );
  153.         SfxName := MakeFileName( DstPath,SfxName );
  154.     end;
  155.  
  156.     ArcFile := TFileStream.Create( ArchiveFileName ,fmOpenRead+fmShareDenyWrite );
  157.     SfxFile := TFileStream.Create( SfxName         ,fmCreate                    );
  158.     SfxHead := TFileStream.Create( TarSef          ,fmOpenRead+fmShareDenyWrite );
  159.     try
  160.         SfxFile.CopyFrom( SfxHead,0 );
  161.         SfxFile.CopyFrom( ArcFile,0 );
  162.     finally
  163.         ArcFile.Free;
  164.         SfxFile.Free;
  165.         SfxHead.Free;
  166.     end;
  167.  
  168.     Result := 0;
  169. end;
  170.  
  171. function TTar32.UnpackToMem( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD ):Integer;
  172. begin
  173.     FCmdLine := BuildCmdLine( '',ArchiveFileName,Options,'',[FileName],false );
  174.     result := FArchiver.ExtractMem( Handle,PChar( FCmdLine ),lpvBuffer,dwSize,nil,nil,lpdwWriteSize );
  175. end;
  176.  
  177. function TTar32.CheckArchive( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD;
  178. begin
  179.     result := FArchiver.CheckArchive( PChar( ArchiveFileName ),CheckMode+CheckOptions );
  180. end;
  181.  
  182. function TTar32.Tar( Handle:HWND;CmdLine:string;var Output:string ):integer;
  183. begin
  184.     result := FArchiver.ArchiverProc( Handle,PChar( CmdLine ),PAnsiChar( Output ),Length( Output ));
  185. end;
  186.  
  187. function TTar32.BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String;
  188. var
  189.     CmdLine:    TCmdOpt;
  190. begin
  191.     with Options do begin
  192.         CmdLine := TCmdOpt.Create;
  193.         CmdLine.Format := cfOuter;
  194.  
  195. //        CmdLine.Add( '-+' );            //    Åφé╔âîâWâXâgâèé╠É▌ÆΦé≡û│Äïé╖éΘ
  196.  
  197.         if a > 0 then CmdLine.Add( '-AH' );        //    a[0|1|2]                æ«É½é╠ì─î╗üB
  198.         if a = 0 then CmdLine.Add( '-I'  );        //    a[0|1|2]                æ«É½é╠ì─î╗üB
  199. //        CmdLine.AddIntOpt( 'c'  ,c   );            //    c[0|1]                â^âCâÇâXâ^âôâvîƒì╕é≡Å╚ù¬
  200. //        CmdLine.AddIntOpt( 'd'  ,d   );            //    d[0|1]                âfâBâîâNâgâèû╝é╠èiö[
  201. //        CmdLine.AddIntOpt( 'e'  ,e   );            //    e[0|1]                Ä½ÅæâTâCâYé≡ö╝ò¬é╔é╡é─ê│Åk
  202. //        CmdLine.AddIntOpt( 'f'  ,f   );            //    f[0|1]                âfâBâXâNÄcù╩â`âFâbâNé╠ÆåÄ~
  203. //        CmdLine.AddIntOpt( 'h'  ,h   );            //    h[0|1|2|3]            âwâbâ_é╠î`Ä«é≡ÄwÆΦ
  204. //        CmdLine.AddIntOpt( 'i'  ,i   );            //    i[0|1|2]                âtâ@âCâïæIæ≡é┼æσò╢ÄÜé╞żò╢ÄÜé≡ïµò╩
  205. //        CmdLine.AddIntOpt( 'l'  ,l   );            //    l[0|1|2]                ôWèJâìâOé╠âtâ@âCâïû╝é╠ò\Īû@é╠ò╧ìX
  206. //        CmdLine.AddIntOpt( 'm'  ,m   );            //    m[0|1|2]                Ä┐ûΓé╔ yes é╞ë╝ÆΦ
  207.  
  208.         if not CallbackEnabled
  209.         then begin                                        //    n[0|1]                ôWèJÅ≤ï╡â_âCâAâìâOò\Īé╠ù}Ä~
  210.             if n > 0 then CmdLine.Add( '--display-dialog=0' );
  211.         end;
  212.  
  213.         if o > 0 then CmdLine.Add( '-g' )    ;    //    o[0|1|2]                ïîî`Ä«é┼Åæî╔é≡ì∞ɼ
  214.                                                             //    ### TAR î`Ä«é┼é═ ïîî`Ä«é╞é╡é─ POSIX î▌è╖é╞é╖éΘ ###
  215.         CmdLine.AddIntOpt( '-check-all-path=',p );
  216.                                                             //    p[0|1|2]                æSâpâXû╝é┼ìçÆv
  217. //        CmdLine.AddIntOpt( 'r'  ,r   );            //    r[0|1|2]                ì─ïAôIîƒì⌡
  218. //        CmdLine.AddIntOpt( 's'  ,s   );            //    s[0|1]                âXâLâbâvò\Īé╠ù}ɺ
  219. //        CmdLine.AddIntOpt( 't'  ,t   );            //    t[0|1]                Åæî╔é╠ìXÉVô·Ä₧é╠ÄwÆΦ
  220.  
  221. //        CmdLine.AddIntOpt( 'u'  ,u   );            //    u[0|1]                âtâ@âCâïé╠ìXÉVüiÉVé╡éóéαé╠üj
  222. //        CmdLine.AddPathName( 'w'  ,w   );        //    w[0|1|<Dirû╝>]        ì∞ï╞ùpâfâBâîâNâgâèé╠ÄwÆΦ
  223.         CmdLine.AddIntOpt( '-use-directory=',x );
  224.                                                             //    x[0|1]                âfâBâîâNâgâèû╝é≡ùLî°é╔é╖éΘ
  225.  
  226. //        CmdLine.AddIntOpt( 'y'  ,y   );            //    y[0|1]                æSé─é╠Ä┐ûΓé╔ yes é╞ë╝ÆΦ
  227. //        CmdLine.AddIntOpt( 'z'  ,z   );            //    z[0|1|2|<ègÆúÄq>]    ûóê│Åkâtâ@âCâïé╠ÄwÆΦ            ###ègÆúÄqé═âTâ|ü[âgé╡é╚éó###
  228. //        CmdLine.AddIntOpt( 'jc' ,jc  );            //    jc[0|1]                öjæ╣âwâbâ_é≡û│Äï
  229. //        CmdLine.AddIntOpt( 'jd' ,jd  );            //    jd[<âTâCâY>]        âfâBâXâNé╠ï≤é½ùeù╩é≡èmöF
  230. //        CmdLine.AddIntOpt( 'je' ,je  );            //    je[<âTâCâY>]        Huffman âoâbâtâ@é╠æσé½é│é≡ÄwÆΦ
  231. //        CmdLine.AddIntOpt( 'jf' ,jf  );            //    jf[0|1]                âïü[âgïLìåé╠ìφÅ£
  232. //        CmdLine.AddIntOpt( 'jh' ,jh  );            //    jh[0|1]                WindowsNT/95 ÉΩùpé╠â}ü[âNé≡Åæî╔é╔òtë┴
  233. //        CmdLine.AddIntOpt( 'ji' ,ji  );            //    ji[0|1]                ÆZéóâtâ@âCâïû╝é┼èiö[
  234.  
  235. //        CmdLine.AddIntOpt( 'jm' ,jm  );            //    jm[0|1|2|3|4]        ê│Åkî`Ä«é≡ÄwÆΦ
  236.         if Self is TTgz32
  237.         then begin
  238.             if jm < 1
  239.             then CmdLine.Add( '-z' )                //    è∙ÆΦÆlé≡ÄwÆΦ
  240.             else CmdLine.AddIntOpt( 'z',jm );    //    âîâxâïé≡û╛ĪÄwÆΦé╖éΘ
  241.         end;
  242.         if Self is TBZ232
  243.         then begin
  244.             if jm < 1
  245.             then CmdLine.Add( '-B' )                //    è∙ÆΦÆlé≡ÄwÆΦ
  246.             else CmdLine.AddIntOpt( 'B',jm );    //    âîâxâïé≡û╛ĪÄwÆΦé╖éΘ
  247.         end;
  248.  
  249. //        CmdLine.AddIntOpt( 'jn' ,jn  );            //    jn[0|1]                ÉVïKâtâ@âCâïé╠é▌
  250. //        CmdLine.AddStrOpt( 'jo' ,jo  );            //    jo[<Ä₧ìÅÄwÆΦ>]        YYMMDDHHMMSS é╠ô·òtê╚ì~
  251. //        CmdLine.AddStrOpt( 'job',job );            //    job[<Ä₧ìÅÄwÆΦ>]    YYMMDDHHMMSS é╠ô·òtê╚æO
  252. //        CmdLine.AddIntOpt( 'jp' ,jp  );            //    jp[0|1]                ÉiÆ╗âoü[é≡âvâìâOâîâXüEâoü[é┼ò\Ī
  253. //        CmdLine.AddIntOpt( 'jr' ,jr  );            //    jr[0|1]                âtâ@âCâïé╠Æué½è╖éª
  254. //        CmdLine.AddIntOpt( 'jss',jss );            //    jss[0|1]                ê│Åkâtâ@âCâïâIü[âvâôâGâëü[é≡û│ÄïüBÆ╩ÅφüCê│ÅkÄ₧é╔ê│Åkæ╬Å█âtâ@
  255. //        CmdLine.AddIntOpt( 'jw' ,jw  );            //    jw[0|1|2|3|4]        WinSFX/WinSFXM é≡ì∞ɼ
  256. //        CmdLine.AddLstOpt( 'jx' ,jx  );            //    jx[<âtâ@âCâïû╝>]    Å£èOé╖éΘâtâ@âCâïû╝
  257. //        CmdLine.AddIntOpt( 'jyc',jyc );            //    jyc[0|1]                âfâBâîâNâgâèì∞ɼé╠èmöFé≡Å╚ù¬
  258. //        CmdLine.AddIntOpt( 'jyd',jyd );            //    jyd[0|1]                âtâ@âCâïìφÅ£é╠èmöFé≡Å╚ù¬
  259. //        CmdLine.AddIntOpt( 'jyk',jyk );            //    jyk[0|1]                Ägùpé┼é½éΘâfâBâXâNùeù╩é╠èmöFé╠Å╚ù¬
  260. //        CmdLine.AddIntOpt( 'jyn',jyn );            //    jyn[0|1]                ÉVâtâ@âCâïû╝é╠ùvïüé╠Å╚ù¬
  261. //        CmdLine.AddIntOpt( 'jyo',jyo );            //    jyo[0|1]                è∙æ╢âtâ@âCâïé╓é╠ÅπÅæé½èmöFé╠Å╚ù¬
  262. //        CmdLine.AddStrOpt( 'jz' ,jz  );            //    jz[<âtâ@âCâïû╝>]    âtâ@âCâïÆìÄ▀é╠âtâ@âCâïé≡ïƒïï
  263. //        CmdLine.AddIntOpt( 'ga' ,ga  );            //    ga[0|1]                Åæé½ì₧é▌òsë┬æ«É½é≡û│Äï
  264. //        CmdLine.AddIntOpt( 'gd' ,gd  );            //    gd[0|1]                ù]ò¬é╚âfü[â^é╠ìφÅ£
  265. //        CmdLine.AddIntOpt( 'ge' ,ge  );            //    ge[0|1]                ì┼Åëé╠ègÆúÄqé≡öFÄ»
  266. //        CmdLine.AddIntOpt( 'gf' ,gf  );            //    gf[0|1|2]            é╖é┼é╔éáéΘâtâ@âCâïé╠ìXÉV
  267. //        CmdLine.AddIntOpt( 'gj' ,gj  );            //    gj[0|1]                x û╜ù▀é≡ e û╜ù▀é╞ô»ùlé╞î⌐é╚é╖
  268. //        CmdLine.AddIntOpt( 'gm' ,gm  );            //    gm[0|1]                âGâëü[âüâbâZü[âWò\Īé╠ù}Ä~
  269. //        CmdLine.AddIntOpt( 'gn' ,gn  );            //    gn[0|1|2]            ôWèJâtâ@âCâïé╠ìçîvâTâCâYé≡ 100% é╞é╡é╜ÉiÆ╗âOâëâté╠ò\Ī
  270. //        CmdLine.AddIntOpt( 'go' ,go  );            //    go[0|1]                â_âCâAâìâOé╠âIü[âiü[âEâBâôâhâEé╠ÄwÆΦ
  271. //        CmdLine.AddIntOpt( 'gp' ,gp  );            //    gp[0|1]                âEâBâôâhâEé≡ Disable é╔é╡é╚éó
  272. //        CmdLine.AddIntOpt( 'gr' ,gr  );            //    gr[<âtâ@âCâïû╝>]    ò╧ìXâtâ@âCâïû╝é≡ïƒïï
  273. //        CmdLine.AddIntOpt( 'gs' ,gs  );            //    gs[<âTâCâY>]        âwâbâ_îƒì⌡âTâCâYé╠ÄwÆΦ
  274. //        CmdLine.AddIntOpt( 'gu' ,gu  );            //    gu[0|1]                WinSFXüCDosSFX é╔æSé─é╠âtâ@âCâïé≡èiö[
  275. //        CmdLine.AddIntOpt( 'gw' ,gw  );            //    gw[0|1|2|3|4]        WinSFX32/WinSFX32M é≡ì∞ɼ
  276.  
  277.         CmdLine.Add( UserOptions );
  278.  
  279.         if ArchiveFileName <> ''
  280.         then begin
  281.             CmdLine.AddFName1( 'f',ArchiveFileName );
  282.         end;
  283.         if Path <> ''
  284.         then begin
  285.             CmdLine.AddPath1( 'o',Path );
  286.         end;
  287.  
  288.         AddFileSpec2( CmdLine,Options,FileList,UseResFile );
  289.  
  290.         result := Cmd + CmdLine.Str;
  291.         CmdLine.Free;
  292.     end;
  293. end;
  294.  
  295. function TTar32.FindOpen( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC;
  296. begin
  297.     result:= FArchiver.OpenArchive( Handle,PChar( ExpandFileName( ArchiveFileName )),dwMode );
  298. end;
  299.  
  300. function TTar32.FindClose( hArc:THArc ):integer;
  301. begin
  302.     result := FArchiver.CloseArchive( hArc );
  303. end;
  304.  
  305. function TTar32.FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer;
  306. begin
  307.     result := FArchiver.FindFirst( hArc,PChar( FileMask ),@IndivisualInfo );
  308. end;
  309.  
  310. function TTar32.FindNext( hArc:THArc;var IndivisualInfo:TIndivisualInfo ):integer;
  311. begin
  312.     result := FArchiver.FindNext( hArc,@IndivisualInfo )
  313. end;
  314.  
  315. function TTar32.SetOwnerWindowEx( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean;
  316. begin
  317.     inherited SetOwnerWindowEx( Handle,lpArcProc );
  318.     result := FArchiver.SetOwnerWindowEx( Handle,lpArcProc );
  319. end;
  320.  
  321. function TTar32.KillOwnerWindowEx( Handle:HWND ):boolean;
  322. begin
  323.     result := FArchiver.KillOwnerWindowEx( Handle );
  324.     inherited KillOwnerWindowEx( Handle );
  325. end;
  326.  
  327. {
  328. function IsTarArchive( ArchiveFileName:string ):boolean;
  329. var
  330.     hArc:                    THARC;
  331.     IndivisualInfo:    TIndivisualInfo;
  332. begin
  333.     result := false;
  334.     try
  335.         hArc := FArchiver.OpenArchive( 0,PAnsiChar( ExpandFileName( ArchiveFileName )),M_REGARDLESS_INIT_FILE+M_ERROR_MESSAGE_OFF );
  336.         if hArc <> 0
  337.         then begin
  338.             result := FArchiver.FindFirst( hArc,'*.*',@IndivisualInfo )=0;
  339.             FArchiver.CloseArchive( hArc );
  340.         end;
  341.     except
  342.         result := false;
  343.     end;
  344. end;
  345. }
  346. function IsTarArchive( ArchiveFileName:string ):TArchiverType;
  347. var
  348.     ArchiverType:    integer;
  349. begin
  350.     try
  351.         LoadDLL;
  352.         ArchiverType := FArchiver.GetArchiveType( PAnsiChar( ArchiveFileName ));
  353.         case ArchiverType of
  354.             //    ö±ê│Åké╠î`Ä«
  355.             ARCHIVETYPE_TAR:     //    TARî`Ä«
  356.                 result := atTar;
  357.  
  358.             //    ê│Åké│éΩé╜î`Ä« ( BZ2LIB.DLLüFòsùv )
  359.             ARCHIVETYPE_TARGZ,   //    GZ(TGZ)î`Ä«
  360.             ARCHIVETYPE_TARZ,    //    TAR.Z(TAZ)î`Ä«
  361.             ARCHIVETYPE_GZ,      //    GZî`Ä«
  362.             ARCHIVETYPE_Z:       //    Zî`Ä«
  363.                 result := atTGZ;
  364.  
  365.             //    ê│Åké│éΩé╜î`Ä« ( BZ2LIB.DLLüFòKùv )
  366.             ARCHIVETYPE_TARBZ2,  //    TAR.BZ2î`Ä«
  367.             ARCHIVETYPE_BZ2:     //    BZ2î`Ä«
  368.                 result := atBZ2;
  369.  
  370.             //    î`Ä«òsû╛
  371.             else
  372.                 result := atNone;
  373.         end;
  374.     except
  375.         result := atNone;
  376.     end;
  377. end;
  378.  
  379. end.
  380.