<> <> <> <> DIRECTORY IO USING [STREAM], Rope USING [ROPE], TapeOps USING [TapeHandle, TapeStatus]; TapeStreams: CEDAR DEFINITIONS = BEGIN AccessOptions: TYPE ~ {read, write}; FillBlockOptions: TYPE ~ {truncate, zeroes, blanks}; ConversionList: TYPE = LIST OF REF ConversionRecord _ NIL; ConversionRecord: TYPE ~ RECORD [ name: ATOM _ NIL, proc: Conversion _ NIL, clientData: REF ANY _ NIL ]; Conversion: TYPE = PROC [ base: IO.STREAM , clientData: REF ANY _ NIL] RETURNS [ s: IO.STREAM ]; <<.. takes a IO.STREAM and produces a layered IO.STREAM on it. Used for format conversion.>> Error: PUBLIC ERROR [error: ErrorDesc]; ErrorDesc: TYPE ~ RECORD [group: ErrorGroup, explanation: Rope.ROPE] _ [ok, NIL]; ErrorGroup: TYPE = { ok, -- initial group for a new TapeStreams.ErrorDesc bug, -- error on the part of this software, TapeOps, or the TapeServer environment, -- something's wrong in the environment; human intervention required user -- illegal operation, probably due to user action }; StreamOpen: PROC [tape: TapeOps.TapeHandle, access: AccessOptions _ read, blocking: NAT _ 80, padding: FillBlockOptions _ blanks, conversions: ConversionList _ NIL, tapeRecordProc: TapeRecordProc _ NIL, clientData: REF ANY _ NIL, allowSoftErrors: BOOL _ TRUE] RETURNS[stream: IO.STREAM]; <> <<>> <> <> <> <> <> <> <> <> <> <<>> <> <> <> <> <> <> <> <> <> <> <> <> TapeRecordProc: TYPE ~ PROC [clientData: REF ANY _ NIL]; <> FlushBlockProc: TYPE ~ PROC [ self: IO.STREAM, padChar: CHAR _ '\000, bytesRequired: INT _ LAST[INT], truncate: BOOL _ FALSE ]; <> TapeStreamState: PRIVATE TYPE = REF TapeStreamStateRec _ NIL; TapeStreamStateRec: PRIVATE TYPE = RECORD [ index: INT, -- stream index buffer: REF TEXT, lastBufferIndexPlusOne: INT, tapeHandle: TapeOps.TapeHandle, blockSize: INT _ 80, writing: BOOL _ FALSE, clientData: REF ANY _ NIL, tapeRecordProc: TapeRecordProc _ NIL, access: AccessOptions _ read, eof: BOOL _ FALSE, firstRecordRead: BOOL _ FALSE, padding: FillBlockOptions _ blanks, status: TapeOps.TapeStatus, allowSoftErrors: BOOL _ TRUE ]; END. -- of TapeStreams