77 lines
1.8 KiB
ObjectPascal
77 lines
1.8 KiB
ObjectPascal
![]() |
program VAppend;
|
||
|
|
||
|
{$APPTYPE CONSOLE}
|
||
|
|
||
|
uses
|
||
|
SysUtils;
|
||
|
|
||
|
var
|
||
|
fs, fo: File;
|
||
|
Patch: String;
|
||
|
OutFile: String = 'VPATCH.EXE';
|
||
|
Runtime: String = 'VPATCH.BIN';
|
||
|
o: LongWord;
|
||
|
Buf: Array[0..4095] of Byte;
|
||
|
Size, BufSize: Integer;
|
||
|
|
||
|
begin
|
||
|
WriteLn('VAppend v2.0');
|
||
|
WriteLn('============');
|
||
|
WriteLn;
|
||
|
WriteLn('(c) 2001-2002 Van de Sande Productions');
|
||
|
WriteLn('Website: http://www.tibed.net/vpatch');
|
||
|
WriteLn('E-mail: koen@tibed.net');
|
||
|
WriteLn;
|
||
|
if ParamCount = 0 then begin
|
||
|
WriteLn('Use this program to append .PAT files to the VPatch runtime.');
|
||
|
WriteLn;
|
||
|
WriteLn(' VAPPEND (patch file) [output file] [runtime]');
|
||
|
WriteLn;
|
||
|
WriteLn('By default, the output file is VPATCH.EXE and the runtime is VPATCH.BIN');
|
||
|
end;
|
||
|
if not FileExists(ParamStr(1)) then begin
|
||
|
WriteLn('ERROR: Patch file not found');
|
||
|
Exit;
|
||
|
end;
|
||
|
Patch := ParamStr(1);
|
||
|
if ParamCount > 1 then OutFile := ParamStr(2);
|
||
|
if ParamCount > 2 then Runtime := ParamStr(3);
|
||
|
WriteLn('Patch: '+Patch);
|
||
|
WriteLn('Runtime: '+Runtime);
|
||
|
WriteLn('Output: '+OutFile);
|
||
|
|
||
|
AssignFile(fo,OutFile);
|
||
|
Rewrite(fo,1);
|
||
|
//copy the runtime
|
||
|
AssignFile(fs,Runtime);
|
||
|
FileMode:=fmOpenRead;
|
||
|
Reset(fs,1);
|
||
|
BufSize:=4096;
|
||
|
o:=FileSize(fs); //patch start offset
|
||
|
Size:=FileSize(fs);
|
||
|
while Size>0 do begin
|
||
|
if Size-BufSize<0 then BufSize:=Size;
|
||
|
BlockRead(fs,Buf,BufSize);
|
||
|
BlockWrite(fo,Buf,BufSize);
|
||
|
Dec(Size,BufSize);
|
||
|
end;
|
||
|
CloseFile(fs);
|
||
|
//do the patch
|
||
|
AssignFile(fs,Patch);
|
||
|
FileMode:=fmOpenRead;
|
||
|
Reset(fs,1);
|
||
|
BufSize:=4096;
|
||
|
Size:=FileSize(fs);
|
||
|
while Size>0 do begin
|
||
|
if Size-BufSize<0 then BufSize:=Size;
|
||
|
BlockRead(fs,Buf,BufSize);
|
||
|
BlockWrite(fo,Buf,BufSize);
|
||
|
Dec(Size,BufSize);
|
||
|
end;
|
||
|
CloseFile(fs);
|
||
|
|
||
|
BlockWrite(fo,o,SizeOf(o));
|
||
|
CloseFile(fo);
|
||
|
WriteLn('Created.');
|
||
|
end.
|
||
|
|