| 6360 | #endif |
| 6361 | |
| 6362 | static bool checkqualifiers (int evt, uae_u64 flags, uae_u64 *qualmask, uae_s16 events[MAX_INPUT_SUB_EVENT_ALL]) |
| 6363 | { |
| 6364 | int i, j; |
| 6365 | int qualid = getqualid (evt); |
| 6366 | int nomatch = 0; |
| 6367 | bool isspecial = (qualifiers & (ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) != 0; |
| 6368 | |
| 6369 | flags &= ID_FLAG_QUALIFIER_MASK; |
| 6370 | if (qualid >= 0 && events) |
| 6371 | qualifiers_evt[qualid] = events; |
| 6372 | /* special set and new qualifier pressed? do not sent it to Amiga-side */ |
| 6373 | if ((qualifiers & (ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) && qualid >= 0) |
| 6374 | return false; |
| 6375 | |
| 6376 | for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { |
| 6377 | if (qualmask[i]) |
| 6378 | break; |
| 6379 | } |
| 6380 | if (i == MAX_INPUT_SUB_EVENT) { |
| 6381 | // no qualifiers in any slot and no special = always match |
| 6382 | return isspecial == false; |
| 6383 | } |
| 6384 | |
| 6385 | // do we have any subevents with qualifier set? |
| 6386 | for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { |
| 6387 | for (j = 0; j < MAX_INPUT_QUALIFIERS; j++) { |
| 6388 | uae_u64 mask = (ID_FLAG_QUALIFIER1 | ID_FLAG_QUALIFIER1_R) << (j * 2); |
| 6389 | bool isqualmask = (qualmask[i] & mask) != 0; |
| 6390 | bool isqual = (qualifiers & mask) != 0; |
| 6391 | if (isqualmask != isqual) { |
| 6392 | nomatch++; |
| 6393 | break; |
| 6394 | } |
| 6395 | } |
| 6396 | } |
| 6397 | if (nomatch == MAX_INPUT_SUB_EVENT) { |
| 6398 | // no matched qualifiers in any slot |
| 6399 | // allow all slots without qualifiers |
| 6400 | // special = never accept |
| 6401 | if (isspecial) |
| 6402 | return false; |
| 6403 | return flags ? false : true; |
| 6404 | } |
| 6405 | |
| 6406 | for (i = 0; i < MAX_INPUT_QUALIFIERS; i++) { |
| 6407 | uae_u64 mask = (ID_FLAG_QUALIFIER1 | ID_FLAG_QUALIFIER1_R) << (i * 2); |
| 6408 | bool isflags = (flags & mask) != 0; |
| 6409 | bool isqual = (qualifiers & mask) != 0; |
| 6410 | if (isflags != isqual) |
| 6411 | return false; |
| 6412 | } |
| 6413 | return true; |
| 6414 | } |
| 6415 | |
| 6416 | static void setqualifiers (int evt, int state) |
| 6417 | { |
no test coverage detected