<> <> <> <> <> <<>> <> DIRECTORY IO, Rope; IOUtils: CEDAR DEFINITIONS SHARES IO = BEGIN ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; StreamProcs: TYPE = IO.StreamProcs; <> <> <<>> PFProcs: TYPE = REF PFProcsRecord; PFProcsRecord: TYPE; CopyPFProcs: PROC [stream: STREAM] RETURNS [new: PFProcs]; SetPFProcs: PROC [stream: STREAM, pfProcs: PFProcs] RETURNS [previous: PFProcs]; SetPFCodeProc: PROC [pfProcs: PFProcs, char: CHAR, codeProc: PFCodeProc] RETURNS [previous: PFCodeProc]; <> <> PFCodeProc: TYPE = PROC [stream: STREAM, val: IO.Value, format: Format, char: CHAR]; Format: TYPE = RECORD [form: ROPE, first: INT]; SetPFErrorProc: PROC [pfProcs: PFProcs, errorProc: PFErrorProc] RETURNS[previous: PFErrorProc]; PFErrorProc: TYPE = PROC [error: IO.ErrorCode, stream: STREAM]; PFErrorPrintPounds: PFErrorProc; PFErrorNoop: PFErrorProc; PFErrorError: PFErrorProc; <<>> <> <<>> SetDefaultPFCodeProc: PROC [char: CHAR, codeProc: PFCodeProc] RETURNS [previous: PFCodeProc]; SetDefaultPFErrorProc: PROC [errorProc: PFErrorProc] RETURNS [previous: PFErrorProc]; <<>> <> RegisterPrintRefAny: PROC [printRefAnyProc: PrintRefAnyProc]; PrintRefAnyProc: TYPE = PROC [stream: STREAM, refAny: REF READONLY ANY, depth: INT, width: INT, verbose: BOOL]; <> AddNAT: PROC [a, b: NAT] RETURNS [NAT] = INLINE { sum: CARDINAL = LOOPHOLE [a, CARDINAL] + LOOPHOLE [b, CARDINAL]; RETURN [IF sum > 0 THEN LOOPHOLE [sum, NAT] ELSE NAT.LAST]; }; closedStreamProcs: READONLY REF StreamProcs; <> <<>> GetCharViaUnsafeGetBlock: PROC [self: STREAM] RETURNS [CHAR]; GetBlockViaGetChar: PROC [self: STREAM, block: REF TEXT, startIndex: NAT, count: NAT] RETURNS [nBytesRead: NAT]; GetBlockViaUnsafeGetBlock: PROC [self: STREAM, block: REF TEXT, startIndex: NAT, count: NAT] RETURNS [nBytesRead: NAT]; UnsafeGetBlockViaGetChar: UNSAFE PROC [self: STREAM, block: IO.UnsafeBlock] RETURNS [nBytesRead: INT]; PutCharViaUnsafePutBlock: PROC [self: STREAM, char: CHAR]; PutBlockViaPutChar: PROC [self: STREAM, block: REF READONLY TEXT, startIndex: NAT, count: NAT]; PutBlockViaUnsafePutBlock: PROC [self: STREAM, block: REF READONLY TEXT, startIndex: NAT, count: NAT]; UnsafePutBlockViaPutChar: PROC [self: STREAM, block: IO.UnsafeBlock]; AmbushStream: PROC [self: STREAM, streamProcs: REF IO.StreamProcs, streamData: REF ANY, reusing: STREAM _ NIL]; UnAmbushStream: PROC [self: STREAM]; <> StoreData: PROC [self: STREAM, key: ATOM, data: REF ANY]; LookupData: PROC [self: STREAM, key: ATOM] RETURNS [REF ANY]; RemoveData: PROC [self: STREAM, key: ATOM]; StoreProc: PROC [class: REF StreamProcs, key: ATOM, procRef: REF ANY]; LookupProc: PROC [self: STREAM, key: ATOM] RETURNS [procRef: REF ANY]; END. <> <> <<>> <<>>