| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- IMPLEMENTATION MODULE StreamFile;
- (* Open/close maps onto IOChan's OpenRead/OpenWrite; IsStreamFile is
- TRUE for any open channel (V3's channels are all streams). *)
- IMPORT IOChan, ChanConsts;
- FROM ChanConsts IMPORT opened, noSuchFile, wrongFlags;
- FROM ChanConsts IMPORT readFlag, writeFlag;
- PROCEDURE HasFlag (flags : ChanConsts.FlagSet;
- f : ChanConsts.ChanFlags) : BOOLEAN;
- BEGIN
- RETURN f IN flags
- END HasFlag;
- PROCEDURE Open (VAR cid : IOChan.ChanId; name : ARRAY OF CHAR;
- flags : ChanConsts.FlagSet;
- VAR res : ChanConsts.OpenResults);
- VAR c : IOChan.ChanId;
- BEGIN
- c := IOChan.MakeChan(NIL);
- IF HasFlag(flags, readFlag) THEN
- (* read implies old *)
- IF NOT IOChan.IsOpen(IOChan.OpenRead(name)) THEN
- cid := c; res := noSuchFile; RETURN
- END;
- c := IOChan.OpenRead(name)
- ELSIF HasFlag(flags, writeFlag) THEN
- c := IOChan.OpenWrite(name);
- IF NOT IOChan.IsOpen(c) THEN
- cid := IOChan.MakeChan(NIL); res := noSuchFile; RETURN
- END
- ELSE
- cid := c; res := wrongFlags; RETURN
- END;
- cid := c;
- res := opened
- END Open;
- PROCEDURE IsStreamFile (cid : IOChan.ChanId) : BOOLEAN;
- BEGIN
- RETURN IOChan.IsOpen(cid)
- END IsStreamFile;
- PROCEDURE Close (VAR cid : IOChan.ChanId);
- BEGIN
- IOChan.Close(cid)
- END Close;
- END StreamFile.
|