home *** CD-ROM | disk | FTP | other *** search
Wrap
// ô¥ìçâAü[âJâCâoâRâôâ|ü[âlâôâg for Delphi/C++Builder // Common Archivers Component for Delphi/C++Builder // Copyright(C) NORG1964/M.Yoneda 1997,1998,1999,2000 // // ZIP32è╓ÿAâéâWâàü[âï ZIP32.PAS // // v1.00:Åëè·î÷èJâoü[âWâçâô // v1.01:Open/Close âüâ\âbâhé≡ FindOpen/FindClose é╔ëⁿû╝ // v1.02:âtâ@âCâïâèâXâgâpâëâüü[â^é╠î^é≡ TStrings é╔ò╧ìX // â^âCâgâïé╠âRâüâôâgé≡Äßè▒ò╧ìX // v1.03:LMZIP32é╓é╠æ╬ë₧üFêΩùùĵô╛é¬ë┬ö\é╔ // Delphi 3 é╔æ╬ë₧ // v1.04:LMZIP32é╓é╠æ╬ë₧üFÅæî╔é╠ì∞ɼé¬ë┬ö\é╔ // v1.05:Åæî╔ôαâAâCâeâÇìφÅ£ùpâüâ\âbâhÆ╟ë┴ // LoadDll/FreeDll é╠ì\ɼò╧ìX // Åæî╔âtâ@âCâïö╗ÆΦï@ö\Æ╟ë┴ // v1.06:Åæî╔æÇì∞âüâ\âbâhé╠û▀éΦÆlé¬òsÉ│é╛é┴é╜òsï∩ìçé╠æ╬ì⌠ // v1.09:Update/ExtractTo âüâ\âbâhé≡ PackTo/UnpackTo é╔ëⁿû╝ // îoë▀â_âCâAâìâOö±ò\ĪâIâvâVâçâôé≡Ä└æò // âRâ}âôâhâëâCâôÉ╢ɼé╠òsï∩ìçé≡ÅCÉ│ // v1.11:èeâNâëâXé╠âüâ\âbâhÉΘî╛é╠îδéΦé≡Æ∙É│ // òsùvò╧Éöé╠ÉΘî╛é≡ìφÅ£ // v1.12:TArchiveFile é╔ Output/OutputSize âvâìâpâeâBé≡Æ╟ë┴ // ZIP32J.DLL é╠âTâ|ü[âgé≡Æ╟ë┴ // ôαòöâüâ\âbâhé╠Ä└æòé≡Äßè▒ò╧ìX // v1.13:UNZIP32.DLL é¬æ╢ì▌é╡é─éα ZIP Åæî╔é¬ë≡ôÇé┼é½é╚é⌐é┴é╜òsï∩ìçé╠ÅCÉ│ // ôαòöâüâ\âbâhé╠Ä└æòé≡Äßè▒ò╧ìX // v1.15:ZIP32J é┼é╠ê│ÅkâîâxâïâIâvâVâçâôÉ╢ɼé╠îδéΦé≡Æ∙É│ // v1.16:rüEa âIâvâVâçâôé╠É╢ɼò√û@é≡Æ╟ë┴ü^Æ∙É│ // ô«ì∞é╡é╚éóé╠é┼ jo/job âIâvâVâçâôé╠âTâ|ü[âgé≡ÆföO // v1.17:ZIP32J 0.20 é╔æ╬ë₧ü|LMZIP32.DLL é╚é╡é┼êΩùùĵô╛é¬ë┬ö\é╔ // LoadDll/FreeDll/IsXXXArchive é╠ì\ɼò╧ìX // LMZIP32.DLL é┼ê│Åké┼é½é╚é¡é╚é┴é─éóé╜é╠é≡ÅCÉ│ // v1.19:ZIPî`Ä«Åæî╔é⌐éτé╠Ä⌐î╚ë≡ôÇÅæî╔ì∞ɼï@ö\é≡Ä└æò // v1.20:Ä⌐î╚ë≡ôÇÅæî╔ì∞ɼâpâXÄwÆΦï@ö\Æ╟ë┴ // v1.21:LoadDll/FreeDll é╠ë┬Äïâîâxâïé≡ò╧ìX // v1.22:îoë▀âCâxâôâgâTâ|ü[âgé≡Æ╟ë┴ // v1.23:CheckArchive âüâ\âbâhé≡Æ╟ë┴ // Äσé╚âüâ\âbâhé╠ëⁿû╝ // v1.24:âRâ}âôâhâëâCâôé╠âpâXâfâèâ~â^é≡'/'é╔é╡é╜ // v1.25:ZIP32J.DLLé┼é╠û╝æOé╔"["é≡è▄é▐âtâ@âCâïé╓é╠æ╬ë₧ // v1.28:âüâéâèôWèJï@ö\é╠âTâ|ü[âgé≡Æ╟ë┴ // CheckArchive âüâ\âbâhé╠û▀éΦÆlé╠î^é≡ò╧ìX // v1.30:èeâüâ\âbâhé╠ FileList ê°Éöé╠î^é≡ò╧ìX // v1.32:IsZipArchive é╠Ä└æòé≡ò╧ìX // IsSetOwnerWinow/KillOwnerWindow é╠Ä└æòé≡ò╧ìX // v1.33:ôαòöâtâBâïâ^ô«ì∞æOé╠DLLùLû│â`âFâbâNé╠Ä└æòé≡Æ╟ë┴ // v1.35:TZip32.Zip/TZip32.Unzip é¬ CmdLine ê°Éöé≡î⌐é─éóé╚é⌐é┴é╜òsï∩ìçé╠ÅCÉ│ // v1.37:êΩÄ₧âfâBâîâNâgâèÄwÆΦâIâvâVâçâôé╠âTâ|ü[âgé≡Æ╟ë┴ // v1.38:DLL é⌐éτé╠âGâôâgâèâ|âCâôâgé╠ĵô╛ò√û@é≡ò╧ìX // unit ZIP32; interface uses Windows,SysUtils,Classes,Archives; type TZip32 = class( TArchiver ) protected class procedure LoadDll; override; class procedure FreeDll; override; protected function BuildUnZipCmd( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; function BuildLMZipCmd( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; function BuildZipCmd ( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; function FindOpen ( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; override; function FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer; override; function FindNext ( hArc:THArc;var IndivisualInfo:TIndivisualInfo ):integer; override; function FindClose( hArc:THArc ):integer; override; // function FileSpec( FileName:string ):String; override; public constructor Create; function Zip ( Handle:HWND;CmdLine:string;var Output:string ):Integer; function Unzip ( Handle:HWND;CmdLine:string;var Output:string ):Integer; function UnpackFiles ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override; function PackFiles ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override; function RemoveItems ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override; function UpdateArchive( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; override; function MakeSfx ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String ;var Output:string ):Integer; override; function UnpackToMem ( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD ):Integer; override; function CheckArchive ( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD; override; function SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean; override; function KillOwnerWindowEx( Handle:HWND ):boolean; override; end; function IsZipArchive( ArchiveFileName:string ):boolean; implementation uses Filters; const UNZIP32DLL = 'UNZIP32.DLL'; LMZIP32DLL = 'LMZIP32.DLL'; ZIP32JDLL = 'ZIP32J.DLL'; type TZipDll = class( TCustomArchiverDll ) private function GetZipProc( var EntryPoint:FARPROC;hDLL1,hDLL2,hDLL3:HMODULE;ProcName:string;RaiseException:boolean ):boolean; function UnZip(_hwnd:HWND;_lpszCmdLine,_lpszOutput:PAnsiChar;_dwSize:DWORD ):integer; function Zip (_hwnd:HWND;_lpszCmdLine,_lpszOutput:PAnsiChar;_dwSize:DWORD ):integer; protected hUnZip32: THandle; hLMZip32: THandle; hZip32J: THandle; FZip: FARPROC; FUnZip: FARPROC; public procedure LoadDll; override; procedure FreeDll; override; // function ArchiverProc( _hwnd:HWND;_lpszCmdLine:PAnsiChar;_lpszOutput:PAnsiChar;_dwSize:DWORD ):integer; override; function CheckArchive( lpszFileName:PAnsiChar;iMode:integer ):DWORD; override; function CloseArchive( hArc:THARC ):integer; override; function ExtractMem( Handle:HWND;lpszCmdLine:PAnsiChar;lpvBuffer:LPBYTE;dwSize:DWORD;lpTime:ptime_t;lpwAttr:LPWORD;lpdwWriteSize:LPDWORD ): integer; override; function FindFirst( hArc:THArc;FileMask:string;IndivisualInfo:PIndivisualInfo ):integer; override; function FindNext( hArc:THArc;IndivisualInfo:PIndivisualInfo ):integer; override; function KillOwnerWindowEx( Handle:HWND ):BOOL; override; function OpenArchive( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ): THARC; override; function SetOwnerWindowEx( Handle:HWND;lpArcProc:LPARCHIVERPROC ):BOOL; override; // function GetArchiveType( lpszFileName:PAnsiChar ):integer; virtual; protected function GetWriteTimeEx( hArc:THArc;var lpLastWriteTime:TFileTime ):BOOL; override; function GetCreateTimeEx( hArc:THArc;var lpCreateTime:TFileTime ):BOOL; override; function GetAccessTimeEx( hArc:THArc;var lpAccessTime:TFileTime ):BOOL; override; end; //--------------------------------------------------------------------- var FArchiver: TZipDll; procedure LoadDll; begin if Assigned( FArchiver ) then exit; FArchiver := TZipDll.Create; FArchiver.LoadDLL; end; procedure FreeDll; begin FArchiver.Free; FArchiver := nil; end; //--------------------------------------------------------------------- procedure TZipDll.LoadDll; begin if hUnzip32 = 0 then hUnZip32 := Loadlibrary( UNZIP32DLL ); if hZip32J = 0 then hZip32J := Loadlibrary( ZIP32JDLL ); if hLMZip32 = 0 then hLMZip32 := Loadlibrary( LMZIP32DLL ); if hUnZip32 <> 0 then exit; if hZip32J <> 0 then exit; if hLMZip32 <> 0 then exit; end; procedure TZipDll.FreeDll; procedure Free( var hDLL:THandle ); begin if hDLL = 0 then exit; FreeLibrary( hDLL ) ; hDLL := 0; end; begin Free( hUnZip32 ); Free( hLMZip32 ); Free( hZip32J ); FZip := nil; FUnZip := nil; inherited; end; function TZipDll.GetZipProc( var EntryPoint:FARPROC;hDLL1,hDLL2,hDLL3:HMODULE;ProcName:string;RaiseException:boolean ):boolean; function ZipProc( hDLL:HMODULE;ProcName:string ):FARPROC; begin result := nil; if hDLL = 0 then exit; if hDLL = hLMZip32 then begin if ( ProcName[3] = 'Z' ) then ProcName[3] := 'z'; end; GetProcAddr( result,hDLL,PChar( ProcName ),false ); end; begin result := true; EntryPoint := ZipProc( hDLL1,PChar( ProcName )); if EntryPoint <> nil then exit; EntryPoint := ZipProc( hDLL2,PChar( ProcName )); if EntryPoint <> nil then exit; EntryPoint := ZipProc( hDLL3,PChar( ProcName )); if EntryPoint <> nil then exit; if RaiseException then raise EEntryNotFound.Create( Format( '%0:s é╠âGâôâgâèé¬ DLL é╔î⌐é┬é⌐éΦé▄é╣é±é┼é╡é╜üB',[ProcName] )); result := false; end; function TZipDll.Zip( _hwnd:HWND;_lpszCmdLine:PAnsiChar;_lpszOutput:PAnsiChar;_dwSize:DWORD ):integer; begin LoadDll; GetZipProc( FZip,hZip32J,hLMZip32,0,'Zip',true ); if _dwSize = 0 then _lpszOutput := nil; result := TArcDLLArchiverProc( FZip )( _hwnd,_lpszCmdLine,_lpszOutput,_dwSize ); end; function TZipDll.UnZip( _hwnd:HWND;_lpszCmdLine:PAnsiChar;_lpszOutput:PAnsiChar;_dwSize:DWORD ):integer; begin LoadDll; GetZipProc( FUnZip,hUnZip32,hLMZip32,0,'UnZip',true ); if _dwSize = 0 then _lpszOutput := nil; result := TArcDLLArchiverProc( FUnZip )( _hwnd,_lpszCmdLine,_lpszOutput,_dwSize ); end; function TZipDll.OpenArchive( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; begin LoadDll; GetZipProc( FOpenArchive,hLMZip32,hZip32J,hUnZip32,'UnZipOpenArchive',true ); result := inherited OpenArchive( Handle,PChar( ArchiveFileName ),dwMode ); end; function TZipDll.CloseArchive( hArc:THARC ):integer; begin LoadDll; GetZipProc( FCloseArchive,hLMZip32,hZip32J,hUnZip32,'UnZipCloseArchive',true ); result := inherited CloseArchive( hArc ); end; function TZipDll.FindFirst( hArc:THArc;FileMask:string;IndivisualInfo:PIndivisualInfo ):integer; begin LoadDll; GetZipProc( FFindFirst,hLMZip32,hZip32J,hUnZip32,'UnZipFindFirst',true ); result := inherited FindFirst( hArc,FileMask,IndivisualInfo ); end; function TZipDll.FindNext( hArc:THArc;IndivisualInfo:PIndivisualInfo ):integer; begin // LoadDll; Æxé¡é╚éΘé╠é┼éΓé▀é╜ GetZipProc( FFindNext,hLMZip32,hZip32J,hUnZip32,'UnZipFindNext',true ); result := inherited FindNext( hArc,IndivisualInfo ); end; function TZipDll.GetWriteTimeEx( hArc:THArc;var lpLastWriteTime:TFileTime ):BOOL; begin GetZipProc( FGetWriteTimeEx,hLMZip32,hZip32J,hUnZip32,'UnzipGetWriteTimeEx',false ); result := inherited GetWriteTimeEx( hArc,lpLastWriteTime ); end; function TZipDll.GetCreateTimeEx( hArc:THArc;var lpCreateTime:TFileTime ):BOOL; begin GetZipProc( FGetCreateTimeEx,hLMZip32,hZip32J,hUnZip32,'UnZipGetCreateTimeEx',false ); result := inherited GetCreateTimeEx( hArc,lpCreateTime ); end; function TZipDll.GetAccessTimeEx( hArc:THArc;var lpAccessTime:TFileTime ):BOOL; begin GetZipProc( FGetAccessTimeEx,hLMZip32,hZip32J,hUnZip32,'UnZipGetAccessTimeEx',false ); result := inherited GetAccessTimeEx( hArc,lpAccessTime ); end; function TZipDll.CheckArchive( lpszFileName:PAnsiChar;iMode:integer ):DWORD; begin LoadDll; GetZipProc( FCheckArchive,hUnZip32,hLMZip32,hZip32J,'UnZipCheckArchive',true ); result := inherited CheckArchive( lpszFileName,iMode ); end; function TZipDll.SetOwnerWindowEx( Handle:HWND;lpArcProc:LPARCHIVERPROC ):BOOL; begin GetProcAddr( FSetOwnerWindowEx,hUnZip32,'UnZipSetOwnerWindowEx',true ); result := inherited SetOwnerWindowEx( Handle,lpArcProc ); end; function TZipDll.KillOwnerWindowEx( Handle:HWND ):BOOL; begin GetProcAddr( FKillOwnerWindowEx,hUnZip32,'UnZipKillOwnerWindowEx',true ); result := inherited KillOwnerWindowEx( Handle ); end; function TZipDll.ExtractMem( Handle:HWND;lpszCmdLine:PAnsiChar;lpvBuffer:LPBYTE;dwSize:DWORD;lpTime:ptime_t;lpwAttr:LPWORD;lpdwWriteSize:LPDWORD ):integer; begin GetZipProc( FExtractMem,hUnZip32,hLMZip32,hZip32J,'UnZipExtractMem',true ); result := inherited ExtractMem( Handle,lpszCmdLine,lpvBuffer,dwSize,lpTime,lpwAttr,lpdwWriteSize ); end; //--------------------------------------------------------------------- constructor TZip32.Create; begin inherited Create; // FSepChar := '/'; end; class procedure TZip32.LoadDll; begin Zip32.LoadDll; end; class procedure TZip32.FreeDll; begin Zip32.FreeDll; end; function TZip32.UnpackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; begin if( FArchiver.hUnZip32 = 0 )and( FArchiver.hLMZip32 = 0 ) then raise EArchiver.Create( 'ZIP î`Ä«Åæî╔é╠ë≡ôÇé╔é═ UNZIP32.DLL é▄é╜é═ LMZIP32.DLL é¬òKùvé┼é╖üB' ); FCmdLine := BuildUnzipCmd( '-x',ArchiveFileName,Options,DstPath,FileList,UseResFile ); result := Unzip( Handle,FCmdLine,Output ); end; function TZip32.PackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; begin if FArchiver.hZip32J <> 0 then begin FCmdLine := BuildZipCmd( '',ArchiveFileName,Options,BaseDir,FileList,UseResFile ); result := Zip( Handle,FCmdLine,Output ); exit; end; if FArchiver.hLMZip32 <> 0 then begin FCmdLine := BuildLMZipCmd( '-ru',ArchiveFileName,Options,''{BaseDir},FileList,UseResFile ); DeleteFile( ArchiveFileName ); // Æ╟ë┴é╡éµéñé╞é╖éΘé╞âAâvâèâPü[âVâçâôâGâëü[é¬ö¡É╢é╖éΘé╠é┼éáéτé⌐é╢é▀ìφÅ£é╖éΘ result := Zip( Handle,FCmdLine,Output ); exit; end; raise EArchiver.Create( 'ZIP î`Ä«Åæî╔é╠ì∞ɼé╔é═ ZIP32J.DLL é▄é╜é═ LMZIP32.DLL é¬òKùvé┼é╖üB' ); end; function TZip32.RemoveItems( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; begin FCmdLine := BuildZipCmd( '-d',ArchiveFileName,Options,''{BaseDir},FileList,UseResFile ); result := Zip( Handle,FCmdLine,Output ); end; function TZip32.UpdateArchive( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer; begin FCmdLine := BuildZipCmd( '-f',ArchiveFileName,Options,BaseDir,FileList,UseResFile ); result := Zip( Handle,FCmdLine,Output ); end; function TZip32.MakeSfx( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;var Output:string ):Integer; var SfxDat: array[0..511] of char; SfxName: string; SfxHead: TFileStream; SfxFile: TFileStream; ArcFile: TFileStream; P: PAnsiChar; begin if FArchiver.hZip32J=0 then raise EArchiver.Create( 'ZIP î`Ä«Åæî╔é⌐éτé╠Ä⌐î╚ë≡ôÇÅæî╔ì∞ɼé╔é═ ZIP32J.DLL é¬òKùvé┼é╖üB' ); if Options.gw > 0 then begin if SearchPath( nil,'sfx32gui.dat',nil,SizeOf( SfxDat ),SfxDat,P ) = 0 then raise EArchiver.Create( 'zip Åæî╔é⌐éτé╠Win32Ä⌐î╚ë≡ôÇÅæî╔é╠ì∞ɼé╔é═ sfx32gui.dat é¬òKùvé┼é╖üB' ); end else begin if SearchPath( nil,'sfx16.dat',nil,SizeOf( SfxDat ),SfxDat,P ) = 0 then raise EArchiver.Create( 'zip Åæî╔é⌐éτé╠DOSÄ⌐î╚ë≡ôÇÅæî╔é╠ì∞ɼé╔é═ sfx16.dat é¬òKùvé┼é╖üB' ); end; SfxName := ChangeFileExt( ArchiveFileName,'.EXE' ); if DstPath <> '' then begin SfxName := ExtractFileName( SfxName ); SfxName := MakeFileName( DstPath,SfxName ); end; ArcFile := TFileStream.Create( ArchiveFileName,fmOpenRead+fmShareDenyWrite ); SfxFile := TFileStream.Create( SfxName ,fmCreate ); SfxHead := TFileStream.Create( SfxDat ,fmOpenRead+fmShareDenyWrite ); try SfxFile.CopyFrom( SfxHead,0 ); SfxFile.CopyFrom( ArcFile,0 ); finally ArcFile.Free; SfxFile.Free; SfxHead.Free; end; FCmdLine := '-A '+SfxName; result := Zip( Handle,FCmdLine,Output ); end; function TZip32.UnpackToMem( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;FileName:string;lpvBuffer:LPVOID;dwSize:DWORD;lpdwWriteSize:LPDWORD ):Integer; var FileList: TStringList; begin FileList := TStringList.Create; try FileList.Add( FileName ); FCmdLine := BuildUnzipCmd( '',ArchiveFileName,Options,'',[FileList],false ); result := FArchiver.ExtractMem( Handle,PChar( FCmdLine ),lpvBuffer,dwSize,nil,nil,lpdwWriteSize ); finally FileList.Free; end; end; function TZip32.CheckArchive( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD; begin result := FArchiver.CheckArchive( PChar( ArchiveFileName ),CheckMode ); end; function TZip32.Unzip( Handle:HWND;CmdLine:string;var Output:string ):Integer; begin result := FArchiver.UnZip( Handle,PAnsiChar( CmdLine ),PAnsiChar( Output ),Length( Output )); end; function TZip32.Zip( Handle:HWND;CmdLine:string;var Output:string ):Integer; begin result := FArchiver.Zip( Handle,PAnsiChar( CmdLine ),PAnsiChar( Output ),Length( Output )); end; function TZip32.SetOwnerWindowEx( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean; begin result := FArchiver.SetOwnerWindowEx( Handle,lpArcProc ); inherited SetOwnerWindowEx( Handle,lpArcProc ); end; function TZip32.KillOwnerWindowEx( Handle:HWND ):boolean; begin result := FArchiver.KillOwnerWindowEx( Handle ); inherited KillOwnerWindowEx( Handle ); end; function Zip32JFilter( FileName:string ):string; var TmpStr: string; Pos0: Integer; Pos1: Integer; Pos2: Integer; // Pos3: Integer; procedure Replace( Pos,Size:integer;NewString:string ); begin Result := Result + Copy( TmpStr,1,Pos-1 ) + NewString; TmpStr := Copy( TmpStr,Pos+Size,MaxInt ); end; begin TmpStr := FileName; Result := ''; while TmpStr <> '' do begin Pos1 := AnsiPos( '\',TmpStr ); Pos2 := AnsiPos( '[',TmpStr ); // Pos3 := AnsiPos( ']',TmpStr ); Pos0 := MaxInt; if( Pos1 > 0 )and( Pos1 < Pos0 ) then Pos0 := Pos1; if( Pos2 > 0 )and( Pos2 < Pos0 ) then Pos0 := Pos2; // if( Pos3 > 0 )and( Pos3 < Pos0 ) then Pos0 := Pos3; if Pos0 = MaxInt then Break; if Pos1 = Pos0 then Replace( Pos1,1,'/' ); if Pos2 = Pos0 then Replace( Pos2,1,'[[]' ); // if Pos3 = Pos0 then Replace( Pos3,1,'[]]' ); end; Result := Result + TmpStr; end; function TZip32.BuildUnzipCmd( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; var CmdLine: TCmdOpt; begin with Options do begin CmdLine := TCmdOpt.Create; try CmdLine.Filter := Zip32JFilter; // CmdLine.Add( '-+' ); // Åφé╔âîâWâXâgâèé╠É▌ÆΦé≡û│Äïé╖éΘ // CmdLine.AddIntOpt( 'a' ,a ); // a[0|1|2] æ«É½é╠ì─î╗üB if c=1 then CmdLine.Add( '-o' ); // c[0|1] â^âCâÇâXâ^âôâvîƒì╕é≡Å╚ù¬ // CmdLine.AddIntOpt( 'd' ,d ); // d[0|1] âfâBâîâNâgâèû╝é╠èiö[ // CmdLine.AddIntOpt( 'e' ,e ); // e[0|1] ĽÅæâTâCâYé≡ö╝ò¬é╔é╡é─ê│Åk // CmdLine.AddIntOpt( 'f' ,f ); // f[0|1] âfâBâXâNÄcù╩â`âFâbâNé╠ÆåÄ~ // CmdLine.AddIntOpt( 'h' ,h ); // h[0|1|2|3] âwâbâ_é╠î`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'i' ,i ); // i[0|1|2] âtâ@âCâïæIæ≡é┼æσò╢ÄÜé╞żò╢ÄÜé≡ïµò╩ // CmdLine.AddIntOpt( 'l' ,l ); // l[0|1|2] ôWèJâìâOé╠âtâ@âCâïû╝é╠ò\Īû@é╠ò╧ìX // CmdLine.AddIntOpt( 'm' ,m ); // m[0|1|2] Ä┐ûΓé╔ yes é╞ë╝ÆΦ if( n > 0 )or( CallbackEnabled ) then CmdLine.Add( '--i' ); // n[0|1] ôWèJÅ≤ï╡â_âCâAâìâOò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'o' ,o ); // o[0|1|2] ïîî`Ä«é┼Åæî╔é≡ì∞ɼ // CmdLine.AddIntOpt( 'p' ,p ); // p[0|1|2] æSâpâXû╝é┼ìçÆv // CmdLine.AddIntOpt( 'r' ,r ); // r[0|1|2] ì─ïAôIîƒì⌡ // CmdLine.AddIntOpt( 's' ,s ); // s[0|1] âXâLâbâvò\Īé╠ù}ɺ // CmdLine.AddIntOpt( 't' ,t ); // t[0|1] Åæî╔é╠ìXÉVô·Ä₧é╠ÄwÆΦ // CmdLine.AddIntOpt( 'u' ,u ); // u[0|1] âtâ@âCâïé╠ìXÉVüiÉVé╡éóéαé╠üj // CmdLine.AddPath1 ( 'w' ,w ); // w[0|1|<Dirû╝>] ì∞ï╞ùpâfâBâîâNâgâèé╠ÄwÆΦ if x=0 then CmdLine.Add( '-j' ); // x[0|1] âfâBâîâNâgâèû╝é≡ùLî°é╔é╖éΘ // CmdLine.AddIntOpt( 'y' ,y ); // y[0|1] æSé─é╠Ä┐ûΓé╔ yes é╞ë╝ÆΦ // CmdLine.AddIntOpt( 'z' ,z ); // z[0|1|2|<ègÆúÄq>] ûóê│Åkâtâ@âCâïé╠ÄwÆΦ ###ègÆúÄqé═âTâ|ü[âgé╡é╚éó### // CmdLine.AddIntOpt( 'jc' ,jc ); // jc[0|1] öjæ╣âwâbâ_é≡û│Äï // CmdLine.AddIntOpt( 'jd' ,jd ); // jd[<âTâCâY>] âfâBâXâNé╠ï≤é½ùeù╩é≡èmöF // CmdLine.AddIntOpt( 'je' ,je ); // je[<âTâCâY>] Huffman âoâbâtâ@é╠æσé½é│é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jf' ,jf ); // jf[0|1] âïü[âgïLìåé╠ìφÅ£ // CmdLine.AddIntOpt( 'jh' ,jh ); // jh[0|1] WindowsNT/95 ÉΩùpé╠â}ü[âNé≡Åæî╔é╔òtë┴ // CmdLine.AddIntOpt( 'ji' ,ji ); // ji[0|1] ÆZéóâtâ@âCâïû╝é┼èiö[ // CmdLine.AddIntOpt( 'jm' ,jm ); // jm[0|1|2|3|4] ê│Åkî`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jn' ,jn ); // jn[0|1] ÉVïKâtâ@âCâïé╠é▌ // CmdLine.AddStrOpt( 'jo' ,jo ); // jo[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚ì~ // CmdLine.AddStrOpt( 'job',job ); // job[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚æO // CmdLine.AddIntOpt( 'jp' ,jp ); // jp[0|1] ÉiÆ╗âoü[é≡âvâìâOâîâXüEâoü[é┼ò\Ī // CmdLine.AddIntOpt( 'jr' ,jr ); // jr[0|1] âtâ@âCâïé╠Æué½è╖éª // CmdLine.AddIntOpt( 'jss',jss ); // jss[0|1] ê│Åkâtâ@âCâïâIü[âvâôâGâëü[é≡û│ÄïüBÆ╩ÅφüCê│ÅkÄ₧é╔ê│Åkæ╬Å█âtâ@ // CmdLine.AddIntOpt( 'jw' ,jw ); // jw[0|1|2|3|4] WinSFX/WinSFXM é≡ì∞ɼ // CmdLine.AddLstOpt( 'jx' ,jx ); // jx[<âtâ@âCâïû╝>] Å£èOé╖éΘâtâ@âCâïû╝ // CmdLine.AddIntOpt( 'jyc',jyc ); // jyc[0|1] âfâBâîâNâgâèì∞ɼé╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyd',jyd ); // jyd[0|1] âtâ@âCâïìφÅ£é╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyk',jyk ); // jyk[0|1] Ägùpé┼é½éΘâfâBâXâNùeù╩é╠èmöFé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyn',jyn ); // jyn[0|1] ÉVâtâ@âCâïû╝é╠ùvïüé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyo',jyo ); // jyo[0|1] è∙æ╢âtâ@âCâïé╓é╠ÅπÅæé½èmöFé╠Å╚ù¬ // CmdLine.AddStrOpt( 'jz' ,jz ); // jz[<âtâ@âCâïû╝>] âtâ@âCâïÆìÄ▀é╠âtâ@âCâïé≡ïƒïï // CmdLine.AddIntOpt( 'ga' ,ga ); // ga[0|1] Åæé½ì₧é▌òsë┬æ«É½é≡û│Äï // CmdLine.AddIntOpt( 'gd' ,gd ); // gd[0|1] ù]ò¬é╚âfü[â^é╠ìφÅ£ // CmdLine.AddIntOpt( 'ge' ,ge ); // ge[0|1] ì┼Åëé╠ègÆúÄqé≡öFÄ» // CmdLine.AddIntOpt( 'gf' ,gf ); // gf[0|1|2] é╖é┼é╔éáéΘâtâ@âCâïé╠ìXÉV // CmdLine.AddIntOpt( 'gj' ,gj ); // gj[0|1] x û╜ù▀é≡ e û╜ù▀é╞ô»ùlé╞î⌐é╚é╖ // CmdLine.AddIntOpt( 'gm' ,gm ); // gm[0|1] âGâëü[âüâbâZü[âWò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'gn' ,gn ); // gn[0|1|2] ôWèJâtâ@âCâïé╠ìçîvâTâCâYé≡ 100% é╞é╡é╜ÉiÆ╗âOâëâté╠ò\Ī // CmdLine.AddIntOpt( 'go' ,go ); // go[0|1] â_âCâAâìâOé╠âIü[âiü[âEâBâôâhâEé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gp' ,gp ); // gp[0|1] âEâBâôâhâEé≡ Disable é╔é╡é╚éó // CmdLine.AddIntOpt( 'gr' ,gr ); // gr[<âtâ@âCâïû╝>] ò╧ìXâtâ@âCâïû╝é≡ïƒïï // CmdLine.AddIntOpt( 'gs' ,gs ); // gs[<âTâCâY>] âwâbâ_îƒì⌡âTâCâYé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gu' ,gu ); // gu[0|1] WinSFXüCDosSFX é╔æSé─é╠âtâ@âCâïé≡èiö[ // CmdLine.AddIntOpt( 'gw' ,gw ); // gw[0|1|2|3|4] WinSFX32/WinSFX32M é≡ì∞ɼ CmdLine.Add( UserOptions ); AddFileSpec1( CmdLine,ArchiveFileName,Path ); AddFileSpec2( CmdLine,Options,FileList,UseResFile ); result := cmd + CmdLine.Str; finally CmdLine.Free; end; end; end; function TZip32.BuildLMZipCmd( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; var CmdLine: TCmdOpt; begin with Options do begin CmdLine := TCmdOpt.Create; try // CmdLine.Add( '-+' ); // Åφé╔âîâWâXâgâèé╠É▌ÆΦé≡û│Äïé╖éΘ // CmdLine.AddIntOpt( 'a' ,a ); // a[0|1|2] æ«É½é╠ì─î╗üB if c=1 then CmdLine.Add( '-o' ); // c[0|1] â^âCâÇâXâ^âôâvîƒì╕é≡Å╚ù¬ // CmdLine.AddIntOpt( 'd' ,d ); // d[0|1] âfâBâîâNâgâèû╝é╠èiö[ // CmdLine.AddIntOpt( 'e' ,e ); // e[0|1] ĽÅæâTâCâYé≡ö╝ò¬é╔é╡é─ê│Åk // CmdLine.AddIntOpt( 'f' ,f ); // f[0|1] âfâBâXâNÄcù╩â`âFâbâNé╠ÆåÄ~ // CmdLine.AddIntOpt( 'h' ,h ); // h[0|1|2|3] âwâbâ_é╠î`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'i' ,i ); // i[0|1|2] âtâ@âCâïæIæ≡é┼æσò╢ÄÜé╞żò╢ÄÜé≡ïµò╩ // CmdLine.AddIntOpt( 'l' ,l ); // l[0|1|2] ôWèJâìâOé╠âtâ@âCâïû╝é╠ò\Īû@é╠ò╧ìX // CmdLine.AddIntOpt( 'm' ,m ); // m[0|1|2] Ä┐ûΓé╔ yes é╞ë╝ÆΦ // if n=1 then CmdLine.Add( '--i' ); // n[0|1] ôWèJÅ≤ï╡â_âCâAâìâOò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'o' ,o ); // o[0|1|2] ïîî`Ä«é┼Åæî╔é≡ì∞ɼ // CmdLine.AddIntOpt( 'p' ,p ); // p[0|1|2] æSâpâXû╝é┼ìçÆv // CmdLine.AddIntOpt( 'r' ,r ); // r[0|1|2] ì─ïAôIîƒì⌡ // CmdLine.AddIntOpt( 's' ,s ); // s[0|1] âXâLâbâvò\Īé╠ù}ɺ // CmdLine.AddIntOpt( 't' ,t ); // t[0|1] Åæî╔é╠ìXÉVô·Ä₧é╠ÄwÆΦ // CmdLine.AddIntOpt( 'u' ,u ); // u[0|1] âtâ@âCâïé╠ìXÉVüiÉVé╡éóéαé╠üj // CmdLine.AddIntOpt( 'w' ,w ); // w[0|1|<Dirû╝>] ì∞ï╞ùpâfâBâîâNâgâèé╠ÄwÆΦ if x=0 then CmdLine.Add( '-j' ); // x[0|1] âfâBâîâNâgâèû╝é≡ùLî°é╔é╖éΘ // CmdLine.AddIntOpt( 'y' ,y ); // y[0|1] æSé─é╠Ä┐ûΓé╔ yes é╞ë╝ÆΦ // CmdLine.AddIntOpt( 'z' ,z ); // z[0|1|2|<ègÆúÄq>] ûóê│Åkâtâ@âCâïé╠ÄwÆΦ ###ègÆúÄqé═âTâ|ü[âgé╡é╚éó### // CmdLine.AddIntOpt( 'jc' ,jc ); // jc[0|1] öjæ╣âwâbâ_é≡û│Äï // CmdLine.AddIntOpt( 'jd' ,jd ); // jd[<âTâCâY>] âfâBâXâNé╠ï≤é½ùeù╩é≡èmöF // CmdLine.AddIntOpt( 'je' ,je ); // je[<âTâCâY>] Huffman âoâbâtâ@é╠æσé½é│é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jf' ,jf ); // jf[0|1] âïü[âgïLìåé╠ìφÅ£ // CmdLine.AddIntOpt( 'jh' ,jh ); // jh[0|1] WindowsNT/95 ÉΩùpé╠â}ü[âNé≡Åæî╔é╔òtë┴ // CmdLine.AddIntOpt( 'ji' ,ji ); // ji[0|1] ÆZéóâtâ@âCâïû╝é┼èiö[ // CmdLine.AddIntOpt( 'jm' ,jm ); // jm[0|1|2|3|4] ê│Åkî`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jn' ,jn ); // jn[0|1] ÉVïKâtâ@âCâïé╠é▌ // CmdLine.AddStrOpt( 'jo' ,jo ); // jo[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚ì~ // CmdLine.AddStrOpt( 'job',job ); // job[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚æO // CmdLine.AddIntOpt( 'jp' ,jp ); // jp[0|1] ÉiÆ╗âoü[é≡âvâìâOâîâXüEâoü[é┼ò\Ī // CmdLine.AddIntOpt( 'jr' ,jr ); // jr[0|1] âtâ@âCâïé╠Æué½è╖éª // CmdLine.AddIntOpt( 'jss',jss ); // jss[0|1] ê│Åkâtâ@âCâïâIü[âvâôâGâëü[é≡û│ÄïüBÆ╩ÅφüCê│ÅkÄ₧é╔ê│Åkæ╬Å█âtâ@ // CmdLine.AddIntOpt( 'jw' ,jw ); // jw[0|1|2|3|4] WinSFX/WinSFXM é≡ì∞ɼ // CmdLine.AddLstOpt( 'jx' ,jx ); // jx[<âtâ@âCâïû╝>] Å£èOé╖éΘâtâ@âCâïû╝ // CmdLine.AddIntOpt( 'jyc',jyc ); // jyc[0|1] âfâBâîâNâgâèì∞ɼé╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyd',jyd ); // jyd[0|1] âtâ@âCâïìφÅ£é╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyk',jyk ); // jyk[0|1] Ägùpé┼é½éΘâfâBâXâNùeù╩é╠èmöFé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyn',jyn ); // jyn[0|1] ÉVâtâ@âCâïû╝é╠ùvïüé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyo',jyo ); // jyo[0|1] è∙æ╢âtâ@âCâïé╓é╠ÅπÅæé½èmöFé╠Å╚ù¬ // CmdLine.AddStrOpt( 'jz' ,jz ); // jz[<âtâ@âCâïû╝>] âtâ@âCâïÆìÄ▀é╠âtâ@âCâïé≡ïƒïï // CmdLine.AddIntOpt( 'ga' ,ga ); // ga[0|1] Åæé½ì₧é▌òsë┬æ«É½é≡û│Äï // CmdLine.AddIntOpt( 'gd' ,gd ); // gd[0|1] ù]ò¬é╚âfü[â^é╠ìφÅ£ // CmdLine.AddIntOpt( 'ge' ,ge ); // ge[0|1] ì┼Åëé╠ègÆúÄqé≡öFÄ» // CmdLine.AddIntOpt( 'gf' ,gf ); // gf[0|1|2] é╖é┼é╔éáéΘâtâ@âCâïé╠ìXÉV // CmdLine.AddIntOpt( 'gj' ,gj ); // gj[0|1] x û╜ù▀é≡ e û╜ù▀é╞ô»ùlé╞î⌐é╚é╖ // CmdLine.AddIntOpt( 'gm' ,gm ); // gm[0|1] âGâëü[âüâbâZü[âWò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'gn' ,gn ); // gn[0|1|2] ôWèJâtâ@âCâïé╠ìçîvâTâCâYé≡ 100% é╞é╡é╜ÉiÆ╗âOâëâté╠ò\Ī // CmdLine.AddIntOpt( 'go' ,go ); // go[0|1] â_âCâAâìâOé╠âIü[âiü[âEâBâôâhâEé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gp' ,gp ); // gp[0|1] âEâBâôâhâEé≡ Disable é╔é╡é╚éó // CmdLine.AddIntOpt( 'gr' ,gr ); // gr[<âtâ@âCâïû╝>] ò╧ìXâtâ@âCâïû╝é≡ïƒïï // CmdLine.AddIntOpt( 'gs' ,gs ); // gs[<âTâCâY>] âwâbâ_îƒì⌡âTâCâYé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gu' ,gu ); // gu[0|1] WinSFXüCDosSFX é╔æSé─é╠âtâ@âCâïé≡èiö[ // CmdLine.AddIntOpt( 'gw' ,gw ); // gw[0|1|2|3|4] WinSFX32/WinSFX32M é≡ì∞ɼ CmdLine.Add( UserOptions ); AddFileSpec1( CmdLine,ArchiveFileName,Path ); AddFileSpec2( CmdLine,Options,FileList,UseResFile ); result := cmd + CmdLine.Str; finally CmdLine.Free; end; end; end; function TZip32.BuildZipCmd( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String; var CmdLine: TCmdOpt; function zdate( yymmddhhmmss:string ):string; var yy: string; yyyy: string; begin if yymmddhhmmss = aosUnAssigned then begin result := aosUnAssigned; exit; end; yy := copy( yymmddhhmmss,1,2 ); // yy if StrToInt( yy ) < 80 then yyyy := '20'+yy else yyyy := '19'+yy; result := copy( yymmddhhmmss,3,4 )+yyyy; // mmdd+yyyy end; // procedure AddDateOpt( opt,yymmddhhmmss:string ); // var // zd: string; // begin // zd := zdate( yymmddhhmmss ); // if zd <> aosUnAssigned then CmdLine.Add( '-'+opt+' '+zd ); // end; begin { - -d Remove(delete) entries from a zip archive. Åæî╔ôαâtâ@âCâïé╠ìφÅ£ - -f Freshen(replace) an existing entry in the zip archive only if it has been modified more recently than the version already in the zip archive. ex) zip -f foo Åæî╔ôαé╠âtâ@âCâïé╠ìXÉVé≡ìséñ - -F Fix Åæî╔é╠ÅCò£ - -h Help ------------------------------- x -A Adjust self-extractiong executable archive. Åæî╔é≡Ä⌐î╚ë≡ôÇÄ└ìsî`Ä«é╞ë╝ÆΦüB(?) o -D Do not create entries in the zip archive for directories. âfâBâîâNâgâèû╝é≡èiö[é╡é╚éóüB x -e Encrypt the contents of the zip archive using a password. ê├ìåë╗é≡ìséñüB(ûóâTâ|ü[âg) o -FF Åæî╔é╠ÅCò£(Åæî╔âTâCâYé≡ÉMùpé╡é╚éó) x -g Grow(append t) the specified zip archive. o -j Junk the path. âpâXû╝é≡ò█æ╢é╡é╚éóé┼âtâ@âCâïû╝é╛é»ò█æ╢ o -J strip any prepended data(e.g. a SFX stub) from the archive. Ä⌐î╚ë≡ôÇî`Ä«é╠Åæî╔é≡òüÆ╩é╠Åæî╔é╔é╖éΘüB o -k attempt to convert the names and paths to conform to MSDOS. âtâ@âCâïû╝é≡MSDOSî`Ä«é╔ò╧è╖é╖éΘüB x -l LF->CR LFò╧è╖(Unix->MSDOS) x -ll CR LF->LFò╧è╖(MSDOS->Unix) x -m Move the specified files into the zip archive; o -o set Oldest time Åæî╔ôαé╠âtâ@âCâïé╠ì┼ÅIìXÉVÄ₧ìÅé≡êΩö╘ÉVé╡éóâtâ@âCâïé╠ô·Ä₧é╔ò╧ìX (ê°Éöé═âtâ@âCâïé╠é▌) o -q Quit mode. âüâbâZü[âWé≡ò\Īé╡é╚éóüB o -r travel the directory structure Recursively ex) zip -r foo foo ÄwÆΦé╡é╜âfâBâîâNâgâè/âtâ@âCâïé≡ì─ïAôIé╔ò█æ╢é╖éΘüB x -R travel the directory structure Recursively starting at the current directory. ex) zip -R foo *.c âJâîâôâgâfâBâîâNâgâèê╚ë║é╠ì\æóé┼é≡ì─ïAôIé╔îƒì⌡é╡ò█æ╢é╖éΘüB (*.cé╔â}âbâ`é╖éΘéαé╠é╠é▌ò█æ╢é╖éΘ) o -S include System and hidden files. âVâXâeâÇæ«É½/ëBé╡æ«É½é╠âtâ@âCâïéαè▄é▀éΘüB o -t mmddyyyy do not operate on files modified prior to the specified data. ex) zip -rt 12071997 infamy foo ÄwÆΦô·Ä₧ê╚ì~é╔ÅCÉ│é│éΩé╜âtâ@âCâïé╠é▌æÇì∞é≡ìséñüB o -tt mmddyyyy ÄwÆΦô·Ä₧éµéΦæOé╔ÅCÉ│é│éΩé╜âtâ@âCâïé╠é▌æÇì∞é≡ìséñ o -u Updata(replace) an existing entry in the zip archive only if it has been modified more recetntly than the version already in the zip archive. Åæî╔ôαé╠âtâ@âCâïé╞ì┼ÅIìXÉVô·Ä₧é╠öΣèré≡ìséóÉVé╡éóéαé╠é╠é▌ Æué½è╖éªéΘüB o -v Verbose mode or print diagnostic versio info. âüâbâZü[âWé≡Å┌ì╫ò\Ī x -X do not save extra file attributes(Extended Attributes on OS/2 ,uid/gid and file times on Unix) Unix,OS/2ôÖé┼ùpéóéΘ(ègÆú)æ«É½é═ò█æ╢é╡é╚éóüB x -$ include the Volume label. â{âèâàü[âÇâëâxâïéαò█æ╢ o -#(0-9 number) Regulate the speed of compression. ê│ÅkùªüAâXâsü[âhé╠É▌ÆΦüB (-0:ê│Åké╡é╚éó/-1:êΩö╘æ¼éó(ê│Åkùªì┼ż)/-9:êΩö╘Æxéó(ê│Åkùªì┼æσ)) âfâtâHâïâgé═-6 } with Options do begin CmdLine := TCmdOpt.Create; try // CmdLine.Add( '-+' ); // Åφé╔âîâWâXâgâèé╠É▌ÆΦé≡û│Äïé╖éΘ CmdLine.Filter := Zip32JFilter; if a > 0 then CmdLine.Add( '-S' ); // a[0|1|2] æ«É½é╠ì─î╗üB if a < 2 then CmdLine.Add( '-D' ); // a[0|1|2] æ«É½é╠ì─î╗üB // CmdLine.AddIntOpt( 'c' ,c ); // c[0|1] â^âCâÇâXâ^âôâvîƒì╕é≡Å╚ù¬ // CmdLine.AddIntOpt( 'd' ,d ); // d[0|1] âfâBâîâNâgâèû╝é╠èiö[ // CmdLine.AddIntOpt( 'e' ,e ); // e[0|1] ĽÅæâTâCâYé≡ö╝ò¬é╔é╡é─ê│Åk // CmdLine.AddIntOpt( 'f' ,f ); // f[0|1] âfâBâXâNÄcù╩â`âFâbâNé╠ÆåÄ~ // CmdLine.AddIntOpt( 'h' ,h ); // h[0|1|2|3] âwâbâ_é╠î`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'i' ,i ); // i[0|1|2] âtâ@âCâïæIæ≡é┼æσò╢ÄÜé╞żò╢ÄÜé≡ïµò╩ if l > 0 then CmdLine.Add( '-v' ); // l[0|1|2] ôWèJâìâOé╠âtâ@âCâïû╝é╠ò\Īû@é╠ò╧ìX // CmdLine.AddIntOpt( 'm' ,m ); // m[0|1|2] Ä┐ûΓé╔ yes é╞ë╝ÆΦ if n > 0 then CmdLine.Add( '-q' ); // n[0|1] ôWèJÅ≤ï╡â_âCâAâìâOò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'o' ,o ); // o[0|1|2] ïîî`Ä«é┼Åæî╔é≡ì∞ɼ // CmdLine.AddIntOpt( 'p' ,p ); // p[0|1|2] æSâpâXû╝é┼ìçÆv if r > 0 then CmdLine.Add( '-r' ); // r[0|1|2] ì─ïAôIîƒì⌡ // CmdLine.AddIntOpt( 's' ,s ); // s[0|1] âXâLâbâvò\Īé╠ù}ɺ if n > 0 then CmdLine.Add( '-o' ); // t[0|1] Åæî╔é╠ìXÉVô·Ä₧é╠ÄwÆΦ if u > 0 then CmdLine.Add( '-u' ); // u[0|1] âtâ@âCâïé╠ìXÉVüiÉVé╡éóéαé╠üj // CmdLine.AddIntOpt( 'w' ,w ); // w[0|1|<Dirû╝>] ì∞ï╞ùpâfâBâîâNâgâèé╠ÄwÆΦ if x = 0 then CmdLine.Add( '-j' ); // x[0|1] âfâBâîâNâgâèû╝é≡ùLî°é╔é╖éΘ // CmdLine.AddIntOpt( 'y' ,y ); // y[0|1] æSé─é╠Ä┐ûΓé╔ yes é╞ë╝ÆΦ // CmdLine.AddIntOpt( 'z' ,z ); // z[0|1|2|<ègÆúÄq>] ûóê│Åkâtâ@âCâïé╠ÄwÆΦ ###ègÆúÄqé═âTâ|ü[âgé╡é╚éó### if jc > 0 then CmdLine.Add( '-FF' ); // jc[0|1] öjæ╣âwâbâ_é≡û│Äï // CmdLine.AddIntOpt( 'jd' ,jd ); // jd[<âTâCâY>] âfâBâXâNé╠ï≤é½ùeù╩é≡èmöF // CmdLine.AddIntOpt( 'je' ,je ); // je[<âTâCâY>] Huffman âoâbâtâ@é╠æσé½é│é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jf' ,jf ); // jf[0|1] âïü[âgïLìåé╠ìφÅ£ // CmdLine.AddIntOpt( 'jh' ,jh ); // jh[0|1] WindowsNT/95 ÉΩùpé╠â}ü[âNé≡Åæî╔é╔òtë┴ if ji > 0 then CmdLine.Add( '-k' ); // ji[0|1] ÆZéóâtâ@âCâïû╝é┼èiö[ CmdLine.AddIntOpt( '' ,jm ); // jm[0|1|2|3|4] ê│Åkî`Ä«é≡ÄwÆΦ // CmdLine.AddIntOpt( 'jn' ,jn ); // jn[0|1] ÉVïKâtâ@âCâïé╠é▌ // CmdLine.AddStrOpt( 't ' ,zdate( jo ));// jo [<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚ì~ // CmdLine.AddStrOpt( 'tt ',zdate( job ));// job[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚æO // AddDateOpt( 't' ,jo ); // jo [<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚ì~ // AddDateOpt( 'tt',job ); // job[<Ä₧ìÅÄwÆΦ>] YYMMDDHHMMSS é╠ô·òtê╚æO // CmdLine.AddIntOpt( 'jp' ,jp ); // jp[0|1] ÉiÆ╗âoü[é≡âvâìâOâîâXüEâoü[é┼ò\Ī // CmdLine.AddIntOpt( 'jr' ,jr ); // jr[0|1] âtâ@âCâïé╠Æué½è╖éª // CmdLine.AddIntOpt( 'jss',jss ); // jss[0|1] ê│Åkâtâ@âCâïâIü[âvâôâGâëü[é≡û│ÄïüBÆ╩ÅφüCê│ÅkÄ₧é╔ê│Åkæ╬Å█âtâ@ // CmdLine.AddIntOpt( 'jw' ,jw ); // jw[0|1|2|3|4] WinSFX/WinSFXM é≡ì∞ɼ // CmdLine.AddLstOpt( 'jx' ,jx ); // jx[<âtâ@âCâïû╝>] Å£èOé╖éΘâtâ@âCâïû╝ // CmdLine.AddIntOpt( 'jyc',jyc ); // jyc[0|1] âfâBâîâNâgâèì∞ɼé╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyd',jyd ); // jyd[0|1] âtâ@âCâïìφÅ£é╠èmöFé≡Å╚ù¬ // CmdLine.AddIntOpt( 'jyk',jyk ); // jyk[0|1] Ägùpé┼é½éΘâfâBâXâNùeù╩é╠èmöFé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyn',jyn ); // jyn[0|1] ÉVâtâ@âCâïû╝é╠ùvïüé╠Å╚ù¬ // CmdLine.AddIntOpt( 'jyo',jyo ); // jyo[0|1] è∙æ╢âtâ@âCâïé╓é╠ÅπÅæé½èmöFé╠Å╚ù¬ // CmdLine.AddStrOpt( 'jz' ,jz ); // jz[<âtâ@âCâïû╝>] âtâ@âCâïÆìÄ▀é╠âtâ@âCâïé≡ïƒïï // CmdLine.AddIntOpt( 'ga' ,ga ); // ga[0|1] Åæé½ì₧é▌òsë┬æ«É½é≡û│Äï if gd > 0 then CmdLine.Add( '-J' ); // gd[0|1] ù]ò¬é╚âfü[â^é╠ìφÅ£ // CmdLine.AddIntOpt( 'ge' ,ge ); // ge[0|1] ì┼Åëé╠ègÆúÄqé≡öFÄ» // CmdLine.AddIntOpt( 'gf' ,gf ); // gf[0|1|2] é╖é┼é╔éáéΘâtâ@âCâïé╠ìXÉV // CmdLine.AddIntOpt( 'gj' ,gj ); // gj[0|1] x û╜ù▀é≡ e û╜ù▀é╞ô»ùlé╞î⌐é╚é╖ // CmdLine.AddIntOpt( 'gm' ,gm ); // gm[0|1] âGâëü[âüâbâZü[âWò\Īé╠ù}Ä~ // CmdLine.AddIntOpt( 'gn' ,gn ); // gn[0|1|2] ôWèJâtâ@âCâïé╠ìçîvâTâCâYé≡ 100% é╞é╡é╜ÉiÆ╗âOâëâté╠ò\Ī // CmdLine.AddIntOpt( 'go' ,go ); // go[0|1] â_âCâAâìâOé╠âIü[âiü[âEâBâôâhâEé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gp' ,gp ); // gp[0|1] âEâBâôâhâEé≡ Disable é╔é╡é╚éó // CmdLine.AddIntOpt( 'gr' ,gr ); // gr[<âtâ@âCâïû╝>] ò╧ìXâtâ@âCâïû╝é≡ïƒïï // CmdLine.AddIntOpt( 'gs' ,gs ); // gs[<âTâCâY>] âwâbâ_îƒì⌡âTâCâYé╠ÄwÆΦ // CmdLine.AddIntOpt( 'gu' ,gu ); // gu[0|1] WinSFXüCDosSFX é╔æSé─é╠âtâ@âCâïé≡èiö[ // CmdLine.AddIntOpt( 'gw' ,gw ); // gw[0|1|2|3|4] WinSFX32/WinSFX32M é≡ì∞ɼ CmdLine.Add( UserOptions ); AddFileSpec1( CmdLine,ArchiveFileName,Path ); AddFileSpec2( CmdLine,Options,FileList,UseResFile ); result := cmd + CmdLine.Str; finally CmdLine.Free; end; end; end; function TZip32.FindOpen( Handle:HWND;ArchiveFileName:string;dwMode:DWORD ):THARC; begin result:= FArchiver.OpenArchive( Handle,PChar( ExpandFileName( ArchiveFileName )),dwMode ); end; function TZip32.FindClose( hArc:THArc ):integer; begin result := FArchiver.CloseArchive( hArc ); end; function TZip32.FindFirst( hArc:THArc;var IndivisualInfo:TIndivisualInfo;FileMask:string ):integer; begin result := FArchiver.FindFirst( hArc,PChar( FileMask ),@IndivisualInfo ); end; function TZip32.FindNext( hArc:THArc;var IndivisualInfo:TIndivisualInfo ):integer; begin result := FArchiver.FindNext( hArc,@IndivisualInfo ) end; // function IsZipArchive( ArchiveFileName:string ):boolean; // var // SfxType: integer; // begin // try // LoadDll; // SfxType:= UnZipCheckArchive( PChar( ExpandFileName( ArchiveFileName )),CHECKARCHIVE_SFX+CHECKARCHIVE_ALL ); // result := ( SfxType <> 0 ); // except // result := false; // end; // end; function IsZipArchive( ArchiveFileName:string ):boolean; var hArc: THARC; begin try LoadDLL; ArchiveFileName := ExpandFileName( ArchiveFileName ); result := false; if not FileExists( ArchiveFileName ) then exit; hArc := FArchiver.OpenArchive( 0,PAnsiChar( ArchiveFileName ),M_REGARDLESS_INIT_FILE+M_ERROR_MESSAGE_OFF ); if hArc <> 0 then FArchiver.CloseArchive( hArc ); result := ( hArc <> 0 ); except result := false; end; end; end.