X11CommanderServer.mesa
Copyright Ó 1991, 1992 by Xerox Corporation. All rights reserved.
Christian Jacobi, April 24, 1991 5:26 pm PDT
Christian Jacobi, May 10, 1991 12:22 pm PDT
DIRECTORY
Atom, Commander, CommanderBackdoor, CommanderOps, IO, ProcessProps, Rope, X11EvalServer;
X11CommanderServer: CEDAR PROGRAM
IMPORTS Commander, CommanderBackdoor, CommanderOps, IO, ProcessProps, Rope, X11EvalServer ~
BEGIN
CreateListenerCommand: Commander.CommandProc ~ {
success: BOOL; message: Rope.ROPE;
display: Rope.ROPE ¬ NIL;
selection: Rope.ROPE ¬ "CedarCommander";
DO
arg: Rope.ROPE ¬ CommanderOps.NextArgument[cmd];
IF arg=NIL THEN EXIT;
SELECT TRUE FROM
Rope.Equal[arg, "-display", FALSE] => display ¬ CommanderOps.NextArgument[cmd];
Rope.Equal[arg, "-selection", FALSE] => selection ¬ CommanderOps.NextArgument[cmd];
ENDCASE => CommanderOps.Failed["unknown argument"];
ENDLOOP;
[success, message] ¬ X11EvalServer.Create[server: display, selection: selection, proc: CommandProc];
IF success
THEN msg ¬ "ok"
ELSE {
msg ¬ Rope.Concat["selection ownership not established ", message];
result ¬ $Failure
};
};
NoPrompt: PROC [cmd: Commander.Handle] ~ {
};
CommandProc: PROC [in: Rope.ROPE, environment: REF] RETURNS [out: Rope.ROPE ¬ NIL, result: REF ¬ NIL] = {
inStream: IO.STREAM ¬ IO.RIS[in];
outStream: IO.STREAM ¬ IO.ROS[];
Inner: PROC = {
commander: Commander.Handle = CommanderOps.CreateFromStreams[in: inStream, out: outStream];
CommanderBackdoor.GetCommandToolData[commander].Prompt ¬ NoPrompt;
[] ¬ CommanderOps.ReadEvalPrintLoop[commander];
};
ProcessProps.AddPropList[LIST[NEW[Atom.DottedPairNode ¬ ["", ""]]], Inner];
out ¬ IO.RopeFromROS[outStream];
};
Commander.Register["X11CommanderServer", CreateListenerCommand, "create an interop listener"];
END.