diff options
author | tjw <tjw@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2007-03-22 22:03:00 +0000 |
---|---|---|
committer | tjw <tjw@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2007-03-22 22:03:00 +0000 |
commit | a3ece0ec269afc8ec40b7d1ffb987327ce4e2d9b (patch) | |
tree | ed19c244e2da56b8b033c001ff0f49f398b1f6e7 | |
parent | 413d880b8aedeeb4f0f4a4c27fa4b6a1a0d31300 (diff) | |
download | ioquake3-aero-a3ece0ec269afc8ec40b7d1ffb987327ce4e2d9b.tar.gz ioquake3-aero-a3ece0ec269afc8ec40b7d1ffb987327ce4e2d9b.zip |
* (bug 2741) replace K_LAST_KEY with MAX_KEYS. K_LAST_KEY is now defined
at 256 for mod compatability reasons. ioq3-only mods may
chose to use MAX_KEYS for checking binds in order to get full
key support, but at the cost of breaking compatability with
older clients.
* (bug 2741) remove some lingering 256-key hardcoding
* properly check bounds of keynum in Key_IsDown(), Key_SetBinding(),
and Key_GetBinding()
git-svn-id: svn://svn.icculus.org/quake3/trunk@1053 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r-- | code/client/cl_keys.c | 10 | ||||
-rw-r--r-- | code/client/keycodes.h | 6 | ||||
-rw-r--r-- | code/client/keys.h | 2 |
3 files changed, 10 insertions, 8 deletions
diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index acfe951..a518807 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -782,7 +782,7 @@ Key_IsDown =================== */ qboolean Key_IsDown( int keynum ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return qfalse; } @@ -902,7 +902,7 @@ Key_SetBinding =================== */ void Key_SetBinding( int keynum, const char *binding ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return; } @@ -926,7 +926,7 @@ Key_GetBinding =================== */ char *Key_GetBinding( int keynum ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return ""; } @@ -943,7 +943,7 @@ int Key_GetKey(const char *binding) { int i; if (binding) { - for (i=0 ; i<256 ; i++) { + for (i=0 ; i < MAX_KEYS ; i++) { if (keys[i].binding && Q_stricmp(binding, keys[i].binding) == 0) { return i; } @@ -986,7 +986,7 @@ void Key_Unbindall_f (void) { int i; - for (i=0 ; i<256 ; i++) + for (i=0 ; i < MAX_KEYS; i++) if (keys[i].binding) Key_SetBinding (i, ""); } diff --git a/code/client/keycodes.h b/code/client/keycodes.h index 3e61ffa..c6e6412 100644 --- a/code/client/keycodes.h +++ b/code/client/keycodes.h @@ -260,9 +260,13 @@ typedef enum { K_EURO, K_UNDO, - K_LAST_KEY // this had better be < MAX_KEYS! + MAX_KEYS } keyNum_t; +// MAX_KEYS replaces K_LAST_KEY, however some mods may have used K_LAST_KEY +// in detecting binds, so we leave it defined to the old hardcoded value +// of maxiumum keys to prevent mods from crashing older versions of the engine +#define K_LAST_KEY 256 // The menu code needs to get both key and char events, but // to avoid duplicating the paths, the char events are just diff --git a/code/client/keys.h b/code/client/keys.h index 00fc9db..851d367 100644 --- a/code/client/keys.h +++ b/code/client/keys.h @@ -21,8 +21,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "keycodes.h" -#define MAX_KEYS 384 - typedef struct { qboolean down; int repeats; // if > 1, it is autorepeating |