home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / zkuste / delphi / kompon / d5 / cak / CAKINST.ZIP / cmarc139.lzh / YZ132.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-08-21  |  16.2 KB  |  422 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/Masashi Yoneda 1997-2001
  4. //
  5. // YZ1è╓ÿAâéâWâàü[âï    YZ132.PAS
  6. //
  7. // v1.32:YZ1.DLL/YYZ32.DLLé╔éµéΘYZ1î`Ä«Åæî╔é╓é╠æ╬ë₧é≡èJÄn
  8. // v1.34:TYZ1 é¬É╢ɼé╖éΘâRâ}âôâhâëâCâôé≡ YZ1.DLL 0.20 / YYZ32.DLL 0.08
  9. //       ïñÆ╩Ädùlé╔ìçéφé╣é╜
  10. //       TYZ1 é¬Ägùpé╖éΘ DLL é╠èOòöâåâjâbâgé⌐éτé╠ò╧ìXé╔æ╬ë₧
  11. //       TYZ1 é┼ YZ1.DLL ôαé┼é╠ùßèOæ╬ì⌠é≡Æ╟ë┴
  12. // v1.35:TYZ1.Yz1 é¬ CmdLine ê°Éöé≡î⌐é─éóé╚é⌐é┴é╜òsï∩ìçé╠ÅCÉ│
  13. //          ÉV YZ1.DLL ( ûóâèâèü[âX ) é╠ y âIâvâVâçâôé╔æ╬ë₧
  14. // v1.38:DLL é⌐éτé╠âGâôâgâèâ|âCâôâgé╠ĵô╛ò√û@é≡ò╧ìXé╡é╜
  15. // v1.39:YZ1.DLL é╠ âpâXâÅü[âhè╓ÿA API é╓é╠æ╬ë₧é≡Æ╟ë┴
  16. //
  17. unit YZ132;    //    Unitû╝é¬YZ1é╛é╞âGâëü[é╔é╚éΘé╠é┼éΓé▐é╚é¡
  18.  
  19. interface
  20.  
  21. uses
  22.     Windows,
  23.     SysUtils,
  24.     Classes,
  25.     Archives;
  26.  
  27. type
  28.     TYZ1 = class( TArchiver )
  29.     protected
  30.         class procedure LoadDll; override;
  31.         class procedure FreeDll; override;
  32.  
  33.     protected
  34.         function  BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String;
  35.  
  36.         function  FindOpen ( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; override;
  37.         function  FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer; override;
  38.         function  FindNext ( hArc:THArc;var IndivisualInfo:TIndivisualInfo                   ):integer; override;
  39.         function  FindClose( hArc:THArc                                                       ):integer; override;
  40.  
  41.     public
  42.         function Yz1( Handle:HWND;cmdline:string;var Output:string ):integer;
  43.         function UnpackFiles  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  44.         function PackFiles    ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  45. //        function RemoveItems  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override;
  46.         function MakeSfx      ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String                                           ;var Output:string ):Integer; override;
  47. //        function UnpackToMem  ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD   ):Integer; override;
  48.         function CheckArchive ( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD; override;
  49.  
  50.         function SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean; override;
  51.         function KillOwnerWindowEx( Handle:HWND                          ):boolean; override;
  52.     end;
  53.  
  54.     function IsYz1Archive( ArchiveFileName:string ):boolean;
  55.  
  56. const
  57.     Yz1DllName1:    PChar = 'YYZ32.DLL';
  58.     Yz1DllName2:    PChar = 'YZ1.DLL';
  59.  
  60. implementation
  61.  
  62. uses
  63.     Filters;
  64.  
  65. type
  66.     TYz1DLLSetDefaultPassword     = function( hArc:THArc;lpszPassword:PAnsiChar ):integer; stdcall;
  67.     TYz1DLLPasswordDialog         = function( hwndParent:HWND;lpszPassword:PAnsiChar;dwSize:DWORD ):integer; stdcall;
  68.  
  69.     TYZ1Dll = class( TArchiverDll )
  70.     private
  71.     protected
  72.         FHandle:                            HWND;
  73.         FSetDefaultPassword:            FARPROC;
  74.         FPasswordDialog:                FARPROC;
  75.     public
  76.         function OpenArchive( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; override;
  77.         function FindFirst( hArc:THArc;FileMask:string;IndivisualInfo:PIndivisualInfo ):integer; override;
  78.         function SetDefaultPassword( hArc:THArc;lpszPassword:PAnsiChar ):integer;
  79.         function EnterPassword( hwndParent:HWND;lpszPassword:PAnsiChar;dwSize:DWORD ):integer;
  80.     end;
  81.  
  82. //---------------------------------------------------------------------
  83. var
  84.     FArchiver:        TArchiverDLL;
  85.  
  86. function Yz1DllName:string;
  87. begin
  88.     if( Yz1DllName1 <> nil )and( Yz1DllName2 <> nil )
  89.     then begin
  90.         result := Yz1DllName1 + ' é⌐ ' + Yz1DllName2;
  91.     end else begin
  92.         if( Yz1DllName1 <> nil ) then result := Yz1DllName1;
  93.         if( Yz1DllName2 <> nil ) then result := Yz1DllName2;
  94.     end;
  95. end;
  96.  
  97. procedure LoadDll;
  98. begin
  99.     if Assigned( FArchiver ) then exit;
  100.  
  101.     if Assigned( Yz1DllName1 )
  102.     then begin
  103.         try
  104.             FArchiver := TYZ1Dll.Create( 'YZ1 î`Ä«Åæî╔',Yz1DllName1,'Yz1' );
  105.             FArchiver.LoadDLL;
  106.             exit;
  107.         except
  108.             FArchiver.Free;
  109.             FArchiver := nil;
  110.         end;
  111.     end;
  112.     if Assigned( Yz1DllName2 )
  113.     then begin
  114.         try
  115.             FArchiver := TYZ1Dll.Create( 'YZ1 î`Ä«Åæî╔',Yz1DllName2,'Yz1' );
  116.             FArchiver.LoadDLL;
  117.             exit;
  118.         except
  119.             FArchiver.Free;
  120.             FArchiver := nil;
  121.         end;
  122.     end;
  123.     raise EArchiver.Create( 'Yz1 î`Ä«Åæî╔é≡ê╡éñé╔é═ '+Yz1DllName+' é¬òKùvé┼é╖üB' );
  124. end;
  125.  
  126. procedure FreeDll;
  127. begin
  128.     FArchiver.Free;
  129.     FArchiver := nil;
  130. end;
  131.  
  132. //---------------------------------------------------------------------
  133. class procedure TYZ1.LoadDll;
  134. begin
  135.     YZ132.LoadDll;
  136. end;
  137.  
  138. class procedure TYZ1.FreeDll;
  139. begin
  140.     YZ132.FreeDll;
  141. end;
  142.  
  143. function TYZ1.UnpackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  144. begin
  145.     FCmdLine := BuildCmdLine( 'x',ArchiveFileName,Options,DstPath,FileList,UseResFile );
  146.     result := Yz1( Handle,FCmdLine,Output );
  147. end;
  148.  
  149. function TYZ1.PackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  150. begin
  151.     FCmdLine := BuildCmdLine( 'c',ArchiveFileName,Options,BaseDir,FileList,UseResFile );
  152.     result := Yz1( Handle,FCmdLine,Output );
  153. end;
  154. {
  155. function TYZ1.RemoveItems( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
  156. begin
  157.     FCmdLine := BuildCmdLine( 'd',ArchiveFileName,Options,'',FileList,ruOnRemoveItem in Options.ResFileUsage );
  158.     result := Yz1( Handle,FCmdLine,Output );
  159. end;
  160. }
  161. function TYZ1.MakeSfx( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;var Output:string ):Integer;
  162. var
  163.     SfxDat:        array[0..511] of char;
  164.     SfxName:        string;
  165.     SfxHead:        TFileStream;
  166.     SfxFile:        TFileStream;
  167.     ArcFile:        TFileStream;
  168.     P:                PAnsiChar;
  169.     SfxDecoder:    string;
  170.     dwFileSize:    DWORD;
  171. begin
  172.     if Options.gw > 0
  173.     then begin
  174.         SfxDecoder := 'yzw32cui.sfx';
  175.         if SearchPath( nil,PChar( SfxDecoder ),nil,SizeOf( SfxDat ),SfxDat,P ) = 0
  176.         then begin
  177.             SfxDecoder := 'yzdec.exe';
  178.             if SearchPath( nil,PChar( SfxDecoder ),nil,SizeOf( SfxDat ),SfxDat,P ) = 0
  179.             then begin
  180.                 raise EArchiver.Create( 'yz1 Åæî╔é⌐éτé╠Win32Ä⌐î╚ë≡ôÇÅæî╔é╠ì∞ɼé╔é═ yzw32cui.sfx é⌐ yzdec.exe é¬òKùvé┼é╖üB' );
  181.             end;
  182.         end;
  183.     end else begin
  184.         SfxDecoder := 'yzdos16.sfx';
  185.         if SearchPath( nil,PChar( SfxDecoder ),nil,SizeOf( SfxDat ),SfxDat,P ) = 0
  186.         then raise EArchiver.Create( 'yz1 Åæî╔é⌐éτé╠DOSÄ⌐î╚ë≡ôÇÅæî╔é╠ì∞ɼé╔é═ '+SfxDecoder+' é¬òKùvé┼é╖üB' );
  187.     end;
  188.     SfxName := ChangeFileExt( ArchiveFileName,'.exe' );
  189.     if DstPath <> ''
  190.     then begin
  191.         SfxName := ExtractFileName( SfxName );
  192.         SfxName := MakeFileName( DstPath,SfxName );
  193.     end;
  194.     ArcFile := TFileStream.Create( ArchiveFileName,fmOpenRead+fmShareDenyWrite );
  195.     SfxFile := TFileStream.Create( SfxName        ,fmCreate                    );
  196.     SfxHead := TFileStream.Create( SfxDat         ,fmOpenRead+fmShareDenyWrite );
  197.     dwFileSize := ArcFile.Size;
  198.     dwFileSize := (( dwFileSize and $000000FF ) shl 24 )
  199.                   or (( dwFileSize and $0000FF00 ) shl  8 )
  200.                   or (( dwFileSize and $00FF0000 ) shr  8 )
  201.                   or (( dwFileSize and $FF000000 ) shr 24 );
  202.     try
  203.         SfxFile.CopyFrom( SfxHead,0 );
  204.         SfxFile.CopyFrom( ArcFile,0 );
  205.         SfxFile.WriteBuffer( dwFileSize,sizeof( dwFileSize ));
  206.     finally
  207.         ArcFile.Free;
  208.         SfxFile.Free;
  209.         SfxHead.Free;
  210.     end;
  211.     result := 0;
  212. end;
  213.  
  214. function TYZ1.CheckArchive( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD;
  215. begin
  216.     result := FArchiver.CheckArchive( PChar( ArchiveFileName ),CheckMode+CheckOptions );
  217. end;
  218.  
  219. function TYZ1.SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean;
  220. begin
  221.     inherited SetOwnerWindowEx( Handle,lpArcProc );
  222.     result := FArchiver.SetOwnerWindowEx( Handle,lpArcProc );
  223. end;
  224.  
  225. function TYZ1.KillOwnerWindowEx( Handle:HWND ):boolean;
  226. begin
  227.     result := FArchiver.KillOwnerWindowEx( Handle );
  228.     inherited KillOwnerWindowEx( Handle );
  229. end;
  230.  
  231. function TYZ1.Yz1( Handle:HWND;CmdLine:string;var Output:string ):integer;
  232. begin
  233.     try
  234.         result := FArchiver.ArchiverProc( Handle,PChar( CmdLine ),PAnsiChar( Output ),Length( Output ));
  235.     except
  236.         EnableWindow( Handle,True );    //    YZ1.DLL é┼ùßèOö¡É╢Ä₧üADisable é╠é▄é▄ïAéΘé▒é╞é¬éáéΘ
  237.         raise;
  238.     end;
  239. end;
  240.  
  241. function TYZ1.BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String;
  242. var
  243.     CmdLine:    TCmdOpt;
  244.     opt_c:    integer;
  245.     opt_y:    integer;
  246. begin
  247.     with Options do begin
  248.         CmdLine := TCmdOpt.Create;
  249.  
  250.         opt_c := c;
  251.         opt_y := aoiUnassigned;
  252.         case m of
  253.             0:        opt_y := 2;        //    éóé┐éóé┐Ä┐ûΓ
  254.             1:        opt_y := 1;        //    æSé─ Yes
  255.             2:        opt_y := 2;        //    ègÆúÄqé≡ò╧ìXé╡é─ôWèJ - no support
  256.             9:        opt_y := 0;        //    æSé─ No
  257. //            else    opt_y := 2;        //    é╞éΦéáéªé╕æSòöÄ┐ûΓé╡é╞é¡
  258.         end;
  259.         if opt_y = 2 then opt_c := 2;
  260.  
  261.         CmdLine.Add( '-+' );            //    Åφé╔âîâWâXâgâèé╠É▌ÆΦé≡û│Äïé╖éΘ
  262.  
  263. //        CmdLine.AddBolOpt( 'a'    ,a > 0 );    //    a[0|1|2]                æ«É½é╠ì─î╗üB
  264.         CmdLine.AddIntOpt( 'c'    ,opt_c );    //    c[0|1]                â^âCâÇâXâ^âôâvîƒì╕é≡Å╚ù¬
  265. ////    CmdLine.AddIntOpt( 'd'    ,d     );        //    d[0|1]                âfâBâîâNâgâèû╝é╠èiö[
  266. //        CmdLine.AddIntOpt( 'e'    ,e     );        //    e[0|1]                Ä½ÅæâTâCâYé≡ö╝ò¬é╔é╡é─ê│Åk
  267. //        CmdLine.AddIntOpt( 'f'    ,f     );        //    f[0|1]                âfâBâXâNÄcù╩â`âFâbâNé╠ÆåÄ~
  268. //        CmdLine.AddIntOpt( 'h'    ,h     );        //    h[0|1|2|3]            âwâbâ_é╠î`Ä«é≡ÄwÆΦ
  269. //        CmdLine.AddIntOpt( 'i'    ,i     );        //    i[0|1|2]                âtâ@âCâïæIæ≡é┼æσò╢ÄÜé╞żò╢ÄÜé≡ïµò╩
  270. //        CmdLine.AddIntOpt( 'l'    ,l     );        //    l[0|1|2]                ôWèJâìâOé╠âtâ@âCâïû╝é╠ò\Īû@é╠ò╧ìX
  271.         CmdLine.AddIntOpt( 'y',opt_y );        //    m[0|1|2]                Ä┐ûΓé╔ yes é╞ë╝ÆΦ
  272.         CmdLine.AddBolOpt( 'i',( n > 0 )or( CallbackEnabled ));
  273.                                                         //    n[0|1]                ôWèJÅ≤ï╡â_âCâAâìâOò\Īé╠ù}Ä~
  274. //        CmdLine.AddIntOpt( 'o'    ,o     );        //    o[0|1|2]                ïîî`Ä«é┼Åæî╔é≡ì∞ɼ
  275.         CmdLine.AddIntOpt( 'z'    ,p     );        //    p[0|1|2]                æSâpâXû╝é┼ìçÆv
  276. //        CmdLine.AddBolOpt( 'r'    ,r    > 0 );    //    r[0|1|2]                ì─ïAôIîƒì⌡
  277. //        CmdLine.AddIntOpt( 's'    ,s     );        //    s[0|1]                âXâLâbâvò\Īé╠ù}ɺ
  278. //        CmdLine.AddIntOpt( 't'    ,t     );        //    t[0|1]                Åæî╔é╠ìXÉVô·Ä₧é╠ÄwÆΦ
  279. //
  280. //        CmdLine.AddIntOpt( 'u'    ,u      );        //    u[0|1]                âtâ@âCâïé╠ìXÉVüiÉVé╡éóéαé╠üj
  281. //        CmdLine.AddPath1 ( 'w'  ,w   );        //    w[0|1|<Dirû╝>]        ì∞ï╞ùpâfâBâîâNâgâèé╠ÄwÆΦ
  282.         CmdLine.AddIntOpt( 'x'    ,x   );        //    x[0|1]                âfâBâîâNâgâèû╝é≡ùLî°é╔é╖éΘ
  283. //        CmdLine.AddIntOpt( 'y'    ,y      );        //    y[0|1]                æSé─é╠Ä┐ûΓé╔ yes é╞ë╝ÆΦ
  284. //        CmdLine.AddIntOpt( 'z'    ,z      );        //    z[0|1|2|<ègÆúÄq>]    ûóê│Åkâtâ@âCâïé╠ÄwÆΦ            ###ègÆúÄqé═âTâ|ü[âgé╡é╚éó###
  285. //        CmdLine.AddIntOpt( 'jc' ,jc  );        //    jc[0|1]                öjæ╣âwâbâ_é≡û│Äï
  286. //        CmdLine.AddIntOpt( 'jd' ,jd  );        //    jd[<âTâCâY>]        âfâBâXâNé╠ï≤é½ùeù╩é≡èmöF
  287. //        CmdLine.AddIntOpt( 'je' ,je  );        //    je[<âTâCâY>]        Huffman âoâbâtâ@é╠æσé½é│é≡ÄwÆΦ
  288. //        CmdLine.AddIntOpt( 'jf' ,jf  );        //    jf[0|1]                âïü[âgïLìåé╠ìφÅ£
  289. //        CmdLine.AddIntOpt( 'jh' ,jh  );         //    jh[0|1]                WindowsNT/95 ÉΩùpé╠â}ü[âNé≡Åæî╔é╔òtë┴
  290. //        CmdLine.AddIntOpt( 'ji' ,ji  );        //    ji[0|1]                ÆZéóâtâ@âCâïû╝é┼èiö[
  291. //        CmdLine.AddIntOpt( 'l'  ,jm  );        //    jm[0|1|2|3|4]        ê│Åkî`Ä«é≡ÄwÆΦ
  292. //        CmdLine.AddIntOpt( 'jn' ,jn  );        //    jn[0|1]                ÉVïKâtâ@âCâïé╠é▌
  293. //        CmdLine.AddStrOpt( 'jo' ,jo  );        //    jo[<Ä₧ìÅÄwÆΦ>]        YYMMDDHHMMSS é╠ô·òtê╚ì~
  294. //        CmdLine.AddStrOpt( 'job',job );        //    job[<Ä₧ìÅÄwÆΦ>]    YYMMDDHHMMSS é╠ô·òtê╚æO
  295. //        CmdLine.AddIntOpt( 'jp' ,jp  );        //    jp[0|1]                ÉiÆ╗âoü[é≡âvâìâOâîâXüEâoü[é┼ò\Ī
  296. //        CmdLine.AddIntOpt( 'jr' ,jr  );        //    jr[0|1]                âtâ@âCâïé╠Æué½è╖éª
  297. //        CmdLine.AddIntOpt( 'jss',jss );        //    jss[0|1]                ê│Åkâtâ@âCâïâIü[âvâôâGâëü[é≡û│ÄïüBÆ╩ÅφüCê│ÅkÄ₧é╔ê│Åkæ╬Å█âtâ@
  298. //        CmdLine.AddIntOpt( 'jw' ,jw  );        //    jw[0|1|2|3|4]        WinSFX/WinSFXM é≡ì∞ɼ
  299. //        CmdLine.AddFList2( 'jx' ,[jx] );        //    jx[<âtâ@âCâïû╝>]    Å£èOé╖éΘâtâ@âCâïû╝
  300. //        CmdLine.AddIntOpt( 'jyc',jyc );        //    jyc[0|1]                âfâBâîâNâgâèì∞ɼé╠èmöFé≡Å╚ù¬
  301. //        CmdLine.AddIntOpt( 'jyd',jyd );        //    jyd[0|1]                âtâ@âCâïìφÅ£é╠èmöFé≡Å╚ù¬
  302. //        CmdLine.AddIntOpt( 'jyk',jyk );        //    jyk[0|1]                Ägùpé┼é½éΘâfâBâXâNùeù╩é╠èmöFé╠Å╚ù¬
  303. //        CmdLine.AddIntOpt( 'jyn',jyn );        //    jyn[0|1]                ÉVâtâ@âCâïû╝é╠ùvïüé╠Å╚ù¬
  304. //        CmdLine.AddIntOpt( 'jyo',jyo );        //    jyo[0|1]                è∙æ╢âtâ@âCâïé╓é╠ÅπÅæé½èmöFé╠Å╚ù¬
  305. //        CmdLine.AddStrOpt( 'jz' ,jz  );        //    jz[<âtâ@âCâïû╝>]    âtâ@âCâïÆìÄ▀é╠âtâ@âCâïé≡ïƒïï
  306. //        CmdLine.AddIntOpt( 'ga' ,ga  );        //    ga[0|1]                Åæé½ì₧é▌òsë┬æ«É½é≡û│Äï
  307. //        CmdLine.AddIntOpt( 'gd' ,gd  );        //    gd[0|1]                ù]ò¬é╚âfü[â^é╠ìφÅ£
  308. //        CmdLine.AddIntOpt( 'ge' ,ge  );        //    ge[0|1]                ì┼Åëé╠ègÆúÄqé≡öFÄ»
  309. //        CmdLine.AddIntOpt( 'gf' ,gf  );        //    gf[0|1|2]            é╖é┼é╔éáéΘâtâ@âCâïé╠ìXÉV
  310. //        CmdLine.AddIntOpt( 'gj' ,gj  );        //    gj[0|1]                x û╜ù▀é≡ e û╜ù▀é╞ô»ùlé╞î⌐é╚é╖
  311. //        CmdLine.AddIntOpt( 'gm' ,gm  );        //    gm[0|1]                âGâëü[âüâbâZü[âWò\Īé╠ù}Ä~
  312. //        CmdLine.AddIntOpt( 'gn' ,gn  );        //    gn[0|1|2]            ôWèJâtâ@âCâïé╠ìçîvâTâCâYé≡ 100% é╞é╡é╜ÉiÆ╗âOâëâté╠ò\Ī
  313. //        CmdLine.AddIntOpt( 'go' ,go  );        //    go[0|1]                â_âCâAâìâOé╠âIü[âiü[âEâBâôâhâEé╠ÄwÆΦ
  314. //        CmdLine.AddIntOpt( 'gp' ,gp  );        //    gp[0|1]                âEâBâôâhâEé≡ Disable é╔é╡é╚éó
  315. //        CmdLine.AddStrOpt( 'gr' ,gr  );        //    gr[<âtâ@âCâïû╝>]    ò╧ìXâtâ@âCâïû╝é≡ïƒïï
  316. //        CmdLine.AddIntOpt( 'gs' ,gs  );        //    gs[<âTâCâY>]        âwâbâ_îƒì⌡âTâCâYé╠ÄwÆΦ
  317. //        CmdLine.AddIntOpt( 'gu' ,gu  );        //    gu[0|1]                WinSFXüCDosSFX é╔æSé─é╠âtâ@âCâïé≡èiö[
  318. //        CmdLine.AddIntOpt( 'gw' ,gw  );        //    gw[0|1|2|3|4]        WinSFX32/WinSFX32M é≡ì∞ɼ
  319.  
  320.         CmdLine.Add( UserOptions );
  321.  
  322.         AddFileSpec1( CmdLine,ArchiveFileName,Path );
  323.         AddFileSpec2( CmdLine,Options,FileList,UseResFile );
  324.  
  325.         result := cmd + CmdLine.Str;
  326.         CmdLine.Free;
  327.     end;
  328. end;
  329.  
  330. function TYZ1.FindOpen( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC;
  331. begin
  332.     result := FArchiver.OpenArchive( Handle,PChar( ExpandFileName( ArchiveFileName )),dwMode );
  333. end;
  334.  
  335. function TYZ1.FindClose( hArc:THArc ):integer;
  336. begin
  337.     result := FArchiver.CloseArchive( hArc );
  338. end;
  339.  
  340. function TYZ1.FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer;
  341. begin
  342.     result := FArchiver.FindFirst( hArc,PChar( FileMask ),@IndivisualInfo );
  343. end;
  344.  
  345. function TYZ1.FindNext( hArc:THArc;var IndivisualInfo:TIndivisualInfo ):integer;
  346. begin
  347.     result := FArchiver.FindNext( hArc,@IndivisualInfo )
  348. end;
  349.  
  350. //    function IsYz1Archive( ArchiveFileName:string ):boolean;
  351. //    var
  352. //        SfxType:    integer;
  353. //    begin
  354. //        try
  355. //            LoadDll;
  356. //            SfxType:= Yz1CheckArchive( PChar( ExpandFileName( ArchiveFileName )),CHECKARCHIVE_SFX+CHECKARCHIVE_ALL );
  357. //            result := ( SfxType <> -1 );
  358. //        except
  359. //            result := false;
  360. //        end;
  361. //    end;
  362.  
  363. function IsYz1Archive( ArchiveFileName:string ):boolean;
  364. var
  365.     hArc:        THARC;
  366. begin
  367.     try
  368.         LoadDLL;
  369.         ArchiveFileName := ExpandFileName( ArchiveFileName );
  370.         result := false;
  371.         if not FileExists( ArchiveFileName ) then exit;
  372.         hArc := FArchiver.OpenArchive( 0,PAnsiChar( ArchiveFileName ),M_REGARDLESS_INIT_FILE+M_ERROR_MESSAGE_OFF );
  373.         FArchiver.CloseArchive( hArc );
  374.         result := ( hArc <> 0 );
  375.     except
  376.         result := false;
  377.     end;
  378. end;
  379.  
  380. { TYZ1Dll }
  381.  
  382. function TYZ1Dll.OpenArchive( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC;
  383. begin
  384.     FHandle := Handle;
  385.     result := inherited OpenArchive( Handle,PAnsiChar( ArchiveFileName ),dwMode );
  386. end;
  387.  
  388. function TYZ1Dll.FindFirst( hArc:THArc;FileMask:string;IndivisualInfo:PIndivisualInfo ):integer;
  389. var
  390.     szPassword:    array[0..255] of AnsiChar;
  391.     i:                integer;
  392. begin
  393.     for i := 0 to 3 do begin
  394.         result := inherited FindFirst( hArc,PAnsiChar( FileMask ),IndivisualInfo );
  395.         if result <> ERROR_PASSWORD_FILE then break;
  396.         if EnterPassword( FHandle,szPassword,sizeof( szPassword )) < 0 then exit;
  397.         SetDefaultPassword( hArc,szPassword );
  398.     end;
  399. end;
  400.  
  401. function TYZ1Dll.SetDefaultPassword( hArc:THArc;lpszPassword:PAnsiChar ):integer;
  402. begin
  403.     if GetProcAddr( FSetDefaultPassword,FhDLL,FEntryPrefix+'SetDefaultPassword',false ) = false
  404.     then begin
  405.         Result := -1;
  406.         exit;
  407.     end;
  408.     result := TYz1DLLSetDefaultPassword( FSetDefaultPassword )( hArc,lpszPassword );
  409. end;
  410.  
  411. function TYZ1Dll.EnterPassword( hwndParent:HWND;lpszPassword:PAnsiChar;dwSize:DWORD ):integer;
  412. begin
  413.     if GetProcAddr( FPasswordDialog,FhDLL,FEntryPrefix+'PasswordDialog',false ) = false
  414.     then begin
  415.         Result := -1;
  416.         exit;
  417.     end;
  418.     result := TYz1DLLPasswordDialog( FPasswordDialog )( hwndParent,lpszPassword,dwSize );
  419. end;
  420.  
  421. end.
  422.