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 = { 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; p _ Rope.SkipOver[r, 0, " \r\l\t"]; IF p>0 AND p0 THEN r ¬ Rope.Substr[r, 0, p]; 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. €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 --Implements a command which converts the input into a Xl.SetOfEvent --skip over garbage at beginning --skip over garbage at end --convert eventual C language syntax for hex to Cedar syntax ΚΕ–(cedarcode) style•NewlineDelimiter ˜codešœ™Kšœ Οeœ=™HK™/K™,—šΟk œžœ˜5K˜—šΟnœžœž˜Kšžœžœ˜5—šž˜K˜—š Ÿœžœ žœžœ žœ˜BKšœžœ ˜'Kšœ˜—K˜šŸœžœžœ žœ˜IšŸœžœžœ˜1šžœ$žœ˜,Kšžœ žœ˜*Kšœ˜Kšœ žœ˜Kšœ˜—K˜—Kšœ žœžœ˜Kšžœžœžœ˜;K˜Kšœžœ˜$Kšœžœ˜(Kšœžœ˜*Kšœžœ˜.Kšœžœ˜*Kšœžœ˜*Kšœžœ˜.Kšœžœ˜6Kšœžœ˜/Kšœžœ˜/Kšœžœ˜/Kšœžœ˜/Kšœžœ˜/Kšœžœ˜,Kšœžœ˜*Kšœžœ˜$Kšœžœ˜4Kšœžœ˜2Kšœžœ˜0Kšœžœ˜8Kšœžœ˜*Kšœžœ˜0Kšœžœ˜0Kšœžœ˜2Kšœ&˜&K˜—K˜šŸœ˜-KšœD™Dšžœ˜Kšœ-žœ˜6Kšœ˜—Kšœžœ)˜0Kšœ˜Kšžœ˜"Kšœ˜K˜—šŸ œ˜&Kšœžœœžœžœ˜$Kšœžœ˜K™ K˜#Kšžœžœžœ˜7K™K˜Kšžœžœ˜%K™<šžœ(žœžœ˜7K˜)Kšœ˜—šž˜šœ/˜/K˜#Kšžœžœžœ˜3Kšžœ ˜Kšœ˜—Kšžœ˜Kšžœ˜—K˜'Kš œžœ5žœžœ žœ žœ žœ˜yKšžœ˜"Kšœ˜—K˜Kšœ`˜`KšœG˜GKšœJ˜JKšžœ˜K˜K˜—…— ά!