int joystick_check_set(signed long key, int keysetnum, unsigned int joyport) { int column; /* if joykeys are disabled then ignore key sets */ if (!joykeys_enable) { return 0; } for (column = 0; column < 9; column++) { if (key == joykeys[keysetnum][column]) { if (joypad_bits[column]) { /*joystick_value[joyport] |= joypad_bits[column];*/ joystick_set_value_or(joyport, (BYTE)joypad_bits[column]); joypad_status[keysetnum][column] = 1; } else { /*joystick_value[joyport] = 0;*/ joystick_set_value_absolute(joyport, 0); memset(joypad_status[keysetnum], 0, sizeof(joypad_status[keysetnum])); } return 1; } } return 0; }
static int handle_keyset_mapping(joystick_device_t pc_device, const int *set, kbd_code_t kcode, int pressed) { int i; int nr; if (cbm_joystick[0] & pc_device) nr = 1; else if (cbm_joystick[1] & pc_device) nr = 2; else return 0; for (i=0; i<9; i++) { if (kcode == set[i]) { if (pressed) joystick_set_value_or(nr, cbm_set[i]); //joystick_value[1] |= cbm_set[i]; else joystick_set_value_and(nr, ~cbm_set[i]); return 1; } } return 0; }
int joystick_handle_key(unsigned long kcode, int pressed) { int port_idx; BYTE value = 0; for (port_idx = 0; port_idx < JOYSTICK_NUM; port_idx++) { /* The numpad case is handled specially because it allows users to use both `5' and `2' for "down". */ if (joystick_port_map[port_idx] == JOYDEV_NUMPAD) { switch (kcode) { case 61: /* North-West */ value = 5; break; case 62: /* North */ value = 1; break; case 63: /* North-East */ value = 9; break; case 47: /* East */ value = 8; break; case 31: /* South-East */ value = 10; break; case 30: /* South */ case 46: value = 2; break; case 29: /* South-West */ value = 6; break; case 45: /* West */ value = 4; break; case 15: case 99: value = 16; break; default: /* (make compiler happy) */ break; } if (pressed) { joystick_set_value_or(port_idx + 1, value); } else { joystick_set_value_and(port_idx + 1, (BYTE) ~value); } } } return value; }
int joyai_key(int joy, int dst, unsigned long kcode, int pressed) { BYTE value = 0; keysym_type *keysym = (joy == 2) ? keysym_2 : keysym_1; unsigned int i; for (i = 0; i < NUM_KEYSYM; i++) { if ((keysym[i].type == TYPE_NONE) && (keysym[i].rawkey == kcode)) { value = (1 << keysym[i].bitnum); if (pressed) { joystick_set_value_or(dst, value); } else { joystick_set_value_and(dst, (BYTE) ~value); } } } return value; }
static int handle_keyset_mapping(joystick_device_t pc_device, const int *set, kbd_code_t kcode, int pressed) { int i; int nr; if (cbm_joystick[0] & pc_device) { nr = 1; } else { if (cbm_joystick[1] & pc_device) { nr = 2; } else { if (cbm_joystick[2] & pc_device) { nr = 3; } else { if (cbm_joystick[3] & pc_device) { nr = 4; } else { return 0; } } } } for (i = 0; i < 9; i++) { if (kcode == set[i]) { if (pressed) { joystick_set_value_or(nr, cbm_set[i]); } else { joystick_set_value_and(nr, ~cbm_set[i]); } return 1; } } return 0; }
int joystick_handle_key(unsigned long kcode, int pressed) { BYTE value = 0; /* The numpad case is handled specially because it allows users to use both `5' and `2' for "down". */ if (joystick_device[0] == JOYDEV_NUMPAD || joystick_device[1] == JOYDEV_NUMPAD || joystick_device[2] == JOYDEV_NUMPAD || joystick_device[3] == JOYDEV_NUMPAD) { switch (kcode) { case 61: /* North-West */ value = 5; break; case 62: /* North */ value = 1; break; case 63: /* North-East */ value = 9; break; case 47: /* East */ value = 8; break; case 31: /* South-East */ value = 10; break; case 30: /* South */ case 46: value = 2; break; case 29: /* South-West */ value = 6; break; case 45: /* West */ value = 4; break; case 15: case 99: value = 16; break; default: /* (make compiler happy) */ break; } if (pressed) { if (joystick_device[0] == JOYDEV_NUMPAD) { joystick_set_value_or(1, value); } if (joystick_device[1] == JOYDEV_NUMPAD) { joystick_set_value_or(2, value); } if (joystick_device[2] == JOYDEV_NUMPAD) { joystick_set_value_or(3, value); } if (joystick_device[3] == JOYDEV_NUMPAD) { joystick_set_value_or(4, value); } } else { if (joystick_device[0] == JOYDEV_NUMPAD) { joystick_set_value_and(1, (BYTE) ~value); } if (joystick_device[1] == JOYDEV_NUMPAD) { joystick_set_value_and(2, (BYTE) ~value); } if (joystick_device[2] == JOYDEV_NUMPAD) { joystick_set_value_and(3, (BYTE) ~value); } if (joystick_device[3] == JOYDEV_NUMPAD) { joystick_set_value_and(4, (BYTE) ~value); } } } if (joystick_device[0] == JOYDEV_KEYSET1) { value |= joyai_key(1, 1, kcode, pressed); } if (joystick_device[0] == JOYDEV_KEYSET2) { value |= joyai_key(2, 1, kcode, pressed); } if (joystick_device[1] == JOYDEV_KEYSET1) { value |= joyai_key(1, 2, kcode, pressed); } if (joystick_device[1] == JOYDEV_KEYSET2) { value |= joyai_key(2, 2, kcode, pressed); } if (joystick_device[2] == JOYDEV_KEYSET1) { value |= joyai_key(1, 3, kcode, pressed); } if (joystick_device[2] == JOYDEV_KEYSET2) { value |= joyai_key(2, 3, kcode, pressed); } if (joystick_device[3] == JOYDEV_KEYSET1) { value |= joyai_key(1, 4, kcode, pressed); } if (joystick_device[3] == JOYDEV_KEYSET2) { value |= joyai_key(2, 4, kcode, pressed); } return value; }
int joyai_update(int joy, int dst) { void *ptr; keysym_type *keysym = (joy == 2) ? keysym_2 : keysym_1; BYTE value = 0; if (!amigainput_lib_loaded) { return -1; } if ((CTX == NULL) || (ai_handle[joy - 1] == NULL)) { return -1; } if (AIN_ReadDevice(CTX, ai_handle[joy - 1], &ptr) == TRUE) { unsigned int i, *data = ptr; for (i = 0; i < NUM_KEYSYM; i++) { switch (keysym[i].type) { /* Axis and hats use values between -32768 and 32767. Digital Buttons use * values between 0 and 1 (1 is "pressed"), while analog buttons use * values between 0 and 32767. */ case TYPE_BUTTON: value = (1 << keysym[i].bitnum); if (data[keysym[i].offset]) { joystick_set_value_or(dst, value); } else { joystick_set_value_and(dst, (BYTE) ~value); } break; case TYPE_AXES: value = (1 << keysym[i].bitnum); switch (keysym[i].bitnum) { case DIGITAL_UP: /* neg value */ case DIGITAL_LEFT: /* neg value */ if (data[keysym[i].offset] <= (-(ONOFF_VALUE))) { joystick_set_value_or(dst, value); } else { joystick_set_value_and(dst, (BYTE) ~value); } break; case DIGITAL_DOWN: /* pos value */ case DIGITAL_RIGHT: /* pos value */ if (data[keysym[i].offset] >= (ONOFF_VALUE)) { joystick_set_value_or(dst, value); } else { joystick_set_value_and(dst, (BYTE) ~value); } break; default: break; } break; case TYPE_HAT: value = 0; switch (data[keysym[i].offset]) { case 1: /* N */ value = (1 << DIGITAL_UP); break; case 2: /* NE */ value = ((1 << DIGITAL_UP) | (1 << DIGITAL_RIGHT)); break; case 3: /* E */ value = (1 << DIGITAL_RIGHT); break; case 4: /* SE */ value = ((1 << DIGITAL_DOWN) | (1 << DIGITAL_RIGHT)); break; case 5: /* S */ value = (1 << DIGITAL_DOWN); break; case 6: /* SW */ value = ((1 << DIGITAL_DOWN) | (1 << DIGITAL_LEFT)); break; case 7: /* W */ value = (1 << DIGITAL_LEFT); break; case 8: /* NW */ value = ((1 << DIGITAL_UP) | (1 << DIGITAL_LEFT)); break; default: /* none */ break; } joystick_set_value_absolute(dst, value); break; default: break; } } return 0; } return -1; }