DIRECTORY Atom, Commander, CommandTool, Feedback, FeedbackClasses, FeedbackOps, FeedbackTypes, IO, Rope, ViewerClasses; FeedbackCommands: CEDAR PROGRAM IMPORTS Atom, Commander, CommandTool, Feedback, FeedbackClasses, FeedbackOps, IO, Rope = BEGIN OPEN Feedback, FeedbackOps, FC:FeedbackClasses; Viewer: TYPE = ViewerClasses.Viewer; RecreateNamedTypescript: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { storing: BOOL ~ cmd.procData.clientData = $Storing; argv: CommandTool.ArgumentVector; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; FOR i: NAT IN (0 .. argv.argc) DO name: ROPE ~ argv[i]; atom: ATOM ~ Atom.MakeAtom[name]; alreadyExists: BOOL; typescript: Viewer; [alreadyExists, typescript] _ CreateNamedTypescript[headerText: name, typescriptName: atom, storing: storing]; IF alreadyExists THEN cmd.out.PutF["%g already existed, with name %g.\n", [rope[name]], [rope[typescript.name]] ]; ENDLOOP; RETURN; EXITS Fail => result _ $Failure}; RouteToTypescript: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { argv: CommandTool.ArgumentVector; router: MsgRouter; tsname: ATOM; classes: LIST OF MsgClass _ NIL; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; IF argv.argc < 3 THEN RETURN [$Failure, "Usage: RouteToTypescript routerName typescriptName class*"]; router _ EnsureRouter[Atom.MakeAtom[argv[1]]]; tsname _ Atom.MakeAtom[argv[2]]; IF argv.argc>3 THEN FOR i: NAT DECREASING IN (2 .. argv.argc) DO atom: ATOM ~ Atom.MakeAtom[argv[i]]; classes _ CONS[atom, classes]; ENDLOOP ELSE classes _ LIST[$Every]; SetMultiTypescript[router, tsname, classes]; RETURN; EXITS Fail => result _ $Failure}; rmwUsage: ROPE ~ "Usage: RouteToMessageWindow routerName (TRUE|blink|FALSE) class*"; RouteToMessageWindow: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { argv: CommandTool.ArgumentVector; router: MsgRouter; classes: LIST OF MsgClass _ NIL; on: BOOL _ TRUE; blink: BOOL _ FALSE; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; IF argv.argc < 3 THEN RETURN [$Failure, rmwUsage]; router _ EnsureRouter[Atom.MakeAtom[argv[1]]]; SELECT TRUE FROM argv[2].Equal["TRUE"] => NULL; argv[2].Equal["FALSE"] => on _ FALSE; argv[2].Equal["blink", FALSE] => blink _ TRUE; ENDCASE => RETURN [$Failure, rmwUsage]; IF argv.argc>3 THEN FOR i: NAT DECREASING IN (2 .. argv.argc) DO atom: ATOM ~ Atom.MakeAtom[argv[i]]; classes _ CONS[atom, classes]; ENDLOOP ELSE classes _ LIST[$Every]; IF on THEN SetMultiMessageWindow[router, blink, classes] ELSE SetMultiLabel[router, NIL, FALSE, classes]; RETURN; EXITS Fail => result _ $Failure}; RouteToDebugger: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { argv: CommandTool.ArgumentVector; router: MsgRouter; classes: LIST OF MsgClass _ NIL; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; IF argv.argc < 2 THEN RETURN [$Failure, "Usage: RouteToDebugger routerName class*"]; router _ EnsureRouter[Atom.MakeAtom[argv[1]]]; IF argv.argc>2 THEN FOR i: NAT DECREASING IN (1 .. argv.argc) DO atom: ATOM ~ Atom.MakeAtom[argv[i]]; classes _ CONS[atom, classes]; ENDLOOP ELSE classes _ LIST[$Every]; SetMultiHandler[router, classes, FC.handleByProblem]; RETURN; EXITS Fail => result _ $Failure}; RouteToNowhere: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { argv: CommandTool.ArgumentVector; router: MsgRouter; classes: LIST OF MsgClass _ NIL; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; IF argv.argc < 2 THEN RETURN [$Failure, "Usage: RouteToDebugger routerName class*"]; router _ EnsureRouter[Atom.MakeAtom[argv[1]]]; IF argv.argc>2 THEN FOR i: NAT DECREASING IN (1 .. argv.argc) DO atom: ATOM ~ Atom.MakeAtom[argv[i]]; classes _ CONS[atom, classes]; ENDLOOP ELSE classes _ LIST[$Every]; SetMultiHandler[router, classes, FC.doNothing]; RETURN; EXITS Fail => result _ $Failure}; FeedbackTest: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { argv: CommandTool.ArgumentVector; router: MsgRouter; class: ATOM; argv _ CommandTool.Parse[cmd !CommandTool.Failed => {msg _ errorMsg; GOTO Fail}]; IF argv.argc # 4 THEN RETURN [$Failure, "Usage: FeedbackTest routerName class msg"]; router _ EnsureRouter[Atom.MakeAtom[argv[1]]]; class _ Atom.MakeAtom[argv[2]]; Append[router, oneLiner, class, argv[3]]; RETURN; EXITS Fail => result _ $Failure}; ListRouters: PROC [cmd: Commander.Handle] RETURNS [result: ATOM _ NIL, msg: ROPE _ NIL] --Commander.CommandProc-- ~ { ListRouter: PROC [name: ATOM, router: MsgRouter] RETURNS [BOOL] ~ { ListHandler: PROC [c: MsgClass, h: MsgHandler] RETURNS [BOOL] ~ { cmd.out.PutF["\t%g => %g\n", [atom[c]], [rope[DescribeHandler[h]]]]; RETURN [FALSE]}; cmd.out.PutF["%g\n", [atom[name]]]; IF ScanHandlers[router, ListHandler].stopped THEN ERROR; RETURN [FALSE]}; IF ScanRouters[ListRouter].stopped THEN ERROR; BEGIN dummy: Feedback.MsgHandler _ FeedbackClasses.CreateStoringHandler[10]; default: Feedback.MsgHandler _ Feedback.SetGlobalDefaultHandlersBehavior[dummy]; [] _ Feedback.SetGlobalDefaultHandlersBehavior[default]; cmd.out.PutRope["GlobalDefaultHandler\n"]; cmd.out.PutF["\t* => %g\n", [rope[DescribeHandler[default]]]]; END; RETURN}; DescribeHandler: PROC [h: MsgHandler] RETURNS [ROPE] ~ { is, blink: BOOL; l: Viewer; h1, h2: MsgHandler; r: MsgRouter; tn: ATOM; buffsize: INT; [is, tn, l, blink] _ IsViewersHandler[h]; IF is THEN RETURN IO.PutFR["Viewers[tn: %g, l: %g, blink: %g]", [atom[tn]], [rope[IF l=messageWindow THEN "Message Window" ELSE IF l=NIL THEN "no label" ELSE l.name]], [boolean[blink]] ]; IF h = FC.doNothing THEN RETURN ["ye olde bit bucket"]; IF h = FC.handleByProblem THEN RETURN ["debugger"]; [is, r] _ FC.IsHandlerOnRouter[h]; IF is THEN RETURN ["Router"]; [is, h1, h2] _ FC.IsSplittingHandler[h]; IF is THEN RETURN IO.PutFR["Split[%g, %g]", [rope[DescribeHandler[h1]]], [rope[DescribeHandler[h2]]] ]; [is] _ FC.IsHandlerOnStream[h]; IF is THEN RETURN ["STREAM"]; [is, buffsize] _ FC.IsStoringHandler[h]; IF is THEN RETURN IO.PutFR["Storing[%g]", [integer[buffsize]] ]; RETURN ["Unrecognized"]}; Commander.Register["RecreateNamedTypescript", RecreateNamedTypescript, "name*"]; Commander.Register["RecreateStoringNamedTypescript", RecreateNamedTypescript, "name*", $Storing]; Commander.Register["RouteToTypescript", RouteToTypescript, "routerName typescriptName class* - class list defaults to (Every)"]; Commander.Register["RouteToMessageWindow", RouteToMessageWindow, "routerName (TRUE|blink|FALSE) class* - class list defaults to (Every)"]; Commander.Register["RouteToDebugger", RouteToDebugger, "routerName class* - class list defaults to (Every)"]; Commander.Register["RouteToNowhere", RouteToNowhere, "routerName class* - class list defaults to (Every)"]; Commander.Register["FeedbackTest", FeedbackTest, "routerName class msg"]; Commander.Register["ListRouters", ListRouters, "lists Feedback routers"]; END. Ί FeedbackCommands.mesa Copyright Σ 1990 by Xerox Corporation. All rights reserved. Last tweaked by Mike Spreitzer on May 7, 1990 1:37:03 pm PDT Bier, January 29, 1991 2:07 pm PST ΚΏ™codešœ™Kšœ<™˜>Kšœ˜—Kšœ˜—K˜šžœœœœ˜8Kšœ œ˜K˜ K˜K˜ Kšœœ˜ Kšœ œ˜K˜)Kšœœœœ>œœœœœœ œ˜»Kšœœ œœ˜7Kšœœœœ˜3Kšœ œ˜"Kšœœœ ˜Kšœœ˜(KšœœœœS˜gKšœœ˜Kšœœœ ˜Kšœœ˜(Kšœœœœ,˜@Kšœ˜—K˜KšœP˜PKšœa˜aK˜Kšœ€˜€KšœŠ˜ŠKšœm˜mKšœk˜kK˜KšœI˜IKšœI˜IK˜Kšœ˜K˜—…—:$³