| 1 |
#ifndef INPUT_H |
| 2 |
#define INPUT_H |
| 3 |
|
| 4 |
typedef unsigned InputCode; |
| 5 |
|
| 6 |
struct KeyboardInfo |
| 7 |
{ |
| 8 |
char *name; /* OS dependant name; 0 terminates the list */ |
| 9 |
unsigned code; /* OS dependant code */ |
| 10 |
InputCode standardcode; /* CODE_xxx equivalent from list below, or CODE_OTHER if n/a */ |
| 11 |
}; |
| 12 |
|
| 13 |
struct JoystickInfo |
| 14 |
{ |
| 15 |
char *name; /* OS dependant name; 0 terminates the list */ |
| 16 |
unsigned code; /* OS dependant code */ |
| 17 |
InputCode standardcode; /* CODE_xxx equivalent from list below, or CODE_OTHER if n/a */ |
| 18 |
}; |
| 19 |
|
| 20 |
enum |
| 21 |
{ |
| 22 |
/* key */ |
| 23 |
KEYCODE_A, KEYCODE_B, KEYCODE_C, KEYCODE_D, KEYCODE_E, KEYCODE_F, |
| 24 |
KEYCODE_G, KEYCODE_H, KEYCODE_I, KEYCODE_J, KEYCODE_K, KEYCODE_L, |
| 25 |
KEYCODE_M, KEYCODE_N, KEYCODE_O, KEYCODE_P, KEYCODE_Q, KEYCODE_R, |
| 26 |
KEYCODE_S, KEYCODE_T, KEYCODE_U, KEYCODE_V, KEYCODE_W, KEYCODE_X, |
| 27 |
KEYCODE_Y, KEYCODE_Z, KEYCODE_0, KEYCODE_1, KEYCODE_2, KEYCODE_3, |
| 28 |
KEYCODE_4, KEYCODE_5, KEYCODE_6, KEYCODE_7, KEYCODE_8, KEYCODE_9, |
| 29 |
KEYCODE_0_PAD, KEYCODE_1_PAD, KEYCODE_2_PAD, KEYCODE_3_PAD, KEYCODE_4_PAD, |
| 30 |
KEYCODE_5_PAD, KEYCODE_6_PAD, KEYCODE_7_PAD, KEYCODE_8_PAD, KEYCODE_9_PAD, |
| 31 |
KEYCODE_F1, KEYCODE_F2, KEYCODE_F3, KEYCODE_F4, KEYCODE_F5, |
| 32 |
KEYCODE_F6, KEYCODE_F7, KEYCODE_F8, KEYCODE_F9, KEYCODE_F10, |
| 33 |
KEYCODE_F11, KEYCODE_F12, |
| 34 |
KEYCODE_ESC, KEYCODE_TILDE, KEYCODE_MINUS, KEYCODE_EQUALS, KEYCODE_BACKSPACE, |
| 35 |
KEYCODE_TAB, KEYCODE_OPENBRACE, KEYCODE_CLOSEBRACE, KEYCODE_ENTER, KEYCODE_COLON, |
| 36 |
KEYCODE_QUOTE, KEYCODE_BACKSLASH, KEYCODE_BACKSLASH2, KEYCODE_COMMA, KEYCODE_STOP, |
| 37 |
KEYCODE_SLASH, KEYCODE_SPACE, KEYCODE_INSERT, KEYCODE_DEL, |
| 38 |
KEYCODE_HOME, KEYCODE_END, KEYCODE_PGUP, KEYCODE_PGDN, KEYCODE_LEFT, |
| 39 |
KEYCODE_RIGHT, KEYCODE_UP, KEYCODE_DOWN, |
| 40 |
KEYCODE_SLASH_PAD, KEYCODE_ASTERISK, KEYCODE_MINUS_PAD, KEYCODE_PLUS_PAD, |
| 41 |
KEYCODE_DEL_PAD, KEYCODE_ENTER_PAD, KEYCODE_PRTSCR, KEYCODE_PAUSE, |
| 42 |
KEYCODE_LSHIFT, KEYCODE_RSHIFT, KEYCODE_LCONTROL, KEYCODE_RCONTROL, |
| 43 |
KEYCODE_LALT, KEYCODE_RALT, KEYCODE_SCRLOCK, KEYCODE_NUMLOCK, KEYCODE_CAPSLOCK, |
| 44 |
KEYCODE_LWIN, KEYCODE_RWIN, KEYCODE_MENU, |
| 45 |
#define __code_key_first KEYCODE_A |
| 46 |
#define __code_key_last KEYCODE_MENU |
| 47 |
|
| 48 |
/* joy */ |
| 49 |
JOYCODE_1_LEFT,JOYCODE_1_RIGHT,JOYCODE_1_UP,JOYCODE_1_DOWN, |
| 50 |
JOYCODE_1_BUTTON1,JOYCODE_1_BUTTON2,JOYCODE_1_BUTTON3, |
| 51 |
JOYCODE_1_BUTTON4,JOYCODE_1_BUTTON5,JOYCODE_1_BUTTON6, |
| 52 |
JOYCODE_1_START, JOYCODE_1_SELECT, |
| 53 |
JOYCODE_2_LEFT,JOYCODE_2_RIGHT,JOYCODE_2_UP,JOYCODE_2_DOWN, |
| 54 |
JOYCODE_2_BUTTON1,JOYCODE_2_BUTTON2,JOYCODE_2_BUTTON3, |
| 55 |
JOYCODE_2_BUTTON4,JOYCODE_2_BUTTON5,JOYCODE_2_BUTTON6, |
| 56 |
JOYCODE_2_START, JOYCODE_2_SELECT, |
| 57 |
JOYCODE_3_LEFT,JOYCODE_3_RIGHT,JOYCODE_3_UP,JOYCODE_3_DOWN, |
| 58 |
JOYCODE_3_BUTTON1,JOYCODE_3_BUTTON2,JOYCODE_3_BUTTON3, |
| 59 |
JOYCODE_3_BUTTON4,JOYCODE_3_BUTTON5,JOYCODE_3_BUTTON6, |
| 60 |
JOYCODE_3_START, JOYCODE_3_SELECT, |
| 61 |
JOYCODE_4_LEFT,JOYCODE_4_RIGHT,JOYCODE_4_UP,JOYCODE_4_DOWN, |
| 62 |
JOYCODE_4_BUTTON1,JOYCODE_4_BUTTON2,JOYCODE_4_BUTTON3, |
| 63 |
JOYCODE_4_BUTTON4,JOYCODE_4_BUTTON5,JOYCODE_4_BUTTON6, |
| 64 |
JOYCODE_4_START, JOYCODE_4_SELECT, |
| 65 |
JOYCODE_MOUSE_1_BUTTON1,JOYCODE_MOUSE_1_BUTTON2,JOYCODE_MOUSE_1_BUTTON3, |
| 66 |
#define __code_joy_first JOYCODE_1_LEFT |
| 67 |
#define __code_joy_last JOYCODE_MOUSE_1_BUTTON3 |
| 68 |
|
| 69 |
__code_max, /* Temination of standard code */ |
| 70 |
|
| 71 |
/* special */ |
| 72 |
CODE_NONE = 0x8000, /* no code, also marker of sequence end */ |
| 73 |
CODE_OTHER, /* OS code not mapped to any other code */ |
| 74 |
CODE_DEFAULT, /* special for input port definitions */ |
| 75 |
CODE_PREVIOUS, /* special for input port definitions */ |
| 76 |
CODE_NOT, /* operators for sequences */ |
| 77 |
CODE_OR /* operators for sequences */ |
| 78 |
}; |
| 79 |
|
| 80 |
/* Wrapper for compatibility */ |
| 81 |
#define KEYCODE_OTHER CODE_OTHER |
| 82 |
#define JOYCODE_OTHER CODE_OTHER |
| 83 |
#define KEYCODE_NONE CODE_NONE |
| 84 |
#define JOYCODE_NONE CODE_NONE |
| 85 |
|
| 86 |
/***************************************************************************/ |
| 87 |
/* Single code functions */ |
| 88 |
|
| 89 |
int code_init(void); |
| 90 |
void code_close(void); |
| 91 |
|
| 92 |
InputCode keyoscode_to_code(unsigned oscode); |
| 93 |
InputCode joyoscode_to_code(unsigned oscode); |
| 94 |
InputCode savecode_to_code(unsigned savecode); |
| 95 |
unsigned code_to_savecode(InputCode code); |
| 96 |
|
| 97 |
const char *code_name(InputCode code); |
| 98 |
int code_pressed(InputCode code); |
| 99 |
int code_pressed_memory(InputCode code); |
| 100 |
int code_pressed_memory_repeat(InputCode code, int speed); |
| 101 |
InputCode code_read_async(void); |
| 102 |
INT8 code_read_hex_async(void); |
| 103 |
|
| 104 |
/* Wrappers for compatibility */ |
| 105 |
#define keyboard_name code_name |
| 106 |
#define keyboard_pressed code_pressed |
| 107 |
#define keyboard_pressed_memory code_pressed_memory |
| 108 |
#define keyboard_pressed_memory_repeat code_pressed_memory_repeat |
| 109 |
#define keyboard_read_async code_read_async |
| 110 |
|
| 111 |
/***************************************************************************/ |
| 112 |
/* Sequence code funtions */ |
| 113 |
|
| 114 |
/* NOTE: If you modify this value you need also to modify the SEQ_DEF declarations */ |
| 115 |
#define SEQ_MAX 16 |
| 116 |
|
| 117 |
typedef InputCode InputSeq[SEQ_MAX]; |
| 118 |
|
| 119 |
INLINE InputCode seq_get_1(InputSeq* a) { |
| 120 |
return (*a)[0]; |
| 121 |
} |
| 122 |
|
| 123 |
void seq_set_0(InputSeq* seq); |
| 124 |
void seq_set_1(InputSeq* seq, InputCode code); |
| 125 |
void seq_set_2(InputSeq* seq, InputCode code1, InputCode code2); |
| 126 |
void seq_set_3(InputSeq* seq, InputCode code1, InputCode code2, InputCode code3); |
| 127 |
void seq_copy(InputSeq* seqdst, InputSeq* seqsrc); |
| 128 |
int seq_cmp(InputSeq* seq1, InputSeq* seq2); |
| 129 |
void seq_name(InputSeq* seq, char* buffer, unsigned max); |
| 130 |
int seq_pressed(InputSeq* seq); |
| 131 |
void seq_read_async_start(void); |
| 132 |
int seq_read_async(InputSeq* code, int first); |
| 133 |
|
| 134 |
/* NOTE: It's very important that this sequence is EXACLY long SEQ_MAX */ |
| 135 |
#define SEQ_DEF_6(a,b,c,d,e,f) { a, b, c, d, e, f, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE } |
| 136 |
#define SEQ_DEF_5(a,b,c,d,e) SEQ_DEF_6(a,b,c,d,e,CODE_NONE) |
| 137 |
#define SEQ_DEF_4(a,b,c,d) SEQ_DEF_5(a,b,c,d,CODE_NONE) |
| 138 |
#define SEQ_DEF_3(a,b,c) SEQ_DEF_4(a,b,c,CODE_NONE) |
| 139 |
#define SEQ_DEF_2(a,b) SEQ_DEF_3(a,b,CODE_NONE) |
| 140 |
#define SEQ_DEF_1(a) SEQ_DEF_2(a,CODE_NONE) |
| 141 |
#define SEQ_DEF_0 SEQ_DEF_1(CODE_NONE) |
| 142 |
|
| 143 |
/***************************************************************************/ |
| 144 |
/* input_ui */ |
| 145 |
|
| 146 |
int input_ui_pressed(int code); |
| 147 |
int input_ui_pressed_repeat(int code, int speed); |
| 148 |
|
| 149 |
#endif |