-- Copyright (C) 1982, 1983  by Xerox Corporation. All rights reserved. 
-- File: BWSMStreamOps.mesa - edited by
-- BTL  ,	25-Aug-82 11:52:28
-- DWE    ,	 7-Apr-83 14:45:52
-- LXR    ,	 1-Dec-83 14:33:16
-- MEW		22-May-86  8:00:36

DIRECTORY
  Environment USING [Byte],
  File USING [File, PageNumber],
  MFile USING [Handle],
  MStream USING [PleaseReleaseProc, ReleaseData],
  Space USING [Interval, nullInterval],
  Stream USING [Handle, Object];

BWSMStreamOps: DEFINITIONS =
  BEGIN
  
  mStreamPassword: CARDINAL = 031261B;

  Handle: TYPE = LONG POINTER TO StreamObject;
  StreamObject: TYPE = RECORD [
    stream: Stream.Object,
    lock: MONITORLOCK,
    object: Object];
    
  MyHandle: TYPE = LONG POINTER TO Object;
  Object: TYPE = RECORD [
    eofInBuffer: BOOLEAN ← FALSE,
    read, write, shrink: BOOLEAN ← FALSE,
    lengthChanged: BOOLEAN ← FALSE,
    password: CARDINAL ← mStreamPassword,
    file: MFile.Handle,
    release: MStream.ReleaseData,
    index: CARDINAL ← 0,
    bufferBytes: CARDINAL ← 0,
    dataBytesInBuffer: CARDINAL ← 0,
    firstFilePageInBuffer: CARDINAL ← 0,
    filePages: CARDINAL ← 0,
    length: LONG CARDINAL ← 0,
    buffer: LONG POINTER TO PACKED ARRAY [0..0) OF Environment.Byte ← NIL,
    capa: File.File,
    streamBase: File.PageNumber ← 0,
    bufferSpace: Space.Interval ← Space.nullInterval,
    bufferSpacePages: CARDINAL];
   
  MStreamImpl: PROGRAM;

  ConvertHandle: PROCEDURE [stream: Stream.Handle] RETURNS [MyHandle];
  
  DontRelease: MStream.PleaseReleaseProc;  -- always returns no
  
  END.