mirror of
https://github.com/holub/mame
synced 2025-05-06 14:25:54 +03:00
636 lines
22 KiB
C
636 lines
22 KiB
C
/***************************************************************************
|
|
|
|
input.h
|
|
|
|
Handle input from the user.
|
|
|
|
Copyright Nicola Salmoria and the MAME Team.
|
|
Visit http://mamedev.org for licensing and usage restrictions.
|
|
|
|
***************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#ifndef __INPUT_H__
|
|
#define __INPUT_H__
|
|
|
|
#include "mamecore.h"
|
|
#include "astring.h"
|
|
|
|
|
|
/***************************************************************************
|
|
MACROS
|
|
***************************************************************************/
|
|
|
|
/* make sure RELATIVE and ABSOLUTE aren't defined elsewhere; otherwise it fouls up our macros */
|
|
#undef RELATIVE
|
|
#undef ABSOLUTE
|
|
|
|
/* relative devices return ~512 units per onscreen pixel */
|
|
#define INPUT_RELATIVE_PER_PIXEL 512
|
|
|
|
/* absolute devices return values between -65536 and +65536 */
|
|
#define INPUT_ABSOLUTE_MIN -65536
|
|
#define INPUT_ABSOLUTE_MAX 65536
|
|
|
|
/* flags in the top 4 bits of the input code */
|
|
#define INPUT_CODE_INTERNAL (1 << 31)
|
|
|
|
/* extract components of the input code */
|
|
#define INPUT_CODE_IS_INTERNAL(c) (((c) & INPUT_CODE_INTERNAL) != 0)
|
|
#define INPUT_CODE_DEVCLASS(c) ((input_device_class)(((c) >> 24) & 0x0f))
|
|
#define INPUT_CODE_DEVINDEX(c) ((UINT8)(((c) >> 20) & 0x0f))
|
|
#define INPUT_CODE_ITEMCLASS(c) ((input_item_class)(((c) >> 16) & 0x0f))
|
|
#define INPUT_CODE_MODIFIER(c) ((input_item_modifier)(((c) >> 12) & 0x0f))
|
|
#define INPUT_CODE_ITEMID(c) ((int)((c) & 0xfff))
|
|
|
|
/* build or modify input codes */
|
|
#define INPUT_CODE(d,x,i,m,o) ((((d) & 0x0f) << 24) | (((x) & 0x0f) << 20) | (((i) & 0x0f) << 16) | (((m) & 0x0f) << 12) | ((o) & 0xfff))
|
|
#define INPUT_CODE_SET_DEVINDEX(c,x) (((c) & ~(0xf << 20)) | (((x) & 0x0f) << 20))
|
|
#define INPUT_CODE_SET_ITEMCLASS(c,i) (((c) & ~(0xf << 16)) | (((i) & 0x0f) << 16))
|
|
#define INPUT_CODE_SET_MODIFIER(c,m) (((c) & ~(0xf << 12)) | (((m) & 0x0f) << 12))
|
|
#define INPUT_CODE_SET_ITEMID(c,d) (((c) & ~0xfff) | ((d) & 0xfff))
|
|
|
|
/* standard code building */
|
|
#define STANDARD_CODE(d,x,i,m,o) (INPUT_CODE(DEVICE_CLASS_##d, x, ITEM_CLASS_##i, ITEM_MODIFIER_##m, ITEM_ID_##o))
|
|
#define INTERNAL_CODE(x) (INPUT_CODE_INTERNAL | ((x) & 0xfff))
|
|
#define INPUT_CODE_INVALID STANDARD_CODE(INVALID, 0, INVALID, NONE, INVALID)
|
|
|
|
/* Maximum number of axis/buttons/hats with ITEM_IDs for use by osd layer*/
|
|
|
|
#define INPUT_MAX_AXIS (8)
|
|
#define INPUT_MAX_BUTTONS (16)
|
|
#define INPUT_MAX_HATS (4)
|
|
#define INPUT_MAX_ADD_SWITCH (16)
|
|
#define INPUT_MAX_ADD_ABSOLUTE (16)
|
|
#define INPUT_MAX_ADD_RELATIVE (16)
|
|
|
|
/***************************************************************************
|
|
CONSTANTS
|
|
***************************************************************************/
|
|
|
|
/* input device classes */
|
|
enum _input_device_class
|
|
{
|
|
DEVICE_CLASS_INVALID,
|
|
DEVICE_CLASS_KEYBOARD,
|
|
DEVICE_CLASS_MOUSE,
|
|
DEVICE_CLASS_LIGHTGUN,
|
|
DEVICE_CLASS_JOYSTICK,
|
|
DEVICE_CLASS_MAXIMUM
|
|
};
|
|
typedef enum _input_device_class input_device_class;
|
|
|
|
|
|
/* input item classes */
|
|
enum _input_item_class
|
|
{
|
|
ITEM_CLASS_INVALID,
|
|
ITEM_CLASS_SWITCH,
|
|
ITEM_CLASS_ABSOLUTE,
|
|
ITEM_CLASS_RELATIVE,
|
|
ITEM_CLASS_MAXIMUM
|
|
};
|
|
typedef enum _input_item_class input_item_class;
|
|
|
|
|
|
/* input item modifiers */
|
|
enum _input_item_modifier
|
|
{
|
|
ITEM_MODIFIER_NONE,
|
|
ITEM_MODIFIER_POS,
|
|
ITEM_MODIFIER_NEG,
|
|
ITEM_MODIFIER_LEFT,
|
|
ITEM_MODIFIER_RIGHT,
|
|
ITEM_MODIFIER_UP,
|
|
ITEM_MODIFIER_DOWN,
|
|
ITEM_MODIFIER_MAXIMUM
|
|
};
|
|
typedef enum _input_item_modifier input_item_modifier;
|
|
|
|
|
|
/* standard item IDs */
|
|
enum _input_item_id
|
|
{
|
|
ITEM_ID_INVALID,
|
|
|
|
/* standard keyboard IDs */
|
|
ITEM_ID_A,
|
|
ITEM_ID_B,
|
|
ITEM_ID_C,
|
|
ITEM_ID_D,
|
|
ITEM_ID_E,
|
|
ITEM_ID_F,
|
|
ITEM_ID_G,
|
|
ITEM_ID_H,
|
|
ITEM_ID_I,
|
|
ITEM_ID_J,
|
|
ITEM_ID_K,
|
|
ITEM_ID_L,
|
|
ITEM_ID_M,
|
|
ITEM_ID_N,
|
|
ITEM_ID_O,
|
|
ITEM_ID_P,
|
|
ITEM_ID_Q,
|
|
ITEM_ID_R,
|
|
ITEM_ID_S,
|
|
ITEM_ID_T,
|
|
ITEM_ID_U,
|
|
ITEM_ID_V,
|
|
ITEM_ID_W,
|
|
ITEM_ID_X,
|
|
ITEM_ID_Y,
|
|
ITEM_ID_Z,
|
|
ITEM_ID_0,
|
|
ITEM_ID_1,
|
|
ITEM_ID_2,
|
|
ITEM_ID_3,
|
|
ITEM_ID_4,
|
|
ITEM_ID_5,
|
|
ITEM_ID_6,
|
|
ITEM_ID_7,
|
|
ITEM_ID_8,
|
|
ITEM_ID_9,
|
|
ITEM_ID_F1,
|
|
ITEM_ID_F2,
|
|
ITEM_ID_F3,
|
|
ITEM_ID_F4,
|
|
ITEM_ID_F5,
|
|
ITEM_ID_F6,
|
|
ITEM_ID_F7,
|
|
ITEM_ID_F8,
|
|
ITEM_ID_F9,
|
|
ITEM_ID_F10,
|
|
ITEM_ID_F11,
|
|
ITEM_ID_F12,
|
|
ITEM_ID_F13,
|
|
ITEM_ID_F14,
|
|
ITEM_ID_F15,
|
|
ITEM_ID_ESC,
|
|
ITEM_ID_TILDE,
|
|
ITEM_ID_MINUS,
|
|
ITEM_ID_EQUALS,
|
|
ITEM_ID_BACKSPACE,
|
|
ITEM_ID_TAB,
|
|
ITEM_ID_OPENBRACE,
|
|
ITEM_ID_CLOSEBRACE,
|
|
ITEM_ID_ENTER,
|
|
ITEM_ID_COLON,
|
|
ITEM_ID_QUOTE,
|
|
ITEM_ID_BACKSLASH,
|
|
ITEM_ID_BACKSLASH2,
|
|
ITEM_ID_COMMA,
|
|
ITEM_ID_STOP,
|
|
ITEM_ID_SLASH,
|
|
ITEM_ID_SPACE,
|
|
ITEM_ID_INSERT,
|
|
ITEM_ID_DEL,
|
|
ITEM_ID_HOME,
|
|
ITEM_ID_END,
|
|
ITEM_ID_PGUP,
|
|
ITEM_ID_PGDN,
|
|
ITEM_ID_LEFT,
|
|
ITEM_ID_RIGHT,
|
|
ITEM_ID_UP,
|
|
ITEM_ID_DOWN,
|
|
ITEM_ID_0_PAD,
|
|
ITEM_ID_1_PAD,
|
|
ITEM_ID_2_PAD,
|
|
ITEM_ID_3_PAD,
|
|
ITEM_ID_4_PAD,
|
|
ITEM_ID_5_PAD,
|
|
ITEM_ID_6_PAD,
|
|
ITEM_ID_7_PAD,
|
|
ITEM_ID_8_PAD,
|
|
ITEM_ID_9_PAD,
|
|
ITEM_ID_SLASH_PAD,
|
|
ITEM_ID_ASTERISK,
|
|
ITEM_ID_MINUS_PAD,
|
|
ITEM_ID_PLUS_PAD,
|
|
ITEM_ID_DEL_PAD,
|
|
ITEM_ID_ENTER_PAD,
|
|
ITEM_ID_PRTSCR,
|
|
ITEM_ID_PAUSE,
|
|
ITEM_ID_LSHIFT,
|
|
ITEM_ID_RSHIFT,
|
|
ITEM_ID_LCONTROL,
|
|
ITEM_ID_RCONTROL,
|
|
ITEM_ID_LALT,
|
|
ITEM_ID_RALT,
|
|
ITEM_ID_SCRLOCK,
|
|
ITEM_ID_NUMLOCK,
|
|
ITEM_ID_CAPSLOCK,
|
|
ITEM_ID_LWIN,
|
|
ITEM_ID_RWIN,
|
|
ITEM_ID_MENU,
|
|
ITEM_ID_CANCEL,
|
|
|
|
/* standard mouse/joystick/gun IDs */
|
|
ITEM_ID_XAXIS,
|
|
ITEM_ID_YAXIS,
|
|
ITEM_ID_ZAXIS,
|
|
ITEM_ID_RXAXIS,
|
|
ITEM_ID_RYAXIS,
|
|
ITEM_ID_RZAXIS,
|
|
ITEM_ID_SLIDER1,
|
|
ITEM_ID_SLIDER2,
|
|
ITEM_ID_BUTTON1,
|
|
ITEM_ID_BUTTON2,
|
|
ITEM_ID_BUTTON3,
|
|
ITEM_ID_BUTTON4,
|
|
ITEM_ID_BUTTON5,
|
|
ITEM_ID_BUTTON6,
|
|
ITEM_ID_BUTTON7,
|
|
ITEM_ID_BUTTON8,
|
|
ITEM_ID_BUTTON9,
|
|
ITEM_ID_BUTTON10,
|
|
ITEM_ID_BUTTON11,
|
|
ITEM_ID_BUTTON12,
|
|
ITEM_ID_BUTTON13,
|
|
ITEM_ID_BUTTON14,
|
|
ITEM_ID_BUTTON15,
|
|
ITEM_ID_BUTTON16,
|
|
ITEM_ID_START,
|
|
ITEM_ID_SELECT,
|
|
|
|
/* Hats */
|
|
ITEM_ID_HAT1UP,
|
|
ITEM_ID_HAT1DOWN,
|
|
ITEM_ID_HAT1LEFT,
|
|
ITEM_ID_HAT1RIGHT,
|
|
ITEM_ID_HAT2UP,
|
|
ITEM_ID_HAT2DOWN,
|
|
ITEM_ID_HAT2LEFT,
|
|
ITEM_ID_HAT2RIGHT,
|
|
ITEM_ID_HAT3UP,
|
|
ITEM_ID_HAT3DOWN,
|
|
ITEM_ID_HAT3LEFT,
|
|
ITEM_ID_HAT3RIGHT,
|
|
ITEM_ID_HAT4UP,
|
|
ITEM_ID_HAT4DOWN,
|
|
ITEM_ID_HAT4LEFT,
|
|
ITEM_ID_HAT4RIGHT,
|
|
|
|
/* Additional IDs */
|
|
ITEM_ID_ADD_SWITCH1,
|
|
ITEM_ID_ADD_SWITCH2,
|
|
ITEM_ID_ADD_SWITCH3,
|
|
ITEM_ID_ADD_SWITCH4,
|
|
ITEM_ID_ADD_SWITCH5,
|
|
ITEM_ID_ADD_SWITCH6,
|
|
ITEM_ID_ADD_SWITCH7,
|
|
ITEM_ID_ADD_SWITCH8,
|
|
ITEM_ID_ADD_SWITCH9,
|
|
ITEM_ID_ADD_SWITCH10,
|
|
ITEM_ID_ADD_SWITCH11,
|
|
ITEM_ID_ADD_SWITCH12,
|
|
ITEM_ID_ADD_SWITCH13,
|
|
ITEM_ID_ADD_SWITCH14,
|
|
ITEM_ID_ADD_SWITCH15,
|
|
ITEM_ID_ADD_SWITCH16,
|
|
|
|
ITEM_ID_ADD_ABSOLUTE1,
|
|
ITEM_ID_ADD_ABSOLUTE2,
|
|
ITEM_ID_ADD_ABSOLUTE3,
|
|
ITEM_ID_ADD_ABSOLUTE4,
|
|
ITEM_ID_ADD_ABSOLUTE5,
|
|
ITEM_ID_ADD_ABSOLUTE6,
|
|
ITEM_ID_ADD_ABSOLUTE7,
|
|
ITEM_ID_ADD_ABSOLUTE8,
|
|
ITEM_ID_ADD_ABSOLUTE9,
|
|
ITEM_ID_ADD_ABSOLUTE10,
|
|
ITEM_ID_ADD_ABSOLUTE11,
|
|
ITEM_ID_ADD_ABSOLUTE12,
|
|
ITEM_ID_ADD_ABSOLUTE13,
|
|
ITEM_ID_ADD_ABSOLUTE14,
|
|
ITEM_ID_ADD_ABSOLUTE15,
|
|
ITEM_ID_ADD_ABSOLUTE16,
|
|
|
|
ITEM_ID_ADD_RELATIVE1,
|
|
ITEM_ID_ADD_RELATIVE2,
|
|
ITEM_ID_ADD_RELATIVE3,
|
|
ITEM_ID_ADD_RELATIVE4,
|
|
ITEM_ID_ADD_RELATIVE5,
|
|
ITEM_ID_ADD_RELATIVE6,
|
|
ITEM_ID_ADD_RELATIVE7,
|
|
ITEM_ID_ADD_RELATIVE8,
|
|
ITEM_ID_ADD_RELATIVE9,
|
|
ITEM_ID_ADD_RELATIVE10,
|
|
ITEM_ID_ADD_RELATIVE11,
|
|
ITEM_ID_ADD_RELATIVE12,
|
|
ITEM_ID_ADD_RELATIVE13,
|
|
ITEM_ID_ADD_RELATIVE14,
|
|
ITEM_ID_ADD_RELATIVE15,
|
|
ITEM_ID_ADD_RELATIVE16,
|
|
|
|
/* generic other IDs */
|
|
ITEM_ID_OTHER_SWITCH,
|
|
ITEM_ID_OTHER_AXIS_ABSOLUTE,
|
|
ITEM_ID_OTHER_AXIS_RELATIVE,
|
|
ITEM_ID_MAXIMUM,
|
|
|
|
/* absolute maximum ID */
|
|
ITEM_ID_ABSOLUTE_MAXIMUM = INPUT_CODE_ITEMID(~0)
|
|
};
|
|
typedef enum _input_item_id input_item_id;
|
|
|
|
|
|
/* expanded codes referencing specific devices for input definitions */
|
|
/* note that these all implcitly refer to device 0; to reference additional */
|
|
/* devices, wrap the code in INPUT_CODE_SET_DEVINDEX() */
|
|
enum
|
|
{
|
|
/* keyboard codes */
|
|
KEYCODE_A = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, A),
|
|
KEYCODE_B = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, B),
|
|
KEYCODE_C = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, C),
|
|
KEYCODE_D = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, D),
|
|
KEYCODE_E = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, E),
|
|
KEYCODE_F = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F),
|
|
KEYCODE_G = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, G),
|
|
KEYCODE_H = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, H),
|
|
KEYCODE_I = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, I),
|
|
KEYCODE_J = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, J),
|
|
KEYCODE_K = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, K),
|
|
KEYCODE_L = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, L),
|
|
KEYCODE_M = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, M),
|
|
KEYCODE_N = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, N),
|
|
KEYCODE_O = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, O),
|
|
KEYCODE_P = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, P),
|
|
KEYCODE_Q = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Q),
|
|
KEYCODE_R = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, R),
|
|
KEYCODE_S = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, S),
|
|
KEYCODE_T = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, T),
|
|
KEYCODE_U = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, U),
|
|
KEYCODE_V = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, V),
|
|
KEYCODE_W = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, W),
|
|
KEYCODE_X = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, X),
|
|
KEYCODE_Y = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Y),
|
|
KEYCODE_Z = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Z),
|
|
KEYCODE_0 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 0),
|
|
KEYCODE_1 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 1),
|
|
KEYCODE_2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 2),
|
|
KEYCODE_3 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 3),
|
|
KEYCODE_4 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 4),
|
|
KEYCODE_5 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 5),
|
|
KEYCODE_6 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 6),
|
|
KEYCODE_7 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 7),
|
|
KEYCODE_8 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 8),
|
|
KEYCODE_9 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 9),
|
|
KEYCODE_F1 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F1),
|
|
KEYCODE_F2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F2),
|
|
KEYCODE_F3 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F3),
|
|
KEYCODE_F4 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F4),
|
|
KEYCODE_F5 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F5),
|
|
KEYCODE_F6 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F6),
|
|
KEYCODE_F7 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F7),
|
|
KEYCODE_F8 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F8),
|
|
KEYCODE_F9 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F9),
|
|
KEYCODE_F10 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F10),
|
|
KEYCODE_F11 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F11),
|
|
KEYCODE_F12 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F12),
|
|
KEYCODE_F13 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F13),
|
|
KEYCODE_F14 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F14),
|
|
KEYCODE_F15 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F15),
|
|
KEYCODE_ESC = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ESC),
|
|
KEYCODE_TILDE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, TILDE),
|
|
KEYCODE_MINUS = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MINUS),
|
|
KEYCODE_EQUALS = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, EQUALS),
|
|
KEYCODE_BACKSPACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSPACE),
|
|
KEYCODE_TAB = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, TAB),
|
|
KEYCODE_OPENBRACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, OPENBRACE),
|
|
KEYCODE_CLOSEBRACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CLOSEBRACE),
|
|
KEYCODE_ENTER = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ENTER),
|
|
KEYCODE_COLON = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, COLON),
|
|
KEYCODE_QUOTE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, QUOTE),
|
|
KEYCODE_BACKSLASH = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSLASH),
|
|
KEYCODE_BACKSLASH2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSLASH2),
|
|
KEYCODE_COMMA = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, COMMA),
|
|
KEYCODE_STOP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, STOP),
|
|
KEYCODE_SLASH = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SLASH),
|
|
KEYCODE_SPACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SPACE),
|
|
KEYCODE_INSERT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, INSERT),
|
|
KEYCODE_DEL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DEL),
|
|
KEYCODE_HOME = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, HOME),
|
|
KEYCODE_END = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, END),
|
|
KEYCODE_PGUP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PGUP),
|
|
KEYCODE_PGDN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PGDN),
|
|
KEYCODE_LEFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LEFT),
|
|
KEYCODE_RIGHT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RIGHT),
|
|
KEYCODE_UP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, UP),
|
|
KEYCODE_DOWN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DOWN),
|
|
KEYCODE_0_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 0_PAD),
|
|
KEYCODE_1_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 1_PAD),
|
|
KEYCODE_2_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 2_PAD),
|
|
KEYCODE_3_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 3_PAD),
|
|
KEYCODE_4_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 4_PAD),
|
|
KEYCODE_5_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 5_PAD),
|
|
KEYCODE_6_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 6_PAD),
|
|
KEYCODE_7_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 7_PAD),
|
|
KEYCODE_8_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 8_PAD),
|
|
KEYCODE_9_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 9_PAD),
|
|
KEYCODE_SLASH_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SLASH_PAD),
|
|
KEYCODE_ASTERISK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ASTERISK),
|
|
KEYCODE_MINUS_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MINUS_PAD),
|
|
KEYCODE_PLUS_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PLUS_PAD),
|
|
KEYCODE_DEL_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DEL_PAD),
|
|
KEYCODE_ENTER_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ENTER_PAD),
|
|
KEYCODE_PRTSCR = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PRTSCR),
|
|
KEYCODE_PAUSE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PAUSE),
|
|
KEYCODE_LSHIFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LSHIFT),
|
|
KEYCODE_RSHIFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RSHIFT),
|
|
KEYCODE_LCONTROL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LCONTROL),
|
|
KEYCODE_RCONTROL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RCONTROL),
|
|
KEYCODE_LALT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LALT),
|
|
KEYCODE_RALT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RALT),
|
|
KEYCODE_SCRLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SCRLOCK),
|
|
KEYCODE_NUMLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, NUMLOCK),
|
|
KEYCODE_CAPSLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CAPSLOCK),
|
|
KEYCODE_LWIN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LWIN),
|
|
KEYCODE_RWIN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RWIN),
|
|
KEYCODE_MENU = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MENU),
|
|
KEYCODE_CANCEL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CANCEL),
|
|
|
|
/* mouse axes as relative devices */
|
|
MOUSECODE_X = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, XAXIS),
|
|
MOUSECODE_Y = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, YAXIS),
|
|
MOUSECODE_Z = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, ZAXIS),
|
|
|
|
/* mouse axes as switches in +/- direction */
|
|
MOUSECODE_X_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, XAXIS),
|
|
MOUSECODE_X_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, XAXIS),
|
|
MOUSECODE_Y_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, YAXIS),
|
|
MOUSECODE_Y_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, YAXIS),
|
|
MOUSECODE_Z_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, ZAXIS),
|
|
MOUSECODE_Z_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, ZAXIS),
|
|
|
|
/* mouse buttons */
|
|
MOUSECODE_BUTTON1 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON1),
|
|
MOUSECODE_BUTTON2 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON2),
|
|
MOUSECODE_BUTTON3 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON3),
|
|
MOUSECODE_BUTTON4 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON4),
|
|
MOUSECODE_BUTTON5 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON5),
|
|
MOUSECODE_BUTTON6 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON6),
|
|
MOUSECODE_BUTTON7 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON7),
|
|
MOUSECODE_BUTTON8 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON8),
|
|
|
|
/* gun axes as absolute devices */
|
|
GUNCODE_X = STANDARD_CODE(LIGHTGUN, 0, ABSOLUTE, NONE, XAXIS),
|
|
GUNCODE_Y = STANDARD_CODE(LIGHTGUN, 0, ABSOLUTE, NONE, YAXIS),
|
|
|
|
/* gun buttons */
|
|
GUNCODE_BUTTON1 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON1),
|
|
GUNCODE_BUTTON2 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON2),
|
|
GUNCODE_BUTTON3 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON3),
|
|
GUNCODE_BUTTON4 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON4),
|
|
GUNCODE_BUTTON5 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON5),
|
|
GUNCODE_BUTTON6 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON6),
|
|
GUNCODE_BUTTON7 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON7),
|
|
GUNCODE_BUTTON8 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON8),
|
|
|
|
/* joystick axes as absolute devices */
|
|
JOYCODE_X = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, XAXIS),
|
|
JOYCODE_Y = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, YAXIS),
|
|
JOYCODE_Z = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, ZAXIS),
|
|
JOYCODE_U = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, RXAXIS),
|
|
JOYCODE_V = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, RYAXIS),
|
|
|
|
/* joystick axes as absolute half-axes */
|
|
JOYCODE_X_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, XAXIS),
|
|
JOYCODE_X_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, XAXIS),
|
|
JOYCODE_Y_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, YAXIS),
|
|
JOYCODE_Y_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, YAXIS),
|
|
JOYCODE_Z_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, ZAXIS),
|
|
JOYCODE_Z_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, ZAXIS),
|
|
JOYCODE_U_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, RXAXIS),
|
|
JOYCODE_U_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, RXAXIS),
|
|
JOYCODE_V_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, RYAXIS),
|
|
JOYCODE_V_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, RYAXIS),
|
|
|
|
/* joystick axes as switches; X/Y are specially handled for left/right/up/down mapping */
|
|
JOYCODE_X_LEFT_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, LEFT, XAXIS),
|
|
JOYCODE_X_RIGHT_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, RIGHT, XAXIS),
|
|
JOYCODE_Y_UP_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, UP, YAXIS),
|
|
JOYCODE_Y_DOWN_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, DOWN, YAXIS),
|
|
JOYCODE_Z_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, ZAXIS),
|
|
JOYCODE_Z_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, ZAXIS),
|
|
JOYCODE_U_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, RXAXIS),
|
|
JOYCODE_U_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, RXAXIS),
|
|
JOYCODE_V_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, RYAXIS),
|
|
JOYCODE_V_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, RYAXIS),
|
|
|
|
/* joystick buttons */
|
|
JOYCODE_BUTTON1 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON1),
|
|
JOYCODE_BUTTON2 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON2),
|
|
JOYCODE_BUTTON3 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON3),
|
|
JOYCODE_BUTTON4 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON4),
|
|
JOYCODE_BUTTON5 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON5),
|
|
JOYCODE_BUTTON6 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON6),
|
|
JOYCODE_BUTTON7 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON7),
|
|
JOYCODE_BUTTON8 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON8),
|
|
JOYCODE_BUTTON9 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON9),
|
|
JOYCODE_BUTTON10 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON10),
|
|
JOYCODE_BUTTON11 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON11),
|
|
JOYCODE_BUTTON12 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON12),
|
|
JOYCODE_BUTTON13 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON13),
|
|
JOYCODE_BUTTON14 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON14),
|
|
JOYCODE_BUTTON15 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON15),
|
|
JOYCODE_BUTTON16 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON16),
|
|
JOYCODE_START = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, START),
|
|
JOYCODE_SELECT = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, SELECT)
|
|
};
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
TYPE DEFINITIONS
|
|
***************************************************************************/
|
|
|
|
/* input codes are UINT32 */
|
|
typedef UINT32 input_code;
|
|
|
|
/* callback for getting the value of an item on a device */
|
|
typedef INT32 (*item_get_state_func)(void *device_internal, void *item_internal);
|
|
|
|
/* (opaque) input device object */
|
|
typedef struct _input_device input_device;
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
GLOBAL VARIABLES
|
|
***************************************************************************/
|
|
|
|
/* joystick maps */
|
|
extern const char joystick_map_8way[];
|
|
extern const char joystick_map_4way_sticky[];
|
|
extern const char joystick_map_4way_diagonal[];
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
FUNCTION PROTOTYPES
|
|
***************************************************************************/
|
|
|
|
|
|
/* ----- initialization and configuration ----- */
|
|
|
|
/* core initialization, prior to calling osd_init() */
|
|
void input_init(running_machine *machine);
|
|
|
|
/* enable or disable a device class */
|
|
void input_device_class_enable(input_device_class devclass, UINT8 enable);
|
|
|
|
/* is a device class enabled? */
|
|
UINT8 input_device_class_enabled(input_device_class devclass);
|
|
|
|
/* configure default joystick maps */
|
|
int input_device_set_joystick_map(int devindex, const char *mapstring);
|
|
|
|
|
|
/* ----- OSD configuration and access ----- */
|
|
|
|
/* add a new input device */
|
|
input_device *input_device_add(input_device_class devclass, const char *name, void *internal);
|
|
|
|
/* add a new item to an input device */
|
|
void input_device_item_add(input_device *device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate);
|
|
|
|
|
|
|
|
/* ----- state queries ----- */
|
|
|
|
/* return the value of a particular input code */
|
|
INT32 input_code_value(input_code code);
|
|
|
|
/* return TRUE if the given input code has been pressed */
|
|
INT32 input_code_pressed(input_code code);
|
|
|
|
/* same as above, but returns TRUE only on the first call after an off->on transition */
|
|
INT32 input_code_pressed_once(input_code code);
|
|
|
|
/* poll for any switch input, optionally resetting internal memory */
|
|
input_code input_code_poll_switches(int reset);
|
|
|
|
/* poll for any keyboard switch input, optionally resetting internal memory */
|
|
input_code input_code_poll_keyboard_switches(int reset);
|
|
|
|
/* poll for any axis input, optionally resetting internal memory */
|
|
input_code input_code_poll_axes(int reset);
|
|
|
|
|
|
|
|
/* ----- strings and tokenization ----- */
|
|
|
|
/* generate the friendly name of an input code, returning the length (buffer can be NULL) */
|
|
astring *input_code_name(astring *buffer, input_code code);
|
|
|
|
/* convert an input code to a token, returning the length (buffer can be NULL) */
|
|
astring *input_code_to_token(astring *buffer, input_code code);
|
|
|
|
/* convert a token back to an input code */
|
|
input_code input_code_from_token(const char *_token);
|
|
|
|
|
|
#endif /* __INPUT_H__ */
|