| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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;
- FROM SYSTEM IMPORT ADDRESS;
- 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 Handle(cid : ChanId) : ADDRESS;
- BEGIN
- RETURN cid
- END Handle;
- PROCEDURE MakeChan(h : ADDRESS) : ChanId;
- BEGIN
- RETURN h
- END MakeChan;
- 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;
- PROCEDURE Position(cid : ChanId) : INTEGER;
- BEGIN
- RETURN SysShim.ftell(cid)
- END Position;
- PROCEDURE Seek(cid : ChanId; pos : INTEGER) : BOOLEAN;
- BEGIN
- RETURN SysShim.fseek(cid, pos)
- END Seek;
- PROCEDURE Rewind(cid : ChanId) : BOOLEAN;
- BEGIN
- RETURN SysShim.fseek(cid, 0)
- END Rewind;
- END IOChan.
|