| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- IMPLEMENTATION MODULE STextIO;
- (* Bound to the runtime shim; the read result is recorded in
- SIOResult. *)
- IMPORT IOConsts, SIOResult;
- FROM IOConsts IMPORT allRight, endOfInput, endOfLine;
- PROCEDURE m2write (VAR s : ARRAY OF CHAR);
- EXTERNAL;
- PROCEDURE m2writeln;
- EXTERNAL;
- PROCEDURE m2writechar (c : CHAR);
- EXTERNAL;
- PROCEDURE m2readchar () : CHAR;
- EXTERNAL;
- PROCEDURE m2readline (VAR s : ARRAY OF CHAR; max : CARDINAL) : CARDINAL;
- EXTERNAL;
- PROCEDURE WriteChar (ch : CHAR);
- BEGIN
- m2writechar(ch)
- END WriteChar;
- PROCEDURE WriteLn;
- BEGIN
- m2writeln
- END WriteLn;
- PROCEDURE WriteString (s : ARRAY OF CHAR);
- BEGIN
- m2write(s)
- END WriteString;
- PROCEDURE ReadChar (VAR ch : CHAR);
- BEGIN
- ch := m2readchar();
- IF ch = CHR(0) THEN
- SIOResult.SetReadResult(endOfInput)
- ELSE
- SIOResult.SetReadResult(allRight)
- END
- END ReadChar;
- PROCEDURE ReadString (VAR s : ARRAY OF CHAR);
- VAR n : CARDINAL;
- BEGIN
- n := m2readline(s, HIGH(s) + 1);
- SIOResult.SetReadResult(allRight)
- END ReadString;
- PROCEDURE ReadRestLine (VAR s : ARRAY OF CHAR);
- BEGIN
- ReadString(s)
- END ReadRestLine;
- PROCEDURE ReadToken (VAR s : ARRAY OF CHAR);
- VAR c : CHAR;
- i : CARDINAL;
- done : BOOLEAN;
- BEGIN
- i := 0;
- (* skip leading spaces/tabs *)
- REPEAT
- c := m2readchar()
- UNTIL (c # " ") AND (c # CHR(9));
- done := FALSE;
- WHILE NOT done DO
- IF (c = CHR(0)) OR (c = CHR(10)) OR (c = " ") OR (c = CHR(9)) THEN
- done := TRUE
- ELSE
- IF i <= HIGH(s) THEN s[i] := c; INC(i) END;
- c := m2readchar()
- END
- END;
- IF i <= HIGH(s) THEN s[i] := CHR(0) END;
- SIOResult.SetReadResult(allRight)
- END ReadToken;
- PROCEDURE SkipLine;
- VAR c : CHAR;
- BEGIN
- REPEAT
- c := m2readchar()
- UNTIL (c = CHR(0)) OR (c = CHR(10));
- SIOResult.SetReadResult(allRight)
- END SkipLine;
- END STextIO.
|