mirror of
https://github.com/Q3Rally-Team/rallyunlimited-engine.git
synced 2024-11-29 15:32:00 +00:00
193 lines
4 KiB
C
193 lines
4 KiB
C
|
#include "../client/client.h"
|
||
|
#include "win_local.h"
|
||
|
|
||
|
struct hk_token
|
||
|
{
|
||
|
const unsigned int vk;
|
||
|
const char *name;
|
||
|
} ;
|
||
|
|
||
|
static struct hk_token tokens[] =
|
||
|
{
|
||
|
{ VK_BACK, "BS" },
|
||
|
{ VK_BACK, "BACK" },
|
||
|
{ VK_BACK, "BACKSPACE" },
|
||
|
{ VK_UP, "UP" },
|
||
|
{ VK_ESCAPE, "ESC" },
|
||
|
{ VK_ESCAPE, "ESCAPE" },
|
||
|
{ VK_TAB, "TAB" },
|
||
|
{ VK_CONTROL, "CTL" },
|
||
|
{ VK_CONTROL, "CTRL" },
|
||
|
{ VK_CONTROL, "CONTROL" },
|
||
|
{ VK_LCONTROL, "LCTL" },
|
||
|
{ VK_LCONTROL, "LCTRL" },
|
||
|
{ VK_LCONTROL, "LCONTROL" },
|
||
|
{ VK_RCONTROL, "RCTL" },
|
||
|
{ VK_RCONTROL, "RCTRL" },
|
||
|
{ VK_RCONTROL, "RCONTROL" },
|
||
|
{ VK_MENU, "ALT" },
|
||
|
{ VK_LMENU, "LALT" },
|
||
|
{ VK_RMENU, "RALT" },
|
||
|
{ VK_SHIFT, "SHIFT" },
|
||
|
{ VK_LSHIFT, "LSHIFT" },
|
||
|
{ VK_RSHIFT, "RSHIFT" },
|
||
|
{ VK_LWIN, "WIN" },
|
||
|
{ VK_END, "END" },
|
||
|
{ VK_INSERT, "INS" },
|
||
|
{ VK_INSERT, "INSERT" },
|
||
|
{ VK_DELETE, "DEL" },
|
||
|
{ VK_DELETE, "DELELE" },
|
||
|
{ VK_ADD, "ADD" },
|
||
|
{ VK_ADD, "PLUS" },
|
||
|
{ VK_SUBTRACT, "SUB" },
|
||
|
{ VK_SUBTRACT, "SUBTRACT" },
|
||
|
{ VK_SUBTRACT, "MINUS" },
|
||
|
{ VK_DIVIDE, "DIV" },
|
||
|
{ VK_DIVIDE, "DIVIDE" },
|
||
|
{ VK_MULTIPLY, "MUL" },
|
||
|
{ VK_MULTIPLY, "MULTIPLY" },
|
||
|
// { VK_MULTIPLY, "STAR" },
|
||
|
{ VK_NUMLOCK, "NUM" },
|
||
|
{ VK_NUMLOCK, "NUMLOCK" },
|
||
|
{ VK_NUMLOCK, "NUM_LOCK" },
|
||
|
{ VK_CLEAR, "DOT" },
|
||
|
{ VK_CLEAR, "CLEAR" },
|
||
|
{ VK_CAPITAL, "CAPS" },
|
||
|
{ VK_CAPITAL, "CAPITAL" },
|
||
|
{ VK_CAPITAL, "CAPSLOCK" },
|
||
|
{ VK_CAPITAL, "CAPS_LOCK" },
|
||
|
{ VK_HOME, "HOME" },
|
||
|
{ VK_APPS, "MENU" },
|
||
|
{ VK_PRIOR, "PGUP" },
|
||
|
{ VK_PRIOR, "PAGEUP" },
|
||
|
{ VK_PRIOR, "PAGE_UP" },
|
||
|
{ VK_NEXT, "PGDN" },
|
||
|
{ VK_NEXT, "PAGEDOWN" },
|
||
|
{ VK_NEXT, "PAGE_DOWN" },
|
||
|
{ VK_LEFT, "LEFT" },
|
||
|
{ VK_RIGHT, "RIGHT" },
|
||
|
{ VK_DOWN, "DOWN" },
|
||
|
{ VK_LWIN|HK_MOD_LWIN, "LWIN" },
|
||
|
{ VK_RWIN|HK_MOD_RWIN, "RWIN" },
|
||
|
{ VK_SPACE, "SPACE" },
|
||
|
{ VK_PAUSE, "PAUSE" },
|
||
|
// { VK_CANCEL, "BREAK" },
|
||
|
{ VK_RETURN, "ENTER" },
|
||
|
{ VK_RETURN, "RETURN" },
|
||
|
{ VK_PRINT, "PRINT" },
|
||
|
{ VK_PRINT, "SYSRQ" },
|
||
|
{ VK_SCROLL, "SCROLL" },
|
||
|
{ VK_OEM_MINUS, "-" },
|
||
|
{ VK_OEM_MINUS, "_" },
|
||
|
{ VK_OEM_PLUS, "=" },
|
||
|
{ VK_OEM_5, "\\" },
|
||
|
{ VK_OEM_5, "|" },
|
||
|
{ VK_OEM_4, "[" },
|
||
|
{ VK_OEM_4, "{" },
|
||
|
{ VK_OEM_6, "]" },
|
||
|
{ VK_OEM_6, "}" },
|
||
|
{ VK_OEM_1, ";" },
|
||
|
{ VK_OEM_1, ":" },
|
||
|
{ VK_OEM_7, "'" },
|
||
|
{ VK_OEM_7, "\"" },
|
||
|
{ VK_OEM_COMMA, "," },
|
||
|
{ VK_OEM_COMMA, "<" },
|
||
|
{ VK_OEM_PERIOD, "." },
|
||
|
{ VK_OEM_PERIOD, ">" },
|
||
|
{ VK_OEM_2, "?" },
|
||
|
{ VK_OEM_2, "/" },
|
||
|
{ VK_OEM_3, "`" },
|
||
|
{ VK_OEM_3, "~" },
|
||
|
{ '1', "!" },
|
||
|
{ '2', "@" },
|
||
|
{ '3', "#" },
|
||
|
{ '4', "$" },
|
||
|
{ '5', "%" },
|
||
|
{ '6', "^" },
|
||
|
{ '7', "&" },
|
||
|
{ '8', "*" },
|
||
|
{ '9', "(" },
|
||
|
{ '0', ")" },
|
||
|
{ VK_F1, "F1" },
|
||
|
{ VK_F2, "F2" },
|
||
|
{ VK_F3, "F3" },
|
||
|
{ VK_F4, "F4" },
|
||
|
{ VK_F5, "F5" },
|
||
|
{ VK_F6, "F6" },
|
||
|
{ VK_F7, "F7" },
|
||
|
{ VK_F8, "F8" },
|
||
|
{ VK_F9, "F9" },
|
||
|
{ VK_F10, "F10" },
|
||
|
{ VK_F11, "F11" },
|
||
|
{ VK_F12, "F12" },
|
||
|
{ VK_F13, "F13" },
|
||
|
{ VK_F14, "F14" },
|
||
|
{ VK_F15, "F15" },
|
||
|
{ VK_F16, "F16" },
|
||
|
{ VK_F17, "F17" },
|
||
|
{ VK_F18, "F18" },
|
||
|
{ VK_F19, "F19" },
|
||
|
{ VK_NUMPAD0, "KP_0" },
|
||
|
{ VK_NUMPAD1, "KP_1" },
|
||
|
{ VK_NUMPAD2, "KP_2" },
|
||
|
{ VK_NUMPAD3, "KP_3" },
|
||
|
{ VK_NUMPAD4, "KP_4" },
|
||
|
{ VK_NUMPAD5, "KP_5" },
|
||
|
{ VK_NUMPAD6, "KP_6" },
|
||
|
{ VK_NUMPAD7, "KP_7" },
|
||
|
{ VK_NUMPAD8, "KP_8" },
|
||
|
{ VK_NUMPAD9, "KP_9" },
|
||
|
{ 0, "" }
|
||
|
};
|
||
|
|
||
|
int Win32_GetKey( const char **s, char *buf, int buflen )
|
||
|
{
|
||
|
|
||
|
const char *base, *end;
|
||
|
int len, i;
|
||
|
|
||
|
base = *s;
|
||
|
|
||
|
// skip leading separators
|
||
|
while ( *base == ' ' || *base == '\t' || *base == '+' )
|
||
|
base++;
|
||
|
|
||
|
// empty token
|
||
|
if ( !*base )
|
||
|
return 0;
|
||
|
|
||
|
end = base;
|
||
|
|
||
|
while( *end != '\0' && *end != ' '&& *end != '\t' && *end != '+' ) end++;
|
||
|
|
||
|
len = end - base;
|
||
|
|
||
|
if ( !len )
|
||
|
return 0;
|
||
|
|
||
|
*s = base + len;
|
||
|
|
||
|
if ( len > buflen-1 )
|
||
|
len = buflen-1;
|
||
|
|
||
|
strncpy( buf, base, len );
|
||
|
buf[len]= '\0';
|
||
|
|
||
|
for ( i = 0; i < len ; i++ ) //uppercase
|
||
|
if ( buf[i] >= 'a' && buf[i] <= 'z' )
|
||
|
buf[i] += 'A'-'a';
|
||
|
|
||
|
if ( len == 1 ) {
|
||
|
if ( buf[0] >='A' && buf[0] <= 'Z' )
|
||
|
return buf[0];
|
||
|
if ( buf[0] >='0' && buf[0] <= '9' )
|
||
|
return buf[0];
|
||
|
}
|
||
|
|
||
|
for ( i = 0; i < ARRAY_LEN( tokens ) - 1; i++ )
|
||
|
if ( !strcmp( buf, tokens[i].name ) )
|
||
|
return tokens[i].vk;
|
||
|
|
||
|
return -1;
|
||
|
}
|