X11HelpCommands.mesa
Copyright Ó 1990, 1991, 1992 by Xerox Corporation. All rights reserved.
Christian Jacobi, December 27, 1990 3:01 pm PST
Christian Jacobi, April 7, 1992 10:07 am PDT
DIRECTORY Convert, Commander, IO, KeyNames, Rope, Xl;
X11HelpCommands: CEDAR PROGRAM
IMPORTS Convert, Commander, IO, KeyNames, Rope, Xl ~
BEGIN
FormatAsSetOfEvent: PROC [events: CARD] RETURNS [r: Rope.ROPE] = {
r ¬ FormatSetOfEvent[LOOPHOLE[events]];
};
FormatSetOfEvent: PROC [events: Xl.SetOfEvent] RETURNS [r: Rope.ROPE] = {
Check: PROC [e: Xl.SetOfEvent, r1: Rope.ROPE] = {
IF Xl.ORSetOfEvents[events, e]=events THEN {
IF nonEmpty THEN r ¬ Rope.Concat[r, ", "];
r ¬ Rope.Concat[r, r1];
nonEmpty ¬ TRUE;
};
};
nonEmpty: BOOL ¬ FALSE;
IF events=Xl.disableEvents THEN RETURN ["{disableEvents}"];
r ¬ "{";
Check[[keyPress: TRUE], "keyPress"];
Check[[keyRelease: TRUE], "keyRelease"];
Check[[buttonPress: TRUE], "buttonPress"];
Check[[buttonRelease: TRUE], "buttonRelease"];
Check[[enterWindow: TRUE], "enterWindow"];
Check[[leaveWindow: TRUE], "leaveWindow"];
Check[[pointerMotion: TRUE], "pointerMotion"];
Check[[pointerMotionHint: TRUE], "pointerMotionHint"];
Check[[button1Motion: TRUE], "pointerMotion1"];
Check[[button2Motion: TRUE], "pointerMotion2"];
Check[[button3Motion: TRUE], "pointerMotion3"];
Check[[button4Motion: TRUE], "pointerMotion4"];
Check[[button5Motion: TRUE], "pointerMotion5"];
Check[[buttonMotion: TRUE], "buttonMotion"];
Check[[keymapState: TRUE], "keymapState"];
Check[[exposure: TRUE], "exposure"];
Check[[visibilityChange: TRUE], "visibilityChange"];
Check[[structureNotify: TRUE], "structureNotify"];
Check[[resizeRedirect: TRUE], "resizeRedirect"];
Check[[substructureNotify: TRUE], "substructureNotify"];
Check[[focusChange: TRUE], "focusChange"];
Check[[propertyChange: TRUE], "propertyChange"];
Check[[colormapChange: TRUE], "colorMapChange"];
Check[[ownerGrabButton: TRUE], "ownerGrabButton"];
r ¬ Rope.Flatten[Rope.Concat[r, "}"]];
};
X11PrintSetOfEvent: Commander.CommandProc = {
--Implements a command which converts the input into a Xl.SetOfEvent
ENABLE Convert.Error => {
msg ¬ "Format is X11PrintSetOfEvent number"; GOTO Oops
};
c: CARD ¬ Convert.CardFromRope[cmd.commandLine];
msg ¬ FormatAsSetOfEvent[c];
EXITS Oops => {result ¬ $Failure};
};
PrintNumber: Commander.CommandProc = {
c: CARD; p: INT; keyName: Rope.ROPE;
r: Rope.ROPE ¬ cmd.commandLine;
--skip over garbage at beginning
p ← Rope.SkipOver[r, 0, " \r\l\t"];
IF p>0 AND p<Rope.Length[r] THEN r ¬ Rope.Substr[r, p];
--skip over garbage at end
p ¬ Rope.SkipTo[r, 0, "\r\l"];
IF p>0 THEN r ¬ Rope.Substr[r, 0, p];
--convert eventual C language syntax for hex to Cedar syntax
IF Rope.Equal[Rope.Substr[r, 0, 2], "0x", FALSE] THEN {
r ¬ Rope.Cat["0", Rope.Substr[r, 2], "H"]
};
BEGIN
c ¬ Convert.CardFromRope[r ! Convert.Error => {
c ¬ KeyNames.KeySymFromName[r].val;
IF c=0 THEN {msg ¬ "Format is: number"; GOTO Oops};
GOTO TryAgain;
}];
EXITS TryAgain => {};
END;
keyName ¬ KeyNames.NameFromKeySym[[c]];
msg ¬ IO.PutFLR[" dec: %g oct: %b hex: %x, keysym: %g\n", LIST[IO.card[c], IO.card[c], IO.card[c], IO.rope[keyName]]];
EXITS Oops => {result ¬ $Failure};
};
Commander.Register["X11PrintSetOfEvent", X11PrintSetOfEvent, "Convert number to Xl.SetOfEvent"];
Commander.Register["PrintKey", PrintNumber, "Print in different ways"];
Commander.Register["X11PrintKey", PrintNumber, "Print in different ways"];
END.