DIRECTORY Ascii USING [ DEL ], Commander USING [CommandProc, GetProperty, Register], CommandTool USING [ NextArgument ], Convert USING [ IntFromRope ], EditedStream USING [GetEcho, Rubout, SetEcho ], IO, Rope USING [ROPE] ; MoreImpl: CEDAR PROGRAM IMPORTS Commander, CommandTool, Convert, EditedStream, IO ~ { OPEN IO; MoreCmd: Commander.CommandProc = { controlStream: IO.STREAM _ NARROW[ Commander.GetProperty[key: $ErrorInputStream, aList: cmd.propertyList]]; echoStream: IO.STREAM; RestoreEchoStream: PROC = { IF echoStream#NIL THEN EditedStream.SetEcho[controlStream, echoStream]; echoStream _ NIL; }; numLinesR: Rope.ROPE _ CommandTool.NextArgument[cmd]; numLines: INT _ 0; lineCount: INT _ 0; IF numLinesR#NIL THEN numLines _ Convert.IntFromRope[numLinesR]; IF controlStream = NIL THEN RETURN[$Failed, "*** No error stream ***"]; echoStream _ EditedStream.GetEcho[controlStream]; IF echoStream#NIL THEN EditedStream.SetEcho[controlStream, NIL]; { ENABLE { IO.EndOfStream => { RestoreEchoStream[]; CONTINUE; }; IO.Error => GOTO Failed; UNWIND => RestoreEchoStream[]; }; controlChar: CHAR; waiting: BOOL _ FALSE; pleaseWait: BOOL _ FALSE; controlStream: IO.STREAM _ NARROW[ Commander.GetProperty[key: $ErrorInputStream, aList: cmd.propertyList]]; WHILE TRUE DO controlChar _ Ascii.DEL; IF controlStream.CharsAvail[]=0 AND ~waiting THEN { c: CHAR _ cmd.in.GetChar[]; cmd.out.PutChar[c]; IF c = '\n THEN { lineCount _ lineCount+1; IF pleaseWait THEN waiting _ TRUE ELSE IF numLines#0 AND lineCount MOD numLines = 0 THEN { cmd.err.PutRope["***More?"]; waiting _ TRUE; }; }; } ELSE { controlChar _ Ascii.DEL; controlChar_ controlStream.GetChar[!EditedStream.Rubout => CONTINUE]; SELECT controlChar FROM Ascii.DEL, '. => { RestoreEchoStream[]; RETURN[$ManualTermination, "-- "]; }; ENDCASE => IF waiting THEN { waiting _ pleaseWait _ FALSE; lineCount _ 0; } ELSE pleaseWait _ ~pleaseWait; }; ENDLOOP; RestoreEchoStream[]; EXITS Failed => { RestoreEchoStream[]; RETURN[$Failed, "*** Uncaught IO Error ***"]}; }; }; Commander.Register["More", MoreCmd, "Repeats its input"]; }. ΘMoreImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Swinehart, September 20, 1988 9:12:08 am PDT [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL] Κρ˜code™ K™