| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- IMPLEMENTATION MODULE Files;
- (* Layered on IOChan: a File holds a channel handle (a C FILE
- pointer), exposed as ADDRESS. No direct shim binding here. *)
- FROM SYSTEM IMPORT ADDRESS;
- IMPORT IOChan;
- TYPE
- FileRec = RECORD
- cid : IOChan.ChanId;
- END;
- PROCEDURE OpenRead(VAR name : ARRAY OF CHAR) : File;
- VAR f : File;
- BEGIN
- NEW(f);
- f^.cid := IOChan.OpenRead(name);
- RETURN f
- END OpenRead;
- PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : File;
- VAR f : File;
- BEGIN
- NEW(f);
- f^.cid := IOChan.OpenWrite(name);
- RETURN f
- END OpenWrite;
- PROCEDURE Close(f : File);
- BEGIN
- IF f # NIL THEN
- IOChan.Close(f^.cid);
- DISPOSE(f)
- END
- END Close;
- PROCEDURE ReadChar(f : File) : CHAR;
- BEGIN
- IF f = NIL THEN RETURN CHR(0) END;
- RETURN IOChan.ReadChar(f^.cid)
- END ReadChar;
- PROCEDURE ReadString(f : File; VAR s : ARRAY OF CHAR);
- BEGIN
- IF f # NIL THEN IOChan.ReadString(f^.cid, s) END
- END ReadString;
- PROCEDURE ReadInt(f : File) : INTEGER;
- BEGIN
- IF f = NIL THEN RETURN 0 END;
- RETURN IOChan.ReadInt(f^.cid)
- END ReadInt;
- PROCEDURE WriteChar(f : File; c : CHAR);
- BEGIN
- IF f # NIL THEN IOChan.WriteChar(f^.cid, c) END
- END WriteChar;
- PROCEDURE WriteInt(f : File; n : INTEGER);
- BEGIN
- IF f # NIL THEN IOChan.WriteInt(f^.cid, n) END
- END WriteInt;
- PROCEDURE WriteString(f : File; VAR s : ARRAY OF CHAR);
- BEGIN
- IF f # NIL THEN IOChan.WriteString(f^.cid, s) END
- END WriteString;
- PROCEDURE WriteLn(f : File);
- BEGIN
- IF f # NIL THEN IOChan.WriteLn(f^.cid) END
- END WriteLn;
- END Files.
|