stextio.mod 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. IMPLEMENTATION MODULE STextIO;
  2. (* Bound to the runtime shim; the read result is recorded in
  3. SIOResult. *)
  4. IMPORT IOConsts, SIOResult;
  5. FROM IOConsts IMPORT allRight, endOfInput, endOfLine;
  6. PROCEDURE m2write (VAR s : ARRAY OF CHAR);
  7. EXTERNAL;
  8. PROCEDURE m2writeln;
  9. EXTERNAL;
  10. PROCEDURE m2writechar (c : CHAR);
  11. EXTERNAL;
  12. PROCEDURE m2readchar () : CHAR;
  13. EXTERNAL;
  14. PROCEDURE m2readline (VAR s : ARRAY OF CHAR; max : CARDINAL) : CARDINAL;
  15. EXTERNAL;
  16. PROCEDURE WriteChar (ch : CHAR);
  17. BEGIN
  18. m2writechar(ch)
  19. END WriteChar;
  20. PROCEDURE WriteLn;
  21. BEGIN
  22. m2writeln
  23. END WriteLn;
  24. PROCEDURE WriteString (s : ARRAY OF CHAR);
  25. BEGIN
  26. m2write(s)
  27. END WriteString;
  28. PROCEDURE ReadChar (VAR ch : CHAR);
  29. BEGIN
  30. ch := m2readchar();
  31. IF ch = CHR(0) THEN
  32. SIOResult.SetReadResult(endOfInput)
  33. ELSE
  34. SIOResult.SetReadResult(allRight)
  35. END
  36. END ReadChar;
  37. PROCEDURE ReadString (VAR s : ARRAY OF CHAR);
  38. VAR n : CARDINAL;
  39. BEGIN
  40. n := m2readline(s, HIGH(s) + 1);
  41. SIOResult.SetReadResult(allRight)
  42. END ReadString;
  43. PROCEDURE ReadRestLine (VAR s : ARRAY OF CHAR);
  44. BEGIN
  45. ReadString(s)
  46. END ReadRestLine;
  47. PROCEDURE ReadToken (VAR s : ARRAY OF CHAR);
  48. VAR c : CHAR;
  49. i : CARDINAL;
  50. done : BOOLEAN;
  51. BEGIN
  52. i := 0;
  53. (* skip leading spaces/tabs *)
  54. REPEAT
  55. c := m2readchar()
  56. UNTIL (c # " ") AND (c # CHR(9));
  57. done := FALSE;
  58. WHILE NOT done DO
  59. IF (c = CHR(0)) OR (c = CHR(10)) OR (c = " ") OR (c = CHR(9)) THEN
  60. done := TRUE
  61. ELSE
  62. IF i <= HIGH(s) THEN s[i] := c; INC(i) END;
  63. c := m2readchar()
  64. END
  65. END;
  66. IF i <= HIGH(s) THEN s[i] := CHR(0) END;
  67. SIOResult.SetReadResult(allRight)
  68. END ReadToken;
  69. PROCEDURE SkipLine;
  70. VAR c : CHAR;
  71. BEGIN
  72. REPEAT
  73. c := m2readchar()
  74. UNTIL (c = CHR(0)) OR (c = CHR(10));
  75. SIOResult.SetReadResult(allRight)
  76. END SkipLine;
  77. END STextIO.