program generator; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, SysUtils, HeaderGenerator , Vulkan ; var InputFile: String; OutputFile: String; TemplateFile: String; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure ParseArg(var i: Integer); var s: String; begin s := ParamStr(i); if (s = '-i') or (s = '--input') then begin inc(i); if (i > ParamCount) then raise Exception.Create('invalid argument count'); InputFile := ExpandFileName(ParamStr(i)); end else if (s = '-o') or (s = '--output') then begin inc(i); if (i > ParamCount) then raise Exception.Create('invalid argument count'); OutputFile := ExpandFileName(ParamStr(i)); end else if (s = '-t') or (s = '--template') then begin inc(i); if (i > ParamCount) then raise Exception.Create('invalid argument count'); TemplateFile := ExpandFileName(ParamStr(i)); end else raise Exception.Create('invalid argument: ' + s); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure ParseArgs; var i: Integer; begin i := 1; while i <= ParamCount do begin ParseArg(i); inc(i); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure GenerateHeader; var gen: THeaderGenerator; begin WriteLn('Generating Vulkan Header for PFC', InputFile); WriteLn(' InputFile: ', InputFile); WriteLn(' OutputFile: ', OutputFile); WriteLn(' TemplateFile: ', TemplateFile); gen := THeaderGenerator.Create; try gen.ReadFile(InputFile); gen.GenerateCode('vulkan', TemplateFile, OutputFile); finally FreeAndNil(gen); end; end; begin try InputFile := ExtractFilePath(ParamStr(0)) + 'vk.xml'; OutputFile := ExtractFilePath(ParamStr(0)) + 'Vulkan.pas'; TemplateFile := ExtractFilePath(ParamStr(0)) + 'Vulkan.tpl'; ParseArgs; GenerateHeader; except on ex: Exception do begin WriteLn('Error: ' + ex.Message); end; end; WriteLn('finished!'); ReadLn; // DEBUG!!! end.