<> <> <> <> DIRECTORY Atom USING [GetPropFromList, PropList, PutPropOnList, RemPropFromList], IO, Rope; IOUtils: CEDAR DEFINITIONS IMPORTS Atom 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; <<>> <> 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] = INLINE { self.propList _ Atom.PutPropOnList[self.propList, key, data] }; LookupData: PROC [self: STREAM, key: ATOM] RETURNS [REF ANY] = INLINE { RETURN[Atom.GetPropFromList[self.propList, key]] }; RemoveData: PROC [self: STREAM, key: ATOM] = INLINE { self.propList _ Atom.RemPropFromList[self.propList, key] }; StoreProc: PROC [class: REF StreamProcs, key: ATOM, procRef: REF ANY] = INLINE { class.propList _ Atom.PutPropOnList[class.propList, key, procRef] }; LookupProc: PROC [self: STREAM, key: ATOM] RETURNS [procRef: REF ANY] = INLINE { RETURN[Atom.GetPropFromList[self.streamProcs.propList, key]] }; END. CHANGE LOG Created by MBrown on August 31, 1983 9:55 am