Record curpos on every inR.Read. Add more debug to catch OpenBSD read failure.

This commit is contained in:
David Brown 2016-12-05 17:00:55 +00:00
parent c7e88f4634
commit cf2da3000f
8 changed files with 47 additions and 32 deletions

View file

@ -484,11 +484,13 @@ void OPM_Init (BOOLEAN *done, CHAR *mname, ADDRESS mname__len)
void OPM_Get (CHAR *ch) void OPM_Get (CHAR *ch)
{ {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ);
Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch); Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch);
if (*ch == 0x0d) { if ((OPM_curpos == 0 && OPM_inR.eot)) {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ); OPM_LogWLn();
} else { OPM_LogWStr((CHAR*)"DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ", 53);
OPM_curpos += 1; OPM_LogWNum((INT16)*ch, 1);
OPM_LogW('.');
} }
if ((*ch < 0x09 && !OPM_inR.eot)) { if ((*ch < 0x09 && !OPM_inR.eot)) {
*ch = ' '; *ch = ' ';

View file

@ -484,11 +484,13 @@ void OPM_Init (BOOLEAN *done, CHAR *mname, ADDRESS mname__len)
void OPM_Get (CHAR *ch) void OPM_Get (CHAR *ch)
{ {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ);
Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch); Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch);
if (*ch == 0x0d) { if ((OPM_curpos == 0 && OPM_inR.eot)) {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ); OPM_LogWLn();
} else { OPM_LogWStr((CHAR*)"DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ", 53);
OPM_curpos += 1; OPM_LogWNum((INT16)*ch, 1);
OPM_LogW('.');
} }
if ((*ch < 0x09 && !OPM_inR.eot)) { if ((*ch < 0x09 && !OPM_inR.eot)) {
*ch = ' '; *ch = ' ';

View file

@ -484,11 +484,13 @@ void OPM_Init (BOOLEAN *done, CHAR *mname, ADDRESS mname__len)
void OPM_Get (CHAR *ch) void OPM_Get (CHAR *ch)
{ {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ);
Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch); Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch);
if (*ch == 0x0d) { if ((OPM_curpos == 0 && OPM_inR.eot)) {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ); OPM_LogWLn();
} else { OPM_LogWStr((CHAR*)"DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ", 53);
OPM_curpos += 1; OPM_LogWNum((INT16)*ch, 1);
OPM_LogW('.');
} }
if ((*ch < 0x09 && !OPM_inR.eot)) { if ((*ch < 0x09 && !OPM_inR.eot)) {
*ch = ' '; *ch = ' ';

View file

@ -484,11 +484,13 @@ void OPM_Init (BOOLEAN *done, CHAR *mname, ADDRESS mname__len)
void OPM_Get (CHAR *ch) void OPM_Get (CHAR *ch)
{ {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ);
Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch); Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch);
if (*ch == 0x0d) { if ((OPM_curpos == 0 && OPM_inR.eot)) {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ); OPM_LogWLn();
} else { OPM_LogWStr((CHAR*)"DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ", 53);
OPM_curpos += 1; OPM_LogWNum((INT16)*ch, 1);
OPM_LogW('.');
} }
if ((*ch < 0x09 && !OPM_inR.eot)) { if ((*ch < 0x09 && !OPM_inR.eot)) {
*ch = ' '; *ch = ' ';

View file

@ -484,11 +484,13 @@ void OPM_Init (BOOLEAN *done, CHAR *mname, ADDRESS mname__len)
void OPM_Get (CHAR *ch) void OPM_Get (CHAR *ch)
{ {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ);
Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch); Texts_Read(&OPM_inR, Texts_Reader__typ, &*ch);
if (*ch == 0x0d) { if ((OPM_curpos == 0 && OPM_inR.eot)) {
OPM_curpos = Texts_Pos(&OPM_inR, Texts_Reader__typ); OPM_LogWLn();
} else { OPM_LogWStr((CHAR*)"DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ", 53);
OPM_curpos += 1; OPM_LogWNum((INT16)*ch, 1);
OPM_LogW('.');
} }
if ((*ch < 0x09 && !OPM_inR.eot)) { if ((*ch < 0x09 && !OPM_inR.eot)) {
*ch = ' '; *ch = ' ';

View file

@ -387,12 +387,17 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
PROCEDURE Get*(VAR ch: CHAR); (* read next character from source text, 0X if eof *) PROCEDURE Get*(VAR ch: CHAR); (* read next character from source text, 0X if eof *)
BEGIN BEGIN
curpos := Texts.Pos(inR);
Texts.Read(inR, ch); Texts.Read(inR, ch);
IF ch = 0DX THEN
curpos := Texts.Pos(inR); (* supports CR LF mapping *) (* OpenBSD intermittent file read error debugging. *)
ELSE IF (curpos = 0) & inR.eot THEN
INC(curpos) LogWLn; LogWStr("DEBUG: OPM.Get returned inR.eot at curpos = 0, ch = ");
END ; LogWNum(ORD(ch),1); LogW(".");
END;
(* TODO, remove curpos var, and provide fn returning Texts.Pos(inR) - 1. *)
(* Or, better still, record symbol position in OPS. *)
IF (ch < 09X) & ~inR.eot THEN ch := " " END IF (ch < 09X) & ~inR.eot THEN ch := " " END
END Get; END Get;

View file

@ -341,7 +341,7 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << 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 *) ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *)
pos := Files.Pos(R.rider); Files.Read(R.rider, nextch); 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 IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END
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

View file

@ -1,15 +1,15 @@
IntSyntax.mod compiling IntSyntax. IntSyntax.mod compiling IntSyntax.
14: i := l; (* Bad, INTEGER shorter than LONGINT *) 14: i := l; (* Bad, INTEGER shorter than LONGINT *)
^ ^
pos 341 err 113 incompatible assignment pos 340 err 113 incompatible assignment
15: s := l; (* Bad, SHORTINT shorter than LONGINT *) 15: s := l; (* Bad, SHORTINT shorter than LONGINT *)
^ ^
pos 393 err 113 incompatible assignment pos 392 err 113 incompatible assignment
16: i := l; (* Bad, SHORTINT shorter than INTEGER *) 16: i := l; (* Bad, SHORTINT shorter than INTEGER *)
^ ^
pos 446 err 113 incompatible assignment pos 445 err 113 incompatible assignment
Module compilation failed. Module compilation failed.