<> <> <> <> <<>> <> <> <> <<>> DIRECTORY Basics; XlKeyBut: CEDAR DEFINITIONS IMPORTS Basics = BEGIN KeyBut: TYPE = MACHINE DEPENDENT {shift, lock, control, mod1, mod2, mod3, mod4, mod5, button1, button2, button3, button4, button5}; SetOfKeyButMask: TYPE = WORD32 MACHINE DEPENDENT RECORD [ <<--This type is layed out so that its lower 16 bits match the layout in the protocol >> <<--never reported by server>> unused0: CARD16 ¬ 0, anyModfier: BOOL ¬ FALSE, --used for grabs only unused2: BOOL ¬ FALSE, unused3: BOOL ¬ FALSE, <<--fields for SetOfKeyButMask>> button5: BOOL ¬ FALSE, button4: BOOL ¬ FALSE, button3: BOOL ¬ FALSE, button2: BOOL ¬ FALSE, button1: BOOL ¬ FALSE, <<--fields for SetOfKeyMask and SetOfKeyButMask>> mod5: BOOL ¬ FALSE, mod4: BOOL ¬ FALSE, mod3: BOOL ¬ FALSE, mod2: BOOL ¬ FALSE, mod1: BOOL ¬ FALSE, control: BOOL ¬ FALSE, lock: BOOL ¬ FALSE, shift: BOOL ¬ FALSE ]; SetOfKeyMask: TYPE = SetOfKeyButMask; ORSetOfKeyButMask: PROC [s1, s2: SetOfKeyButMask] RETURNS [SetOfKeyButMask] = INLINE { RETURN [LOOPHOLE[Basics.BITOR[LOOPHOLE[s1], LOOPHOLE[s2]]]] }; IncludeKeyButInSet: PROC [keyBut: KeyBut, mask: SetOfKeyButMask ¬ []] RETURNS [SetOfKeyButMask] = INLINE { <> <> RETURN [LOOPHOLE[Basics.BITOR[ LOOPHOLE[mask], 2 ** LOOPHOLE[keyBut, [0..32)] ]]] }; IsKeyButInSet: PROC [keyBut: KeyBut, mask: SetOfKeyButMask] RETURNS [BOOL] = INLINE { <> <> RETURN [0 # Basics.BITAND[ LOOPHOLE[mask], 2 ** LOOPHOLE[keyBut, [0..32)] ]] }; END.