<> <> <> <> <> <<>> DIRECTORY IO USING [STREAM, StreamProcs], Rope USING [ROPE]; EditedStream: CEDAR DEFINITIONS = BEGIN STREAM: TYPE ~ IO.STREAM; ROPE: TYPE ~ Rope.ROPE; <> <> <<>> <> <<>> <> <<^A (or BS): erase the last character in the buffer; noop if buffer empty.>> <<^W: erase the last word in the buffer (where a word is a run of consecutive letters and numbers); noop if buffer empty.>> <<^Q: erase the buffer back to the last CR (erase entire buffer if no CR); noop if buffer empty.>> <> <> <<>> <> <<>> <> <<>> <> <> Create: PROC [in: STREAM, echoTo: STREAM, deliverWhen: DeliverWhenProc _ IsACR, context: REF ANY _ NIL] RETURNS [STREAM]; Rubout: ERROR [stream: STREAM]; DeliverWhenProc: TYPE = PROC [char: CHAR, buffer: REF TEXT, stream: STREAM, context: REF ANY] RETURNS [appendChar: BOOL, activate: BOOL]; IsACR: DeliverWhenProc; <> <> GetDeliverWhen: PROC [self: STREAM] RETURNS [proc: DeliverWhenProc, context: REF ANY]; SetDeliverWhen: PROC [self: STREAM, proc: DeliverWhenProc, context: REF ANY _ NIL]; AppendBufferChars: PROC [stream: STREAM, chars: ROPE]; <> <<>> UnAppendBufferChars: PROC [stream: STREAM, nChars: NAT]; <> <<>> SetMode: PROC [stream: STREAM, stuff: ROPE _ NIL, pendingDelete: BOOL _ TRUE, echoAsterisks: BOOL _ FALSE]; <> <> <> <> <> <<>> SetEcho: PROC [self: STREAM, echoTo: STREAM]; <> <<>> GetEcho: PROC [self: STREAM] RETURNS [oldEcho: STREAM]; <> <> AddStreamProcs: PROC [to: REF IO.StreamProcs, setEcho: PROC [self: STREAM, echoTo: STREAM] _ NIL, getEcho: PROC [self: STREAM] RETURNS [oldEcho: STREAM] _ NIL] RETURNS [REF IO.StreamProcs]; -- result = to; to^ is modified by call <> <> END.