Closer and closer, next step is restoring some of the code I commented

out to get stuff compiling with the key stuff ripped out.
This commit is contained in:
Zephaniah E. Hull 2000-10-01 07:56:25 +00:00
parent ac3c6aabcc
commit 1f7e01d75c
5 changed files with 61 additions and 17 deletions

View file

@ -31,6 +31,7 @@
#define _KEYS_H
#include "quakeio.h"
#include "wtoi.h"
// these are the key numbers that should be passed to Key_Event
@ -168,6 +169,12 @@ typedef enum {
K_MWHEELDOWN
} keynum_t;
extern wic_t bindnames[];
extern wic_t keynames[];
int Key_StringToKeynum (char *);
char *Key_KeynumToString (int);
void Key_Event (int key, qboolean down);
void Key_Init (void);
void Key_WriteBindings (QFile *f);

View file

@ -26,6 +26,9 @@
$Id$
*/
#ifndef WTOI_H
#define WTOI_H
typedef struct
{
char *name;
@ -34,3 +37,5 @@ typedef struct
char *WIC_IntToStr (int, wic_t *);
int WIC_StrToInt (char *, wic_t *);
#endif // WTOI_H

View file

@ -650,7 +650,7 @@ Con_Insert_Char_f(void)
Con_Printf("usage: con_insert_char <char>\n");
return;
}
key = *Cmd_Argv(1);
key = Key_StringToKeynum(Cmd_Argv(1));
if (key < 32 || key > 127)
return; // non printable
@ -858,12 +858,20 @@ Con_Init
*/
void Con_Init (void)
{
int i;
con_debuglog = COM_CheckParm("-condebug");
con = &con_main;
con_linewidth = -1;
Con_CheckResize ();
for (i=0 ; i<32 ; i++) {
key_lines[i][0] = ']';
key_lines[i][1] = 0;
}
key_linepos = 1;
Con_Printf ("Console initialized.\n");
//
@ -887,8 +895,8 @@ void Con_Init (void)
Cmd_AddCommand ("con_delete_char", Con_Delete_Char_f);
Cmd_AddCommand ("con_cursor_left", Con_Cursor_Left_f);
Cmd_AddCommand ("con_cursor_right", Con_Cursor_Right_f);
Cmd_AddCommand ("con_curser_up", Con_Cursor_Up_f);
Cmd_AddCommand ("con_curser_down", Con_Cursor_Down_f);
Cmd_AddCommand ("con_cursor_up", Con_Cursor_Up_f);
Cmd_AddCommand ("con_cursor_down", Con_Cursor_Down_f);
Cmd_AddCommand ("con_page_up", Con_Page_Up_f);
Cmd_AddCommand ("con_page_down", Con_Page_Down_f);
Cmd_AddCommand ("con_beginningofbuffer", Con_BeginningOfBuffer_f);

View file

@ -66,7 +66,7 @@ qboolean keydown[256];
bind_states bind_state = BIND_CONSOLE;
static wic_t bindnames[] =
wic_t bindnames[] =
{
{ "GAME", BIND_GAME },
{ "CONSOLE", BIND_CONSOLE },
@ -74,7 +74,7 @@ static wic_t bindnames[] =
{ NULL, 0 }
};
static wic_t keynames[] =
wic_t keynames[] =
{
{"TAB", K_TAB},
{"ENTER", K_ENTER},
@ -192,6 +192,7 @@ static wic_t keynames[] =
{"MWHEELDOWN", K_MWHEELDOWN},
{"SEMICOLON", ';'}, // because a raw semicolon seperates commands
{"DOUBLEQUOTE", '"'},
{NULL,0}
};
@ -463,6 +464,17 @@ Key_Init ( void )
Cmd_AddCommand ("unbindall", Key_Unbindall_f);
}
char *
bind_get(int key, bind_states state)
{
if (bindings[state][key])
return bindings[state][key];
else if (bindings[BIND_ALL][key])
return bindings[BIND_ALL][key];
else
return NULL;
}
/*
===================
Key_Event
@ -474,14 +486,26 @@ Should NOT be called during an interrupt!
void
Key_Event ( int key, qboolean down )
{
char *kb;
char *kb = NULL;
char cmd[1024];
// Con_Printf ("%i : %i\n", key, down); //@@@
// Check to see if this is just a repeat.
if (down == keydown[key])
return;
keydown[key] = down;
if ((kb = bindings[bind_state][key]) || (kb = bindings[BIND_ALL][key])) {
if (keydown[K_SHIFT]) {
int shifted = keyshift[key];
if ((kb = bind_get(shifted, bind_state)))
key = shifted;
}
if (!kb)
kb = bind_get(key, bind_state);
if (kb) {
if (kb[0] == '+') { // button commands add keynum as a parm
snprintf (cmd, sizeof(cmd), "%s %i\n", kb, key);
if (!down)

View file

@ -646,7 +646,7 @@ void M_Options_Key (int k)
//=============================================================================
/* KEYS MENU */
static char *bindnames[][2] =
static char *menu_bindnames[][2] =
{
{"+attack", "attack"},
{"impulse 10", "change weapon"},
@ -668,7 +668,7 @@ static char *bindnames[][2] =
{"+movedown", "swim down"}
};
#define NUMCOMMANDS (sizeof(bindnames)/sizeof(bindnames[0]))
#define NUMCOMMANDS (sizeof(menu_bindnames)/sizeof(menu_bindnames[0]))
int keys_cursor;
int bind_grab;
@ -751,11 +751,11 @@ void M_Keys_Draw (void)
{
y = 48 + 8*i;
M_Print (16, y, bindnames[i][1]);
M_Print (16, y, menu_bindnames[i][1]);
l = strlen (bindnames[i][0]);
l = strlen (menu_bindnames[i][0]);
M_FindKeysForCommand (bindnames[i][0], keys);
M_FindKeysForCommand (menu_bindnames[i][0], keys);
if (keys[0] == -1)
{
@ -795,7 +795,7 @@ void M_Keys_Key (int k)
}
else if (k != '`')
{
snprintf (cmd, sizeof(cmd), "bind %s \"%s\"\n", Key_KeynumToString (k), bindnames[keys_cursor][0]);
snprintf (cmd, sizeof(cmd), "bind %s \"%s\"\n", Key_KeynumToString (k), menu_bindnames[keys_cursor][0]);
Cbuf_InsertText (cmd);
}
@ -826,17 +826,17 @@ void M_Keys_Key (int k)
break;
case K_ENTER: // go into bind mode
M_FindKeysForCommand (bindnames[keys_cursor][0], keys);
M_FindKeysForCommand (menu_bindnames[keys_cursor][0], keys);
S_LocalSound ("misc/menu2.wav");
if (keys[1] != -1)
M_UnbindCommand (bindnames[keys_cursor][0]);
M_UnbindCommand (menu_bindnames[keys_cursor][0]);
bind_grab = true;
break;
case K_BACKSPACE: // delete bindings
case K_DEL: // delete bindings
S_LocalSound ("misc/menu2.wav");
M_UnbindCommand (bindnames[keys_cursor][0]);
M_UnbindCommand (menu_bindnames[keys_cursor][0]);
break;
}
}