home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / console.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  2KB  |  80 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. MODULE Console; (** cn, RD 26-May-96 *)
  4. IMPORT Reals, HostSYS;
  5. PROCEDURE Ch*(ch:CHAR);
  6.     VAR str: ARRAY 4 OF CHAR;
  7. BEGIN
  8.     str[0]:=ch;
  9.     HostSYS.StdOut(str, 1)
  10. END Ch;
  11. PROCEDURE Str*(str: ARRAY OF CHAR);
  12.     i:INTEGER;
  13. BEGIN
  14.     i:=0; WHILE str[i]#0X DO INC(i) END;
  15.     HostSYS.StdOut(str, i)
  16. END Str;
  17. PROCEDURE Ln*;    BEGIN Ch(0AX) END Ln;
  18. PROCEDURE Int*(x: LONGINT);
  19.     i: INTEGER; x0: LONGINT;
  20.     a: ARRAY 11 OF CHAR;
  21. BEGIN i := 0;
  22.     IF x < 0 THEN
  23.         IF x = MIN(LONGINT) THEN Str(" -2147483648"); RETURN
  24.         ELSE x0 := -x
  25.         END
  26.     ELSE
  27.         x0 := x
  28.     END;
  29.     REPEAT
  30.         a[i] := CHR(x0 MOD 10 + 30H); x0 := x0 DIV 10; INC(i)
  31.     UNTIL x0 = 0;
  32.     Ch(" ");
  33.     IF x < 0 THEN Ch("-") END;
  34.     REPEAT DEC(i); Ch(a[i]) UNTIL i = 0
  35. END Int;
  36. PROCEDURE Hex*(x: LONGINT);
  37.      i: INTEGER; y: LONGINT;
  38.     a: ARRAY 10 OF CHAR;
  39. BEGIN
  40.     i := 0; Ch(" ");
  41.     REPEAT y := x MOD 10H;
  42.         IF y < 10 THEN a[i] := CHR(y + 30H) ELSE a[i] := CHR(y + 37H) END;
  43.         x := x DIV 10H; INC(i)
  44.     UNTIL i = 8;
  45.     REPEAT DEC(i); Ch(a[i]) UNTIL i = 0
  46. END Hex;
  47. PROCEDURE Bool*(b: BOOLEAN);
  48. BEGIN
  49.     IF b THEN Str(" TRUE") ELSE Str(" FALSE") END
  50. END Bool;
  51. PROCEDURE Real*(x: LONGREAL);    (* Texts.WriteLongReal *)
  52.     CONST maxD = 16;
  53.     VAR e, n: INTEGER; x0: LONGREAL;
  54.         d: ARRAY maxD OF CHAR;
  55. BEGIN
  56.     n:=8;
  57.     e := Reals.ExpoL(x);
  58.     IF e = 0 THEN
  59.         Str("  0");
  60.     ELSIF e = 2047 THEN
  61.         Str(" NaN");
  62.     ELSE
  63.         Ch(" ");
  64.         IF x < 0 THEN Ch("-"); x := -x END;
  65.         e := SHORT(LONG(e - 1023) * 77 DIV 256);
  66.         IF e >= 0 THEN x := x / Reals.TenL(e) ELSE x := Reals.TenL(-e) * x END ;
  67.         IF x >= 10.0D0 THEN x := 0.1D0 * x; INC(e) END ;
  68.         x0 := Reals.TenL(n-1); x := x0*x + 0.5D0;
  69.         IF x >= 10.0D0*x0 THEN x := 0.1D0 * x; INC(e) END ;
  70.         Reals.ConvertL(x, n, d);
  71.         DEC(n); Ch(d[n]); Ch(".");
  72.         REPEAT DEC(n); Ch(d[n]) UNTIL n = 0;
  73.         Ch("D");
  74.         IF e < 0 THEN Ch("-"); e := -e ELSE Ch("+") END;
  75.         Ch(CHR(e DIV 100 + 30H)); e := e MOD 100;
  76.         Ch(CHR(e DIV 10 + 30H));
  77.         Ch(CHR(e MOD 10 + 30H))
  78. END Real;
  79. END Console.
  80.