DIRECTORY Atom, Commander, CommanderOps, Identification, IO, Rope, SystemNames, Xl, XlAccess, XlDetails, XlPredefinedAtoms; X11Commands: CEDAR MONITOR IMPORTS Atom, Commander, CommanderOps, Identification, IO, Rope, SystemNames, Xl, XlAccess, XlDetails = BEGIN CurrentServerDefaults: PROC [app: ATOM] RETURNS [msg: Rope.ROPE] = { msg ¬ IO.PutFR1["X server general default: %g", IO.rope[XlAccess.DefaultServer[NIL]]]; IF app#NIL AND app#$X11 THEN { msg ¬ IO.PutFR["%g, (for application %g: %g)", IO.rope[msg], IO.atom[app], IO.rope[XlAccess.DefaultServer[app]] ]; }; msg ¬ Rope.Concat[msg, "\n"]; }; TestServer: PROC [server: Rope.ROPE] RETURNS [ok: BOOL ¬ TRUE, message: Rope.ROPE] = { c: Xl.Connection; c ¬ Xl.CreateConnection[server ! Xl.connectionNotCreated => { ok ¬ FALSE; message ¬ why.reason; CONTINUE }]; IF ok THEN { ok ¬ Xl.Alive[c]; IF ok THEN Xl.CloseConnection[c]; }; }; DefaultServerCommand: Commander.CommandProc = { num: INT ¬ CommanderOps.NumArgs[cmd]; app: ATOM; server, message: Rope.ROPE; ok: BOOL; SELECT num FROM 1 => {msg ¬ CurrentServerDefaults[NIL]; RETURN}; 2 => app ¬ $X11; 3 => app ¬ Atom.MakeAtom[CommanderOps.NextArgument[cmd]]; ENDCASE => CommanderOps.Failed["Format is: X11DefaultServer {{application} server}"]; server ¬ CommanderOps.NextArgument[cmd]; IF Rope.Equal[server, "nil", FALSE] THEN Atom.RemProp[app, $DISPLAY] ELSE { [ok, message] ¬ TestServer[server]; IF ok THEN Atom.PutProp[app, $DISPLAY, server] ELSE CommanderOps.Failed[Rope.Cat[server , " not accessed: ", message, "\n"]]; }; msg ¬ CurrentServerDefaults[app]; }; IdentificationCommand: Commander.CommandProc = { msg ¬ Rope.Concat[Identification.Self[], "\n"] }; TrustedSetServerHostCommand: Commander.CommandProc = { ENABLE { Xl.XError => { msg ¬ err.explanation; result ¬ $Failure; Xl.CloseConnection[err.connection]; GOTO Oops }; Xl.connectionNotCreated => {msg ¬ why.reason; result ¬ $Failure; GOTO Oops}; }; server: Rope.ROPE ¬ SystemNames.MachineName[]; c: Xl.Connection ¬ Xl.CreateConnection[server]; serverHostAtom: Xl.XAtom ¬ Xl.MakeAtom[c, "PARC_ServerHost"]; Xl.ChangeProperty[c: c, w: Xl.FirstRoot[c], property: serverHostAtom, type: XlPredefinedAtoms.string, data: server, details: XlDetails.ignoreErrors]; Xl.CloseConnection[c]; EXITS Oops => {}; }; Commander.Register[key: "X11DefaultServer", proc: DefaultServerCommand, doc: "Denote X server for new connections. Use X11DefaultServer {application} server"]; Commander.Register[key: "X11Identification", proc: IdentificationCommand, doc: "Print Identification"]; Commander.Register[key: "X11TrustedSetServerHost", proc: TrustedSetServerHostCommand, doc: "Initializes PARC_ServerHost convention on server"]; END.  X11Commands.mesa Copyright Ó 1991, 1992, 1993 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, January 18, 1991 4:09:38 pm PST Christian Jacobi, February 3, 1993 3:11 pm PST Commands which are optional to drive the setup of Xl. Êu•NewlineDelimiter –(cedarcode) style™šœ™Icodešœ Ïeœ=™HKšœ=™=K™.K™K™5K™—šÏk ˜ Kšœ/žœ@˜qK˜—šÏn œžœž˜Kšžœ0žœ.˜g—Kšž˜K˜•StartOfExpansion— -- [parent: ViewerClasses.Viewer, clientData: REF ANY _ NIL, mouseButton: ViewerClasses.MouseButton _ red, shift: BOOL _ FALSE, control: BOOL _ FALSE]š Ÿœžœžœžœ žœ˜DKšœžœ(žœžœ˜Všžœžœžœ žœ˜šœžœ'˜/Kšžœ ˜ Kšžœ ˜ Kšžœ"˜$Kšœ˜—K˜—K˜K˜K˜—šŸ œžœžœžœžœžœžœ˜VKšœ˜˜=Kšœžœž˜*Kšœ˜—šžœžœ˜ K˜Kšžœžœ˜!K˜—K˜—K˜šŸœ˜/Kšœžœ˜%Kšœžœžœžœ˜0šžœž˜Kšœ"žœžœ˜0K˜K˜9KšžœN˜U—K˜(šžœžœ˜#Kšžœ˜ šžœ˜K˜#šžœ˜Kšžœ$˜(KšžœJ˜N—K˜——K˜!K˜K˜—šŸœ˜0K˜.K˜K˜—šŸœ˜6šžœ˜˜K˜*K˜$Kšžœ˜ K˜—KšœAžœ˜LK˜—Kšœ žœ˜.K˜/K˜=K˜•Kšœ˜Kšžœ ˜K˜K˜—Kšœ ˜ Kšœg˜gKšœ˜Kšžœ˜—…— „ÿ