Console.mod 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. IMPLEMENTATION MODULE Console ;
  2. FROM SYSTEM IMPORT ADR ;
  3. FROM StdChans IMPORT StdOutChan ;
  4. FROM IOChan IMPORT ChanId, TextWrite ;
  5. FROM RealStr IMPORT RealToStr ;
  6. FROM Strings IMPORT Length ;
  7. VAR
  8. outChan : ChanId ;
  9. inited : BOOLEAN ;
  10. PROCEDURE Out () : ChanId ;
  11. BEGIN
  12. IF NOT inited THEN
  13. outChan := StdOutChan () ;
  14. inited := TRUE ;
  15. END ;
  16. RETURN outChan ;
  17. END Out ;
  18. PROCEDURE WriteChar (c: CHAR) ;
  19. BEGIN
  20. TextWrite (Out (), ADR (c), 1) ;
  21. END WriteChar ;
  22. PROCEDURE WriteString (s: ARRAY OF CHAR) ;
  23. BEGIN
  24. TextWrite (Out (), ADR (s), HIGH (s) + 1) ;
  25. END WriteString ;
  26. PROCEDURE WriteN (p: ADDRESS; n: CARDINAL) ;
  27. BEGIN
  28. TextWrite (Out (), p, n) ;
  29. END WriteN ;
  30. PROCEDURE WriteLn ;
  31. VAR nl: CHAR ;
  32. BEGIN
  33. nl := 12C ; (* LF *)
  34. TextWrite (Out (), ADR (nl), 1) ;
  35. END WriteLn ;
  36. PROCEDURE WriteLongCard (u: LONGCARD) ;
  37. VAR tmp : ARRAY [0..31] OF CHAR ; n, i: CARDINAL ;
  38. BEGIN
  39. n := 0 ;
  40. REPEAT
  41. tmp [n] := CHR (ORD ('0') + VAL (CARDINAL, u MOD 10)) ;
  42. u := u DIV 10 ;
  43. INC (n) ;
  44. UNTIL u = 0 ;
  45. i := n ;
  46. WHILE i > 0 DO
  47. DEC (i) ;
  48. WriteChar (tmp [i]) ;
  49. END ;
  50. END WriteLongCard ;
  51. PROCEDURE WriteLongInt (l: LONGINT) ;
  52. VAR u: LONGCARD ;
  53. BEGIN
  54. IF l < 0 THEN
  55. WriteChar ('-') ;
  56. u := VAL (LONGCARD, l) ;
  57. u := 0 - u ;
  58. WriteLongCard (u) ;
  59. ELSE
  60. WriteLongCard (VAL (LONGCARD, l)) ;
  61. END ;
  62. END WriteLongInt ;
  63. PROCEDURE WriteInt (i: INTEGER) ;
  64. BEGIN
  65. WriteLongInt (VAL (LONGINT, i)) ;
  66. END WriteInt ;
  67. PROCEDURE WriteBool (b: BOOLEAN) ;
  68. BEGIN
  69. IF b THEN
  70. WriteString ("TRUE") ;
  71. ELSE
  72. WriteString ("FALSE") ;
  73. END ;
  74. END WriteBool ;
  75. PROCEDURE WriteReal (r: REAL) ;
  76. VAR buf : ARRAY [0..63] OF CHAR ; n: CARDINAL ;
  77. BEGIN
  78. RealToStr (r, buf) ;
  79. n := Length (buf) ;
  80. TextWrite (Out (), ADR (buf), n) ;
  81. END WriteReal ;
  82. PROCEDURE Fatal (msg: ARRAY OF CHAR) ;
  83. BEGIN
  84. WriteString (msg) ;
  85. WriteLn ;
  86. HALT (1) ;
  87. END Fatal ;
  88. END Console.