VPatch 3.0

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4271 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2005-09-17 09:25:44 +00:00
parent 9929eb7120
commit 4bf6509225
53 changed files with 3918 additions and 1782 deletions

View file

@ -6,48 +6,46 @@ uses Classes, SysUtils;
function DoGenerate(const Source, Target: String; Stream: TStream; Config: String): Integer; forward;
var
WaitAfterGenerate: Boolean = False;
OptimalPatches: Boolean = False;
implementation
uses PatchGenerator;
uses
OSUtil, Forms;
function DoGenerate(const Source, Target: String; Stream: TStream; Config: String): Integer;
var
PG: TPatchGenerator;
a: Integer;
F: TextFile;
Temp, BatchFile: String;
fs: TFileStream;
begin
WriteLn('Generating '+ExtractFileName(Source)+' to '+ExtractFileName(Target)+'...');
PG:=TPatchGenerator.Create;
PG.StartBlockSize:=512;
PG.MinimumBlockSize:=512;
PG.BlockDivider:=2;
PG.StepSize:=256;
try
a:=Pos(',',Config);
if(a=0) then a:=Length(Config)+1;
PG.StartBlockSize:=StrToInt(Copy(Config,1,a-1));
Config:=Copy(Config,a+1,Length(Config));
a:=Pos(',',Config);
if(a=0) then a:=Length(Config)+1;
PG.MinimumBlockSize:=StrToInt(Copy(Config,1,a-1));
Config:=Copy(Config,a+1,Length(Config));
a:=Pos(',',Config);
if(a=0) then a:=Length(Config)+1;
PG.BlockDivider:=StrToInt(Copy(Config,1,a-1));
Config:=Copy(Config,a+1,Length(Config));
a:=Pos(',',Config);
if(a=0) then a:=Length(Config)+1;
PG.StepSize:=StrToInt(Copy(Config,1,a-1));
finally
BatchFile:=ExcludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + PathDelim +'~generate_patch.bat';
AssignFile(F,BatchFile);
Rewrite(F);
Temp:=GetTempFile;
WriteLn(F,'@cls');
WriteLn(F,'@echo Generating '+ExtractFileName(Source)+' to '+ExtractFileName(Target)+'...');
Write(F,'genpat.exe "', Source, '" "', Target, '" "', Temp, '" /b='+Config);
if OptimalPatches then begin
Write(F,' /o');
end;
WriteLn(F,'');
if WaitAfterGenerate then begin
WriteLn(F,'@echo.');
WriteLn(F,'@pause');
end;
CloseFile(F);
Result:=PG.CreatePatch(Source,Target);
PG.WriteToStream(Stream);
PG.Free;
WriteLn(ExtractFileName(Source)+' -> '+ExtractFileName(Target)+': '+IntToStr(Result)+' bytes');
ExecWaitBatchFile(ExtractFilePath(BatchFile),BatchFile);
fs:=TFileStream.Create(Temp,fmOpenRead);
Stream.CopyFrom(fs,fs.Size);
Result:=fs.Size;
fs.Free;
DeleteFile(Temp);
DeleteFile(BatchFile);
end;
end.