1 /* Keyboard interface for svgalib. */ 2 /* Can be used independently. */ 3 4 #ifndef VGAKEYBOARD_H 5 #define VGAKEYBOARD_H 6 7 #ifdef __cplusplus 8 extern "C" 9 { 10 #endif 11 12 #define SCANCODE_ESCAPE 1 13 14 #define SCANCODE_1 2 15 #define SCANCODE_2 3 16 #define SCANCODE_3 4 17 #define SCANCODE_4 5 18 #define SCANCODE_5 6 19 #define SCANCODE_6 7 20 #define SCANCODE_7 8 21 #define SCANCODE_8 9 22 #define SCANCODE_9 10 23 #define SCANCODE_0 11 24 25 #define SCANCODE_MINUS 12 26 #define SCANCODE_EQUAL 13 27 28 #define SCANCODE_BACKSPACE 14 29 #define SCANCODE_TAB 15 30 31 #define SCANCODE_Q 16 32 #define SCANCODE_W 17 33 #define SCANCODE_E 18 34 #define SCANCODE_R 19 35 #define SCANCODE_T 20 36 #define SCANCODE_Y 21 37 #define SCANCODE_U 22 38 #define SCANCODE_I 23 39 #define SCANCODE_O 24 40 #define SCANCODE_P 25 41 #define SCANCODE_BRACKET_LEFT 26 42 #define SCANCODE_BRACKET_RIGHT 27 43 44 #define SCANCODE_ENTER 28 45 46 #define SCANCODE_LEFTCONTROL 29 47 48 #define SCANCODE_A 30 49 #define SCANCODE_S 31 50 #define SCANCODE_D 32 51 #define SCANCODE_F 33 52 #define SCANCODE_G 34 53 #define SCANCODE_H 35 54 #define SCANCODE_J 36 55 #define SCANCODE_K 37 56 #define SCANCODE_L 38 57 #define SCANCODE_SEMICOLON 39 58 #define SCANCODE_APOSTROPHE 40 59 #define SCANCODE_GRAVE 41 60 61 #define SCANCODE_LEFTSHIFT 42 62 #define SCANCODE_BACKSLASH 43 63 64 #define SCANCODE_Z 44 65 #define SCANCODE_X 45 66 #define SCANCODE_C 46 67 #define SCANCODE_V 47 68 #define SCANCODE_B 48 69 #define SCANCODE_N 49 70 #define SCANCODE_M 50 71 #define SCANCODE_COMMA 51 72 #define SCANCODE_PERIOD 52 73 #define SCANCODE_SLASH 53 74 75 #define SCANCODE_RIGHTSHIFT 54 76 #define SCANCODE_KEYPADMULTIPLY 55 77 78 #define SCANCODE_LEFTALT 56 79 #define SCANCODE_SPACE 57 80 #define SCANCODE_CAPSLOCK 58 81 82 #define SCANCODE_F1 59 83 #define SCANCODE_F2 60 84 #define SCANCODE_F3 61 85 #define SCANCODE_F4 62 86 #define SCANCODE_F5 63 87 #define SCANCODE_F6 64 88 #define SCANCODE_F7 65 89 #define SCANCODE_F8 66 90 #define SCANCODE_F9 67 91 #define SCANCODE_F10 68 92 93 #define SCANCODE_NUMLOCK 69 94 #define SCANCODE_SCROLLLOCK 70 95 96 #define SCANCODE_KEYPAD7 71 97 #define SCANCODE_CURSORUPLEFT 71 98 #define SCANCODE_KEYPAD8 72 99 #define SCANCODE_CURSORUP 72 100 #define SCANCODE_KEYPAD9 73 101 #define SCANCODE_CURSORUPRIGHT 73 102 #define SCANCODE_KEYPADMINUS 74 103 #define SCANCODE_KEYPAD4 75 104 #define SCANCODE_CURSORLEFT 75 105 #define SCANCODE_KEYPAD5 76 106 #define SCANCODE_KEYPAD6 77 107 #define SCANCODE_CURSORRIGHT 77 108 #define SCANCODE_KEYPADPLUS 78 109 #define SCANCODE_KEYPAD1 79 110 #define SCANCODE_CURSORDOWNLEFT 79 111 #define SCANCODE_KEYPAD2 80 112 #define SCANCODE_CURSORDOWN 80 113 #define SCANCODE_KEYPAD3 81 114 #define SCANCODE_CURSORDOWNRIGHT 81 115 #define SCANCODE_KEYPAD0 82 116 #define SCANCODE_KEYPADPERIOD 83 117 118 #define SCANCODE_LESS 86 119 120 #define SCANCODE_F11 87 121 #define SCANCODE_F12 88 122 123 #define SCANCODE_KEYPADENTER 89 124 #define SCANCODE_RIGHTCONTROL 90 125 #define SCANCODE_CONTROL 107 126 #define SCANCODE_KEYPADDIVIDE 91 127 #define SCANCODE_PRINTSCREEN 92 128 #define SCANCODE_RIGHTALT 93 129 #define SCANCODE_BREAK 104 /* Beware: is 119 */ 130 #define SCANCODE_BREAK_ALTERNATIVE 104 /* on some keyboards! */ 131 132 #define SCANCODE_HOME 94 133 #define SCANCODE_CURSORBLOCKUP 95 /* Cursor key block */ 134 #define SCANCODE_PAGEUP 96 135 #define SCANCODE_CURSORBLOCKLEFT 97 /* Cursor key block */ 136 #define SCANCODE_CURSORBLOCKRIGHT 98 /* Cursor key block */ 137 #define SCANCODE_END 99 138 #define SCANCODE_CURSORBLOCKDOWN 100 /* Cursor key block */ 139 #define SCANCODE_PAGEDOWN 101 140 #define SCANCODE_INSERT 102 141 #define SCANCODE_REMOVE 103 142 143 #define SCANCODE_RIGHTWIN 106 144 #define SCANCODE_LEFTWIN 105 145 146 #define KEY_EVENTRELEASE 0 147 #define KEY_EVENTPRESS 1 148 149 #define MAX_KEYNAME_LEN 20 150 151 /* Initialize keyboard handler (brings keyboard into RAW mode). Returns */ 152 /* 0 if succesful, -1 otherwise. */ 153 int keyboard_init(void); 154 /* Similar, but returns console fd if succesful. */ 155 int keyboard_init_return_fd(void); 156 /* Set event handler invoked by keyboard_update(). */ 157 typedef void (*__keyboard_handler) (int scancode, int press); 158 void keyboard_seteventhandler(__keyboard_handler handler); 159 /* Return keyboard to normal state. */ 160 void keyboard_close(void); 161 /* Read raw keyboard device and handle events. Returns 0 if no event. */ 162 int keyboard_update(void); 163 /* Similar to keyboard_update, but wait for an event to happen. */ 164 /* [This doesn't seem to work very well -- use select on fd] */ 165 void keyboard_waitforupdate(void); 166 167 /* keyboard_init sets default event handler that keeps track of complete */ 168 /* keyboard state: */ 169 170 /* Result of keypressed. */ 171 #define KEY_NOTPRESSED 0 172 #define KEY_PRESSED 1 173 174 /* Modes for translatekeys. */ 175 #define TRANSLATE_CURSORKEYS 1 /* Map cursor block to keypad cursor. */ 176 #define TRANSLATE_DIAGONAL 2 /* Map keypad diagonal to keypad cursor. */ 177 #define TRANSLATE_KEYPADENTER 4 /* Map keypad enter to main enter key. */ 178 #define DONT_CATCH_CTRLC 8 /* Disable Crtl-C check. */ 179 180 /* Revert to default handler. */ 181 void keyboard_setdefaulteventhandler(void); 182 /* Return pointer to buffer holding state of each key (scancode). */ 183 /* Value 1 corresponds to key that is pressed, 0 means not pressed. */ 184 char *keyboard_getstate(void); 185 /* Force keyboard state to nothing pressed (all zeroes). */ 186 void keyboard_clearstate(void); 187 /* Let default handler translate cursor key block events to numeric keypad */ 188 /* cursor key events and other translations. */ 189 void keyboard_translatekeys(int mask); 190 191 /* Return nonzero if key is depressed. */ 192 int keyboard_keypressed(int scancode); 193 194 #ifdef __cplusplus 195 } 196 197 #endif 198 #endif 199