quakeforge/libs/client/old_keys.c
Bill Currie 3f299155a3 [client] Reimplement legacy bind and unbind commands
This allows id1/qw config files, and to a certain extent scripts, to
work with the new binding system. It does highlight just how limited the
original system was (many keys could not bound).

Mouse axis input does not work yet as that needs a little more work to
support +strafe and +mlook.
2021-11-25 13:36:02 +09:00

205 lines
5.1 KiB
C

/*
old_keys.c
translations from old to new keynames
Copyright (C) 2001 Bill Currie <bill@tanwiha.org>
Author: Bill Currie <bill@tanwiha.org>
Date: 2001/8/16
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#ifdef HAVE_STRING_H
# include <string.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#if defined(_WIN32) && defined(HAVE_MALLOC_H)
#include <malloc.h>
#endif
#include <ctype.h>
#include <stdlib.h>
#include "qfalloca.h"
#include "QF/hash.h"
#include "QF/qtypes.h"
#include "QF/sys.h"
#include "old_keys.h"
typedef struct {
const char *old_name;
const char *new_name;
} old_keyname_t;
old_keyname_t old_keynames[] = {
{"ESCAPE", "key button 0x01"},
{"1", "key button 0x02"},
{"2", "key button 0x03"},
{"3", "key button 0x04"},
{"4", "key button 0x05"},
{"5", "key button 0x06"},
{"6", "key button 0x07"},
{"7", "key button 0x08"},
{"8", "key button 0x09"},
{"9", "key button 0x0a"},
{"0", "key button 0x0b"},
{"-", "key button 0x0c"},
{"=", "key button 0x0d"},
{"BACKSPACE", "key button 0x0e"},
{"TAB", "key button 0x0f"},
{"Q", "key button 0x10"},
{"W", "key button 0x11"},
{"E", "key button 0x12"},
{"R", "key button 0x13"},
{"T", "key button 0x14"},
{"Y", "key button 0x15"},
{"U", "key button 0x16"},
{"I", "key button 0x17"},
{"O", "key button 0x18"},
{"P", "key button 0x19"},
{"[", "key button 0x1a"},
{"]", "key button 0x1b"},
{"ENTER", "key button 0x1c"},
{"CTRL", "key button 0x1d"},
{"A", "key button 0x1e"},
{"S", "key button 0x1f"},
{"D", "key button 0x20"},
{"F", "key button 0x21"},
{"G", "key button 0x22"},
{"H", "key button 0x23"},
{"J", "key button 0x24"},
{"K", "key button 0x25"},
{"L", "key button 0x26"},
{"SEMICOLON", "key button 0x27"},
{"'", "key button 0x28"},
{"`", "key button 0x29"},
{"SHIFT", "key button 0x2a"},
{"\\", "key button 0x2b"},
{"Z", "key button 0x2c"},
{"X", "key button 0x2d"},
{"C", "key button 0x2e"},
{"V", "key button 0x2f"},
{"B", "key button 0x30"},
{"N", "key button 0x31"},
{"M", "key button 0x32"},
{",", "key button 0x33"},
{".", "key button 0x34"},
{"/", "key button 0x35"},
// quake had no right shift
{"*", "key button 0x37"},
{"ALT", "key button 0x38"},
{"SPACE", "key button 0x39"},
//{"CAPSLOCK", "key button 0x3a"}, quake had no way of binding capslock
{"F1", "key button 0x3b"},
{"F2", "key button 0x3c"},
{"F3", "key button 0x3d"},
{"F4", "key button 0x3e"},
{"F5", "key button 0x3f"},
{"F6", "key button 0x40"},
{"F7", "key button 0x41"},
{"F8", "key button 0x42"},
{"F9", "key button 0x43"},
{"F10", "key button 0x44"},
{"PAUSE", "key button 0x45"},
{"SCRLCK", "key button 0x46"},
{"HOME", "key button 0x47"},
{"UPARROW", "key button 0x48"},
{"PGUP", "key button 0x49"},
//{"-", "key button 0x4a"}, quake had no way of binding kp -
{"LEFTARROW", "key button 0x4b"},
//{"5", "key button 0x4c"}, quake had no way of binding kp 5
{"RIGHTARROW", "key button 0x4d"},
{"+", "key button 0x4e"},
{"END", "key button 0x4f"},
{"DOWNARROW", "key button 0x50"},
{"PGDN", "key button 0x51"},
{"INS", "key button 0x52"},
{"DEL", "key button 0x53"},
// nothing 0x54
// nothing 0x55
// nothing 0x56
{"F11", "key button 0x57"},
{"F12", "key button 0x58"},
{";", "key button 0x27"},
{":", "key button 0x27"},
{"MOUSE1", "mouse button 0"},
{"MOUSE2", "mouse button 2"},
{"MOUSE3", "mouse button 1"},
{"MOUSE6", "mouse button 5"},
{"MOUSE7", "mouse button 6"},
{"MWHEELUP", "mouse button 3"},
{"MWHEELDOWN", "mouse button 4"},
{0, 0}
};
hashtab_t *old_key_table;
static const char *
ok_get_key (const void *_ok, void *unused)
{
old_keyname_t *ok = (old_keyname_t *)_ok;
return ok->old_name;
}
void
OK_Init (void)
{
old_keyname_t *ok;
old_key_table = Hash_NewTable (1021, ok_get_key, 0, 0, 0);
for (ok = old_keynames; ok->old_name; ok++)
Hash_Add (old_key_table, ok);
}
const char *
OK_TranslateKeyName (const char *name)
{
old_keyname_t *ok;
char *uname = alloca (strlen (name) + 1);
const char *s = name;
char *d = uname;
while ((*d++ = toupper ((byte) *s)))
s++;
ok = Hash_Find (old_key_table, uname);
if (!ok) {
Sys_Printf ("unknown old keyname: %s\n", uname);
return 0;
}
return ok->new_name;
}