summaryrefslogtreecommitdiff
path: root/Contrib/VPatch/Source/GUI/DLLWrapper.pas
blob: 629475ba4cfd1ee653512842a040b9ad3dde6d14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
unit DLLWrapper;

interface

uses Classes, SysUtils;

  function DoGenerate(const Source, Target: String; Stream: TStream; Config: String): Integer; forward;

var
  WaitAfterGenerate: Boolean = False;
  OptimalPatches: Boolean = False;

implementation

uses
  OSUtil, Forms;

function DoGenerate(const Source, Target: String; Stream: TStream; Config: String): Integer;
var
  F: TextFile;
  Temp, BatchFile: String;
  fs: TFileStream;
begin
  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);

  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.