mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 09:52:24 +00:00
111 lines
2.8 KiB
Modula-2
111 lines
2.8 KiB
Modula-2
MODULE Oberon;
|
|
|
|
(* this module emulates Oberon.Log and Oberon.Par in order to pass agruments to Oberon programs, as it's in Oberon environment;
|
|
it creates Oberon.Par from command line arguments;
|
|
procedure Dump dumps Oberon.Log to standard output.
|
|
|
|
-- noch *)
|
|
|
|
(* Files are commented out, because it's not necessary for work, but can be very useful for debug. See WriteTextToFile procedure; -- noch *)
|
|
IMPORT Args, Strings, Texts := CompatTexts, (*Files := CompatFiles,*) Out := Console;
|
|
|
|
VAR Log*: Texts.Text;
|
|
|
|
Par*: RECORD
|
|
text*: Texts.Text;
|
|
pos* : LONGINT;
|
|
END;
|
|
|
|
arguments : ARRAY 2048 OF CHAR;
|
|
|
|
PROCEDURE GetSelection* (VAR text: Texts.Text; VAR beg, end, time: LONGINT);
|
|
(*VAR M: SelectionMsg;*)
|
|
BEGIN
|
|
(*M.time := -1; Viewers.Broadcast(M); time := M.time;
|
|
IF time >= 0 THEN text := M.text; beg := M.beg; end := M.end END*)
|
|
END GetSelection;
|
|
|
|
PROCEDURE Collect*( count : LONGINT);
|
|
BEGIN
|
|
|
|
END Collect;
|
|
|
|
PROCEDURE ArgsToString(VAR opts : ARRAY OF CHAR);
|
|
VAR i : INTEGER;
|
|
opt : ARRAY 256 OF CHAR;
|
|
BEGIN
|
|
|
|
i := 1;
|
|
opt := ""; COPY ("", opts);
|
|
|
|
WHILE i < Args.argc DO
|
|
Args.Get(i, opt);
|
|
Strings.Append(opt, opts);(* Strings.Append (" ", opts);*)
|
|
(* ORP calls Texts.Scan, which returns filename, and nextCh would be set to " " if we append here " ". However after that ORP will check nextCh, and if it finds that nextCh is not "/" it's not gonna parse options. That's why Strings.Append is commented out; -- noch *)
|
|
INC(i)
|
|
END;
|
|
|
|
END ArgsToString;
|
|
|
|
PROCEDURE StringToText(VAR arguments : ARRAY OF CHAR; VAR T : Texts.Text);
|
|
VAR
|
|
W : Texts.Writer;
|
|
BEGIN
|
|
Texts.OpenWriter(W);
|
|
Texts.WriteString(W, arguments);
|
|
Texts.Append (T, W.buf);
|
|
END StringToText;
|
|
(*
|
|
PROCEDURE WriteTextToFile(VAR T : Texts.Text; filename : ARRAY OF CHAR);
|
|
VAR f : Files.File; r : Files.Rider;
|
|
BEGIN
|
|
f := Files.New(filename);
|
|
Files.Set(r, f, 0);
|
|
Texts.Store(r, T);
|
|
Files.Register(f);
|
|
END WriteTextToFile;
|
|
*)
|
|
PROCEDURE TextToString(VAR T : Texts.Text; VAR string : ARRAY OF CHAR);
|
|
VAR R : Texts.Reader;
|
|
ch : CHAR;
|
|
i : LONGINT;
|
|
BEGIN
|
|
COPY("", string);
|
|
Texts.OpenReader(R, T, 0);
|
|
i := 0;
|
|
WHILE Texts.Pos(R) < T.len DO
|
|
Texts.Read(R, ch);
|
|
string[i] := ch;
|
|
INC(i);
|
|
END;
|
|
(*string[i] := 0X;*)
|
|
END TextToString;
|
|
|
|
PROCEDURE DumpLog*;
|
|
VAR s : POINTER TO ARRAY OF CHAR;
|
|
BEGIN
|
|
NEW(s, Log.len + 1);
|
|
COPY("", s^);
|
|
TextToString(Log, s^);
|
|
Out.String(s^); Out.Ln;
|
|
|
|
NEW(Log);
|
|
Texts.Open(Log, "");
|
|
END DumpLog;
|
|
|
|
|
|
BEGIN
|
|
NEW(Log);
|
|
Texts.Open(Log, "");
|
|
|
|
NEW(Par.text);
|
|
Texts.Open(Par.text, "");
|
|
Par.pos := 0;
|
|
|
|
COPY("", arguments);
|
|
ArgsToString(arguments);
|
|
StringToText(arguments, Par.text);
|
|
(*WriteTextToFile(Par.text, "params.txt");*)
|
|
(*WriteTextToFile(Log, "log.txt");*)
|
|
(*DumpLog;*)
|
|
END Oberon.
|