Add hex and hexdump to Out.Mod, more debugging for OpenBSD.

This commit is contained in:
David Brown 2016-12-11 17:18:24 +00:00
parent 7d0cc741ae
commit a2d98748b6
3 changed files with 50 additions and 8 deletions

View file

@ -86,7 +86,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
Spaces(indent); Out.String("bufs: "); Out.String("..."); Out.Ln; (* TBD *)
Spaces(indent); Out.String("swapper: "); Out.Int(f.swapper,1); Out.Ln;
Spaces(indent); Out.String("state: "); Out.Int(f.state,1); Out.Ln;
Spaces(indent); Out.String("next: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS,f.next),1); Out.Ln;
Spaces(indent); Out.String("next: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS,f.next),1); Out.Ln;
END DumpFile;
PROCEDURE DumpBuffer*(b: Buffer; indent: INTEGER);
@ -94,7 +94,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
Spaces(indent); Out.String("chg: "); IF b.chg THEN Out.String("TRUE") ELSE Out.String("FALSE") END; Out.Ln;
Spaces(indent); Out.String("org: "); Out.Int(b.org,1); Out.Ln;
Spaces(indent); Out.String("size: "); Out.Int(b.size,1); Out.Ln;
Spaces(indent); Out.String("data: "); Out.String("..."); Out.Ln;
Spaces(indent); Out.String("data: "); Out.Ln; Out.HexDump(b.data);
Spaces(indent); Out.String("f: "); IF b.f = NIL THEN Out.String("<NIL>"); Out.Ln ELSE Out.Ln; DumpFile(b.f, indent+1) END;
END DumpBuffer;

View file

@ -68,10 +68,51 @@ BEGIN
WHILE i > 0 DO DEC(i); Char(s[i]) END
END Int;
PROCEDURE Hex*(x, n: HUGEINT);
BEGIN
IF n < 1 THEN n := 1 ELSIF n > 16 THEN n := 16 END;
WHILE (n < 16) & (SYSTEM.LSH(x, -4*n) # 0) DO INC(n) END;
x := SYSTEM.ROT(x, 4*(16-n));
WHILE n > 0 DO
x := SYSTEM.ROT(x,4); DEC(n);
IF x MOD 16 < 10 THEN Char(CHR((x MOD 16) + ORD('0')))
ELSE Char(CHR((x MOD 16) - 10 + ORD('A'))) END
END
END Hex;
PROCEDURE Ln*;
BEGIN String(Platform.NL); Flush;
END Ln;
PROCEDURE HexDumpAdr*(a, o, l: SYSTEM.ADDRESS);
VAR i, n, lim: SYSTEM.ADDRESS; c: CHAR;
BEGIN
lim := a+l;
WHILE a < lim DO
IF a+16 < lim THEN n := 16 ELSE n := lim-a END;
Hex(o,8); Char(" ");
i := 0; WHILE i < n DO
IF i MOD 4 = 0 THEN Char(" ") END;
SYSTEM.GET(a+i, c); Hex(ORD(c), 2); Char(" ");
INC(i)
END;
WHILE i < 16 DO
IF i MOD 4 = 0 THEN Char(" ") END; String(" ");
INC(i)
END;
String(" ");
i := 0; WHILE i < n DO
SYSTEM.GET(a+i, c);
IF (ORD(c) < 32) OR (ORD(c) > 126) THEN Char(".") ELSE Char(c) END;
INC(i)
END;
INC(a,n); INC(o,n); Ln
END
END HexDumpAdr;
PROCEDURE HexDump*(VAR m: ARRAY OF SYSTEM.BYTE);
BEGIN HexDumpAdr(SYSTEM.ADR(m), 0, LEN(m))
END HexDump;
(* Real and Longreal display *)

View file

@ -125,9 +125,9 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
PROCEDURE DumpText(t: Text);
BEGIN
Out.String(" len: "); Out.Int(t.len,1); Out.Ln;
Out.String(" notify: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, t.notify),1); Out.Ln;
Out.String(" head: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, t.head),1); Out.Ln;
Out.String(" cache: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, t.cache),1); Out.Ln;
Out.String(" notify: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, t.notify),1); Out.Ln;
Out.String(" head: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, t.head),1); Out.Ln;
Out.String(" cache: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, t.cache),1); Out.Ln;
Out.String(" corg: "); Out.Int(t.corg,1); Out.Ln;
END DumpText;
@ -135,14 +135,15 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**
BEGIN
Out.String(" W: "); Out.Int(e.W,1); Out.Ln;
Out.String(" H: "); Out.Int(e.H,1); Out.Ln;
Out.String(" handle: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, e.handle),1); Out.Ln;
Out.String(" handle: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, e.handle),1); Out.Ln;
Out.String(" base: "); IF e.base = NIL THEN Out.String("<NIL>"); Out.Ln ELSE Out.Ln; DumpText(e.base) END;
END DumpElem;
PROCEDURE DumpRun(ru: Run);
BEGIN
Out.String(" prev: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, ru.prev),1); Out.Ln;
Out.String(" next: "); Out.Int(SYSTEM.VAL(SYSTEM.ADDRESS, ru.next),1); Out.Ln;
Out.String(" Run at "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, ru),1); Out.Ln;
Out.String(" prev: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, ru.prev),1); Out.Ln;
Out.String(" next: "); Out.Hex(SYSTEM.VAL(SYSTEM.ADDRESS, ru.next),1); Out.Ln;
Out.String(" len: "); Out.Int(ru.len,1); Out.Ln;
Out.String(" fnt: "); IF ru.fnt # NIL THEN Out.String(ru.fnt.name) ELSE Out.String("<NIL>") END; Out.Ln;
Out.String(" col: "); Out.Int(ru.col,1); Out.Ln;