示例#1
0
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;
}
示例#2
0
文件: joy.c 项目: martinpiper/VICE
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;
}
示例#3
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;
}
示例#4
0
文件: joyai.c 项目: AreaScout/vice
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;
}
示例#5
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 {
            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;
}
示例#6
0
文件: joy.c 项目: c64scene-ar/c64f3
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;
}
示例#7
0
文件: joyai.c 项目: AreaScout/vice
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;
}