(* Aubrey * March 1, 2008 * The code for OutputDebugString, Str, Ln, and Output is taken from a legacy Oberon program, Console.Mod * * The code Put is my current effort to write the procedure that is assigned to OutputDebugString *) MODULE PrivTest_080301; IMPORT SYSTEM; CONST Size = 64; TYPE Buffer = RECORD ix, ox : INTEGER; data : ARRAY Size OF CHAR; END; VAR buf : Buffer; VAR OutputDebugString*: PROCEDURE (s: LONGINT); disabled: BOOLEAN; PROCEDURE ^ Output (VAR s: ARRAY OF CHAR); PROCEDURE Str* (s: ARRAY OF CHAR); BEGIN Output(s) END Str; PROCEDURE Ln*; VAR s: ARRAY 3 OF CHAR; BEGIN s[0] := 0DX; s[1] := 0AX; s[2] := 0X; Output(s) END Ln; PROCEDURE Output (VAR s: ARRAY OF CHAR); BEGIN IF ~disabled THEN OutputDebugString(SYSTEM.ADR(s)) END END Output; PROCEDURE Put (s: LONGINT); TYPE cChar = POINTER TO ARRAY Size OF CHAR; VAR ix : INTEGER; ls : cChar; BEGIN ix := 0; ls := SYSTEM.VAL (cChar , (s)); ASSERT (SYSTEM.ADR (ls[0]) = s); WHILE (ix < Size-1) & (ls[ix] # 0X) DO buf.data [buf.ix] := ls[ix]; buf.ix := (1+buf.ix) MOD Size; INC (ix) END END Put; BEGIN OutputDebugString := Put; disabled := FALSE END PrivTest_080301.