| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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 OpenRead(VAR name : ARRAY OF CHAR) : ChanId;
- BEGIN
- RETURN SysShim.fopenread(name)
- END OpenRead;
- PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : ChanId;
- BEGIN
- RETURN SysShim.fopenwrite(name)
- END OpenWrite;
- PROCEDURE Close(VAR cid : ChanId);
- BEGIN
- SysShim.fclose(cid);
- cid := NIL
- END Close;
- PROCEDURE IsOpen(cid : ChanId) : BOOLEAN;
- BEGIN
- RETURN cid # NIL
- END IsOpen;
- PROCEDURE ReadChar(cid : ChanId) : CHAR;
- BEGIN
- RETURN SysShim.fgetc(cid)
- END ReadChar;
- PROCEDURE ReadString(cid : ChanId; VAR s : ARRAY OF CHAR);
- BEGIN
- IF SysShim.freadline(cid, s, HIGH(s) + 1) < 0 THEN
- END
- END ReadString;
- PROCEDURE ReadInt(cid : ChanId) : INTEGER;
- BEGIN
- RETURN SysShim.freadint(cid)
- END ReadInt;
- 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 WriteInt(cid : ChanId; n : INTEGER);
- BEGIN
- SysShim.fwriteint(cid, n)
- END WriteInt;
- PROCEDURE WriteLn(cid : ChanId);
- BEGIN
- SysShim.fwriteln(cid)
- END WriteLn;
- END IOChan.
|