ð"Syntax10.Scn.FntSyntax10b.Scn.FntSyntax10i.Scn.Fntõÿÿÿ€‹ðIStampElemsAlloc22 Oct 96­;gd—O425¢ MODULE Console; (* CS  *) IMPORT Reals, SYSTEM; VAR OutputDebugString*: PROCEDURE (s: LONGINT); disabled: BOOLEAN; PROCEDURE Output (VAR s: ARRAY OF CHAR); BEGIN IF ~disabled THEN OutputDebugString(SYSTEM.ADR(s)) END END Output; 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 Ch* (ch: CHAR); VAR s: ARRAY 2 OF CHAR; BEGIN s[0] := ch; s[1] := 0X; Output(s) END Ch; PROCEDURE Int* (x: LONGINT); VAR i, j: INTEGER; x0: LONGINT; a, s: ARRAY 11 OF CHAR; BEGIN i := 0; IF x < 0 THEN IF x = MIN(LONGINT) THEN Str("-2147483648"); RETURN ELSE x0 := -x END ELSE x0 := x END ; REPEAT a[i] := CHR(x0 MOD 10 + 30H); x0 := x0 DIV 10; INC(i) UNTIL x0 = 0; IF x < 0 THEN s[0] := "-"; j := 1 ELSE j := 0 END ; REPEAT DEC(i); s[j] := a[i]; INC(j) UNTIL i = 0; Output(s) END Int; PROCEDURE Real* (x: LONGREAL); VAR n, e, h, l, i: LONGINT; z: LONGREAL; d: ARRAY 16 OF CHAR; BEGIN e:= Reals.ExpoL(x); IF e = 2047 THEN Str("NaN") ELSE n := 15; IF (e # 0) & (x < 0) THEN Ch("-"); x:= - x END ; IF e = 0 THEN h:= 0; l:= 0 (* no denormals *) ELSE e:= (e - 1023) * 301029 DIV 1000000; (* ln(2)/ln(10) = 0.301029996 *) z:= Reals.Ten(e+1); IF x >= z THEN x:= x/z; INC(e) ELSE x:= x * Reals.Ten(-e) END ; IF x >= 10 THEN x:= x * Reals.Ten(-1) + 0.5D0 / Reals.Ten(n); INC(e) ELSE x:= x + 0.5D0 / Reals.Ten(n); IF x >= 10 THEN x:= x * Reals.Ten(-1); INC(e) END END ; x:= x * Reals.Ten(7); h:= ENTIER(x); x:= (x-h) * Reals.Ten(8); l:= ENTIER(x) END ; i:= 15; WHILE i > 7 DO d[i]:= CHR(l MOD 10 + ORD("0")); l:= l DIV 10; DEC(i) END ; WHILE i >= 0 DO d[i]:= CHR(h MOD 10 + ORD("0")); h:= h DIV 10; DEC(i) END ; Ch(d[0]); Ch("."); i:= 1; WHILE i <= n DO Ch(d[i]); INC(i) END ; IF e < 0 THEN Str("D-"); e:= - e ELSE Str("D+") END ; Ch(CHR(e DIV 100 + ORD("0"))); e:= e MOD 100; Ch(CHR(e DIV 10 + ORD("0"))); Ch(CHR(e MOD 10 + ORD("0"))) END END Real; PROCEDURE Hex* (x: LONGINT); VAR i, j: INTEGER; y: LONGINT; a, s: ARRAY 10 OF CHAR; BEGIN i := 0; REPEAT y := x MOD 10H; IF y < 10 THEN a[i] := CHR(y + 30H) ELSE a[i] := CHR(y + 37H) END ; x := x DIV 10H; INC(i) UNTIL i = 8; j := 0; REPEAT DEC(i); s[j] := a[i]; INC(j) UNTIL i = 0; Str(s) END Hex; PROCEDURE Enable*; BEGIN disabled := FALSE END Enable; PROCEDURE Disable*; BEGIN disabled := TRUE END Disable; END Console.