DEFINITION MODULE IOChan; (* A channel abstraction over the runtime streams and files (an ISO-style ChanId). ChanId is opaque: the standard channels wrap stdio streams, and OpenRead/OpenWrite wrap a file. A failed open returns a closed channel (IsOpen = FALSE); operations on a closed channel are safe no-ops (ReadChar returns 0C). *) TYPE ChanId; (* --- standard channels --- *) PROCEDURE StdInChan() : ChanId; PROCEDURE StdOutChan() : ChanId; PROCEDURE StdErrChan() : ChanId; (* --- file channels --- *) PROCEDURE OpenRead(VAR name : ARRAY OF CHAR) : ChanId; PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : ChanId; PROCEDURE Close(VAR cid : ChanId); PROCEDURE IsOpen(cid : ChanId) : BOOLEAN; (* --- operations --- *) PROCEDURE ReadChar(cid : ChanId) : CHAR; PROCEDURE ReadString(cid : ChanId; VAR s : ARRAY OF CHAR); (* one line *) PROCEDURE ReadInt(cid : ChanId) : INTEGER; PROCEDURE WriteChar(cid : ChanId; c : CHAR); PROCEDURE WriteString(cid : ChanId; VAR s : ARRAY OF CHAR); PROCEDURE WriteInt(cid : ChanId; n : INTEGER); PROCEDURE WriteLn(cid : ChanId); END IOChan.