<> <> <> RefAnyStream: DEFINITIONS = { <> Handle: TYPE = REF Object; Object: TYPE = RECORD[ procs: ObjectProcsHandle, data: REF ANY _ NIL ]; ObjectProcsHandle: TYPE = REF ObjectProcs; ObjectProcs: TYPE = RECORD[ get: PROC[Handle] RETURNS[REF ANY], put: PROC[Handle, REF ANY], putBack: PROC[Handle, REF ANY], flush: PROC[Handle], close: PROC[Handle], endOf: PROC[Handle] RETURNS[BOOLEAN], empty: PROC[Handle] RETURNS[BOOLEAN] ]; <> Error: ERROR [ec: ErrorCode]; ErrorCode: TYPE = { NotImplementedForThisStream, EndOfStream, <> StreamClosed, <> BadIndex <> }; <> <> <> <> CreateCoForkedProducerStream: PROC[producer: PROC[self: REF ANY, sink: Handle--for use by the producer--], data: REF ANY] RETURNS[Handle--for use by the consumer--]; CreateCoForkedConsumerStream: PROC[consumer: PROC[self: REF ANY, source: Handle--for use by the consumer--], data: REF ANY] RETURNS[Handle--for use by the producer--]; }.