-- PilotStreams.mesa Edited by Sandman on October 2, 1980 12:30 PM DIRECTORY FileStream USING [EndOf, GetIndex, GetLength, SetIndex], Segments USING [ Access, AllAccess, DefaultAccess, FHandle, Read, ReadWrite, Write], Stream USING [EndOfStream, Handle], Time USING [Packed]; Streams: DEFINITIONS IMPORTS FileStream, Stream = BEGIN Address: TYPE = LONG POINTER; -- Assert: The word POINTER does not appear below here. Handle: TYPE = PRIVATE Stream.Handle; Access: TYPE = PRIVATE Segments.Access; AllAccess: Access = Segments.AllAccess; DefaultAccess: Access = Segments.DefaultAccess; Read: Access = Segments.Read; ReadWrite: Access = Segments.ReadWrite; Write: Access = Segments.Write; End: PROCEDURE RETURNS [SIGNAL] = INLINE { RETURN[LOOPHOLE[Stream.EndOfStream]]}; Cleanup: PROCEDURE [h: Handle]; CreateStream: PROCEDURE [file: Segments.FHandle, access: Access ← Read] RETURNS [Handle]; Destroy: PROCEDURE [h: Handle]; Ended: PROCEDURE [h: Handle] RETURNS [BOOLEAN] = INLINE { RETURN[FileStream.EndOf[h]]}; FileFromStream: PROCEDURE [h: Handle] RETURNS [Segments.FHandle]; GetIndex: PROCEDURE [h: Handle] RETURNS [LONG CARDINAL] = INLINE { RETURN[FileStream.GetIndex[h]]}; GetLength: PROCEDURE [h: Handle] RETURNS [LONG CARDINAL] = INLINE { RETURN[FileStream.GetLength[h]]}; GetTimes: PROCEDURE [h: Handle] RETURNS [create, write, read: Time.Packed]; NewStream: PROCEDURE [name: STRING, access: Access ← Read] RETURNS [Handle]; Restart: PROCEDURE [h: Handle] = INLINE {}; SetIndex: PROCEDURE [h: Handle, i: LONG CARDINAL] = INLINE { FileStream.SetIndex[h, i]}; SetTimes: PROCEDURE [h: Handle, create, write, read: Time.Packed]; Suspend: PROCEDURE [h: Handle] = INLINE {Cleanup[h]}; GetBlock: PROCEDURE [h: Handle, a: Address, words: CARDINAL] RETURNS [CARDINAL]; GetByte: PROCEDURE [h: Handle] RETURNS [UNSPECIFIED [0..256)] = INLINE { RETURN[h.getByte[h]]}; GetChar: PROCEDURE [h: Handle] RETURNS [CHARACTER] = INLINE { RETURN[LOOPHOLE[h.getByte[h]]]}; GetWord: PROCEDURE [h: Handle] RETURNS [UNSPECIFIED] = INLINE { RETURN[h.getWord[h]]}; PutBlock: PROCEDURE [h: Handle, a: Address, words: CARDINAL] RETURNS [CARDINAL]; PutByte: PROCEDURE [h: Handle, u: UNSPECIFIED [0..256)] = INLINE { h.putByte[h, u]}; PutChar: PROCEDURE [h: Handle, c: CHARACTER] = INLINE {h.putByte[h, LOOPHOLE[c]]}; PutWord: PROCEDURE [h: Handle, u: UNSPECIFIED] = INLINE {h.putWord[h, u]}; END.