IMPLEMENTATION MODULE IOChan; (* A ChanId is a C FILE* handle; all operations go through SysShim (which degrades a NIL handle to a safe no-op / 0C). *) IMPORT SysShim; TYPE ChanId = ADDRESS; PROCEDURE StdInChan() : ChanId; BEGIN RETURN SysShim.stdin() END StdInChan; PROCEDURE StdOutChan() : ChanId; BEGIN RETURN SysShim.stdout() END StdOutChan; PROCEDURE StdErrChan() : ChanId; BEGIN RETURN SysShim.stderr() END StdErrChan; PROCEDURE ReadChar(cid : ChanId) : CHAR; BEGIN RETURN SysShim.fgetc(cid) END ReadChar; PROCEDURE WriteChar(cid : ChanId; c : CHAR); BEGIN SysShim.fputc(cid, c) END WriteChar; PROCEDURE WriteString(cid : ChanId; VAR s : ARRAY OF CHAR); BEGIN SysShim.fputs(cid, s) END WriteString; PROCEDURE WriteLn(cid : ChanId); BEGIN SysShim.fwriteln(cid) END WriteLn; PROCEDURE WriteInt(cid : ChanId; n : INTEGER); BEGIN SysShim.fwriteint(cid, n) END WriteInt; END IOChan.