Tridora-CPU/pcomp/platform+tdr.pas
2024-09-11 23:52:25 +02:00

76 lines
1.8 KiB
ObjectPascal

(* Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details *)
procedure initPlatform;
begin
outputPrefix := '';
includePrefix := '#SYSTEM:';
end;
procedure newString(var s:StringRef;len:integer);
begin
new(s,len);
end;
procedure openFileWithDefault(var f:InputFileType; filename:string);
begin
open(f, filename, ModeReadOnly);
if IOResult(f) <> 0 then
begin
open(f, includePrefix + filename, ModeReadOnly);
if IOResult(f) <> 0 then
errorExit2('cannot open file', filename);
end;
end;
procedure overwriteFile(var f:OutputFileType; filename:string);
begin
open(f, outputPrefix + filename, ModeOverwrite);
end;
procedure printExecErr(filename:string; error:integer);
begin
writeln('PExec failed for ', filename, ': ', ErrorStr(error));
end;
procedure ExecEditor(var filename:string; lineno:integer; errormsg:string);
var args:PArgVec;
error:integer;
digits:string[12];
begin
str(lineno, digits);
args[0] := '-l'; args[1] := digits;
args[2] := '-E'; args[3] := errormsg;
args[4] := filename;
PExec('#SYSTEM:editor.prog', args, 5, error);
printExecErr('#SYSTEM:editor.prog', error);
end;
procedure ExecAssembler(var filename:string; doRun:boolean; editOnError:boolean);
var args:PArgVec;
argPos:integer;
error:integer;
begin
if doRun then
begin
args[0] := '-R';
argPos := 1;
end
else
argPos := 0;
if editOnError then
begin
args[argPos] := '-e';
argPos := argPos + 1;
end;
args[argPos] := filename;
PExec('#SYSTEM:sasm.prog', args, argPos + 1, error);
printExecErr('#SYSTEM:editor.prog', error);
end;
procedure ExecProgram(var filename:string);
var args:PArgVec;
error:integer;
begin
writeln('Running ', filename, '...');
PExec(filename, args, 0, error);
printExecErr(filename, error);
end;