FROM: htts://github.com/KenDickey/FBDevVM file sqEVTest.c ------ /*==================*/ /* Modifier/Adjunct Keys */ /*==================*/ static int leftAdjuncts = 0; /* left- ctl, alt, shift, meta */ static int rightAdjuncts = 0; /* right- ctl, alt, shift, meta */ int modifierState() { return ( leftAdjuncts | rightAdjuncts ); } void clearModifierState() { leftAdjuncts = 0; rightAdjuncts = 0; } void updateModifierState(struct input_event* evt) { /* harmless if not modifier key */ if (evt->type == EV_KEY) { if (evt->value == 1) { /* button down */ switch (evt->code) { case KEY_LEFTMETA: leftAdjuncts |= CommandKeyBit; break; case KEY_LEFTALT: leftAdjuncts |= OptionKeyBit; break; case KEY_LEFTCTRL: leftAdjuncts |= CtrlKeyBit; break; case KEY_LEFTSHIFT: leftAdjuncts |= ShiftKeyBit; break; case KEY_RIGHTMETA: rightAdjuncts |= CommandKeyBit; break; case KEY_RIGHTALT: rightAdjuncts |= OptionKeyBit; break; case KEY_RIGHTCTRL: rightAdjuncts |= CtrlKeyBit; break; case KEY_RIGHTSHIFT: rightAdjuncts |= ShiftKeyBit; break; default: break; } } else if (evt->value == 0) { /* button up */ switch (evt->code) { case KEY_LEFTMETA: leftAdjuncts &= ~CommandKeyBit; break; case KEY_LEFTALT: leftAdjuncts &= ~OptionKeyBit; break; case KEY_LEFTCTRL: leftAdjuncts &= ~CtrlKeyBit; break; case KEY_LEFTSHIFT: leftAdjuncts &= ~ShiftKeyBit; break; case KEY_RIGHTMETA: rightAdjuncts &= ~CommandKeyBit; break; case KEY_RIGHTALT: rightAdjuncts &= ~OptionKeyBit; break; case KEY_RIGHTCTRL: rightAdjuncts &= ~CtrlKeyBit; break; case KEY_RIGHTSHIFT: rightAdjuncts &= ~ShiftKeyBit; break; default: break; } } /* ignore repeats (evt->value == 2) */ } } --- E O F ---