4 Copyright (C) 1996-1997 Id Software, Inc.
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to:
20 Free Software Foundation, Inc.
21 59 Temple Place - Suite 330
22 Boston, MA 02111-1307, USA
36 // the highest Unicode character to allow key binding.
37 // note that an excessively high value may degrade fps
38 // when code is looping through the bindings
39 // U+ABFF is probably the highest bindable codepoint,
40 // see: https://github.com/DarkPlacesEngine/darkplaces/pull/68#issuecomment-1416802873
41 #define MAX_KEY_BINDS 0xAC00
43 // how long is a "tinystr" to hold a keyboard key's
44 // Unicode utf-8 presentation, plus final \x00
45 // to allow all characters <= 0xffff, use 4
49 // these are the key numbers that should be passed to Key_Event
53 K_TEXT = 1, // used only for unicode character input
59 // normal keys should be passed as lowercased ascii
102 K_KP_DOWNARROW = K_KP_2,
106 K_KP_LEFTARROW = K_KP_4,
109 K_KP_RIGHTARROW = K_KP_6,
113 K_KP_UPARROW = K_KP_8,
117 K_KP_DEL = K_KP_PERIOD,
119 K_KP_SLASH = K_KP_DIVIDE,
128 // mouse buttons generate virtual keys
131 K_OTHERDEVICESBEGIN = K_MOUSE1,
171 // aux keys are for multi-buttoned joysticks to generate so they can use
172 // the normal binding process
207 // Microsoft Xbox 360 Controller For Windows
216 K_X360_LEFT_SHOULDER,
217 K_X360_RIGHT_SHOULDER,
223 K_X360_RIGHT_TRIGGER,
224 K_X360_LEFT_THUMB_UP,
225 K_X360_LEFT_THUMB_DOWN,
226 K_X360_LEFT_THUMB_LEFT,
227 K_X360_LEFT_THUMB_RIGHT,
228 K_X360_RIGHT_THUMB_UP,
229 K_X360_RIGHT_THUMB_DOWN,
230 K_X360_RIGHT_THUMB_LEFT,
231 K_X360_RIGHT_THUMB_RIGHT,
233 // generic joystick emulation for menu
239 K_MIDINOTE0 = 896, // to this, the note number is added
368 MAX_KEYS = MAX_KEY_BINDS
372 typedef enum keydest_e { key_game, key_message, key_menu, key_menu_grabbed, key_console, key_void } keydest_t;
374 extern char key_line[MAX_INPUTLINE];
375 extern int key_linepos;
376 extern qbool key_insert; // insert key toggle (for editing)
377 extern keydest_t key_dest;
378 // key_consoleactive bits
379 // user wants console (halfscreen)
380 #define KEY_CONSOLEACTIVE_USER 1
381 // console forced because there's nothing else active (fullscreen)
382 #define KEY_CONSOLEACTIVE_FORCED 4
383 extern int key_consoleactive;
384 extern char *keybindings[MAX_BINDMAPS][MAX_KEYS];
386 extern signed char chat_mode; // 0 for say, 1 for say_team, -1 for command
387 extern char chat_buffer[MAX_INPUTLINE];
388 extern int chat_bufferpos;
390 int Key_ClearEditLine(qbool is_console);
391 void Key_WriteBindings(qfile_t *f);
393 void Key_Shutdown(void);
394 void Key_Init_Cvars(void);
395 void Key_Event(int key, int ascii, qbool down);
396 void Key_ReleaseAll (void);
397 void Key_ReleaseAll_f(cmd_state_t *cmd);
398 void Key_EventQueue_Block(void);
399 void Key_EventQueue_Unblock(void);
400 int Key_AddChar(int unicode, qbool is_console);
401 int Key_Parse_CommonKeys(cmd_state_t *cmd, qbool is_console, int key, int unicode);
403 qbool Key_SetBinding (int keynum, int bindmap, const char *binding);
404 const char *Key_GetBind (int key, int bindmap);
405 void Key_FindKeysForCommand (const char *command, int *keys, int numkeys, int bindmap);
406 qbool Key_SetBindMap(int fg, int bg);
407 void Key_GetBindMap(int *fg, int *bg);
408 const char *Key_KeynumToString (int keynum, char *buf, size_t buflength);
409 int Key_StringToKeynum (const char *str);