DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
keys.h File Reference
#include <stddef.h>
#include "qtypes.h"
#include "qdefs.h"
#include "fs.h"
#include "cmd.h"
+ Include dependency graph for keys.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define KEY_CONSOLEACTIVE_FORCED   4
 
#define KEY_CONSOLEACTIVE_USER   1
 
#define MAX_KEY_BINDS   0xAC00
 
#define TINYSTR_LEN   4
 

Enumerations

enum  keydest_t {
  key_game , key_message , key_menu , key_menu_grabbed ,
  key_console , key_void
}
 
enum  keynum_t {
  K_TEXT = 1 , K_TAB = 9 , K_ENTER = 13 , K_ESCAPE = 27 ,
  K_SPACE = 32 , K_BACKSPACE = 127 , K_UPARROW , K_DOWNARROW ,
  K_LEFTARROW , K_RIGHTARROW , K_ALT , K_CTRL ,
  K_SHIFT , K_F1 , K_F2 , K_F3 ,
  K_F4 , K_F5 , K_F6 , K_F7 ,
  K_F8 , K_F9 , K_F10 , K_F11 ,
  K_F12 , K_INS , K_DEL , K_PGDN ,
  K_PGUP , K_HOME , K_END , K_PAUSE ,
  K_NUMLOCK , K_CAPSLOCK , K_SCROLLOCK , K_KP_0 ,
  K_KP_INS = K_KP_0 , K_KP_1 , K_KP_END = K_KP_1 , K_KP_2 ,
  K_KP_DOWNARROW = K_KP_2 , K_KP_3 , K_KP_PGDN = K_KP_3 , K_KP_4 ,
  K_KP_LEFTARROW = K_KP_4 , K_KP_5 , K_KP_6 , K_KP_RIGHTARROW = K_KP_6 ,
  K_KP_7 , K_KP_HOME = K_KP_7 , K_KP_8 , K_KP_UPARROW = K_KP_8 ,
  K_KP_9 , K_KP_PGUP = K_KP_9 , K_KP_PERIOD , K_KP_DEL = K_KP_PERIOD ,
  K_KP_DIVIDE , K_KP_SLASH = K_KP_DIVIDE , K_KP_MULTIPLY , K_KP_MINUS ,
  K_KP_PLUS , K_KP_ENTER , K_KP_EQUALS , K_PRINTSCREEN ,
  K_MOUSE1 = 512 , K_OTHERDEVICESBEGIN = K_MOUSE1 , K_MOUSE2 , K_MOUSE3 ,
  K_MWHEELUP , K_MWHEELDOWN , K_MOUSE4 , K_MOUSE5 ,
  K_MOUSE6 , K_MOUSE7 , K_MOUSE8 , K_MOUSE9 ,
  K_MOUSE10 , K_MOUSE11 , K_MOUSE12 , K_MOUSE13 ,
  K_MOUSE14 , K_MOUSE15 , K_MOUSE16 , K_JOY1 = 768 ,
  K_JOY2 , K_JOY3 , K_JOY4 , K_JOY5 ,
  K_JOY6 , K_JOY7 , K_JOY8 , K_JOY9 ,
  K_JOY10 , K_JOY11 , K_JOY12 , K_JOY13 ,
  K_JOY14 , K_JOY15 , K_JOY16 , K_AUX1 ,
  K_AUX2 , K_AUX3 , K_AUX4 , K_AUX5 ,
  K_AUX6 , K_AUX7 , K_AUX8 , K_AUX9 ,
  K_AUX10 , K_AUX11 , K_AUX12 , K_AUX13 ,
  K_AUX14 , K_AUX15 , K_AUX16 , K_AUX17 ,
  K_AUX18 , K_AUX19 , K_AUX20 , K_AUX21 ,
  K_AUX22 , K_AUX23 , K_AUX24 , K_AUX25 ,
  K_AUX26 , K_AUX27 , K_AUX28 , K_AUX29 ,
  K_AUX30 , K_AUX31 , K_AUX32 , K_X360_DPAD_UP ,
  K_X360_DPAD_DOWN , K_X360_DPAD_LEFT , K_X360_DPAD_RIGHT , K_X360_START ,
  K_X360_BACK , K_X360_LEFT_THUMB , K_X360_RIGHT_THUMB , K_X360_LEFT_SHOULDER ,
  K_X360_RIGHT_SHOULDER , K_X360_A , K_X360_B , K_X360_X ,
  K_X360_Y , K_X360_LEFT_TRIGGER , K_X360_RIGHT_TRIGGER , K_X360_LEFT_THUMB_UP ,
  K_X360_LEFT_THUMB_DOWN , K_X360_LEFT_THUMB_LEFT , K_X360_LEFT_THUMB_RIGHT , K_X360_RIGHT_THUMB_UP ,
  K_X360_RIGHT_THUMB_DOWN , K_X360_RIGHT_THUMB_LEFT , K_X360_RIGHT_THUMB_RIGHT , K_JOY_UP ,
  K_JOY_DOWN , K_JOY_LEFT , K_JOY_RIGHT , K_MIDINOTE0 = 896 ,
  K_MIDINOTE1 , K_MIDINOTE2 , K_MIDINOTE3 , K_MIDINOTE4 ,
  K_MIDINOTE5 , K_MIDINOTE6 , K_MIDINOTE7 , K_MIDINOTE8 ,
  K_MIDINOTE9 , K_MIDINOTE10 , K_MIDINOTE11 , K_MIDINOTE12 ,
  K_MIDINOTE13 , K_MIDINOTE14 , K_MIDINOTE15 , K_MIDINOTE16 ,
  K_MIDINOTE17 , K_MIDINOTE18 , K_MIDINOTE19 , K_MIDINOTE20 ,
  K_MIDINOTE21 , K_MIDINOTE22 , K_MIDINOTE23 , K_MIDINOTE24 ,
  K_MIDINOTE25 , K_MIDINOTE26 , K_MIDINOTE27 , K_MIDINOTE28 ,
  K_MIDINOTE29 , K_MIDINOTE30 , K_MIDINOTE31 , K_MIDINOTE32 ,
  K_MIDINOTE33 , K_MIDINOTE34 , K_MIDINOTE35 , K_MIDINOTE36 ,
  K_MIDINOTE37 , K_MIDINOTE38 , K_MIDINOTE39 , K_MIDINOTE40 ,
  K_MIDINOTE41 , K_MIDINOTE42 , K_MIDINOTE43 , K_MIDINOTE44 ,
  K_MIDINOTE45 , K_MIDINOTE46 , K_MIDINOTE47 , K_MIDINOTE48 ,
  K_MIDINOTE49 , K_MIDINOTE50 , K_MIDINOTE51 , K_MIDINOTE52 ,
  K_MIDINOTE53 , K_MIDINOTE54 , K_MIDINOTE55 , K_MIDINOTE56 ,
  K_MIDINOTE57 , K_MIDINOTE58 , K_MIDINOTE59 , K_MIDINOTE60 ,
  K_MIDINOTE61 , K_MIDINOTE62 , K_MIDINOTE63 , K_MIDINOTE64 ,
  K_MIDINOTE65 , K_MIDINOTE66 , K_MIDINOTE67 , K_MIDINOTE68 ,
  K_MIDINOTE69 , K_MIDINOTE70 , K_MIDINOTE71 , K_MIDINOTE72 ,
  K_MIDINOTE73 , K_MIDINOTE74 , K_MIDINOTE75 , K_MIDINOTE76 ,
  K_MIDINOTE77 , K_MIDINOTE78 , K_MIDINOTE79 , K_MIDINOTE80 ,
  K_MIDINOTE81 , K_MIDINOTE82 , K_MIDINOTE83 , K_MIDINOTE84 ,
  K_MIDINOTE85 , K_MIDINOTE86 , K_MIDINOTE87 , K_MIDINOTE88 ,
  K_MIDINOTE89 , K_MIDINOTE90 , K_MIDINOTE91 , K_MIDINOTE92 ,
  K_MIDINOTE93 , K_MIDINOTE94 , K_MIDINOTE95 , K_MIDINOTE96 ,
  K_MIDINOTE97 , K_MIDINOTE98 , K_MIDINOTE99 , K_MIDINOTE100 ,
  K_MIDINOTE101 , K_MIDINOTE102 , K_MIDINOTE103 , K_MIDINOTE104 ,
  K_MIDINOTE105 , K_MIDINOTE106 , K_MIDINOTE107 , K_MIDINOTE108 ,
  K_MIDINOTE109 , K_MIDINOTE110 , K_MIDINOTE111 , K_MIDINOTE112 ,
  K_MIDINOTE113 , K_MIDINOTE114 , K_MIDINOTE115 , K_MIDINOTE116 ,
  K_MIDINOTE117 , K_MIDINOTE118 , K_MIDINOTE119 , K_MIDINOTE120 ,
  K_MIDINOTE121 , K_MIDINOTE122 , K_MIDINOTE123 , K_MIDINOTE124 ,
  K_MIDINOTE125 , K_MIDINOTE126 , K_MIDINOTE127 , MAX_KEYS = MAX_KEY_BINDS
}
 

Functions

int Key_AddChar (int unicode, qbool is_console)
 
int Key_ClearEditLine (qbool is_console)
 
void Key_Event (int key, int ascii, qbool down)
 
void Key_EventQueue_Block (void)
 
void Key_EventQueue_Unblock (void)
 
void Key_FindKeysForCommand (const char *command, int *keys, int numkeys, int bindmap)
 
const char * Key_GetBind (int key, int bindmap)
 
void Key_GetBindMap (int *fg, int *bg)
 
void Key_Init (void)
 
void Key_Init_Cvars (void)
 
const char * Key_KeynumToString (int keynum, char *buf, size_t buflength)
 
int Key_Parse_CommonKeys (cmd_state_t *cmd, qbool is_console, int key, int unicode)
 
void Key_ReleaseAll (void)
 
void Key_ReleaseAll_f (cmd_state_t *cmd)
 
qbool Key_SetBinding (int keynum, int bindmap, const char *binding)
 
qbool Key_SetBindMap (int fg, int bg)
 
void Key_Shutdown (void)
 
int Key_StringToKeynum (const char *str)
 
void Key_WriteBindings (qfile_t *f)
 

Variables

char chat_buffer [MAX_INPUTLINE]
 
int chat_bufferpos
 
signed char chat_mode
 
int key_consoleactive
 
keydest_t key_dest
 
qbool key_insert
 
char key_line [MAX_INPUTLINE]
 
int key_linepos
 
char * keybindings [MAX_BINDMAPS][MAX_KEYS]
 

Macro Definition Documentation

◆ KEY_CONSOLEACTIVE_FORCED

#define KEY_CONSOLEACTIVE_FORCED   4

Definition at line 382 of file keys.h.

Referenced by Key_Event(), SCR_DrawConsole(), SCR_DrawScreen(), and SCR_SetUpToDrawConsole().

◆ KEY_CONSOLEACTIVE_USER

#define KEY_CONSOLEACTIVE_USER   1

◆ MAX_KEY_BINDS

#define MAX_KEY_BINDS   0xAC00

Definition at line 41 of file keys.h.

◆ TINYSTR_LEN

#define TINYSTR_LEN   4

Enumeration Type Documentation

◆ keydest_t

enum keydest_t
Enumerator
key_game 
key_message 
key_menu 
key_menu_grabbed 
key_console 
key_void 

Definition at line 372 of file keys.h.

keydest_t
Definition keys.h:372
@ key_menu
Definition keys.h:372
@ key_game
Definition keys.h:372
@ key_message
Definition keys.h:372
@ key_void
Definition keys.h:372
@ key_menu_grabbed
Definition keys.h:372
@ key_console
Definition keys.h:372

◆ keynum_t

enum keynum_t
Enumerator
K_TEXT 
K_TAB 
K_ENTER 
K_ESCAPE 
K_SPACE 
K_BACKSPACE 
K_UPARROW 
K_DOWNARROW 
K_LEFTARROW 
K_RIGHTARROW 
K_ALT 
K_CTRL 
K_SHIFT 
K_F1 
K_F2 
K_F3 
K_F4 
K_F5 
K_F6 
K_F7 
K_F8 
K_F9 
K_F10 
K_F11 
K_F12 
K_INS 
K_DEL 
K_PGDN 
K_PGUP 
K_HOME 
K_END 
K_PAUSE 
K_NUMLOCK 
K_CAPSLOCK 
K_SCROLLOCK 
K_KP_0 
K_KP_INS 
K_KP_1 
K_KP_END 
K_KP_2 
K_KP_DOWNARROW 
K_KP_3 
K_KP_PGDN 
K_KP_4 
K_KP_LEFTARROW 
K_KP_5 
K_KP_6 
K_KP_RIGHTARROW 
K_KP_7 
K_KP_HOME 
K_KP_8 
K_KP_UPARROW 
K_KP_9 
K_KP_PGUP 
K_KP_PERIOD 
K_KP_DEL 
K_KP_DIVIDE 
K_KP_SLASH 
K_KP_MULTIPLY 
K_KP_MINUS 
K_KP_PLUS 
K_KP_ENTER 
K_KP_EQUALS 
K_PRINTSCREEN 
K_MOUSE1 
K_OTHERDEVICESBEGIN 
K_MOUSE2 
K_MOUSE3 
K_MWHEELUP 
K_MWHEELDOWN 
K_MOUSE4 
K_MOUSE5 
K_MOUSE6 
K_MOUSE7 
K_MOUSE8 
K_MOUSE9 
K_MOUSE10 
K_MOUSE11 
K_MOUSE12 
K_MOUSE13 
K_MOUSE14 
K_MOUSE15 
K_MOUSE16 
K_JOY1 
K_JOY2 
K_JOY3 
K_JOY4 
K_JOY5 
K_JOY6 
K_JOY7 
K_JOY8 
K_JOY9 
K_JOY10 
K_JOY11 
K_JOY12 
K_JOY13 
K_JOY14 
K_JOY15 
K_JOY16 
K_AUX1 
K_AUX2 
K_AUX3 
K_AUX4 
K_AUX5 
K_AUX6 
K_AUX7 
K_AUX8 
K_AUX9 
K_AUX10 
K_AUX11 
K_AUX12 
K_AUX13 
K_AUX14 
K_AUX15 
K_AUX16 
K_AUX17 
K_AUX18 
K_AUX19 
K_AUX20 
K_AUX21 
K_AUX22 
K_AUX23 
K_AUX24 
K_AUX25 
K_AUX26 
K_AUX27 
K_AUX28 
K_AUX29 
K_AUX30 
K_AUX31 
K_AUX32 
K_X360_DPAD_UP 
K_X360_DPAD_DOWN 
K_X360_DPAD_LEFT 
K_X360_DPAD_RIGHT 
K_X360_START 
K_X360_BACK 
K_X360_LEFT_THUMB 
K_X360_RIGHT_THUMB 
K_X360_LEFT_SHOULDER 
K_X360_RIGHT_SHOULDER 
K_X360_A 
K_X360_B 
K_X360_X 
K_X360_Y 
K_X360_LEFT_TRIGGER 
K_X360_RIGHT_TRIGGER 
K_X360_LEFT_THUMB_UP 
K_X360_LEFT_THUMB_DOWN 
K_X360_LEFT_THUMB_LEFT 
K_X360_LEFT_THUMB_RIGHT 
K_X360_RIGHT_THUMB_UP 
K_X360_RIGHT_THUMB_DOWN 
K_X360_RIGHT_THUMB_LEFT 
K_X360_RIGHT_THUMB_RIGHT 
K_JOY_UP 
K_JOY_DOWN 
K_JOY_LEFT 
K_JOY_RIGHT 
K_MIDINOTE0 
K_MIDINOTE1 
K_MIDINOTE2 
K_MIDINOTE3 
K_MIDINOTE4 
K_MIDINOTE5 
K_MIDINOTE6 
K_MIDINOTE7 
K_MIDINOTE8 
K_MIDINOTE9 
K_MIDINOTE10 
K_MIDINOTE11 
K_MIDINOTE12 
K_MIDINOTE13 
K_MIDINOTE14 
K_MIDINOTE15 
K_MIDINOTE16 
K_MIDINOTE17 
K_MIDINOTE18 
K_MIDINOTE19 
K_MIDINOTE20 
K_MIDINOTE21 
K_MIDINOTE22 
K_MIDINOTE23 
K_MIDINOTE24 
K_MIDINOTE25 
K_MIDINOTE26 
K_MIDINOTE27 
K_MIDINOTE28 
K_MIDINOTE29 
K_MIDINOTE30 
K_MIDINOTE31 
K_MIDINOTE32 
K_MIDINOTE33 
K_MIDINOTE34 
K_MIDINOTE35 
K_MIDINOTE36 
K_MIDINOTE37 
K_MIDINOTE38 
K_MIDINOTE39 
K_MIDINOTE40 
K_MIDINOTE41 
K_MIDINOTE42 
K_MIDINOTE43 
K_MIDINOTE44 
K_MIDINOTE45 
K_MIDINOTE46 
K_MIDINOTE47 
K_MIDINOTE48 
K_MIDINOTE49 
K_MIDINOTE50 
K_MIDINOTE51 
K_MIDINOTE52 
K_MIDINOTE53 
K_MIDINOTE54 
K_MIDINOTE55 
K_MIDINOTE56 
K_MIDINOTE57 
K_MIDINOTE58 
K_MIDINOTE59 
K_MIDINOTE60 
K_MIDINOTE61 
K_MIDINOTE62 
K_MIDINOTE63 
K_MIDINOTE64 
K_MIDINOTE65 
K_MIDINOTE66 
K_MIDINOTE67 
K_MIDINOTE68 
K_MIDINOTE69 
K_MIDINOTE70 
K_MIDINOTE71 
K_MIDINOTE72 
K_MIDINOTE73 
K_MIDINOTE74 
K_MIDINOTE75 
K_MIDINOTE76 
K_MIDINOTE77 
K_MIDINOTE78 
K_MIDINOTE79 
K_MIDINOTE80 
K_MIDINOTE81 
K_MIDINOTE82 
K_MIDINOTE83 
K_MIDINOTE84 
K_MIDINOTE85 
K_MIDINOTE86 
K_MIDINOTE87 
K_MIDINOTE88 
K_MIDINOTE89 
K_MIDINOTE90 
K_MIDINOTE91 
K_MIDINOTE92 
K_MIDINOTE93 
K_MIDINOTE94 
K_MIDINOTE95 
K_MIDINOTE96 
K_MIDINOTE97 
K_MIDINOTE98 
K_MIDINOTE99 
K_MIDINOTE100 
K_MIDINOTE101 
K_MIDINOTE102 
K_MIDINOTE103 
K_MIDINOTE104 
K_MIDINOTE105 
K_MIDINOTE106 
K_MIDINOTE107 
K_MIDINOTE108 
K_MIDINOTE109 
K_MIDINOTE110 
K_MIDINOTE111 
K_MIDINOTE112 
K_MIDINOTE113 
K_MIDINOTE114 
K_MIDINOTE115 
K_MIDINOTE116 
K_MIDINOTE117 
K_MIDINOTE118 
K_MIDINOTE119 
K_MIDINOTE120 
K_MIDINOTE121 
K_MIDINOTE122 
K_MIDINOTE123 
K_MIDINOTE124 
K_MIDINOTE125 
K_MIDINOTE126 
K_MIDINOTE127 
MAX_KEYS 

Definition at line 51 of file keys.h.

52{
53 K_TEXT = 1, // used only for unicode character input
54 K_TAB = 9,
55 K_ENTER = 13,
56 K_ESCAPE = 27,
57 K_SPACE = 32,
58
59 // normal keys should be passed as lowercased ascii
60
61 K_BACKSPACE = 127,
66
67 K_ALT,
68 K_CTRL,
69 K_SHIFT,
70
71 K_F1,
72 K_F2,
73 K_F3,
74 K_F4,
75 K_F5,
76 K_F6,
77 K_F7,
78 K_F8,
79 K_F9,
80 K_F10,
81 K_F11,
82 K_F12,
83
84 K_INS,
85 K_DEL,
86 K_PGDN,
87 K_PGUP,
88 K_HOME,
89 K_END,
90
91 K_PAUSE,
92
96
97 K_KP_0,
99 K_KP_1,
101 K_KP_2,
103 K_KP_3,
105 K_KP_4,
107 K_KP_5,
108 K_KP_6,
110 K_KP_7,
112 K_KP_8,
114 K_KP_9,
122 K_KP_PLUS,
125
127
128 // mouse buttons generate virtual keys
129
130 K_MOUSE1 = 512,
132 K_MOUSE2,
133 K_MOUSE3,
136 K_MOUSE4,
137 K_MOUSE5,
138 K_MOUSE6,
139 K_MOUSE7,
140 K_MOUSE8,
141 K_MOUSE9,
142 K_MOUSE10,
143 K_MOUSE11,
144 K_MOUSE12,
145 K_MOUSE13,
146 K_MOUSE14,
147 K_MOUSE15,
148 K_MOUSE16,
149
150//
151// joystick buttons
152//
153 K_JOY1 = 768,
154 K_JOY2,
155 K_JOY3,
156 K_JOY4,
157 K_JOY5,
158 K_JOY6,
159 K_JOY7,
160 K_JOY8,
161 K_JOY9,
162 K_JOY10,
163 K_JOY11,
164 K_JOY12,
165 K_JOY13,
166 K_JOY14,
167 K_JOY15,
168 K_JOY16,
169
170//
171// aux keys are for multi-buttoned joysticks to generate so they can use
172// the normal binding process
173//
174 K_AUX1,
175 K_AUX2,
176 K_AUX3,
177 K_AUX4,
178 K_AUX5,
179 K_AUX6,
180 K_AUX7,
181 K_AUX8,
182 K_AUX9,
183 K_AUX10,
184 K_AUX11,
185 K_AUX12,
186 K_AUX13,
187 K_AUX14,
188 K_AUX15,
189 K_AUX16,
190 K_AUX17,
191 K_AUX18,
192 K_AUX19,
193 K_AUX20,
194 K_AUX21,
195 K_AUX22,
196 K_AUX23,
197 K_AUX24,
198 K_AUX25,
199 K_AUX26,
200 K_AUX27,
201 K_AUX28,
202 K_AUX29,
203 K_AUX30,
204 K_AUX31,
205 K_AUX32,
206
207 // Microsoft Xbox 360 Controller For Windows
218 K_X360_A,
219 K_X360_B,
220 K_X360_X,
221 K_X360_Y,
232
233 // generic joystick emulation for menu
234 K_JOY_UP,
238
239 K_MIDINOTE0 = 896, // to this, the note number is added
367
369}
@ K_AUX19
Definition keys.h:192
@ K_MIDINOTE111
Definition keys.h:350
@ K_MIDINOTE127
Definition keys.h:366
@ K_F2
Definition keys.h:72
@ K_MIDINOTE55
Definition keys.h:294
@ K_KP_8
Definition keys.h:112
@ K_MIDINOTE56
Definition keys.h:295
@ K_MIDINOTE110
Definition keys.h:349
@ K_MIDINOTE114
Definition keys.h:353
@ K_KP_4
Definition keys.h:105
@ K_F1
Definition keys.h:71
@ K_MIDINOTE89
Definition keys.h:328
@ K_X360_A
Definition keys.h:218
@ K_MIDINOTE61
Definition keys.h:300
@ K_OTHERDEVICESBEGIN
Definition keys.h:131
@ K_MOUSE4
Definition keys.h:136
@ K_MIDINOTE6
Definition keys.h:245
@ K_SHIFT
Definition keys.h:69
@ K_MIDINOTE77
Definition keys.h:316
@ K_MIDINOTE28
Definition keys.h:267
@ K_AUX23
Definition keys.h:196
@ K_MIDINOTE69
Definition keys.h:308
@ K_KP_5
Definition keys.h:107
@ K_F12
Definition keys.h:82
@ K_MIDINOTE9
Definition keys.h:248
@ K_KP_RIGHTARROW
Definition keys.h:109
@ K_DEL
Definition keys.h:85
@ MAX_KEYS
Definition keys.h:368
@ K_MOUSE12
Definition keys.h:144
@ K_X360_BACK
Definition keys.h:213
@ K_MIDINOTE94
Definition keys.h:333
@ K_MIDINOTE10
Definition keys.h:249
@ K_MIDINOTE44
Definition keys.h:283
@ K_KP_MINUS
Definition keys.h:121
@ K_MIDINOTE85
Definition keys.h:324
@ K_MIDINOTE37
Definition keys.h:276
@ K_MIDINOTE57
Definition keys.h:296
@ K_MIDINOTE105
Definition keys.h:344
@ K_MIDINOTE7
Definition keys.h:246
@ K_F6
Definition keys.h:76
@ K_F4
Definition keys.h:74
@ K_JOY7
Definition keys.h:159
@ K_MIDINOTE8
Definition keys.h:247
@ K_MIDINOTE115
Definition keys.h:354
@ K_MIDINOTE3
Definition keys.h:242
@ K_MIDINOTE73
Definition keys.h:312
@ K_AUX25
Definition keys.h:198
@ K_MIDINOTE5
Definition keys.h:244
@ K_AUX15
Definition keys.h:188
@ K_MIDINOTE0
Definition keys.h:239
@ K_AUX32
Definition keys.h:205
@ K_KP_PGDN
Definition keys.h:104
@ K_JOY12
Definition keys.h:164
@ K_X360_X
Definition keys.h:220
@ K_MOUSE5
Definition keys.h:137
@ K_KP_DEL
Definition keys.h:117
@ K_MOUSE15
Definition keys.h:147
@ K_MOUSE9
Definition keys.h:141
@ K_MIDINOTE62
Definition keys.h:301
@ K_KP_PGUP
Definition keys.h:115
@ K_MIDINOTE126
Definition keys.h:365
@ K_MIDINOTE125
Definition keys.h:364
@ K_MIDINOTE63
Definition keys.h:302
@ K_KP_UPARROW
Definition keys.h:113
@ K_KP_INS
Definition keys.h:98
@ K_KP_PLUS
Definition keys.h:122
@ K_NUMLOCK
Definition keys.h:93
@ K_MIDINOTE101
Definition keys.h:340
@ K_X360_RIGHT_SHOULDER
Definition keys.h:217
@ K_MIDINOTE13
Definition keys.h:252
@ K_MIDINOTE4
Definition keys.h:243
@ K_MIDINOTE93
Definition keys.h:332
@ K_ALT
Definition keys.h:67
@ K_MIDINOTE45
Definition keys.h:284
@ K_X360_RIGHT_THUMB_UP
Definition keys.h:228
@ K_KP_7
Definition keys.h:110
@ K_MIDINOTE12
Definition keys.h:251
@ K_MIDINOTE78
Definition keys.h:317
@ K_MIDINOTE23
Definition keys.h:262
@ K_MIDINOTE83
Definition keys.h:322
@ K_MWHEELUP
Definition keys.h:134
@ K_KP_END
Definition keys.h:100
@ K_MIDINOTE86
Definition keys.h:325
@ K_MIDINOTE16
Definition keys.h:255
@ K_X360_DPAD_RIGHT
Definition keys.h:211
@ K_MIDINOTE27
Definition keys.h:266
@ K_MOUSE7
Definition keys.h:139
@ K_JOY10
Definition keys.h:162
@ K_MIDINOTE103
Definition keys.h:342
@ K_JOY_DOWN
Definition keys.h:235
@ K_JOY4
Definition keys.h:156
@ K_JOY13
Definition keys.h:165
@ K_KP_2
Definition keys.h:101
@ K_X360_RIGHT_TRIGGER
Definition keys.h:223
@ K_JOY14
Definition keys.h:166
@ K_MIDINOTE64
Definition keys.h:303
@ K_X360_DPAD_UP
Definition keys.h:208
@ K_MIDINOTE96
Definition keys.h:335
@ K_AUX27
Definition keys.h:200
@ K_JOY15
Definition keys.h:167
@ K_MIDINOTE79
Definition keys.h:318
@ K_JOY16
Definition keys.h:168
@ K_JOY_LEFT
Definition keys.h:236
@ K_MIDINOTE90
Definition keys.h:329
@ K_X360_LEFT_THUMB_RIGHT
Definition keys.h:227
@ K_MIDINOTE97
Definition keys.h:336
@ K_AUX30
Definition keys.h:203
@ K_ENTER
Definition keys.h:55
@ K_F9
Definition keys.h:79
@ K_MIDINOTE14
Definition keys.h:253
@ K_X360_DPAD_DOWN
Definition keys.h:209
@ K_MIDINOTE106
Definition keys.h:345
@ K_MOUSE2
Definition keys.h:132
@ K_MOUSE1
Definition keys.h:130
@ K_X360_DPAD_LEFT
Definition keys.h:210
@ K_MIDINOTE82
Definition keys.h:321
@ K_MIDINOTE107
Definition keys.h:346
@ K_MIDINOTE36
Definition keys.h:275
@ K_AUX22
Definition keys.h:195
@ K_PRINTSCREEN
Definition keys.h:126
@ K_MIDINOTE88
Definition keys.h:327
@ K_X360_RIGHT_THUMB
Definition keys.h:215
@ K_AUX29
Definition keys.h:202
@ K_MIDINOTE49
Definition keys.h:288
@ K_X360_LEFT_THUMB_DOWN
Definition keys.h:225
@ K_MIDINOTE122
Definition keys.h:361
@ K_X360_RIGHT_THUMB_DOWN
Definition keys.h:229
@ K_X360_RIGHT_THUMB_RIGHT
Definition keys.h:231
@ K_AUX13
Definition keys.h:186
@ K_MIDINOTE53
Definition keys.h:292
@ K_JOY_RIGHT
Definition keys.h:237
@ K_AUX2
Definition keys.h:175
@ K_MIDINOTE109
Definition keys.h:348
@ K_UPARROW
Definition keys.h:62
@ K_MIDINOTE81
Definition keys.h:320
@ K_MIDINOTE33
Definition keys.h:272
@ K_MIDINOTE58
Definition keys.h:297
@ K_KP_0
Definition keys.h:97
@ K_KP_3
Definition keys.h:103
@ K_F8
Definition keys.h:78
@ K_MIDINOTE11
Definition keys.h:250
@ K_AUX9
Definition keys.h:182
@ K_AUX21
Definition keys.h:194
@ K_MIDINOTE70
Definition keys.h:309
@ K_ESCAPE
Definition keys.h:56
@ K_MIDINOTE124
Definition keys.h:363
@ K_MIDINOTE59
Definition keys.h:298
@ K_MOUSE6
Definition keys.h:138
@ K_MIDINOTE71
Definition keys.h:310
@ K_F5
Definition keys.h:75
@ K_MIDINOTE31
Definition keys.h:270
@ K_AUX24
Definition keys.h:197
@ K_X360_START
Definition keys.h:212
@ K_AUX18
Definition keys.h:191
@ K_MIDINOTE67
Definition keys.h:306
@ K_JOY5
Definition keys.h:157
@ K_MIDINOTE39
Definition keys.h:278
@ K_MIDINOTE40
Definition keys.h:279
@ K_MIDINOTE46
Definition keys.h:285
@ K_MIDINOTE48
Definition keys.h:287
@ K_MOUSE8
Definition keys.h:140
@ K_KP_1
Definition keys.h:99
@ K_MIDINOTE18
Definition keys.h:257
@ K_MIDINOTE15
Definition keys.h:254
@ K_JOY3
Definition keys.h:155
@ K_JOY9
Definition keys.h:161
@ K_MIDINOTE95
Definition keys.h:334
@ K_MIDINOTE116
Definition keys.h:355
@ K_MIDINOTE118
Definition keys.h:357
@ K_AUX3
Definition keys.h:176
@ K_MIDINOTE17
Definition keys.h:256
@ K_AUX5
Definition keys.h:178
@ K_MOUSE11
Definition keys.h:143
@ K_MIDINOTE120
Definition keys.h:359
@ K_MIDINOTE60
Definition keys.h:299
@ K_MIDINOTE75
Definition keys.h:314
@ K_AUX6
Definition keys.h:179
@ K_KP_PERIOD
Definition keys.h:116
@ K_MIDINOTE19
Definition keys.h:258
@ K_AUX7
Definition keys.h:180
@ K_PGUP
Definition keys.h:87
@ K_MIDINOTE54
Definition keys.h:293
@ K_MIDINOTE30
Definition keys.h:269
@ K_AUX11
Definition keys.h:184
@ K_PAUSE
Definition keys.h:91
@ K_MIDINOTE34
Definition keys.h:273
@ K_MIDINOTE42
Definition keys.h:281
@ K_KP_DOWNARROW
Definition keys.h:102
@ K_X360_RIGHT_THUMB_LEFT
Definition keys.h:230
@ K_MIDINOTE65
Definition keys.h:304
@ K_AUX1
Definition keys.h:174
@ K_MIDINOTE123
Definition keys.h:362
@ K_X360_LEFT_THUMB_UP
Definition keys.h:224
@ K_MIDINOTE51
Definition keys.h:290
@ K_BACKSPACE
Definition keys.h:61
@ K_MIDINOTE92
Definition keys.h:331
@ K_X360_LEFT_SHOULDER
Definition keys.h:216
@ K_X360_LEFT_THUMB_LEFT
Definition keys.h:226
@ K_MIDINOTE50
Definition keys.h:289
@ K_JOY2
Definition keys.h:154
@ K_CAPSLOCK
Definition keys.h:94
@ K_KP_SLASH
Definition keys.h:119
@ K_MIDINOTE41
Definition keys.h:280
@ K_MOUSE3
Definition keys.h:133
@ K_END
Definition keys.h:89
@ K_JOY_UP
Definition keys.h:234
@ K_JOY11
Definition keys.h:163
@ K_MIDINOTE24
Definition keys.h:263
@ K_SCROLLOCK
Definition keys.h:95
@ K_INS
Definition keys.h:84
@ K_MOUSE13
Definition keys.h:145
@ K_F10
Definition keys.h:80
@ K_KP_ENTER
Definition keys.h:123
@ K_MIDINOTE38
Definition keys.h:277
@ K_CTRL
Definition keys.h:68
@ K_MIDINOTE102
Definition keys.h:341
@ K_AUX14
Definition keys.h:187
@ K_KP_LEFTARROW
Definition keys.h:106
@ K_JOY8
Definition keys.h:160
@ K_MIDINOTE100
Definition keys.h:339
@ K_MIDINOTE119
Definition keys.h:358
@ K_MIDINOTE74
Definition keys.h:313
@ K_MIDINOTE1
Definition keys.h:240
@ K_KP_EQUALS
Definition keys.h:124
@ K_MIDINOTE25
Definition keys.h:264
@ K_MIDINOTE76
Definition keys.h:315
@ K_MWHEELDOWN
Definition keys.h:135
@ K_MIDINOTE66
Definition keys.h:305
@ K_F11
Definition keys.h:81
@ K_KP_MULTIPLY
Definition keys.h:120
@ K_MIDINOTE21
Definition keys.h:260
@ K_SPACE
Definition keys.h:57
@ K_HOME
Definition keys.h:88
@ K_KP_6
Definition keys.h:108
@ K_AUX26
Definition keys.h:199
@ K_MOUSE10
Definition keys.h:142
@ K_AUX10
Definition keys.h:183
@ K_MIDINOTE91
Definition keys.h:330
@ K_TAB
Definition keys.h:54
@ K_MIDINOTE80
Definition keys.h:319
@ K_KP_DIVIDE
Definition keys.h:118
@ K_X360_LEFT_TRIGGER
Definition keys.h:222
@ K_AUX20
Definition keys.h:193
@ K_TEXT
Definition keys.h:53
@ K_MIDINOTE35
Definition keys.h:274
@ K_MIDINOTE2
Definition keys.h:241
@ K_MIDINOTE22
Definition keys.h:261
@ K_JOY6
Definition keys.h:158
@ K_MIDINOTE112
Definition keys.h:351
@ K_MIDINOTE32
Definition keys.h:271
@ K_AUX8
Definition keys.h:181
@ K_RIGHTARROW
Definition keys.h:65
@ K_F3
Definition keys.h:73
@ K_AUX28
Definition keys.h:201
@ K_MIDINOTE26
Definition keys.h:265
@ K_MIDINOTE108
Definition keys.h:347
@ K_MIDINOTE52
Definition keys.h:291
@ K_F7
Definition keys.h:77
@ K_KP_9
Definition keys.h:114
@ K_MIDINOTE98
Definition keys.h:337
@ K_DOWNARROW
Definition keys.h:63
@ K_X360_Y
Definition keys.h:221
@ K_MIDINOTE117
Definition keys.h:356
@ K_MOUSE14
Definition keys.h:146
@ K_X360_B
Definition keys.h:219
@ K_MIDINOTE121
Definition keys.h:360
@ K_MIDINOTE113
Definition keys.h:352
@ K_MIDINOTE99
Definition keys.h:338
@ K_X360_LEFT_THUMB
Definition keys.h:214
@ K_KP_HOME
Definition keys.h:111
@ K_AUX16
Definition keys.h:189
@ K_JOY1
Definition keys.h:153
@ K_MIDINOTE72
Definition keys.h:311
@ K_MIDINOTE47
Definition keys.h:286
@ K_MIDINOTE43
Definition keys.h:282
@ K_MIDINOTE68
Definition keys.h:307
@ K_AUX31
Definition keys.h:204
@ K_AUX17
Definition keys.h:190
@ K_MOUSE16
Definition keys.h:148
@ K_MIDINOTE20
Definition keys.h:259
@ K_AUX4
Definition keys.h:177
@ K_MIDINOTE104
Definition keys.h:343
@ K_MIDINOTE84
Definition keys.h:323
@ K_MIDINOTE87
Definition keys.h:326
@ K_AUX12
Definition keys.h:185
@ K_PGDN
Definition keys.h:86
@ K_MIDINOTE29
Definition keys.h:268
@ K_LEFTARROW
Definition keys.h:64
#define MAX_KEY_BINDS
Definition keys.h:41

Function Documentation

◆ Key_AddChar()

int Key_AddChar ( int unicode,
qbool is_console )

Definition at line 703 of file keys.c.

704{
705 char *line;
706 char buf[16];
707 int len, blen, linepos;
708
709 if (is_console)
710 {
711 line = key_line;
712 linepos = key_linepos;
713 }
714 else
715 {
716 line = chat_buffer;
717 linepos = chat_bufferpos;
718 }
719
720 if (linepos >= MAX_INPUTLINE-1)
721 return linepos;
722
723 blen = u8_fromchar(unicode, buf, sizeof(buf));
724 if (!blen)
725 return linepos;
726 len = (int)strlen(&line[linepos]);
727 // check insert mode, or always insert if at end of line
728 if (key_insert || len == 0)
729 {
730 if (linepos + len + blen >= MAX_INPUTLINE)
731 return linepos;
732 // can't use strcpy to move string to right
733 len++;
734 if (linepos + blen + len >= MAX_INPUTLINE)
735 return linepos;
736 memmove(&line[linepos + blen], &line[linepos], len);
737 }
738 else if (linepos + len + blen - u8_bytelen(line + linepos, 1) >= MAX_INPUTLINE)
739 return linepos;
740 memcpy(line + linepos, buf, blen);
741 if (blen > len)
742 line[linepos + blen] = 0;
743 linepos += blen;
744 return linepos;
745}
static int(ZEXPORT *qz_inflate)(z_stream *strm
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657
int chat_bufferpos
Definition keys.c:701
int key_linepos
Definition keys.c:35
char chat_buffer[MAX_INPUTLINE]
Definition keys.c:700
char key_line[MAX_INPUTLINE]
Definition keys.c:34
qbool key_insert
Definition keys.c:36
float strlen(string s)
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
Definition qdefs.h:94
size_t u8_bytelen(const char *_s, size_t n)
Get the number of bytes used in a string to represent an amount of characters.
Definition utf8lib.c:340
int u8_fromchar(Uchar w, char *to, size_t maxlen)
Encode a wide-character into utf-8.
Definition utf8lib.c:628

References buf, chat_buffer, chat_bufferpos, int(), key_insert, key_line, key_linepos, MAX_INPUTLINE, strlen(), u8_bytelen(), and u8_fromchar().

Referenced by Key_Console(), and Key_Message().

◆ Key_ClearEditLine()

int Key_ClearEditLine ( qbool is_console)

Definition at line 668 of file keys.c.

669{
670 if (is_console)
671 {
672 key_line[0] = ']';
673 key_line[1] = 0;
674 return 1;
675 }
676 else
677 {
678 chat_buffer[0] = 0;
679 return 0;
680 }
681}

References chat_buffer, and key_line.

Referenced by Key_Console(), Key_Init(), Key_Message(), and Key_Parse_CommonKeys().

◆ Key_Event()

void Key_Event ( int key,
int ascii,
qbool down )

Definition at line 1836 of file keys.c.

1837{
1839 const char *bind;
1840 qbool q;
1841 keydest_t keydest = key_dest;
1842 char vabuf[1024];
1843
1844 if (key < 0 || key >= MAX_KEYS)
1845 return;
1846
1847 if(events_blocked)
1848 {
1849 Key_EventQueue_Add(key, ascii, down);
1850 return;
1851 }
1852
1853 // get key binding
1854 bind = keybindings[key_bmap][key];
1855 if (!bind)
1856 bind = keybindings[key_bmap2][key];
1857
1859 Con_DPrintf("Key_Event(%i, '%c', %s) keydown %i bind \"%s\"\n", key, ascii ? ascii : '?', down ? "down" : "up", keydown[key], bind ? bind : "");
1860
1862 keydest = key_console;
1863
1864 if (down)
1865 {
1866 // increment key repeat count each time a down is received so that things
1867 // which want to ignore key repeat can ignore it
1868 keydown[key] = min(keydown[key] + 1, 2);
1869 if(keydown[key] == 1) {
1870 tbl_keyascii[key] = ascii;
1871 tbl_keydest[key] = keydest;
1872 } else {
1873 ascii = tbl_keyascii[key];
1874 keydest = tbl_keydest[key];
1875 }
1876 }
1877 else
1878 {
1879 // clear repeat count now that the key is released
1880 keydown[key] = 0;
1881 keydest = tbl_keydest[key];
1882 ascii = tbl_keyascii[key];
1883 }
1884
1885 if(keydest == key_void)
1886 return;
1887
1888 // key_consoleactive is a flag not a key_dest because the console is a
1889 // high priority overlay ontop of the normal screen (designed as a safety
1890 // feature so that developers and users can rescue themselves from a bad
1891 // situation).
1892 //
1893 // this also means that toggling the console on/off does not lose the old
1894 // key_dest state
1895
1896 // specially handle escape (togglemenu) and shift-escape (toggleconsole)
1897 // engine bindings, these are not handled as normal binds so that the user
1898 // can recover from a completely empty bindmap
1899 if (key == K_ESCAPE)
1900 {
1901 // ignore key repeats on escape
1902 if (keydown[key] > 1)
1903 return;
1904
1905 // escape does these things:
1906 // key_consoleactive - close console
1907 // key_message - abort messagemode
1908 // key_menu - go to parent menu (or key_game)
1909 // key_game - open menu
1910
1911 // in all modes shift-escape toggles console
1912 if (keydown[K_SHIFT])
1913 {
1914 if(down)
1915 {
1917 tbl_keydest[key] = key_void; // esc release should go nowhere (especially not to key_menu or key_game)
1918 }
1919 return;
1920 }
1921
1922 switch (keydest)
1923 {
1924 case key_console:
1925 if(down)
1926 {
1928 {
1929 key_consoleactive &= ~KEY_CONSOLEACTIVE_USER;
1930#ifdef CONFIG_MENU
1931 MR_ToggleMenu(1);
1932#endif
1933 }
1934 else
1936 }
1937 break;
1938
1939 case key_message:
1940 if (down)
1941 Key_Message (cmd, key, ascii); // that'll close the message input
1942 break;
1943
1944 case key_menu:
1945 case key_menu_grabbed:
1946#ifdef CONFIG_MENU
1947 MR_KeyEvent (key, ascii, down);
1948#endif
1949 break;
1950
1951 case key_game:
1952 // csqc has priority over toggle menu if it wants to (e.g. handling escape for UI stuff in-game.. :sick:)
1953 q = CL_VM_InputEvent(down ? 0 : 1, key, ascii);
1954#ifdef CONFIG_MENU
1955 if (!q && down)
1956 MR_ToggleMenu(1);
1957#endif
1958 break;
1959
1960 default:
1961 Con_Printf ("Key_Event: Bad key_dest\n");
1962 }
1963 return;
1964 }
1965
1966 // send function keydowns to interpreter no matter what mode is (unless the menu has specifically grabbed the keyboard, for rebinding keys)
1967 // VorteX: Omnicide does bind F* keys
1968 if (keydest != key_menu_grabbed)
1969 if (key >= K_F1 && key <= K_F12 && gamemode != GAME_BLOODOMNICIDE)
1970 {
1971 if (bind)
1972 {
1973 if(keydown[key] == 1 && down)
1974 {
1975 // button commands add keynum as a parm
1976 // prepend to avoid delays from `wait` commands added by other sources
1977 if (bind[0] == '+')
1978 Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
1979 else
1980 Cbuf_InsertText(cmd, bind);
1981 }
1982 else if(bind[0] == '+' && !down && keydown[key] == 0)
1983 // append -bind to ensure it's after the +bind in case they arrive in the same frame
1984 Cbuf_AddText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
1985 }
1986 return;
1987 }
1988
1989 // send input to console if it wants it
1990 if (keydest == key_console)
1991 {
1992 if (!down)
1993 return;
1994 // con_closeontoggleconsole enables toggleconsole keys to close the
1995 // console, as long as they are not the color prefix character
1996 // (special exemption for german keyboard layouts)
1997 if (con_closeontoggleconsole.integer && bind && !strncmp(bind, "toggleconsole", strlen("toggleconsole")) && (key_consoleactive & KEY_CONSOLEACTIVE_USER) && (con_closeontoggleconsole.integer >= ((ascii != STRING_COLOR_TAG) ? 2 : 3) || key_linepos == 1))
1998 {
2000 return;
2001 }
2002
2003 if (Sys_CheckParm ("-noconsole"))
2004 return; // only allow the key bind to turn off console
2005
2006 Key_Console (cmd, key, ascii);
2007 return;
2008 }
2009
2010 // handle toggleconsole in menu too
2011 if (keydest == key_menu)
2012 {
2013 if (down && con_closeontoggleconsole.integer && bind && !strncmp(bind, "toggleconsole", strlen("toggleconsole")) && ascii != STRING_COLOR_TAG)
2014 {
2015 Cbuf_InsertText(cmd, "toggleconsole\n"); // Deferred to next frame so we're not sending the text event to the console.
2016 tbl_keydest[key] = key_void; // key release should go nowhere (especially not to key_menu or key_game)
2017 return;
2018 }
2019 }
2020
2021 // ignore binds while a video is played, let the video system handle the key event
2022 if (cl_videoplaying)
2023 {
2024 if (gamemode == GAME_BLOODOMNICIDE) // menu controls key events
2025#ifdef CONFIG_MENU
2026 MR_KeyEvent(key, ascii, down);
2027#else
2028 {
2029 }
2030#endif
2031 else
2032 CL_Video_KeyEvent (key, ascii, keydown[key] != 0);
2033 return;
2034 }
2035
2036 // anything else is a key press into the game, chat line, or menu
2037 switch (keydest)
2038 {
2039 case key_message:
2040 if (down)
2041 Key_Message (cmd, key, ascii);
2042 break;
2043 case key_menu:
2044 case key_menu_grabbed:
2045#ifdef CONFIG_MENU
2046 MR_KeyEvent (key, ascii, down);
2047#endif
2048 break;
2049 case key_game:
2050 q = CL_VM_InputEvent(down ? 0 : 1, key, ascii);
2051 // ignore key repeats on binds and only send the bind if the event hasnt been already processed by csqc
2052 if (!q && bind)
2053 {
2054 if(keydown[key] == 1 && down)
2055 {
2056 // button commands add keynum as a parm
2057 // prepend to avoid delays from `wait` commands added by other sources
2058 if (bind[0] == '+')
2059 Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
2060 else
2061 Cbuf_InsertText(cmd, bind);
2062 }
2063 else if(bind[0] == '+' && !down && keydown[key] == 0)
2064 // append -bind to ensure it's after the +bind in case they arrive in the same frame
2065 Cbuf_AddText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
2066 }
2067 break;
2068 default:
2069 Con_Printf ("Key_Event: Bad key_dest\n");
2070 }
2071}
void CL_Video_KeyEvent(int key, int ascii, qbool down)
Definition cl_video.c:596
int cl_videoplaying
Definition cl_video.c:458
void Cbuf_InsertText(cmd_state_t *cmd, const char *text)
Definition cmd.c:292
void Cbuf_AddText(cmd_state_t *cmd, const char *text)
Definition cmd.c:264
cmd_state_t * cmd_local
command interpreter for local commands injected by SVQC, CSQC, MQC, server or client engine code uses...
Definition cmd.c:25
gamemode_t gamemode
Definition com_game.c:26
@ GAME_BLOODOMNICIDE
Definition com_game.h:52
char * va(char *buf, size_t buflen, const char *format,...)
Definition common.c:972
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
void Con_ToggleConsole_f(cmd_state_t *cmd)
Definition console.c:686
qbool CL_VM_InputEvent(int eventtype, float x, float y)
Definition csprogs.c:459
#define STRING_COLOR_TAG
Definition draw.h:140
cvar_t developer_insane
Definition host.c:50
float K_SHIFT
Definition keycodes.qc:22
float K_F1
Definition keycodes.qc:24
float K_F12
Definition keycodes.qc:35
float K_ESCAPE
Definition keycodes.qc:9
cvar_t con_closeontoggleconsole
Definition keys.c:28
static int key_bmap2
Definition keys.c:326
static void Key_EventQueue_Add(int key, int ascii, qbool down)
Definition keys.c:1808
static void Key_Console(cmd_state_t *cmd, int key, int unicode)
Definition keys.c:1103
char * keybindings[MAX_BINDMAPS][MAX_KEYS]
Definition keys.c:39
static int events_blocked
Definition keys.c:1804
static keydest_t tbl_keydest[MAX_KEYS]
Definition keys.c:1795
static char tbl_keyascii[MAX_KEYS]
Definition keys.c:1794
static unsigned char keydown[MAX_KEYS]
Definition keys.c:327
keydest_t key_dest
Definition keys.c:37
static void Key_Message(cmd_state_t *cmd, int key, int ascii)
Definition keys.c:1301
int key_consoleactive
Definition keys.c:38
static int key_bmap
Definition keys.c:326
#define KEY_CONSOLEACTIVE_USER
Definition keys.h:380
#define KEY_CONSOLEACTIVE_FORCED
Definition keys.h:382
#define min(A, B)
Definition mathlib.h:37
void(* MR_ToggleMenu)(int mode)
Definition menu.c:5480
void(* MR_KeyEvent)(int key, int ascii, qbool downevent)
Definition menu.c:5478
void cmd(string command,...)
bool qbool
Definition qtypes.h:9
command interpreter state - the tokenizing and execution of commands, as well as pointers to which cv...
Definition cmd.h:127
int integer
Definition cvar.h:73
int Sys_CheckParm(const char *parm)
Definition sys_shared.c:327

References Cbuf_AddText(), Cbuf_InsertText(), CL_Video_KeyEvent(), cl_videoplaying, CL_VM_InputEvent(), cmd(), cmd_local, con_closeontoggleconsole, Con_DPrintf(), Con_Printf(), Con_ToggleConsole_f(), developer_insane, events_blocked, GAME_BLOODOMNICIDE, gamemode, cvar_t::integer, K_ESCAPE, K_F1, K_F12, K_SHIFT, key_bmap, key_bmap2, Key_Console(), key_console, key_consoleactive, KEY_CONSOLEACTIVE_FORCED, KEY_CONSOLEACTIVE_USER, key_dest, Key_EventQueue_Add(), key_game, key_linepos, key_menu, key_menu_grabbed, Key_Message(), key_message, key_void, keybindings, keydown, MAX_KEYS, min, MR_KeyEvent, MR_ToggleMenu, STRING_COLOR_TAG, strlen(), Sys_CheckParm(), tbl_keyascii, tbl_keydest, and va().

Referenced by Key_EventQueue_Unblock(), Key_ReleaseAll(), Sys_SDL_HandleEvents(), VID_KeyEventForButton(), VID_TouchscreenArea(), and VID_TouchscreenCursor().

◆ Key_EventQueue_Block()

void Key_EventQueue_Block ( void )

Definition at line 1819 of file keys.c.

1820{
1821 // block key events until call to Unblock
1822 events_blocked = true;
1823}

References events_blocked.

◆ Key_EventQueue_Unblock()

void Key_EventQueue_Unblock ( void )

Definition at line 1825 of file keys.c.

1826{
1827 // unblocks key events again
1828 unsigned i;
1829 events_blocked = false;
1830 for(i = 0; i < eventqueue_idx; ++i)
1831 Key_Event(eventqueue[i].key, eventqueue[i].ascii, eventqueue[i].down);
1832 eventqueue_idx = 0;
1833}
static unsigned eventqueue_idx
Definition keys.c:1806
void Key_Event(int key, int ascii, qbool down)
Definition keys.c:1836
static eventqueueitem_t eventqueue[32]
Definition keys.c:1805
int i

References eventqueue, eventqueue_idx, events_blocked, i, and Key_Event().

◆ Key_FindKeysForCommand()

void Key_FindKeysForCommand ( const char * command,
int * keys,
int numkeys,
int bindmap )

Definition at line 1760 of file keys.c.

1761{
1762 int count;
1763 int j;
1764 const char *b;
1765
1766 for (j = 0;j < numkeys;j++)
1767 keys[j] = -1;
1768
1769 if(bindmap >= MAX_BINDMAPS)
1770 return;
1771
1772 count = 0;
1773
1774 for (j = 0; j < MAX_KEYS; ++j)
1775 {
1776 b = Key_GetBind(j, bindmap);
1777 if (!b)
1778 continue;
1779 if (!strcmp (b, command) )
1780 {
1781 keys[count++] = j;
1782 if (count == numkeys)
1783 break;
1784 }
1785 }
1786}
GLenum GLenum GLsizei count
Definition glquake.h:656
const char * Key_GetBind(int key, int bindmap)
Definition keys.c:1740
#define MAX_BINDMAPS
Definition qdefs.h:152
dp_FragColor b

References b, count, Key_GetBind(), MAX_BINDMAPS, and MAX_KEYS.

Referenced by M_Keys_Draw(), M_Keys_Key(), and VM_findkeysforcommand().

◆ Key_GetBind()

const char * Key_GetBind ( int key,
int bindmap )

Definition at line 1740 of file keys.c.

1741{
1742 const char *bind;
1743 if (key < 0 || key >= MAX_KEYS)
1744 return NULL;
1745 if(bindmap >= MAX_BINDMAPS)
1746 return NULL;
1747 if(bindmap >= 0)
1748 {
1749 bind = keybindings[bindmap][key];
1750 }
1751 else
1752 {
1753 bind = keybindings[key_bmap][key];
1754 if (!bind)
1755 bind = keybindings[key_bmap2][key];
1756 }
1757 return bind;
1758}
#define NULL
Definition qtypes.h:12

References key_bmap, key_bmap2, keybindings, MAX_BINDMAPS, MAX_KEYS, and NULL.

Referenced by Key_FindKeysForCommand(), and VM_getkeybind().

◆ Key_GetBindMap()

void Key_GetBindMap ( int * fg,
int * bg )

Definition at line 1435 of file keys.c.

1436{
1437 if(fg)
1438 *fg = key_bmap;
1439 if(bg)
1440 *bg = key_bmap2;
1441}

References key_bmap, and key_bmap2.

Referenced by VM_getbindmaps().

◆ Key_Init()

void Key_Init ( void )

Definition at line 1710 of file keys.c.

1711{
1714
1715//
1716// register our functions
1717//
1718 Cmd_AddCommand(CF_CLIENT, "in_bind", Key_In_Bind_f, "binds a command to the specified key in the selected bindmap");
1719 Cmd_AddCommand(CF_CLIENT, "in_unbind", Key_In_Unbind_f, "removes command on the specified key in the selected bindmap");
1720 Cmd_AddCommand(CF_CLIENT, "in_bindlist", Key_In_BindList_f, "bindlist: displays bound keys for all bindmaps, or the given bindmap");
1721 Cmd_AddCommand(CF_CLIENT, "in_bindmap", Key_In_Bindmap_f, "selects active foreground and background (used only if a key is not bound in the foreground) bindmaps for typing");
1722 Cmd_AddCommand(CF_CLIENT, "in_releaseall", Key_ReleaseAll_f, "releases all currently pressed keys (debug command)");
1723
1724 Cmd_AddCommand(CF_CLIENT, "bind", Key_Bind_f, "binds a command to the specified key in bindmap 0");
1725 Cmd_AddCommand(CF_CLIENT, "unbind", Key_Unbind_f, "removes a command on the specified key in bindmap 0");
1726 Cmd_AddCommand(CF_CLIENT, "bindlist", Key_BindList_f, "bindlist: displays bound keys for bindmap 0 bindmaps");
1727 Cmd_AddCommand(CF_CLIENT, "unbindall", Key_Unbindall_f, "removes all commands from all keys in all bindmaps (leaving only shift-escape and escape)");
1728
1729 Cmd_AddCommand(CF_CLIENT, "history", Key_History_f, "prints the history of executed commands (history X prints the last X entries, history -c clears the whole history)");
1730
1732}
void Cmd_AddCommand(unsigned flags, const char *cmd_name, xcommand_t function, const char *description)
called by the init functions of other parts of the program to register commands and functions to call...
Definition cmd.c:1661
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
void Cvar_RegisterVariable(cvar_t *variable)
registers a cvar that already has the name, string, and optionally the archive elements set.
Definition cvar.c:599
static void Key_History_Init(void)
Definition keys.c:50
static void Key_History_f(cmd_state_t *cmd)
Definition keys.c:300
static void Key_In_Bind_f(cmd_state_t *cmd)
Definition keys.c:1484
static void Key_In_Unbind_f(cmd_state_t *cmd)
Definition keys.c:1457
static void Key_In_BindList_f(cmd_state_t *cmd)
Definition keys.c:1611
int Key_ClearEditLine(qbool is_console)
Definition keys.c:668
static void Key_In_Bindmap_f(cmd_state_t *cmd)
Definition keys.c:1529
static void Key_Unbind_f(cmd_state_t *cmd)
Definition keys.c:1558
static void Key_Bind_f(cmd_state_t *cmd)
Definition keys.c:1639
static void Key_BindList_f(cmd_state_t *cmd)
Definition keys.c:1633
void Key_ReleaseAll_f(cmd_state_t *cmd)
Definition keys.c:2088
static void Key_Unbindall_f(cmd_state_t *cmd)
Definition keys.c:1578

References CF_CLIENT, Cmd_AddCommand(), con_closeontoggleconsole, Cvar_RegisterVariable(), Key_Bind_f(), Key_BindList_f(), Key_ClearEditLine(), Key_History_f(), Key_History_Init(), Key_In_Bind_f(), Key_In_BindList_f(), Key_In_Bindmap_f(), Key_In_Unbind_f(), key_linepos, Key_ReleaseAll_f(), Key_Unbind_f(), and Key_Unbindall_f().

Referenced by CL_Init().

◆ Key_Init_Cvars()

void Key_Init_Cvars ( void )

◆ Key_KeynumToString()

const char * Key_KeynumToString ( int keynum,
char * buf,
size_t buflength )

Definition at line 1383 of file keys.c.

1384{
1385 const keyname_t *kn;
1386
1387 // -1 is an invalid code
1388 if (keynum < 0)
1389 return "<KEY NOT FOUND>";
1390
1391 // search overrides first, because some characters are special
1392 for (kn = keynames; kn->name; kn++)
1393 if (keynum == kn->keynum)
1394 return kn->name;
1395
1396 // if it is printable, output it as a single character
1397 if (keynum > 32)
1398 {
1399 u8_fromchar(keynum, tinystr, tinystrlength);
1400 return tinystr;
1401 }
1402
1403 // if it is not overridden and not printable, we don't know what to do with it
1404 return "<UNKNOWN KEYNUM>";
1405}
static const keyname_t keynames[]
Definition keys.c:336
int keynum
Definition keys.c:332
const char * name
Definition keys.c:331

References keynames, keyname_t::keynum, keyname_t::name, and u8_fromchar().

Referenced by Key_PrintBindList(), Key_WriteBindings(), M_Keys_Draw(), M_Keys_Key(), and VM_keynumtostring().

◆ Key_Parse_CommonKeys()

int Key_Parse_CommonKeys ( cmd_state_t * cmd,
qbool is_console,
int key,
int unicode )

Definition at line 750 of file keys.c.

751{
752 char *line;
753 int linepos, linestart;
754 unsigned int linesize;
755 if (is_console)
756 {
757 line = key_line;
758 linepos = key_linepos;
759 linesize = sizeof(key_line);
760 linestart = 1;
761 }
762 else
763 {
764 line = chat_buffer;
765 linepos = chat_bufferpos;
766 linesize = sizeof(chat_buffer);
767 linestart = 0;
768 }
769
770 if ((key == 'v' && KM_CTRL) || ((key == K_INS || key == K_KP_INS) && KM_SHIFT))
771 {
772 char *cbd, *p;
773 if ((cbd = Sys_SDL_GetClipboardData()) != 0)
774 {
775 int i;
776#if 1
777 p = cbd;
778 while (*p)
779 {
780 if (*p == '\r' && *(p+1) == '\n')
781 {
782 *p++ = ';';
783 *p++ = ' ';
784 }
785 else if (*p == '\n' || *p == '\r' || *p == '\b')
786 *p++ = ';';
787 else
788 p++;
789 }
790#else
791 strtok(cbd, "\n\r\b");
792#endif
793 i = (int)strlen(cbd);
794 if (i + linepos >= MAX_INPUTLINE)
795 i= MAX_INPUTLINE - linepos - 1;
796 if (i > 0)
797 {
798 cbd[i] = 0;
799 memmove(line + linepos + i, line + linepos, linesize - linepos - i);
800 memcpy(line + linepos, cbd, i);
801 linepos += i;
802 }
803 Z_Free(cbd);
804 }
805 return linepos;
806 }
807
808 if (key == 'u' && KM_CTRL) // like vi/readline ^u: delete currently edited line
809 {
810 return Key_ClearEditLine(is_console);
811 }
812
813 if (key == K_TAB)
814 {
815 if (is_console && KM_CTRL) // append the cvar value to the cvar name
816 {
817 int cvar_len, cvar_str_len, chars_to_move;
818 char k;
819 char cvar[MAX_INPUTLINE];
820 const char *cvar_str;
821
822 // go to the start of the variable
823 while(--linepos)
824 {
825 k = line[linepos];
826 if(k == '\"' || k == ';' || k == ' ' || k == '\'')
827 break;
828 }
829 linepos++;
830
831 // save the variable name in cvar
832 for(cvar_len=0; (k = line[linepos + cvar_len]) != 0; cvar_len++)
833 {
834 if(k == '\"' || k == ';' || k == ' ' || k == '\'')
835 break;
836 cvar[cvar_len] = k;
837 }
838 if (cvar_len==0)
839 return linepos;
840 cvar[cvar_len] = 0;
841
842 // go to the end of the cvar
843 linepos += cvar_len;
844
845 // save the content of the variable in cvar_str
847 cvar_str_len = (int)strlen(cvar_str);
848 if (cvar_str_len==0)
849 return linepos;
850
851 // insert space and cvar_str in line
852 chars_to_move = (int)strlen(&line[linepos]);
853 if (linepos + 1 + cvar_str_len + chars_to_move < MAX_INPUTLINE)
854 {
855 if (chars_to_move)
856 memmove(&line[linepos + 1 + cvar_str_len], &line[linepos], chars_to_move);
857 line[linepos++] = ' ';
858 memcpy(&line[linepos], cvar_str, cvar_str_len);
859 linepos += cvar_str_len;
860 line[linepos + chars_to_move] = 0;
861 }
862 else
863 Con_Printf("Couldn't append cvar value, edit line too long.\n");
864 return linepos;
865 }
866
867 if (KM_NONE)
868 return Con_CompleteCommandLine(cmd, is_console);
869 }
870
871 // Advanced Console Editing by Radix radix@planetquake.com
872 // Added/Modified by EvilTypeGuy eviltypeguy@qeradiant.com
873 // Enhanced by [515]
874 // Enhanced by terencehill
875
876 // move cursor to the previous character
877 if (key == K_LEFTARROW || key == K_KP_LEFTARROW)
878 {
879 if(KM_CTRL) // move cursor to the previous word
880 {
881 int pos;
882 char k;
883 if (linepos <= linestart + 1)
884 return linestart;
885 pos = linepos;
886
887 do {
888 k = line[--pos];
889 if (!(k == '\"' || k == ';' || k == ' ' || k == '\''))
890 break;
891 } while(pos > linestart); // skip all "; ' after the word
892
893 if (pos == linestart)
894 return linestart;
895
896 do {
897 k = line[--pos];
898 if (k == '\"' || k == ';' || k == ' ' || k == '\'')
899 {
900 pos++;
901 break;
902 }
903 } while(pos > linestart);
904
905 linepos = pos;
906 return linepos;
907 }
908
909 if(KM_SHIFT) // move cursor to the previous character ignoring colors
910 {
911 int pos;
912 size_t inchar = 0;
913 if (linepos <= linestart + 1)
914 return linestart;
915 pos = (int)u8_prevbyte(line + linestart, linepos - linestart) + linestart;
916 while (pos > linestart)
917 if(pos-1 >= linestart && line[pos-1] == STRING_COLOR_TAG && isdigit(line[pos]))
918 pos-=2;
919 else if(pos-4 >= linestart && line[pos-4] == STRING_COLOR_TAG && line[pos-3] == STRING_COLOR_RGB_TAG_CHAR
920 && isxdigit(line[pos-2]) && isxdigit(line[pos-1]) && isxdigit(line[pos]))
921 pos-=5;
922 else
923 {
924 if(pos-1 >= linestart && line[pos-1] == STRING_COLOR_TAG && line[pos] == STRING_COLOR_TAG) // consider ^^ as a character
925 pos--;
926 pos--;
927 break;
928 }
929 if (pos < linestart)
930 return linestart;
931 // we need to move to the beginning of the character when in a wide character:
932 u8_charidx(line, pos + 1, &inchar);
933 linepos = (int)(pos + 1 - inchar);
934 return linepos;
935 }
936
937 if(KM_NONE)
938 {
939 if (linepos <= linestart + 1)
940 return linestart;
941 // hide ']' from u8_prevbyte otherwise it could go out of bounds
942 linepos = (int)u8_prevbyte(line + linestart, linepos - linestart) + linestart;
943 return linepos;
944 }
945 }
946
947 // delete char before cursor
948 if ((key == K_BACKSPACE && KM_NONE) || (key == 'h' && KM_CTRL))
949 {
950 if (linepos > linestart)
951 {
952 // hide ']' from u8_prevbyte otherwise it could go out of bounds
953 int newpos = (int)u8_prevbyte(line + linestart, linepos - linestart) + linestart;
954 dp_strlcpy(line + newpos, line + linepos, linesize + 1 - linepos);
955 linepos = newpos;
956 }
957 return linepos;
958 }
959
960 // delete char on cursor
961 if ((key == K_DEL || key == K_KP_DEL) && KM_NONE)
962 {
963 size_t linelen;
964 linelen = strlen(line);
965 if (linepos < (int)linelen)
966 memmove(line + linepos, line + linepos + u8_bytelen(line + linepos, 1), linelen - linepos);
967 return linepos;
968 }
969
970 // move cursor to the next character
971 if (key == K_RIGHTARROW || key == K_KP_RIGHTARROW)
972 {
973 if (KM_CTRL) // move cursor to the next word
974 {
975 int pos, len;
976 char k;
977 len = (int)strlen(line);
978 if (linepos >= len)
979 return linepos;
980 pos = linepos;
981
982 while(++pos < len)
983 {
984 k = line[pos];
985 if(k == '\"' || k == ';' || k == ' ' || k == '\'')
986 break;
987 }
988
989 if (pos < len) // skip all "; ' after the word
990 while(++pos < len)
991 {
992 k = line[pos];
993 if (!(k == '\"' || k == ';' || k == ' ' || k == '\''))
994 break;
995 }
996 linepos = pos;
997 return linepos;
998 }
999
1000 if (KM_SHIFT) // move cursor to the next character ignoring colors
1001 {
1002 int pos, len;
1003 len = (int)strlen(line);
1004 if (linepos >= len)
1005 return linepos;
1006 pos = linepos;
1007
1008 // go beyond all initial consecutive color tags, if any
1009 if(pos < len)
1010 while (line[pos] == STRING_COLOR_TAG)
1011 {
1012 if(isdigit(line[pos+1]))
1013 pos+=2;
1014 else if(line[pos+1] == STRING_COLOR_RGB_TAG_CHAR && isxdigit(line[pos+2]) && isxdigit(line[pos+3]) && isxdigit(line[pos+4]))
1015 pos+=5;
1016 else
1017 break;
1018 }
1019
1020 // skip the char
1021 if (line[pos] == STRING_COLOR_TAG && line[pos+1] == STRING_COLOR_TAG) // consider ^^ as a character
1022 pos++;
1023 pos += (int)u8_bytelen(line + pos, 1);
1024
1025 // now go beyond all next consecutive color tags, if any
1026 if(pos < len)
1027 while (line[pos] == STRING_COLOR_TAG)
1028 {
1029 if(isdigit(line[pos+1]))
1030 pos+=2;
1031 else if(line[pos+1] == STRING_COLOR_RGB_TAG_CHAR && isxdigit(line[pos+2]) && isxdigit(line[pos+3]) && isxdigit(line[pos+4]))
1032 pos+=5;
1033 else
1034 break;
1035 }
1036 linepos = pos;
1037 return linepos;
1038 }
1039
1040 if (KM_NONE)
1041 {
1042 if (linepos >= (int)strlen(line))
1043 return linepos;
1044 linepos += (int)u8_bytelen(line + linepos, 1);
1045 return linepos;
1046 }
1047 }
1048
1049 if ((key == K_INS || key == K_KP_INS) && KM_NONE) // toggle insert mode
1050 {
1051 key_insert ^= 1;
1052 return linepos;
1053 }
1054
1055 if (key == K_HOME || key == K_KP_HOME)
1056 {
1057 if (is_console && KM_CTRL)
1058 {
1060 return linepos;
1061 }
1062 if (KM_NONE)
1063 return linestart;
1064 }
1065
1066 if (key == K_END || key == K_KP_END)
1067 {
1068 if (is_console && KM_CTRL)
1069 {
1070 con_backscroll = 0;
1071 return linepos;
1072 }
1073 if (KM_NONE)
1074 return (int)strlen(line);
1075 }
1076
1077 return -1;
1078}
#define CF_SERVER
cvar/command that only the server can change/execute
Definition cmd.h:49
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
int Con_CompleteCommandLine(cmd_state_t *cmd, qbool is_console)
wrapper function to attempt to either complete the command line or to list possible matches grouped b...
Definition console.c:2898
int con_backscroll
Definition console.c:37
cvar_state_t cvars_all
Definition cvar.c:28
const char * Cvar_VariableString(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:149
#define STRING_COLOR_RGB_TAG_CHAR
Definition draw.h:143
float K_KP_RIGHTARROW
Definition keycodes.qc:60
float K_BACKSPACE
Definition keycodes.qc:14
float K_RIGHTARROW
Definition keycodes.qc:18
float K_DEL
Definition keycodes.qc:38
float K_KP_LEFTARROW
Definition keycodes.qc:57
float K_KP_DEL
Definition keycodes.qc:68
float K_KP_HOME
Definition keycodes.qc:62
float K_LEFTARROW
Definition keycodes.qc:17
float K_HOME
Definition keycodes.qc:41
float K_END
Definition keycodes.qc:42
float K_INS
Definition keycodes.qc:37
float K_KP_END
Definition keycodes.qc:51
float K_TAB
Definition keycodes.qc:7
float K_KP_INS
Definition keycodes.qc:49
#define KM_SHIFT
Definition keys.c:690
#define KM_CTRL
Definition keys.c:689
#define KM_NONE
Definition keys.c:684
float cvar(string name)
#define CON_TEXTSIZE
max scrollback buffer characters in console
Definition qdefs.h:95
char * Sys_SDL_GetClipboardData(void)
Definition sys_null.c:17
int u8_charidx(const char *_s, size_t i, size_t *len)
Get the char-index for a byte-index.
Definition utf8lib.c:462
size_t u8_prevbyte(const char *_s, size_t i)
Get the byte offset of the previous byte.
Definition utf8lib.c:525
#define Z_Free(data)
Definition zone.h:164

References CF_CLIENT, CF_SERVER, chat_buffer, chat_bufferpos, cmd(), con_backscroll, Con_CompleteCommandLine(), Con_Printf(), CON_TEXTSIZE, cvar(), Cvar_VariableString(), cvars_all, dp_strlcpy, i, int(), K_BACKSPACE, K_DEL, K_END, K_HOME, K_INS, K_KP_DEL, K_KP_END, K_KP_HOME, K_KP_INS, K_KP_LEFTARROW, K_KP_RIGHTARROW, K_LEFTARROW, K_RIGHTARROW, K_TAB, Key_ClearEditLine(), key_insert, key_line, key_linepos, KM_CTRL, KM_NONE, KM_SHIFT, MAX_INPUTLINE, STRING_COLOR_RGB_TAG_CHAR, STRING_COLOR_TAG, strlen(), Sys_SDL_GetClipboardData(), u8_bytelen(), u8_charidx(), u8_prevbyte(), and Z_Free.

Referenced by Key_Console(), and Key_Message().

◆ Key_ReleaseAll()

void Key_ReleaseAll ( void )

Definition at line 2075 of file keys.c.

2076{
2077 int key;
2078 // clear the event queue first
2079 eventqueue_idx = 0;
2080 // then send all down events (possibly into the event queue)
2081 for(key = 0; key < MAX_KEYS; ++key)
2082 if(keydown[key])
2083 Key_Event(key, 0, false);
2084 // now all keys are guaranteed down (once the event queue is unblocked)
2085 // and only future events count
2086}

References eventqueue_idx, Key_Event(), keydown, and MAX_KEYS.

Referenced by Key_ReleaseAll_f(), VID_Restart_f(), and VID_Start().

◆ Key_ReleaseAll_f()

void Key_ReleaseAll_f ( cmd_state_t * cmd)

Definition at line 2088 of file keys.c.

2089{
2091}
void Key_ReleaseAll(void)
Definition keys.c:2075

References Key_ReleaseAll().

Referenced by Key_Init().

◆ Key_SetBinding()

qbool Key_SetBinding ( int keynum,
int bindmap,
const char * binding )

Definition at line 1409 of file keys.c.

1410{
1411 char *newbinding;
1412 size_t l;
1413
1414 if (keynum == -1 || keynum >= MAX_KEYS)
1415 return false;
1416 if ((bindmap < 0) || (bindmap >= MAX_BINDMAPS))
1417 return false;
1418
1419// free old bindings
1420 if (keybindings[bindmap][keynum]) {
1421 Z_Free (keybindings[bindmap][keynum]);
1422 keybindings[bindmap][keynum] = NULL;
1423 }
1424 if(!binding[0]) // make "" binds be removed --blub
1425 return true;
1426// allocate memory for new binding
1427 l = strlen (binding);
1428 newbinding = (char *)Z_Malloc (l + 1);
1429 memcpy (newbinding, binding, l + 1);
1430 newbinding[l] = 0;
1431 keybindings[bindmap][keynum] = newbinding;
1432 return true;
1433}
#define Z_Malloc(size)
Definition zone.h:161

References keybindings, MAX_BINDMAPS, MAX_KEYS, NULL, strlen(), Z_Free, and Z_Malloc.

Referenced by Key_Bind_f(), Key_In_Bind_f(), Key_In_Unbind_f(), Key_Unbind_f(), Key_Unbindall_f(), M_UnbindCommand(), and VM_setkeybind().

◆ Key_SetBindMap()

qbool Key_SetBindMap ( int fg,
int bg )

Definition at line 1443 of file keys.c.

1444{
1445 if(fg >= MAX_BINDMAPS)
1446 return false;
1447 if(bg >= MAX_BINDMAPS)
1448 return false;
1449 if(fg >= 0)
1450 key_bmap = fg;
1451 if(bg >= 0)
1452 key_bmap2 = bg;
1453 return true;
1454}

References key_bmap, key_bmap2, and MAX_BINDMAPS.

Referenced by VM_setbindmaps().

◆ Key_Shutdown()

void Key_Shutdown ( void )

Definition at line 1735 of file keys.c.

1736{
1738}
static void Key_History_Shutdown(void)
Definition keys.c:93

References Key_History_Shutdown().

Referenced by CL_Shutdown().

◆ Key_StringToKeynum()

int Key_StringToKeynum ( const char * str)

Definition at line 1354 of file keys.c.

1355{
1356 Uchar ch;
1357 const keyname_t *kn;
1358
1359 if (!str || !str[0])
1360 return -1;
1361 if (!str[1])
1362 return tolower(str[0]);
1363
1364 for (kn = keynames; kn->name; kn++) {
1365 if (!strcasecmp (str, kn->name))
1366 return kn->keynum;
1367 }
1368
1369 // non-ascii keys are Unicode codepoints, so give the character if it's valid;
1370 // error message have more than one character, don't allow it
1371 ch = u8_getnchar(str, &str, 3);
1372 return (ch == 0 || *str != 0) ? -1 : (int)ch;
1373}
#define u8_getnchar(c, e, n)
Definition utf8lib.h:74
int32_t Uchar
Definition utf8lib.h:35

References int(), keynames, keyname_t::keynum, keyname_t::name, and u8_getnchar.

Referenced by Key_Bind_f(), Key_In_Bind_f(), Key_In_Unbind_f(), Key_Unbind_f(), and VM_stringtokeynum().

◆ Key_WriteBindings()

void Key_WriteBindings ( qfile_t * f)

Definition at line 1681 of file keys.c.

1682{
1683 int i, j;
1684 char bindbuf[MAX_INPUTLINE];
1685 char tinystr[TINYSTR_LEN];
1686 const char *p;
1687
1688 // Override default binds
1689 FS_Printf(f, "unbindall\n");
1690
1691 for (j = 0; j < MAX_BINDMAPS; j++)
1692 {
1693 for (i = 0; i < (int)(sizeof(keybindings[0])/sizeof(keybindings[0][0])); i++)
1694 {
1695 p = keybindings[j][i];
1696 if (p)
1697 {
1698 Cmd_QuoteString(bindbuf, sizeof(bindbuf), p, "\"\\", false); // don't need to escape $ because cvars are not expanded inside bind
1699 if (j == 0)
1700 FS_Printf(f, "bind %s \"%s\"\n", Key_KeynumToString (i, tinystr, TINYSTR_LEN), bindbuf);
1701 else
1702 FS_Printf(f, "in_bind %d %s \"%s\"\n", j, Key_KeynumToString (i, tinystr, TINYSTR_LEN), bindbuf);
1703 }
1704 }
1705 }
1706}
qbool Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset, qbool putquotes)
quotes a string so that it can be used as a command argument again; quoteset is a string that contain...
Definition cmd.c:1000
int FS_Printf(qfile_t *file, const char *format,...)
Definition fs.c:3273
const char * Key_KeynumToString(int keynum, char *tinystr, size_t tinystrlength)
Definition keys.c:1383
#define TINYSTR_LEN
Definition keys.h:46
float f

References Cmd_QuoteString(), f, FS_Printf(), i, int(), Key_KeynumToString(), keybindings, MAX_BINDMAPS, MAX_INPUTLINE, and TINYSTR_LEN.

Referenced by Host_SaveConfig().

Variable Documentation

◆ chat_buffer

◆ chat_bufferpos

◆ chat_mode

signed char chat_mode
extern

Definition at line 699 of file keys.c.

Referenced by Con_DrawInput(), Con_MsgCmdMode(), and Key_Message().

◆ key_consoleactive

◆ key_dest

◆ key_insert

qbool key_insert
extern

Definition at line 36 of file keys.c.

Referenced by Con_DrawInput(), Key_AddChar(), and Key_Parse_CommonKeys().

◆ key_line

◆ key_linepos

◆ keybindings