| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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;
- END IOChan.
|