MODULE Dbg; IMPORT Texts, Oberon; CONST MaxFacility* = 8; VAR enabled: ARRAY MaxFacility + 1 OF BOOLEAN; W: Texts.Writer; i: INTEGER; PROCEDURE SPrintHexint*(n: INTEGER; s: ARRAY OF CHAR); BEGIN Texts.WriteString(W, "TODO: Dbg.SPrintHexint"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); ASSERT(FALSE) END SPrintHexint; PROCEDURE PrintHexint*(fac, n: INTEGER); BEGIN IF enabled[fac] THEN Texts.WriteHex(W, n) END END PrintHexint; PROCEDURE Puts*(fac: INTEGER; s: ARRAY OF CHAR); BEGIN IF enabled[fac] THEN Texts.WriteString(W, s); END END Puts; PROCEDURE Putchar*(fac: INTEGER; c: CHAR); BEGIN IF enabled[fac] THEN IF c = CHR(0DH) THEN Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) ELSE Texts.Write(W, c); END END END Putchar; (* "Out.Mod" flushes the buffer at EOL, so I try to do the same *) PROCEDURE WriteLn*(fac: INTEGER); BEGIN Putchar(fac, CHR(0DH)) END WriteLn; PROCEDURE Enable*(fac: INTEGER); BEGIN enabled[fac] := TRUE END Enable; BEGIN Texts.OpenWriter(W); FOR i := 0 TO MaxFacility DO enabled[i] := FALSE END END Dbg. MODULE TestDbg; IMPORT Dbg; (* I use facility 7 for this module *) PROCEDURE Run*; BEGIN Dbg.Enable(7); Dbg.Puts(7, "Hello"); Dbg.Putchar(7, " "); Dbg.Puts(7, "world"); Dbg.WriteLn(7); Dbg.Puts(7, "Goodbye cruel world"); Dbg.WriteLn(7); (* And 6 is also reserved *) Dbg.Puts(6, "This shouldn't appear"); Dbg.WriteLn(6) END Run; END TestDbg.