diff --git a/src/runtime/Files.Mod b/src/runtime/Files.Mod index 9caa22a9..76fbdf77 100644 --- a/src/runtime/Files.Mod +++ b/src/runtime/Files.Mod @@ -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(""); Out.Ln ELSE Out.Ln; DumpFile(b.f, indent+1) END; END DumpBuffer; diff --git a/src/runtime/Out.Mod b/src/runtime/Out.Mod index 9564f275..9aaa961c 100644 --- a/src/runtime/Out.Mod +++ b/src/runtime/Out.Mod @@ -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 *) diff --git a/src/runtime/Texts.Mod b/src/runtime/Texts.Mod index 760f805c..1712411c 100644 --- a/src/runtime/Texts.Mod +++ b/src/runtime/Texts.Mod @@ -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(""); 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("") END; Out.Ln; Out.String(" col: "); Out.Int(ru.col,1); Out.Ln;