<> <> <> <> <> DIRECTORY Commander USING [Register, CommandProc], Convert USING [RopeFromInt], JaM USING [ExecuteRope, State], JaMImager USING [Create], JaMIPrivate USING [GetInfo], JaMTS USING [GetLastHandle, JaMData, CreateJaMTS], List USING [Append, Assoc], ReadEvalPrint USING [Handle], Rope USING [Cat, Length, ROPE] ; RegisterJaMImager: CEDAR PROGRAM IMPORTS Commander, Convert, JaM, Rope, List, JaMImager, JaMIPrivate, JaMTS = { called: INT _ 0; NewJaMImager: Commander.CommandProc --[cmd: Commander.Handle]-- = { rep: ReadEvalPrint.Handle _ JaMTS.GetLastHandle[]; data: JaMTS.JaMData; IF rep = NIL -- no JaM typescripts in existence OR JaMIPrivate.GetInfo[NARROW[rep.clientData, JaMTS.JaMData].state] # NIL -- last one already has an Imager OR cmd.commandLine.Length>0 -- non-default start-up THEN { -- make a new JaM typescript name: Rope.ROPE _ "JaM"; rules: LIST OF REF ANY _ List.Append[NARROW[List.Assoc[key: $SearchRules, aList: cmd.propertyList]]]; IF called#0 THEN name _ Rope.Cat[name,Convert.RopeFromInt[from: called, showRadix: FALSE]]; rep _ JaMTS.CreateJaMTS[name, cmd.commandLine, rules]; called _ called+1; }; data _ NARROW[rep.clientData]; result _ JaMImager.Create[state: data.state, typescript: rep.viewer]; JaM.ExecuteRope[data.state, "(JaMImager.jam) .run"]; }; Commander.Register[key: "JaMImager", proc: NewJaMImager, doc: "Start JaM, its typescript and its Imager viewer"]; }.