-- StreamDefs.Mesa  Edited by Sandman on June 30, 1980  5:05 PM
-- Mashed for use in Pilot by Martin Newell: 23-Jul-81 11:53:15

DIRECTORY
  Stream USING [Handle],
  TTY USING [Handle];

StreamDefs: DEFINITIONS =
  BEGIN

    StreamHandle: TYPE = POINTER TO StreamObject;
  
    StreamObject: TYPE = RECORD [
    reset: PROCEDURE [StreamHandle],
    get: PROCEDURE [StreamHandle] RETURNS [UNSPECIFIED],
    putback: PROCEDURE [StreamHandle, UNSPECIFIED],
    put: PROCEDURE [StreamHandle, UNSPECIFIED],
    endof: PROCEDURE [StreamHandle] RETURNS [BOOLEAN],
    destroy: PROCEDURE [StreamHandle],
    link: StreamHandle,
    file: Stream.Handle,
    tty: TTY.Handle];
    

  StreamError: SIGNAL [stream: StreamHandle, error: StreamErrorCode];

  StreamErrorCode: TYPE = {
    StreamType, StreamAccess, StreamOperation, StreamPosition, StreamEnd,
    StreamBug};

  -- extensions applicable to keyboard streams



  -- extensions applicable to disk streams

  AccessOptions: TYPE = CARDINAL;
  Read: AccessOptions = 1;
  Write: AccessOptions = 2;
  Append: AccessOptions = 4;

  NewByteStream, NewWordStream: PROCEDURE [name: STRING, access: AccessOptions]
    RETURNS [StreamHandle];
  FileNameError: SIGNAL [name: STRING];
  OpenDiskStream, CloseDiskStream: PROCEDURE [stream: StreamHandle];
  CleanupDiskStream, TruncateDiskStream: PROCEDURE [stream: StreamHandle];
  FileLength: PROCEDURE [stream: StreamHandle] RETURNS [StreamIndex];

  -- StreamPosition Stuff
  
  StreamPosition: TYPE = LONG CARDINAL;
  StreamIndex: TYPE = LONG CARDINAL;


  GetPosition: PROCEDURE [stream: StreamHandle] RETURNS [StreamPosition];
  SetPosition: PROCEDURE [stream: StreamHandle, pos: StreamPosition];

  -- StreamIndex Stuff


  GetIndex: PROCEDURE [stream: StreamHandle] RETURNS [StreamIndex];
  SetIndex: PROCEDURE [stream: StreamHandle, index: StreamIndex];
  NormalizeIndex: PROCEDURE [index: StreamIndex] RETURNS [StreamIndex];
  ModifyIndex: PROCEDURE [index: StreamIndex, change: INTEGER]
    RETURNS [StreamIndex];
  EqualIndex: PROCEDURE [i1, i2: StreamIndex] RETURNS [BOOLEAN];
  GrEqualIndex: PROCEDURE [i1, i2: StreamIndex] RETURNS [BOOLEAN];
  GrIndex: PROCEDURE [i1, i2: StreamIndex] RETURNS [BOOLEAN];

  END.