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]; 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. $ IOUtils.mesa Copyright Σ 1985, 1986, 1991 by Xerox Corporation. All rights reserved. MBrown on September 18, 1983 6:57 pm Russ Atkinson (RRA) February 2, 1985 1:01:03 pm PST Beach, February 27, 1985 10:22:33 am PST Doug Wyatt, November 18, 1986 5:48:34 pm PST Procedures of interest to STREAM implementors. Printing The following procedures are used to change PutF's interpretation of the format string or its error handling. Note that PFProcs are bound to a stream instance, not to a stream class or globally. ! IO.Error [PFInvalidPFProcs, NIL]: pfProcs = NIL (pfProcs was not obtained from CopyPFProcs.) ! IO.Error [PFInvalidCode, NIL]: char is not IN ['A..'Z] or ['a..'z]. The following procedures are used to change PutF's interpretation of the format string or its error handling. Note that PFProcs are bound to a stream instance, not to a stream class or globally. The following procedure establishes the implementation of PrintRefAny to be used by Put and PutF (the default implementation just prints the REF itself, in octal): Implementing a stream class Procs for a closed stream (variety = $inputOutput, class = $Closed): Reset and Close are no-op, other procs raise ERROR IO.Error[$StreamClosed, self]. Property list manipulation CHANGE LOG Created by MBrown on August 31, 1983 9:55 am ΚΠ–(cedarcode) style•NewlineDelimiter ™codešœ ™ Kšœ Οeœ=™HKšœ$™$K™3J™(K™,K™KšœΟkœ™.—K˜šž ˜ Kšžœ˜K˜—K˜KšΟbœžœž ˜Kšžœž˜ šœž˜K˜Kšžœžœžœ˜Kšžœžœžœžœ˜Kšœ žœžœ ˜#—head™K™ΓK™Kšœ žœžœ˜"Kšœžœ˜šΟn œžœ žœžœ˜:K˜—š  œžœ žœžœ˜PK˜—š  œžœžœžœ˜hKšœžœ žœ-™^Kšœžœžœ™Eš   œžœžœ žœžœžœ˜TKš œžœžœžœ žœ˜/—K˜—š œžœ,žœ˜_K˜Kš   œžœžœ žœžœ˜?Kš œ˜ Kš  œ˜Kš  œ˜—K™K™ΓK™š œžœžœžœ˜]K˜—š œžœžœ˜UK˜—K™Kšœžœ™£š œžœ$˜=Kš œž œ žœ žœž œ žœ žœ žœ˜oK˜——™šœžœžœ ˜,Kšœržœžœ™–K™—š  œžœžœžœžœž˜=K˜—š œžœžœ žœžœžœ žœžœžœ˜pK˜—š œžœžœ žœžœžœ žœžœžœ˜wK˜—š œžœžœžœ žœžœžœ˜fK˜—š œžœžœžœ˜:K˜—š œžœžœ žœžœžœžœ žœ˜_K˜—š œžœžœ žœžœžœžœ žœ˜fK˜—š œžœžœ žœ˜EK˜—š  œžœžœžœžœžœžœ žœžœ˜oK˜—Kš œžœžœ˜$—™š   œžœžœžœžœžœ˜9K˜—š  œžœžœžœžœžœžœ˜=K˜—š  œžœžœžœ˜+K˜—š   œžœ žœžœ žœžœ˜FK˜—Kš  œžœžœžœžœ žœžœ˜F—K˜Kšžœ˜K˜šžœž™ K™,—K™K™—…— Š~