(* Library module defined by the International Standard Information technology - programming languages BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base Language. Copyright ISO/IEC (International Organization for Standardization and International Electrotechnical Commission) 1996-2021. It may be freely copied for the purpose of implementation (see page 707 of the Information technology - Programming languages Part 1: Modula-2, Base Language. BS ISO/IEC 10514-1:1996). *) DEFINITION MODULE StreamFile; (* Independent sequential data streams *) IMPORT IOChan, ChanConsts; TYPE ChanId = IOChan.ChanId; FlagSet = ChanConsts.FlagSet; OpenResults = ChanConsts.OpenResults; (* Accepted singleton values of FlagSet *) CONST read = FlagSet{ChanConsts.readFlag}; (* input operations are requested/available *) write = FlagSet{ChanConsts.writeFlag}; (* output operations are requested/available *) old = FlagSet{ChanConsts.oldFlag}; (* a file may/must/did exist before the channel is opened *) text = FlagSet{ChanConsts.textFlag}; (* text operations are requested/available *) raw = FlagSet{ChanConsts.rawFlag}; (* raw operations are requested/available *) PROCEDURE Open (VAR cid: ChanId; name: ARRAY OF CHAR; flags: FlagSet; VAR res: OpenResults); (* Attempts to obtain and open a channel connected to a sequential stream of the given name. The read flag implies old; without the raw flag, text is implied. If successful, assigns to cid the identity of the opened channel, and assigns the value opened to res. If a channel cannot be opened as required, the value of res indicates the reason, and cid identifies the invalid channel. *) PROCEDURE IsStreamFile (cid: ChanId): BOOLEAN; (* Tests if the channel identified by cid is open to a sequential stream. *) PROCEDURE Close (VAR cid: ChanId); (* If the channel identified by cid is not open to a sequential stream, the exception wrongDevice is raised; otherwise closes the channel, and assigns the value identifying the invalid channel to cid. *) END StreamFile.