(* MPL - MICRO PROGRAMMING LANGUAGE / COPYRIGHT (C) 2017-2018 DEREK JOHN EVANS *)
PROCEDURE SAVE; VAR F: FILE OF BYTE128; I: SHORT; BEGIN ARGV(GS, 1);
GS := GS + MPXFEXT; ASSIGN(F, GS); REWRITE(F); IF IORESULT = 0 THEN BEGIN
FOR I := 0 TO PRED(GX.I[MPLSIZ] + SIZEOF(BYTE128)) DIV SIZEOF(BYTE128) DO
BEGIN WRITE(F, GX.B[I]) END; CLOSE(F) END END;
PROCEDURE MAIN; VAR PI: PSHORT; BEGIN WRITELN;
WRITELN('MPL COMPILER / COPYRIGHT (C) 2017-2018 DEREK JOHN EVANS');
IF ARGC < 1 THEN WRITELN('USAGE: MPL <FILE>')
ELSE BEGIN ARGV(GS, 1); GR.S := PTR(ADDR(GX.I[MPLMAXI]));
FOR GV := 0 TO MPLMAXI DO GX.I[GV] := 0;
GE := 0; GN := 0; GP := MPLPRG SHL 1;
WRITELN; WRITELN('COMPILING'); WRITELN; GRAB;
IF GE = 0 THEN BEGIN GS := '.'; GO := OLIM1; IF LOC(PI) THEN BEGIN
GX.I[MPLRUN] := GP; OL(PI^); O1(OSET1); OL(1); O1(OMORE); O1(OSTOP);
GX.I[MPLNIL] := 1234; GX.I[MPLSIZ] := GP END
ELSE ERR(ENOT) END; WRITELN; WRITELN; IF GE <> 0 THEN BEGIN
WRITELN('FAILED'); WRITELN; WRITELN(GE: 5, ' ERRORS') END
ELSE BEGIN WRITELN(GN: 5, ' SYMBOLS'); WRITELN(GP: 5, ' BYTES');
SAVE; WRITELN; WRITELN('COMPLETED') END END; WRITELN END;