function BuildCmdLine( 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;
public
function Bga( 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 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 IsBgaArchive( ArchiveFileName:string ):boolean;
function TBGA32.UnpackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
function TBGA32.PackFiles( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
function TBGA32.RemoveItems( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;BaseDir:String;FileList:array of const;UseResFile:boolean;var Output:string ):Integer;
begin
FCmdLine := BuildCmdLine( 'd',ArchiveFileName,Options,'',FileList,ruOnRemoveItem in Options.ResFileUsage );
result := Bga( Handle,FCmdLine,Output );
end;
function TBGA32.MakeSfx( Handle:HWND;ArchiveFileName:string;Options:TArchiverOptions;DstPath:String;var Output:string ):Integer;
begin
FCmdLine := BuildCmdLine( 's',ArchiveFileName,Options,DstPath,[nil],ruOnRemoveItem in Options.ResFileUsage );
result := Bga( Handle,FCmdLine,Output );
end;
function TBGA32.CheckArchive( ArchiveFileName:string;CheckMode:integer;CheckOptions:integer ):DWORD;
begin
if CheckMode=CHECKARCHIVE_FULLCRC then CheckMode := CHECKARCHIVE_BASIC;
result := FArchiver.CheckArchive( PChar( ArchiveFileName ),CheckMode+CheckOptions );
end;
function TBGA32.SetOwnerWindowEx ( Handle:HWND;lpArcProc:LPARCHIVERPROC ):boolean;
begin
inherited SetOwnerWindowEx( Handle,lpArcProc );
result := FArchiver.SetOwnerWindowEx( Handle,lpArcProc );
end;
function TBGA32.KillOwnerWindowEx( Handle:HWND ):boolean;
begin
result := FArchiver.KillOwnerWindowEx( Handle );
inherited KillOwnerWindowEx( Handle );
end;
function TBGA32.Bga( Handle:HWND;CmdLine:string;var Output:string ):integer;
begin
result := FArchiver.ArchiverProc( Handle,PChar( CmdLine ),PAnsiChar( Output ),Length( Output ));
end;
function TBGA32.BuildCmdLine( Cmd,ArchiveFileName:string;Options:TArchiverOptions;Path:String;FileList:array of const;UseResFile:boolean ):String;