home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / zkuste / delphi / kompon / d5 / cak / CAKINST.ZIP / cmarc139.lzh / ARJ32.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-07-16  |  6.6 KB  |  180 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. // ARJ32è╓ÿAâéâWâàü[âï    ARJ32.PAS
  6. //
  7. // v1.00:Åëè·î÷èJâoü[âWâçâô
  8. // v1.01:Open/Close âüâ\âbâhé≡ FindOpen/FindClose é╔ëⁿû╝
  9. // v1.02:uses É▀é⌐éτòsÄgùpâåâjâbâg Forms é≡èOé╡é╜
  10. //         âtâ@âCâïâèâXâgâpâëâüü[â^é╠î^é≡ TStrings é╔ò╧ìX
  11. //         â^âCâgâïé╠âRâüâôâgé≡Äßè▒ò╧ìX
  12. // v1.03:Delphi 3 é╔æ╬ë₧
  13. // v1.05:Åæî╔ôαâAâCâeâÇìφÅ£ùpâüâ\âbâhÆ╟ë┴
  14. //         LoadDll/FreeDll é╠ì\ɼò╧ìX
  15. //         Åæî╔âtâ@âCâïö╗ÆΦï@ö\Æ╟ë┴
  16. // v1.06:Åæî╔æÇì∞âüâ\âbâhé╠û▀éΦÆlé¬òsÉ│é╛é┴é╜òsï∩ìçé╠æ╬ì⌠
  17. // v1.09:Update/ExtractTo âüâ\âbâhé≡ PackTo/UnpackTo é╔ëⁿû╝
  18. // v1.11:èeâNâëâXé╠âüâ\âbâhÉΘî╛é╠îδéΦé≡Æ∙É│
  19. //         òsùvò╧Éöé╠ÉΘî╛é≡ìφÅ£
  20. // v1.12:TArchiveFile é╔ Output/OutputSize âvâìâpâeâBé≡Æ╟ë┴
  21. //         ôαòöâüâ\âbâhé╠Ä└æòé≡Äßè▒ò╧ìX
  22. // v1.17:LoadDll/FreeDll/IsXXXArchive é╠ì\ɼò╧ìX
  23. // v1.20:é▒é╠âNâëâXé┼é╠PackTo/MakeSfx âüâ\âbâhÄ└æòé≡ÆåÄ~
  24. // v1.21:LoadDll/FreeDll é╠ë┬Äïâîâxâïé≡ò╧ìX
  25. // v1.22:îoë▀âCâxâôâgâTâ|ü[âgé≡Æ╟ë┴
  26. // v1.23:CheckArchive âüâ\âbâhé≡Æ╟ë┴
  27. //       Äσé╚âüâ\âbâhé╠ëⁿû╝
  28. // v1.24:UNARJ32J.DLL é¬î⌐é┬é⌐éτé╚éóÄ₧é╠âüâbâZü[âWé≡ÅCÉ│
  29. // v1.25:ZIP32J.DLLé┼é╠û╝æOé╔"["é≡è▄é▐âtâ@âCâïé╓é╠æ╬ë₧
  30. // v1.28:âüâéâèôWèJï@ö\é╠âTâ|ü[âgé≡Æ╟ë┴
  31. //          CheckArchive âüâ\âbâhé╠û▀éΦÆlé╠î^é≡ò╧ìX
  32. // v1.30:èeâüâ\âbâhé╠ FileList ê°Éöé╠î^é≡ò╧ìX
  33. // v1.32:IsSetOwnerWinow/KillOwnerWindow é╠Ä└æòé≡ò╧ìX
  34. //       UnArj è╓Éöé╔âEâBâôâhâEânâôâhâïé≡ôné╡é─éóé╚é⌐é┴é╜é╠é≡ÅCÉ│
  35. // v1.35:TArj32.Arj é¬ CmdLine ê°Éöé≡î⌐é─éóé╚é⌐é┴é╜òsï∩ìçé╠ÅCÉ│
  36. // v1.38:DLL é⌐éτé╠âGâôâgâèâ|âCâôâgé╠ĵô╛ò√û@é≡ò╧ìXé╡é╜
  37. //
  38. unit ARJ32;
  39.  
  40. interface
  41.  
  42. uses Windows,SysUtils,Classes,Archives,Lha32;
  43.  
  44. type
  45.     TArj32 = class( TLha32 )
  46.     protected
  47.         class procedure LoadDll; override;
  48.         class procedure FreeDll; override;
  49.  
  50.     protected
  51. //        function  BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:TStringList ):String; override;
  52.  
  53.         function  FindOpen ( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; override;
  54.         function  FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer; override;
  55.         function  FindNext ( hArc:THArc;var IndivisualInfo:TIndivisualInfo                   ):integer; override;
  56.         function  FindClose( hArc:THArc                                                       ):integer; override;
  57.  
  58.     public
  59.         function Arj( Handle:HWND;CmdLine:string;var Output:string ):integer;
  60.         function UnpackFiles  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  61. //        function PackFiles    ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  62. //        function RemoveItem   ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  63. //        function MakeSfxFile  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String                                     ;var Output:string ):Integer; override;
  64. //        function UnpackToMem  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD   ):Integer; override;
  65.         function CheckArchive ( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD; override;
  66.  
  67.         function SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean; override;
  68.         function KillOwnerWindowEx( Handle:HWND                             ):boolean; override;
  69.     end;
  70.  
  71.     function IsArjArchive( ArchiveFileName:string ):boolean;
  72. //    function Arj( _hwnd:HWND;_szCmdLine:PAnsiChar;_szOutput:PAnsiChar;_wSize:integer ):integer; stdcall;
  73.  
  74. implementation
  75.  
  76. //---------------------------------------------------------------------
  77. var
  78.     FArchiver:        TArchiverDLL;
  79.  
  80. procedure LoadDll;
  81. begin
  82.     if Assigned( FArchiver ) then exit;
  83.     FArchiver := TArchiverDll.Create( 'CAB î`Ä«Åæî╔','CAB32.DLL','Cab' );
  84.     FArchiver.LoadDLL;
  85. end;
  86.  
  87. procedure FreeDll;
  88. begin
  89.     FArchiver.Free;
  90.     FArchiver := nil;
  91. end;
  92.  
  93. //---------------------------------------------------------------------
  94. class procedure TArj32.LoadDll;
  95. begin
  96.     Arj32.LoadDll;
  97. end;
  98.  
  99. class procedure TArj32.FreeDll;
  100. begin
  101.     Arj32.FreeDll;
  102. end;
  103.  
  104. function TArj32.UnpackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  105. begin
  106.     FCmdLine := BuildCmdLine( 'x',ArchiveFileName,Options,DstPath,FileList,UseResFile );
  107.     result := Arj( Handle,FCmdLine,Output );
  108. end;
  109.  
  110. function TArj32.CheckArchive( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD;
  111. begin
  112.     result := FArchiver.CheckArchive( PChar( ArchiveFileName ),CheckMode+CheckOptions );
  113. end;
  114.  
  115. function TArj32.SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean;
  116. begin
  117.     inherited SetOwnerWindowEx( Handle,lpArcProc );
  118.     result := FArchiver.SetOwnerWindowEx( Handle,lpArcProc );
  119. end;
  120.  
  121. function TArj32.KillOwnerWindowEx( Handle:HWND ):boolean;
  122. begin
  123.     result := FArchiver.KillOwnerWindowEx( Handle );
  124.     inherited KillOwnerWindowEx( Handle );
  125. end;
  126.  
  127. function TArj32.Arj( Handle:HWND;CmdLine:string;var Output:string ):integer;
  128. begin
  129.     result := FArchiver.ArchiverProc( Handle,PChar( CmdLine ),PAnsiChar( Output ),Length( Output ));
  130. end;
  131.  
  132. function TArj32.FindOpen( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC;
  133. begin
  134.     result:= FArchiver.OpenArchive( Handle,PChar( ExpandFileName( ArchiveFileName )),dwMode );
  135. end;
  136.  
  137. function TArj32.FindClose( hArc:THArc ):integer;
  138. begin
  139.     result := FArchiver.CloseArchive( hArc );
  140. end;
  141.  
  142. function TArj32.FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer;
  143. begin
  144.     result := FArchiver.FindFirst( hArc,PChar( FileMask ),@IndivisualInfo );
  145. end;
  146.  
  147. function TArj32.FindNext( hArc:THArc;var IndivisualInfo:TIndivisualInfo ):integer;
  148. begin
  149.     result := FArchiver.FindNext( hArc,@IndivisualInfo )
  150. end;
  151.  
  152. //    function IsArjArchive( ArchiveFileName:string ):boolean;
  153. //    var
  154. //        SfxType:    integer;
  155. //    begin
  156. //        try
  157. //            LoadDll;
  158. //            SfxType:= FArchiver.CheckArchive( PChar( ExpandFileName( ArchiveFileName )),CHECKARCHIVE_SFX+CHECKARCHIVE_ALL );
  159. //            result := ( SfxType <> -1 );
  160. //        except
  161. //            result := false;
  162. //        end;
  163. //    end;
  164.  
  165. function IsArjArchive( ArchiveFileName:string ):boolean;
  166. var
  167.     hArc:        THARC;
  168. begin
  169.     try
  170.         LoadDLL;
  171.         hArc := FArchiver.OpenArchive( 0,PAnsiChar( ExpandFileName( ArchiveFileName )),M_REGARDLESS_INIT_FILE+M_ERROR_MESSAGE_OFF );
  172.         FArchiver.CloseArchive( hArc );
  173.         result := ( hArc <> 0 );
  174.     except
  175.         result := false;
  176.     end;
  177. end;
  178.  
  179. end.
  180.