MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / inputdevice_translatekeycode_2

Function inputdevice_translatekeycode_2

src/inputdevice.cpp:8679–8810  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8677}
8678
8679static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int keystate, bool qualifiercheckonly, bool ignorecanrelease)
8680{
8681 struct uae_input_device *na = &keyboards[keyboard];
8682 int j, k;
8683 int handled = 0;
8684 bool didcustom = false;
8685
8686 if (!keyboards || scancode < 0)
8687 return handled;
8688
8689 j = 0;
8690 while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) {
8691 if (na->extra[j] == scancode) {
8692 bool qualonly;
8693 uae_u64 qualmask[MAX_INPUT_SUB_EVENT];
8694 getqualmask (qualmask, na, j, &qualonly);
8695
8696 if (qualonly)
8697 qualifiercheckonly = true;
8698 for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {/* send key release events in reverse order */
8699 uae_u64 *flagsp = &na->flags[j][sublevdir[keystate == 0 ? 1 : 0][k]];
8700 int evt = na->eventid[j][sublevdir[keystate == 0 ? 1 : 0][k]];
8701 uae_u64 flags = *flagsp;
8702 int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0;
8703 int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0;
8704 int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0;
8705 int invert = (flags & ID_FLAG_INVERT) ? 1 : 0;
8706 int setmode = (flags & ID_FLAG_SET_ONOFF) ? 1: 0;
8707 int setvalval = (flags & (ID_FLAG_SET_ONOFF_VAL1 | ID_FLAG_SET_ONOFF_VAL2));
8708 int setval = setvalval == (ID_FLAG_SET_ONOFF_VAL1 | ID_FLAG_SET_ONOFF_VAL2) ? SET_ONOFF_PRESSREL_VALUE :
8709 (setvalval == ID_FLAG_SET_ONOFF_VAL2 ? SET_ONOFF_PRESS_VALUE : (setvalval == ID_FLAG_SET_ONOFF_VAL1 ? SET_ONOFF_ON_VALUE : SET_ONOFF_OFF_VALUE));
8710 int toggled;
8711 int state;
8712 int ie_flags = na->port[j][sublevdir[keystate == 0 ? 1 : 0][k]] == 0 ? HANDLE_IE_FLAG_ALLOWOPPOSITE : 0;
8713
8714 if (keystate < 0) {
8715 state = keystate;
8716 } else if (invert) {
8717 state = keystate ? 0 : 1;
8718 } else {
8719 state = keystate;
8720 }
8721 if (setmode) {
8722 if (state || setval == SET_ONOFF_PRESS_VALUE || setval == SET_ONOFF_PRESSREL_VALUE)
8723 state = setval | (keystate ? 1 : 0);
8724 }
8725
8726 setqualifiers (evt, state > 0);
8727
8728 if (qualifiercheckonly) {
8729 if (!state && (flags & ID_FLAG_CANRELEASE)) {
8730 *flagsp &= ~ID_FLAG_CANRELEASE;
8731 handle_input_event (evt, state, 1, (autofire ? HANDLE_IE_FLAG_AUTOFIRE : 0) | HANDLE_IE_FLAG_CANSTOPPLAYBACK | ie_flags);
8732 if (k == 0) {
8733 process_custom_event (na, j, state, qualmask, autofire, k);
8734 }
8735 }
8736 continue;

Callers 2

Calls 8

getqualmaskFunction · 0.85
setqualifiersFunction · 0.85
handle_input_eventFunction · 0.85
process_custom_eventFunction · 0.85
target_checkcapslockFunction · 0.85
queue_input_eventFunction · 0.85
checkqualifiersFunction · 0.85
rqualifiersFunction · 0.85

Tested by

no test coverage detected