Copyright (C) 1993, Digital Equipment Corporation
All rights reserved.
See the file COPYRIGHT for a full description.
INTERFACE RdExtras;
IMPORT Thread, Rd, ASCII;
PROCEDURE Skip(
s: Rd.T;
READONLY skip := ASCII.Spaces;
unget := TRUE)
: CHAR
RAISES {Rd.Failure, Rd.EndOfFile, Thread.Alerted};
Gets characters from 's' until the end of stream is reached or a character
which is not in the set 'skip' is read. If a character which is not in the set
'skip' is read it is returned as the result and ungot if 'unget' is TRUE. If
end of stream is reached the 'EndOfFile' exception is raised.
PROCEDURE GetUntil(
s: Rd.T;
VAR chars: ARRAY OF CHAR;
READONLY terminate := ASCII.Spaces;
unget := TRUE)
: CARDINAL
RAISES {Rd.Failure, Thread.Alerted};
Gets characters from 's' and puts them into 'chars' until the end of stream
is reached, a character which is in the set 'terminate' is read or 'chars' is
filled up:
a) If the end of stream is reached no exception is raised and the number of
characters put into 'chars' is returned.
b) If a terminating character is read it is not put into 'chars' and is ungot
unless 'unget' is FALSE (i.e. if 'unget' is TRUE 'GetUntil' will ensure that
an immediately following get/put operation will read/overwrite the terminator
first). The number of characters put into 'chars' is returned.
c) If 'chars' is filled up one more character is read. If end of stream is
reached or the character is a terminator a) or b) applies. Otherwise the
character is unread and NUMBER(chars) + 1 is returned to indicate overflow
PROCEDURE GetChars(
s: Rd.T;
VAR chars: ARRAY OF CHAR;
READONLY skip := ASCII.Spaces;
READONLY terminate := ASCII.Spaces;
unget := TRUE)
: CARDINAL
RAISES {Rd.Failure, Rd.EndOfFile, Thread.Alerted};
Reads characters from 's' and puts them into 'chars'; returns the number of
characters inserted into 'chars' or 'NUMBER(chars) + 1' if 'chars' overflows.
First uses 'Skip' to skip any characters in 'skip', then reads characters
and puts them into 'chars' using 'GetUntil'.
Note that 'EndOfStream' is only raised if the end of stream is reached during
the initial skip. Once a significant character has been read the end of stream
is treated as a terminator.
'GetChars' may return 0. This happens if it encounters a terminal character
before it finds a character not in the 'skip' set
PROCEDURE GetText(
s: Rd.T;
READONLY skip := ASCII.Set{};
READONLY terminate := ASCII.Spaces;
unget := TRUE)
: TEXT
RAISES {Rd.Failure, Rd.EndOfFile, Thread.Alerted};
Similar to 'GetChars' but builds a text instead of putting characters into
an array. There is no limit to the length of text which can be read (other
than running out memory!)
END RdExtras.