#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; }