
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2798 212acab6-be3b-0410-9dea-997c60f758d6
125 lines
3.4 KiB
ObjectPascal
125 lines
3.4 KiB
ObjectPascal
program GenPat2;
|
|
|
|
{
|
|
VPatch 2 - Patch Generator
|
|
===============================
|
|
|
|
(c) 2001-2003 Van de Sande Productions
|
|
|
|
This is the main program unit for the commandline version. It implements
|
|
commandline options (like /b=) and displays help if no options are given.
|
|
|
|
What's new
|
|
----------
|
|
2.0 20030811 Koen Initial documentation
|
|
}
|
|
|
|
{$APPTYPE CONSOLE}
|
|
uses
|
|
PatchGenerator in 'PatchGenerator.pas',
|
|
VDSP_CRC in 'VDSP_CRC.pas',
|
|
Sysutils,
|
|
TreeCode in 'TreeCode.pas';
|
|
|
|
type
|
|
TEventHandler = class
|
|
procedure PrintDebug(S: String);
|
|
end;
|
|
|
|
procedure TEventhandler.PrintDebug(S: String);
|
|
begin
|
|
WriteLn(S);
|
|
end;
|
|
|
|
{$DEFINE READCONFIG} //try to read genpat.ini?
|
|
{.$DEFINE AUTOWAIT} //have /wait command line switch on by default?
|
|
//useful when debugging
|
|
|
|
var
|
|
Config: TextFile;
|
|
T1,T2: TDateTime;
|
|
d: Integer;
|
|
S,Key: String;
|
|
ShowDebug: Boolean;
|
|
PG: TPatchGenerator;
|
|
EV: TEventHandler;
|
|
begin
|
|
EV:=TEventHandler.Create;
|
|
PG:=TPatchGenerator.Create;
|
|
PG.StartBlockSize:=64;
|
|
|
|
WriteLn('GenPat v2.0 final');
|
|
WriteLn('=================');
|
|
WriteLn;
|
|
WriteLn('(c) 2001-2003 Van de Sande Productions');
|
|
WriteLn('Website: http://www.tibed.net/vpatch');
|
|
WriteLn('E-mail: koen@tibed.net');
|
|
WriteLn;
|
|
ShowDebug:=FindCmdLineSwitch('debug',['/'],True);
|
|
if ShowDebug then
|
|
DebugEvent:=EV.PrintDebug;
|
|
|
|
{$IFDEF READCONFIG}
|
|
if FileExists('genpat.ini') then begin
|
|
AssignFile(Config,'genpat.ini');
|
|
Reset(Config);
|
|
while not eof(Config) do begin
|
|
ReadLn(Config,S);
|
|
d:=Pos('=',S);
|
|
if not (d=0) then begin
|
|
Key:=LowerCase(Copy(S,1,d-1));
|
|
S:=Copy(S,d+1,Length(S));
|
|
if CompareStr(Key,'startblocksize')=0 then PG.StartBlockSize:=StrToInt(S);
|
|
end;
|
|
end;
|
|
CloseFile(Config);
|
|
end;
|
|
{$ENDIF}
|
|
for d:=1 to ParamCount do begin
|
|
if CompareStr(LowerCase(Copy(ParamStr(d),1,3)),'/b=')=0 then begin
|
|
PG.StartBlockSize:=StrToInt(Copy(ParamStr(d),4,10));
|
|
end;
|
|
end;
|
|
|
|
if (CompareStr(ParamStr(1),'')=0) or (CompareStr(ParamStr(2),'')=0) or (CompareStr(ParamStr(3),'')=0) then begin
|
|
WriteLn('This program will take (sourcefile) as input and create a (patchfile).');
|
|
WriteLn('With this patchfile, you can convert a (sourcefile) into (targetfile).');
|
|
WriteLn;
|
|
WriteLn('Command line info:');
|
|
WriteLn(' GENPAT (sourcefile) (targetfile) (patchfile)');
|
|
WriteLn;
|
|
WriteLn('Command line options (you do not need them):');
|
|
WriteLn('/B=(BlockSize) Set blocksize (def=64), multiple of 2');
|
|
WriteLn('/WAIT Wait for a keypress after program complete');
|
|
WriteLn('/DEBUG Show runtime debug information');
|
|
WriteLn('Note: all these parameters must be *after* the filenames!');
|
|
WriteLn;
|
|
Write('Press a enter to exit ');
|
|
ReadLn(S);
|
|
Exit;
|
|
end;
|
|
|
|
if FileExists(ParamStr(3)) then begin
|
|
WriteLn('Using existing file to include patches in: '+ParamStr(3));
|
|
PG.LoadFromFile(ParamStr(3));
|
|
end;
|
|
|
|
T1:=Now;
|
|
WriteLn('Patch body size: '+IntToStr(PG.CreatePatch(ParamStr(1),ParamStr(2))));
|
|
PG.WriteToFile(ParamStr(3));
|
|
|
|
T2:=Now;
|
|
Write('GenPat.exe finished execution in: ');
|
|
WriteLn(FloatToStr((T2-T1)*24*60*60),'s');
|
|
WriteLn;
|
|
{$IFNDEF AUTOWAIT}
|
|
if FindCmdLineSwitch('wait',['/'],True) then begin
|
|
{$ENDIF}
|
|
WriteLn;
|
|
WriteLn('Press a key');
|
|
ReadLn(S);
|
|
{$IFNDEF AUTOWAIT}
|
|
end;
|
|
{$ENDIF}
|
|
PG.Free;
|
|
end.
|