mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 06:22:25 +00:00
added crlf handling partly following discussion at
https://code.google.com/p/ofront/issues/detail?id=3
and by introducing corresponding changes in ShowLine and ShowLineErr
functions
in OPM module.
Former-commit-id: bef25cd7a7
This commit is contained in:
parent
f94210e94b
commit
7666ed94ae
11 changed files with 119 additions and 15 deletions
|
|
@ -329,10 +329,14 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR END (* << LF to CR *)
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,7 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
||||||
END
|
END
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
(*
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
|
@ -343,6 +343,27 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
R.run := u; R.off := 0
|
R.run := u; R.off := 0
|
||||||
END
|
END
|
||||||
END Read;
|
END Read;
|
||||||
|
*)
|
||||||
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
|
END;
|
||||||
|
IF R.off = u.len THEN INC(R.org, u.len); u := u.next;
|
||||||
|
IF u IS Piece THEN
|
||||||
|
WITH u: Piece DO Files.Set(R.rider, u.file, u.org) END
|
||||||
|
END;
|
||||||
|
R.run := u; R.off := 0
|
||||||
|
END
|
||||||
|
END Read;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ReadElem* (VAR R: Reader);
|
PROCEDURE ReadElem* (VAR R: Reader);
|
||||||
VAR u, un: Run;
|
VAR u, un: Run;
|
||||||
|
|
|
||||||
|
|
@ -329,10 +329,14 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR END (* << LF to CR *)
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,7 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
||||||
END
|
END
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
(*
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
|
@ -343,6 +343,27 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
R.run := u; R.off := 0
|
R.run := u; R.off := 0
|
||||||
END
|
END
|
||||||
END Read;
|
END Read;
|
||||||
|
*)
|
||||||
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
|
END;
|
||||||
|
IF R.off = u.len THEN INC(R.org, u.len); u := u.next;
|
||||||
|
IF u IS Piece THEN
|
||||||
|
WITH u: Piece DO Files.Set(R.rider, u.file, u.org) END
|
||||||
|
END;
|
||||||
|
R.run := u; R.off := 0
|
||||||
|
END
|
||||||
|
END Read;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ReadElem* (VAR R: Reader);
|
PROCEDURE ReadElem* (VAR R: Reader);
|
||||||
VAR u, un: Run;
|
VAR u, un: Run;
|
||||||
|
|
|
||||||
|
|
@ -329,10 +329,14 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR END (* << LF to CR *)
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,7 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
||||||
END
|
END
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
(*
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
|
@ -343,6 +343,27 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
R.run := u; R.off := 0
|
R.run := u; R.off := 0
|
||||||
END
|
END
|
||||||
END Read;
|
END Read;
|
||||||
|
*)
|
||||||
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
|
END;
|
||||||
|
IF R.off = u.len THEN INC(R.org, u.len); u := u.next;
|
||||||
|
IF u IS Piece THEN
|
||||||
|
WITH u: Piece DO Files.Set(R.rider, u.file, u.org) END
|
||||||
|
END;
|
||||||
|
R.run := u; R.off := 0
|
||||||
|
END
|
||||||
|
END Read;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ReadElem* (VAR R: Reader);
|
PROCEDURE ReadElem* (VAR R: Reader);
|
||||||
VAR u, un: Run;
|
VAR u, un: Run;
|
||||||
|
|
|
||||||
|
|
@ -329,10 +329,14 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR END (* << LF to CR *)
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,7 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off)
|
||||||
END
|
END
|
||||||
END OpenReader;
|
END OpenReader;
|
||||||
|
(*
|
||||||
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
VAR u: Run;
|
VAR u: Run;
|
||||||
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
|
@ -343,6 +343,27 @@ MODULE Texts0; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91*
|
||||||
R.run := u; R.off := 0
|
R.run := u; R.off := 0
|
||||||
END
|
END
|
||||||
END Read;
|
END Read;
|
||||||
|
*)
|
||||||
|
PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR);
|
||||||
|
VAR u: Run; pos: LONGINT; nextch: CHAR;
|
||||||
|
BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off);
|
||||||
|
IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL;
|
||||||
|
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *)
|
||||||
|
ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
|
||||||
|
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch);
|
||||||
|
IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
|
||||||
|
END
|
||||||
|
ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem)
|
||||||
|
ELSE ch := 0X; R.elem := NIL; R.eot := TRUE
|
||||||
|
END;
|
||||||
|
IF R.off = u.len THEN INC(R.org, u.len); u := u.next;
|
||||||
|
IF u IS Piece THEN
|
||||||
|
WITH u: Piece DO Files.Set(R.rider, u.file, u.org) END
|
||||||
|
END;
|
||||||
|
R.run := u; R.off := 0
|
||||||
|
END
|
||||||
|
END Read;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ReadElem* (VAR R: Reader);
|
PROCEDURE ReadElem* (VAR R: Reader);
|
||||||
VAR u, un: Run;
|
VAR u, un: Run;
|
||||||
|
|
|
||||||
|
|
@ -277,6 +277,8 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
||||||
ELSIF curpos MOD 256 # 255 THEN INC(curpos)
|
ELSIF curpos MOD 256 # 255 THEN INC(curpos)
|
||||||
(* at 255 means: >= 255 *)
|
(* at 255 means: >= 255 *)
|
||||||
END
|
END
|
||||||
|
ELSIF ch = 0DX THEN
|
||||||
|
curpos := Texts.Pos(inR); (* supports CR LF mapping *)
|
||||||
ELSE
|
ELSE
|
||||||
INC(curpos)
|
INC(curpos)
|
||||||
END ;
|
END ;
|
||||||
|
|
@ -384,8 +386,10 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
||||||
INC(i);
|
INC(i);
|
||||||
UNTIL r.eof OR (i >= 1022) OR ((ORD(ch) < 32) & (ORD(ch) # 9));
|
UNTIL r.eof OR (i >= 1022) OR ((ORD(ch) < 32) & (ORD(ch) # 9));
|
||||||
line[i] := 0X;
|
line[i] := 0X;
|
||||||
|
IF (line[i-1] = 0AX) OR (line[i-1] = 0DX) THEN line[i-1] := 0X END;
|
||||||
(*Console.String(" -- length of line "); Console.Int(i, 0); Console.Ln;*)
|
(*Console.String(" -- length of line "); Console.Int(i, 0); Console.Ln;*)
|
||||||
Console.Ln; Console.Ln; Console.String(" "); Console.String(line);
|
Console.Ln; Console.Ln; Console.String(" "); Console.String(line);
|
||||||
|
Console.Ln;
|
||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
Console.String(" ");
|
Console.String(" ");
|
||||||
|
|
@ -423,7 +427,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
||||||
IF ORD(ch)=9 THEN ch := " " END;
|
IF ORD(ch)=9 THEN ch := " " END;
|
||||||
line[i] := ch; INC(i); line[i+1] := 0X;
|
line[i] := ch; INC(i); line[i+1] := 0X;
|
||||||
ELSE
|
ELSE
|
||||||
INC(j); i := 0
|
IF ch = 0AX THEN INC(j); i := 0 END
|
||||||
END;
|
END;
|
||||||
(*
|
(*
|
||||||
Console.Ln; Console.String("-- line["); Console.Int(i-1, 0); Console.String("] = "); Console.Char(ch); Console.Ln;
|
Console.Ln; Console.String("-- line["); Console.Int(i-1, 0); Console.String("] = "); Console.Char(ch); Console.Ln;
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
52363208815ce01643c02a26ecbdd964dae40104
|
c2141d5ead9b48d2d3e1f3cb25fb884e3671608d
|
||||||
|
|
@ -1 +1 @@
|
||||||
52363208815ce01643c02a26ecbdd964dae40104
|
3326a0fc447824a7e2a6d9b35c79b178bfe7ea61
|
||||||
Loading…
Add table
Add a link
Reference in a new issue