<> <> <> <<>> DIRECTORY Commander USING [CommandProc, Handle, Register], CommandTool USING [ NextArgument ], FS USING [ StreamOpen ], IO USING [Close, GetChar, PutChar, STREAM ], Rope USING [ Equal, Fetch, ROPE ]; CopyFromKbdImpl: CEDAR PROGRAM IMPORTS Commander, CommandTool, FS, IO, Rope ~ BEGIN CopyFromKbdCmd: Commander.CommandProc = { <<[cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL]>> stopChar, c: CHAR; stopStr: Rope.ROPE; fileName: Rope.ROPE; s: IO.STREAM; IF ~CommandTool.NextArgument[cmd].Equal["-q"] THEN RETURN[$Failure, "Usage: CopyFromKbd -q "]; stopStr _ CommandTool.NextArgument[cmd]; stopChar _ IF stopStr=NIL THEN 'Z ELSE stopStr.Fetch[0]; IF stopChar >= 'a THEN stopChar _ stopChar - ('a - 'A); IF stopChar >= 'A THEN stopChar _ LOOPHOLE[(stopChar - 'A) + 1]; fileName _ CommandTool.NextArgument[cmd]; IF fileName=NIL THEN RETURN[$Failure, "Usage: CopyFromKbd -q "]; s _ FS.StreamOpen[fileName, $create]; WHILE (c_cmd.in.GetChar[])#stopChar DO s.PutChar[c]; ENDLOOP; s.Close[]; }; Commander.Register["CopyFromKbd", CopyFromKbdCmd]; END.