iochan.def 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. DEFINITION MODULE IOChan;
  2. (* A channel abstraction over the runtime streams and files (an
  3. ISO-style ChanId). ChanId is opaque: the standard channels wrap
  4. stdio streams, and OpenRead/OpenWrite wrap a file. A failed open
  5. returns a closed channel (IsOpen = FALSE); operations on a closed
  6. channel are safe no-ops (ReadChar returns 0C). *)
  7. FROM SYSTEM IMPORT ADDRESS;
  8. TYPE ChanId;
  9. (* --- standard channels --- *)
  10. PROCEDURE StdInChan() : ChanId;
  11. PROCEDURE StdOutChan() : ChanId;
  12. PROCEDURE StdErrChan() : ChanId;
  13. (* --- file channels --- *)
  14. PROCEDURE OpenRead(VAR name : ARRAY OF CHAR) : ChanId;
  15. PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : ChanId;
  16. PROCEDURE Close(VAR cid : ChanId);
  17. PROCEDURE IsOpen(cid : ChanId) : BOOLEAN;
  18. (* --- bridging (for libraries layered on channels, e.g. Files) --- *)
  19. PROCEDURE Handle(cid : ChanId) : ADDRESS;
  20. (* The underlying runtime handle of cid (NIL for a closed channel). *)
  21. PROCEDURE MakeChan(h : ADDRESS) : ChanId;
  22. (* Wraps a runtime handle as a ChanId (NIL yields a closed channel). *)
  23. (* --- operations --- *)
  24. PROCEDURE ReadChar(cid : ChanId) : CHAR;
  25. PROCEDURE ReadString(cid : ChanId; VAR s : ARRAY OF CHAR); (* one line *)
  26. PROCEDURE ReadInt(cid : ChanId) : INTEGER;
  27. PROCEDURE WriteChar(cid : ChanId; c : CHAR);
  28. PROCEDURE WriteString(cid : ChanId; VAR s : ARRAY OF CHAR);
  29. PROCEDURE WriteInt(cid : ChanId; n : INTEGER);
  30. PROCEDURE WriteLn(cid : ChanId);
  31. (* --- positioning (seekable channels) --- *)
  32. PROCEDURE Position(cid : ChanId) : INTEGER;
  33. (* Current byte offset (-1 when unknown/closed). *)
  34. PROCEDURE Seek(cid : ChanId; pos : INTEGER) : BOOLEAN;
  35. (* Absolute seek; FALSE on failure. *)
  36. PROCEDURE Rewind(cid : ChanId) : BOOLEAN;
  37. (* Seek to offset 0. *)
  38. END IOChan.