iochan.mod 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. IMPLEMENTATION MODULE IOChan;
  2. (* A ChanId is a C FILE* handle; all operations go through SysShim
  3. (which degrades a NIL handle to a safe no-op / 0C). *)
  4. IMPORT SysShim;
  5. TYPE ChanId = ADDRESS;
  6. PROCEDURE StdInChan() : ChanId;
  7. BEGIN
  8. RETURN SysShim.stdin()
  9. END StdInChan;
  10. PROCEDURE StdOutChan() : ChanId;
  11. BEGIN
  12. RETURN SysShim.stdout()
  13. END StdOutChan;
  14. PROCEDURE StdErrChan() : ChanId;
  15. BEGIN
  16. RETURN SysShim.stderr()
  17. END StdErrChan;
  18. PROCEDURE OpenRead(VAR name : ARRAY OF CHAR) : ChanId;
  19. BEGIN
  20. RETURN SysShim.fopenread(name)
  21. END OpenRead;
  22. PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : ChanId;
  23. BEGIN
  24. RETURN SysShim.fopenwrite(name)
  25. END OpenWrite;
  26. PROCEDURE Close(VAR cid : ChanId);
  27. BEGIN
  28. SysShim.fclose(cid);
  29. cid := NIL
  30. END Close;
  31. PROCEDURE IsOpen(cid : ChanId) : BOOLEAN;
  32. BEGIN
  33. RETURN cid # NIL
  34. END IsOpen;
  35. PROCEDURE ReadChar(cid : ChanId) : CHAR;
  36. BEGIN
  37. RETURN SysShim.fgetc(cid)
  38. END ReadChar;
  39. PROCEDURE ReadString(cid : ChanId; VAR s : ARRAY OF CHAR);
  40. BEGIN
  41. IF SysShim.freadline(cid, s, HIGH(s) + 1) < 0 THEN
  42. END
  43. END ReadString;
  44. PROCEDURE ReadInt(cid : ChanId) : INTEGER;
  45. BEGIN
  46. RETURN SysShim.freadint(cid)
  47. END ReadInt;
  48. PROCEDURE WriteChar(cid : ChanId; c : CHAR);
  49. BEGIN
  50. SysShim.fputc(cid, c)
  51. END WriteChar;
  52. PROCEDURE WriteString(cid : ChanId; VAR s : ARRAY OF CHAR);
  53. BEGIN
  54. SysShim.fputs(cid, s)
  55. END WriteString;
  56. PROCEDURE WriteInt(cid : ChanId; n : INTEGER);
  57. BEGIN
  58. SysShim.fwriteint(cid, n)
  59. END WriteInt;
  60. PROCEDURE WriteLn(cid : ChanId);
  61. BEGIN
  62. SysShim.fwriteln(cid)
  63. END WriteLn;
  64. END IOChan.