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

Function checkqualifiers

src/inputdevice.cpp:6362–6414  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6360#endif
6361
6362static 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
6416static void setqualifiers (int evt, int state)
6417{

Callers 3

process_custom_eventFunction · 0.85
setbuttonstateallFunction · 0.85

Calls 1

getqualidFunction · 0.85

Tested by

no test coverage detected