Esempio n. 1
0
/*
===============
IN_TranslateSDLToQ3Key
===============
*/
static const char *IN_TranslateSDLToQ3Key( SDL_keysym *keysym,
	keyNum_t *key, qboolean down )
{
	static unsigned char buf[ 2 ] = { '\0', '\0' };

	*buf = '\0';
	*key = 0;

	if( keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE )
	{
		// These happen to match the ASCII chars
		*key = (int)keysym->sym;
	}
	else
	{
		switch( keysym->sym )
		{
			case SDLK_PAGEUP:       *key = K_PGUP;          break;
			case SDLK_KP9:          *key = K_KP_PGUP;       break;
			case SDLK_PAGEDOWN:     *key = K_PGDN;          break;
			case SDLK_KP3:          *key = K_KP_PGDN;       break;
			case SDLK_KP7:          *key = K_KP_HOME;       break;
			case SDLK_HOME:         *key = K_HOME;          break;
			case SDLK_KP1:          *key = K_KP_END;        break;
			case SDLK_END:          *key = K_END;           break;
			case SDLK_KP4:          *key = K_KP_LEFTARROW;  break;
			case SDLK_LEFT:         *key = K_LEFTARROW;     break;
			case SDLK_KP6:          *key = K_KP_RIGHTARROW; break;
			case SDLK_RIGHT:        *key = K_RIGHTARROW;    break;
			case SDLK_KP2:          *key = K_KP_DOWNARROW;  break;
			case SDLK_DOWN:         *key = K_DOWNARROW;     break;
			case SDLK_KP8:          *key = K_KP_UPARROW;    break;
			case SDLK_UP:           *key = K_UPARROW;       break;
			case SDLK_ESCAPE:       *key = K_ESCAPE;        break;
			case SDLK_KP_ENTER:     *key = K_KP_ENTER;      break;
			case SDLK_RETURN:       *key = K_ENTER;         break;
			case SDLK_TAB:          *key = K_TAB;           break;
			case SDLK_F1:           *key = K_F1;            break;
			case SDLK_F2:           *key = K_F2;            break;
			case SDLK_F3:           *key = K_F3;            break;
			case SDLK_F4:           *key = K_F4;            break;
			case SDLK_F5:           *key = K_F5;            break;
			case SDLK_F6:           *key = K_F6;            break;
			case SDLK_F7:           *key = K_F7;            break;
			case SDLK_F8:           *key = K_F8;            break;
			case SDLK_F9:           *key = K_F9;            break;
			case SDLK_F10:          *key = K_F10;           break;
			case SDLK_F11:          *key = K_F11;           break;
			case SDLK_F12:          *key = K_F12;           break;
			case SDLK_F13:          *key = K_F13;           break;
			case SDLK_F14:          *key = K_F14;           break;
			case SDLK_F15:          *key = K_F15;           break;

			case SDLK_BACKSPACE:    *key = K_BACKSPACE;     break;
			case SDLK_KP_PERIOD:    *key = K_KP_DEL;        break;
			case SDLK_DELETE:       *key = K_DEL;           break;
			case SDLK_PAUSE:        *key = K_PAUSE;         break;

			case SDLK_LSHIFT:
			case SDLK_RSHIFT:       *key = K_SHIFT;         break;

			case SDLK_LCTRL:
			case SDLK_RCTRL:        *key = K_CTRL;          break;

			case SDLK_RMETA:
			case SDLK_LMETA:        *key = K_COMMAND;       break;

			case SDLK_RALT:
			case SDLK_LALT:         *key = K_ALT;           break;

			case SDLK_LSUPER:
			case SDLK_RSUPER:       *key = K_SUPER;         break;

			case SDLK_KP5:          *key = K_KP_5;          break;
			case SDLK_INSERT:       *key = K_INS;           break;
			case SDLK_KP0:          *key = K_KP_INS;        break;
			case SDLK_KP_MULTIPLY:  *key = K_KP_STAR;       break;
			case SDLK_KP_PLUS:      *key = K_KP_PLUS;       break;
			case SDLK_KP_MINUS:     *key = K_KP_MINUS;      break;
			case SDLK_KP_DIVIDE:    *key = K_KP_SLASH;      break;

			case SDLK_MODE:         *key = K_MODE;          break;
			case SDLK_COMPOSE:      *key = K_COMPOSE;       break;
			case SDLK_HELP:         *key = K_HELP;          break;
			case SDLK_PRINT:        *key = K_PRINT;         break;
			case SDLK_SYSREQ:       *key = K_SYSREQ;        break;
			case SDLK_BREAK:        *key = K_BREAK;         break;
			case SDLK_MENU:         *key = K_MENU;          break;
			case SDLK_POWER:        *key = K_POWER;         break;
			case SDLK_EURO:         *key = K_EURO;          break;
			case SDLK_UNDO:         *key = K_UNDO;          break;
			case SDLK_SCROLLOCK:    *key = K_SCROLLOCK;     break;
			case SDLK_NUMLOCK:      *key = K_KP_NUMLOCK;    break;
			case SDLK_CAPSLOCK:     *key = K_CAPSLOCK;      break;

			default:
				if( keysym->sym >= SDLK_WORLD_0 && keysym->sym <= SDLK_WORLD_95 )
					*key = ( keysym->sym - SDLK_WORLD_0 ) + K_WORLD_0;
				break;
		}
	}

	if( down && keysym->unicode && !( keysym->unicode & 0xFF00 ) )
	{
		unsigned char ch = (unsigned char)keysym->unicode & 0xFF;

		switch( ch )
		{
			case 127: // ASCII delete
				if( *key != K_DEL )
				{
					// ctrl-h
					*buf = CTRL('h');
					break;
				}
				// fallthrough

			default: *buf = ch; break;
		}
	}

	if( in_keyboardDebug->integer )
		IN_PrintKey( keysym, *key, down );

	// Keys that have ASCII names but produce no character are probably
	// dead keys -- ignore them
	if( down && strlen( Key_KeynumToString( *key ) ) == 1 &&
		keysym->unicode == 0 )
	{
		if( in_keyboardDebug->integer )
			Com_Printf( "  Ignored dead key '%c'\n", *key );

		*key = 0;
	}

	if( IN_IsConsoleKey( *key, *buf ) )
	{
		// Console keys can't be bound or generate characters
		*key = K_CONSOLE;
		*buf = '\0';
	}

	// Don't allow extended ASCII to generate characters
	if( *buf & 0x80 )
		*buf = '\0';

	return (char *)buf;
}
Esempio n. 2
0
/**
 * @brief translates SDL keyboard identifier to its Q3 counterpart
 */
static keyNum_t IN_TranslateSDLToQ3Key(SDL_Keysym *keysym, qboolean down)
{
	keyNum_t key = 0;

	if (keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE)
	{
		// These happen to match the ASCII chars
		key = (int)keysym->sym;
	}
	else
	{
/*
        // FIXME/SDL2 BUG/FEATUTE NUM keyboard state
        // https://forums.libsdl.org/viewtopic.php?p=43816&sid=b2ff6e037c85e6a80c6c506035668246
        // currently SDL2 only sets NUM keyboard status when key is pressed and expects NUM disabled at start
        // see SDL_SendKeyboardKey in SDL_Keyboard.c
        // notes:
        // - SDL_SCANCODE_NUMLOCKCLEAR does the job
        // - clarify APPLE clear key
        if (SDL_GetModState() & KMOD_NUM)
        {
            Com_Printf("NUM LED on\n");
        }
        else
        {
            Com_Printf("NUM LED off\n");
        }
*/

		switch (keysym->sym)
		{
		// keypad
		case SDLK_KP_0:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_INS;
			}
			break;
		case SDLK_KP_1:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_END;
			}
			break;
		case SDLK_KP_2:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_DOWNARROW;
			}
			break;
		case SDLK_KP_3:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_PGDN;
			}
			break;
		case SDLK_KP_4:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_LEFTARROW;
			}
			break;
		case SDLK_KP_5:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_5;
			}
			break;
		case SDLK_KP_6:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_RIGHTARROW;
			}
			break;
		case SDLK_KP_7:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_HOME;
			}
			break;
		case SDLK_KP_8:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_UPARROW;
			}
			break;
		case SDLK_KP_9:
			if (!(keysym->mod & KMOD_NUM))
			{
				key = K_KP_PGUP;
			}
			break;
		case SDLK_KP_ENTER:     key = K_KP_ENTER;
			break;
		case SDLK_KP_PERIOD:    key = K_KP_DEL;
			break;
		case SDLK_KP_MULTIPLY:  key = K_KP_STAR;
			break;
		case SDLK_KP_PLUS:      key = K_KP_PLUS;
			break;
		case SDLK_KP_MINUS:     key = K_KP_MINUS;
			break;
		case SDLK_KP_DIVIDE:    key = K_KP_SLASH;
			break;

		case SDLK_PAGEUP:       key = K_PGUP;
			break;
		case SDLK_PAGEDOWN:     key = K_PGDN;
			break;
		case SDLK_HOME:         key = K_HOME;
			break;
		case SDLK_END:          key = K_END;
			break;
		case SDLK_LEFT:         key = K_LEFTARROW;
			break;
		case SDLK_RIGHT:        key = K_RIGHTARROW;
			break;
		case SDLK_DOWN:         key = K_DOWNARROW;
			break;
		case SDLK_UP:           key = K_UPARROW;
			break;
		case SDLK_ESCAPE:       key = K_ESCAPE;
			break;
		case SDLK_RETURN:       key = K_ENTER;
			break;
		case SDLK_TAB:          key = K_TAB;
			break;
		case SDLK_F1:           key = K_F1;
			break;
		case SDLK_F2:           key = K_F2;
			break;
		case SDLK_F3:           key = K_F3;
			break;
		case SDLK_F4:           key = K_F4;
			break;
		case SDLK_F5:           key = K_F5;
			break;
		case SDLK_F6:           key = K_F6;
			break;
		case SDLK_F7:           key = K_F7;
			break;
		case SDLK_F8:           key = K_F8;
			break;
		case SDLK_F9:           key = K_F9;
			break;
		case SDLK_F10:          key = K_F10;
			break;
		case SDLK_F11:          key = K_F11;
			break;
		case SDLK_F12:          key = K_F12;
			break;
		case SDLK_F13:          key = K_F13;
			break;
		case SDLK_F14:          key = K_F14;
			break;
		case SDLK_F15:          key = K_F15;
			break;
		case SDLK_BACKSPACE:    key = K_BACKSPACE;
			break;

		case SDLK_DELETE:       key = K_DEL;
			break;
		case SDLK_PAUSE:        key = K_PAUSE;
			break; // FIXME: SDL 2.0 maps PAUSE to PAUSE as well as BREAK
		// (key = K_BREAK;         break;)
		case SDLK_LSHIFT:
		case SDLK_RSHIFT:       key = K_SHIFT;
			break;
		case SDLK_LCTRL:
		case SDLK_RCTRL:        key = K_CTRL;
			break;

#ifdef __APPLE__
		case SDLK_RGUI:
		case SDLK_LGUI:         key = K_COMMAND;
			break;
#else
		case SDLK_RGUI:
		case SDLK_LGUI:         key = K_SUPER;
			break;
#endif

		case SDLK_RALT:
		case SDLK_LALT:         key = K_ALT;
			break;

		case SDLK_INSERT:       key = K_INS;
			break;

		case SDLK_MODE:         key = K_MODE;
			break;
		case SDLK_APPLICATION:  key = K_COMPOSE;     // map to K_MENU ?
			break;
		case SDLK_HELP:         key = K_HELP;
			break;
		case SDLK_PRINTSCREEN:  key = K_PRINT;
			break;
		case SDLK_SYSREQ:       key = K_SYSREQ;
			break;
		case SDLK_MENU:         key = K_MENU;
			break;
		case SDLK_POWER:        key = K_POWER;
			break;
		case SDLK_CURRENCYUNIT: key = K_EURO;
			break;
		case SDLK_UNDO:         key = K_UNDO;
			break;
		case SDLK_SCROLLLOCK:   key = K_SCROLLOCK;
			break;
		case SDLK_NUMLOCKCLEAR: key = K_KP_NUMLOCK;
			break;
		case SDLK_CAPSLOCK:     key = K_CAPSLOCK;
			break;

		default:
			// physical key mapped to a non-ascii character
			switch (keysym->scancode)
			{
			case SDL_SCANCODE_1: key = K_1;
				break;
			case SDL_SCANCODE_2: key = K_2;
				break;
			case SDL_SCANCODE_3: key = K_3;
				break;
			case SDL_SCANCODE_4: key = K_4;
				break;
			case SDL_SCANCODE_5: key = K_5;
				break;
			case SDL_SCANCODE_6: key = K_6;
				break;
			case SDL_SCANCODE_7: key = K_7;
				break;
			case SDL_SCANCODE_8: key = K_8;
				break;
			case SDL_SCANCODE_9: key = K_9;
				break;
			case SDL_SCANCODE_0: key = K_0;
				break;

			case SDL_SCANCODE_MINUS: key = K_MINUS;
				break;
			case SDL_SCANCODE_EQUALS: key = K_EQUALS;
				break;
			case SDL_SCANCODE_LEFTBRACKET: key = K_LEFTBRACKET;
				break;
			case SDL_SCANCODE_RIGHTBRACKET: key = K_RIGHTBRACKET;
				break;
			case SDL_SCANCODE_BACKSLASH: key = K_BACKSLASH;
				break;
			case SDL_SCANCODE_SEMICOLON: key = K_SEMICOLON;
				break;
			case SDL_SCANCODE_APOSTROPHE: key = K_APOSTROPHE;
				break;
			case SDL_SCANCODE_GRAVE: key = K_GRAVE;              // NOTE: this is console toogle key!
				break;
			case SDL_SCANCODE_COMMA: key = K_COMMA;
				break;
			case SDL_SCANCODE_PERIOD: key = K_PERIOD;
				break;
			case SDL_SCANCODE_SLASH: key = K_SLASH;
				break;
			case SDL_SCANCODE_NONUSBACKSLASH: key = K_NONUSBACKSLASH;
				break;

			default:
				break;
			}
			break;
		}
	}

	if (in_keyboardDebug->integer)
	{
		IN_PrintKey(keysym, key, down);
	}

	if (IN_IsConsoleKey(key, 0))
	{
		// Console keys can't be bound or generate characters
		key = K_CONSOLE;
	}

	return key;
}
Esempio n. 3
0
/*
===============
IN_TranslateSDLToJKKey
===============
*/
static const char *IN_TranslateSDLToJKKey( SDL_Keysym *keysym, fakeAscii_t *key, qboolean down )
{
	static unsigned char buf[ 2 ] = { '\0', '\0' };

	*buf = '\0';
	*key = A_NULL;

	if( keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE )
	{
		// These happen to match the ASCII chars
		*key = (fakeAscii_t)keysym->sym;
	}
	else
	{
		switch( keysym->sym )
		{
			case SDLK_PAGEUP:       *key = A_PAGE_UP;       break;
			case SDLK_KP_9:         *key = A_KP_9;          break;
			case SDLK_PAGEDOWN:     *key = A_PAGE_DOWN;     break;
			case SDLK_KP_3:         *key = A_KP_3;          break;
			case SDLK_KP_7:         *key = A_KP_7;          break;
			case SDLK_HOME:         *key = A_HOME;          break;
			case SDLK_KP_1:         *key = A_KP_1;          break;
			case SDLK_END:          *key = A_END;           break;
			case SDLK_KP_4:         *key = A_KP_4;          break;
			case SDLK_LEFT:         *key = A_CURSOR_LEFT;   break;
			case SDLK_KP_6:         *key = A_KP_6;          break;
			case SDLK_RIGHT:        *key = A_CURSOR_RIGHT;  break;
			case SDLK_KP_2:         *key = A_KP_2;          break;
			case SDLK_DOWN:         *key = A_CURSOR_DOWN;   break;
			case SDLK_KP_8:         *key = A_KP_8;          break;
			case SDLK_UP:           *key = A_CURSOR_UP;     break;
			case SDLK_ESCAPE:       *key = A_ESCAPE;        break;
			case SDLK_KP_ENTER:     *key = A_KP_ENTER;      break;
			case SDLK_RETURN:       *key = A_ENTER;         break;
			case SDLK_TAB:          *key = A_TAB;           break;
			case SDLK_F1:           *key = A_F1;            break;
			case SDLK_F2:           *key = A_F2;            break;
			case SDLK_F3:           *key = A_F3;            break;
			case SDLK_F4:           *key = A_F4;            break;
			case SDLK_F5:           *key = A_F5;            break;
			case SDLK_F6:           *key = A_F6;            break;
			case SDLK_F7:           *key = A_F7;            break;
			case SDLK_F8:           *key = A_F8;            break;
			case SDLK_F9:           *key = A_F9;            break;
			case SDLK_F10:          *key = A_F10;           break;
			case SDLK_F11:          *key = A_F11;           break;
			case SDLK_F12:          *key = A_F12;           break;

			case SDLK_BACKSPACE:    *key = A_BACKSPACE;     break;
			case SDLK_KP_PERIOD:    *key = A_KP_PERIOD;     break;
			case SDLK_DELETE:       *key = A_DELETE;        break;
			case SDLK_PAUSE:        *key = A_PAUSE;         break;

			case SDLK_LSHIFT:
			case SDLK_RSHIFT:       *key = A_SHIFT;         break;

			case SDLK_LCTRL:
			case SDLK_RCTRL:        *key = A_CTRL;          break;

			case SDLK_RALT:
			case SDLK_LALT:         *key = A_ALT;           break;

			case SDLK_KP_5:         *key = A_KP_5;          break;
			case SDLK_INSERT:       *key = A_INSERT;        break;
			case SDLK_KP_0:         *key = A_KP_0;          break;
			case SDLK_KP_MULTIPLY:  *key = A_STAR;          break;
			case SDLK_KP_PLUS:      *key = A_KP_PLUS;       break;
			case SDLK_KP_MINUS:     *key = A_KP_MINUS;      break;
			case SDLK_KP_DIVIDE:    *key = A_FORWARD_SLASH; break;

			case SDLK_SCROLLLOCK:   *key = A_SCROLLLOCK;    break;
			case SDLK_NUMLOCKCLEAR: *key = A_NUMLOCK;       break;
			case SDLK_CAPSLOCK:     *key = A_CAPSLOCK;      break;

			default:
				break;
		}
	}

	if( in_keyboardDebug->integer )
		IN_PrintKey( keysym, *key, down );

	if( *key == A_BACKSPACE )
		*buf = '\b'; // Full-hack ahead!

	if( IN_IsConsoleKey( *key, 0 ) )
	{
		// Console keys can't be bound or generate characters
		*key = A_CONSOLE;
		*buf = '\0';
	}

	return (const char *)buf;
}
Esempio n. 4
0
/*
===============
IN_TranslateSDLToQ3Key
===============
*/
static keyNum_t IN_TranslateSDLToQ3Key( SDL_Keysym *keysym, qboolean down )
{
    keyNum_t key = 0;

    if( keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE )
    {
        // These happen to match the ASCII chars
        key = (int)keysym->sym;
    }
    else
    {
        switch( keysym->sym )
        {
        case SDLK_PAGEUP:
            key = K_PGUP;
            break;
        case SDLK_KP_9:
            key = K_KP_PGUP;
            break;
        case SDLK_PAGEDOWN:
            key = K_PGDN;
            break;
        case SDLK_KP_3:
            key = K_KP_PGDN;
            break;
        case SDLK_KP_7:
            key = K_KP_HOME;
            break;
        case SDLK_HOME:
            key = K_HOME;
            break;
        case SDLK_KP_1:
            key = K_KP_END;
            break;
        case SDLK_END:
            key = K_END;
            break;
        case SDLK_KP_4:
            key = K_KP_LEFTARROW;
            break;
        case SDLK_LEFT:
            key = K_LEFTARROW;
            break;
        case SDLK_KP_6:
            key = K_KP_RIGHTARROW;
            break;
        case SDLK_RIGHT:
            key = K_RIGHTARROW;
            break;
        case SDLK_KP_2:
            key = K_KP_DOWNARROW;
            break;
        case SDLK_DOWN:
            key = K_DOWNARROW;
            break;
        case SDLK_KP_8:
            key = K_KP_UPARROW;
            break;
        case SDLK_UP:
            key = K_UPARROW;
            break;
        case SDLK_ESCAPE:
            key = K_ESCAPE;
            break;
        case SDLK_KP_ENTER:
            key = K_KP_ENTER;
            break;
        case SDLK_RETURN:
            key = K_ENTER;
            break;
        case SDLK_TAB:
            key = K_TAB;
            break;
        case SDLK_F1:
            key = K_F1;
            break;
        case SDLK_F2:
            key = K_F2;
            break;
        case SDLK_F3:
            key = K_F3;
            break;
        case SDLK_F4:
            key = K_F4;
            break;
        case SDLK_F5:
            key = K_F5;
            break;
        case SDLK_F6:
            key = K_F6;
            break;
        case SDLK_F7:
            key = K_F7;
            break;
        case SDLK_F8:
            key = K_F8;
            break;
        case SDLK_F9:
            key = K_F9;
            break;
        case SDLK_F10:
            key = K_F10;
            break;
        case SDLK_F11:
            key = K_F11;
            break;
        case SDLK_F12:
            key = K_F12;
            break;
        case SDLK_F13:
            key = K_F13;
            break;
        case SDLK_F14:
            key = K_F14;
            break;
        case SDLK_F15:
            key = K_F15;
            break;

        case SDLK_BACKSPACE:
            key = K_BACKSPACE;
            break;
        case SDLK_KP_PERIOD:
            key = K_KP_DEL;
            break;
        case SDLK_DELETE:
            key = K_DEL;
            break;
        case SDLK_PAUSE:
            key = K_PAUSE;
            break;

        case SDLK_LSHIFT:
        case SDLK_RSHIFT:
            key = K_SHIFT;
            break;

        case SDLK_LCTRL:
        case SDLK_RCTRL:
            key = K_CTRL;
            break;

#ifdef MACOS_X
        case SDLK_RGUI:
        case SDLK_LGUI:
            key = K_COMMAND;
            break;
#else
        case SDLK_RGUI:
        case SDLK_LGUI:
            key = K_SUPER;
            break;
#endif

        case SDLK_RALT:
        case SDLK_LALT:
            key = K_ALT;
            break;

        case SDLK_KP_5:
            key = K_KP_5;
            break;
        case SDLK_INSERT:
            key = K_INS;
            break;
        case SDLK_KP_0:
            key = K_KP_INS;
            break;
        case SDLK_KP_MULTIPLY:
            key = K_KP_STAR;
            break;
        case SDLK_KP_PLUS:
            key = K_KP_PLUS;
            break;
        case SDLK_KP_MINUS:
            key = K_KP_MINUS;
            break;
        case SDLK_KP_DIVIDE:
            key = K_KP_SLASH;
            break;

        case SDLK_MODE:
            key = K_MODE;
            break;
        case SDLK_HELP:
            key = K_HELP;
            break;
        case SDLK_PRINTSCREEN:
            key = K_PRINT;
            break;
        case SDLK_SYSREQ:
            key = K_SYSREQ;
            break;
        case SDLK_MENU:
            key = K_MENU;
            break;
        case SDLK_APPLICATION:
            key = K_MENU;
            break;
        case SDLK_POWER:
            key = K_POWER;
            break;
        case SDLK_UNDO:
            key = K_UNDO;
            break;
        case SDLK_SCROLLLOCK:
            key = K_SCROLLOCK;
            break;
        case SDLK_NUMLOCKCLEAR:
            key = K_KP_NUMLOCK;
            break;
        case SDLK_CAPSLOCK:
            key = K_CAPSLOCK;
            break;

        default:
            break;
        }
    }

    if( in_keyboardDebug->integer )
        IN_PrintKey( keysym, key, down );

    if( IN_IsConsoleKey( key, 0 ) )
    {
        // Console keys can't be bound or generate characters
        key = K_CONSOLE;
    }

    return key;
}
Esempio n. 5
0
/*
===============
IN_TranslateSDLToJKKey
===============
*/
static fakeAscii_t IN_TranslateSDLToJKKey( SDL_Keysym *keysym, qboolean down ) {
	fakeAscii_t key = A_NULL;

	if( keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE )
	{
		// These happen to match the ASCII chars
		key = (fakeAscii_t)keysym->sym;
	}
	else
	{
		IN_TranslateNumpad( keysym, &key );

		switch( keysym->sym )
		{
			case SDLK_PAGEUP:       key = A_PAGE_UP;       break;
			case SDLK_KP_9:         key = A_KP_9;          break;
			case SDLK_PAGEDOWN:     key = A_PAGE_DOWN;     break;
			case SDLK_KP_3:         key = A_KP_3;          break;
			case SDLK_KP_7:         key = A_KP_7;          break;
			case SDLK_HOME:         key = A_HOME;          break;
			case SDLK_KP_1:         key = A_KP_1;          break;
			case SDLK_END:          key = A_END;           break;
			case SDLK_KP_4:         key = A_KP_4;          break;
			case SDLK_LEFT:         key = A_CURSOR_LEFT;   break;
			case SDLK_KP_6:         key = A_KP_6;          break;
			case SDLK_RIGHT:        key = A_CURSOR_RIGHT;  break;
			case SDLK_KP_2:         key = A_KP_2;          break;
			case SDLK_DOWN:         key = A_CURSOR_DOWN;   break;
			case SDLK_KP_8:         key = A_KP_8;          break;
			case SDLK_UP:           key = A_CURSOR_UP;     break;
			case SDLK_ESCAPE:       key = A_ESCAPE;        break;
			case SDLK_KP_ENTER:     key = A_KP_ENTER;      break;
			case SDLK_RETURN:       key = A_ENTER;         break;
			case SDLK_TAB:          key = A_TAB;           break;
			case SDLK_F1:           key = A_F1;            break;
			case SDLK_F2:           key = A_F2;            break;
			case SDLK_F3:           key = A_F3;            break;
			case SDLK_F4:           key = A_F4;            break;
			case SDLK_F5:           key = A_F5;            break;
			case SDLK_F6:           key = A_F6;            break;
			case SDLK_F7:           key = A_F7;            break;
			case SDLK_F8:           key = A_F8;            break;
			case SDLK_F9:           key = A_F9;            break;
			case SDLK_F10:          key = A_F10;           break;
			case SDLK_F11:          key = A_F11;           break;
			case SDLK_F12:          key = A_F12;           break;

			case SDLK_BACKSPACE:    key = A_BACKSPACE;     break;
			case SDLK_KP_PERIOD:    key = A_KP_PERIOD;     break;
			case SDLK_DELETE:       key = A_DELETE;        break;
			case SDLK_PAUSE:        key = A_PAUSE;         break;

			case SDLK_LSHIFT:
			case SDLK_RSHIFT:       key = A_SHIFT;         break;

			case SDLK_LCTRL:
			case SDLK_RCTRL:        key = A_CTRL;          break;

			case SDLK_RALT:
			case SDLK_LALT:         key = A_ALT;           break;

			case SDLK_KP_5:         key = A_KP_5;          break;
			case SDLK_INSERT:       key = A_INSERT;        break;
			case SDLK_KP_0:         key = A_KP_0;          break;
			case SDLK_KP_MULTIPLY:  key = A_STAR;          break;
			case SDLK_KP_PLUS:      key = A_KP_PLUS;       break;
			case SDLK_KP_MINUS:     key = A_KP_MINUS;      break;
			case SDLK_KP_DIVIDE:    key = A_FORWARD_SLASH; break;

			case SDLK_SCROLLLOCK:   key = A_SCROLLLOCK;    break;
			case SDLK_NUMLOCKCLEAR: key = A_NUMLOCK;       break;
			case SDLK_CAPSLOCK:     key = A_CAPSLOCK;      break;

			case L'\u00D7':			key = A_MULTIPLY;		break;
			case L'\u00E0':			key = A_LOW_AGRAVE;		break;
			case L'\u00E1':			key = A_LOW_AACUTE;		break;
			case L'\u00E2':			key = A_LOW_ACIRCUMFLEX; break;
			case L'\u00E3':			key = A_LOW_ATILDE;		break;
			case L'\u00E4':			key = A_LOW_ADIERESIS;	break;
			case L'\u00E5':			key = A_LOW_ARING;		break;
			case L'\u00E6':			key = A_LOW_AE;			break;
			case L'\u00E7':			key = A_LOW_CCEDILLA;	break;
			case L'\u00E8':			key = A_LOW_EGRAVE;		break;
			case L'\u00E9':			key = A_LOW_EACUTE;		break;
			case L'\u00EA':			key = A_LOW_ECIRCUMFLEX; break;
			case L'\u00EB':			key = A_LOW_EDIERESIS;	break;
			case L'\u00EC':			key = A_LOW_IGRAVE;		break;
			case L'\u00ED':			key = A_LOW_IACUTE;		break;
			case L'\u00EE':			key = A_LOW_ICIRCUMFLEX; break;
			case L'\u00EF':			key = A_LOW_IDIERESIS;	break;
			case L'\u00F0':			key = A_LOW_ETH;		break;
			case L'\u00F1':			key = A_LOW_NTILDE;		break;
			case L'\u00F2':			key = A_LOW_OGRAVE;		break;
			case L'\u00F3':			key = A_LOW_OACUTE;		break;
			case L'\u00F4':			key = A_LOW_OCIRCUMFLEX; break;
			case L'\u00F5':			key = A_LOW_OTILDE;		break;
			case L'\u00F6':			key = A_LOW_ODIERESIS;	break;
			case L'\u00F7':			key = A_DIVIDE;			break;
			case L'\u00F8':			key = A_LOW_OSLASH;		break;
			case L'\u00F9':			key = A_LOW_UGRAVE;		break;
			case L'\u00FA':			key = A_LOW_UACUTE;		break;
			case L'\u00FB':			key = A_LOW_UCIRCUMFLEX; break;
			case L'\u00FC':			key = A_LOW_UDIERESIS;	break;
			case L'\u00FD':			key = A_LOW_YACUTE;		break;
			case L'\u00FE':			key = A_LOW_THORN;		break;
			case L'\u00FF':			key = A_LOW_YDIERESIS;	break;

			default:
				break;
		}
	}

	if( in_keyboardDebug->integer )
		IN_PrintKey( keysym, key, down );

	if( IN_IsConsoleKey( key, 0 ) )
	{
		// Console keys can't be bound or generate characters
		key = A_CONSOLE;
	}

	return key;
}
Esempio n. 6
0
/*
===============
IN_TranslateSDLToQ3Key
===============
*/
static fakeAscii_t IN_TranslateSDLToJKKey( SDL_Keysym *keysym, qboolean down )
{
	fakeAscii_t key = A_NULL;

	if( keysym->sym >= SDLK_BACKSPACE && keysym->sym < SDLK_DELETE )
	{
		// These happen to match the ASCII chars
		key = (fakeAscii_t)keysym->sym;
	}
	else
	{
		switch( keysym->sym )
		{
			case SDLK_PAGEUP:       key = A_PAGE_UP;          break;
			case SDLK_KP_9:         key = A_KP_9;       break;
			case SDLK_PAGEDOWN:     key = A_PAGE_DOWN;          break;
			case SDLK_KP_3:         key = A_KP_3;       break;
			case SDLK_KP_7:         key = A_KP_7;       break;
			case SDLK_HOME:         key = A_HOME;          break;
			case SDLK_KP_1:         key = A_KP_1;        break;
			case SDLK_END:          key = A_END;           break;
			case SDLK_KP_4:         key = A_KP_4;  break;
			case SDLK_LEFT:         key = A_CURSOR_LEFT;     break;
			case SDLK_KP_6:         key = A_KP_6;          break;
			case SDLK_RIGHT:        key = A_CURSOR_RIGHT;  break;
			case SDLK_KP_2:         key = A_KP_2;  		   break;
			case SDLK_DOWN:         key = A_CURSOR_DOWN;   break;
			case SDLK_KP_8:         key = A_KP_8;    	   break;
			case SDLK_UP:           key = A_CURSOR_UP;     break;
			case SDLK_ESCAPE:       key = A_ESCAPE;        break;
			case SDLK_KP_ENTER:     key = A_KP_ENTER;      break;
			case SDLK_RETURN:       key = A_ENTER;         break;
			case SDLK_TAB:          key = A_TAB;           break;
			case SDLK_F1:           key = A_F1;            break;
			case SDLK_F2:           key = A_F2;            break;
			case SDLK_F3:           key = A_F3;            break;
			case SDLK_F4:           key = A_F4;            break;
			case SDLK_F5:           key = A_F5;            break;
			case SDLK_F6:           key = A_F6;            break;
			case SDLK_F7:           key = A_F7;            break;
			case SDLK_F8:           key = A_F8;            break;
			case SDLK_F9:           key = A_F9;            break;
			case SDLK_F10:          key = A_F10;           break;
			case SDLK_F11:          key = A_F11;           break;
			case SDLK_F12:          key = A_F12;           break;
			/*case SDLK_F13:          key = A_F13;           break;
			case SDLK_F14:          key = A_F14;           break;
			case SDLK_F15:          key = A_F15;           break;*/

			case SDLK_BACKSPACE:    key = A_BACKSPACE;     break;
			case SDLK_KP_PERIOD:    key = A_KP_PERIOD;        break;
			case SDLK_DELETE:       key = A_DELETE;           break;
			case SDLK_PAUSE:        key = A_PAUSE;         break;

			case SDLK_LSHIFT:
			case SDLK_RSHIFT:       key = A_SHIFT;         break;

			case SDLK_LCTRL:
			case SDLK_RCTRL:        key = A_CTRL;          break;

			/*case SDLK_RGUI:
			case SDLK_LGUI:         key = A_COMMAND;       break;*/

			case SDLK_RALT:
			case SDLK_LALT:         key = A_ALT;           break;

			case SDLK_KP_5:         key = A_KP_5;          break;
			case SDLK_INSERT:       key = A_INSERT;           break;
			case SDLK_KP_0:         key = A_KP_0;        break;
			case SDLK_KP_MULTIPLY:  key = A_STAR;       break;
			case SDLK_KP_PLUS:      key = A_KP_PLUS;       break;
			case SDLK_KP_MINUS:     key = A_KP_MINUS;      break;
			case SDLK_KP_DIVIDE:    key = A_FORWARD_SLASH;      break;

			/*case SDLK_MODE:         key = A_MODE;          break;
			case SDLK_HELP:         key = A_HELP;          break;
			case SDLK_PRINTSCREEN:  key = A_PRINT;         break;
			case SDLK_SYSREQ:       key = A_SYSREQ;        break;
			case SDLK_MENU:         key = A_MENU;          break;
			case SDLK_POWER:        key = A_POWER;         break;
			case SDLK_UNDO:         key = A_UNDO;          break;*/
			case SDLK_SCROLLLOCK:   key = A_SCROLLLOCK;     break;
			case SDLK_CAPSLOCK:     key = A_CAPSLOCK;      break;

			default:
				break;
		}
	}

	if( in_keyboardDebug->integer )
		IN_PrintKey( keysym, key, down );

	if( IN_IsConsoleKey( key, 0 ) )
	{
		// Console keys can't be bound or generate characters
		key = A_CONSOLE;
	}

	return key;
}
Esempio n. 7
0
/*
 * @brief translates SDL keyboard identifier to its Q3 counterpart
 */
static const char *IN_TranslateSDLToQ3Key(SDL_Keysym *keysym,
                                          keyNum_t *key, qboolean down)
{
	static unsigned char buf[2] = { '\0', '\0' };

	if (keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE)
	{
		// These happen to match the ASCII chars
		*key = (int)keysym->sym;
		// SDL2 depreciates unicode... no shifted chars
		buf[0] = keysym->sym;
		if ( keysym->mod & (KMOD_RSHIFT | KMOD_LSHIFT) )
		{
			if (keysym->sym >= 'a' && 'z' >= keysym->sym)
				buf[0] -= 0x20;
			else if (keysym->sym = 0x2d)
				buf[0] = 0x5f; // "-" to "_"
		}
	}
	else
	{
		buf[0] = 0;
		switch (keysym->sym)
		{
		case SDLK_PAGEUP:       *key = K_PGUP;          break;
		case SDLK_KP_9:          *key = K_KP_PGUP;       break;
		case SDLK_PAGEDOWN:     *key = K_PGDN;          break;
		case SDLK_KP_3:          *key = K_KP_PGDN;       break;
		case SDLK_KP_7:          *key = K_KP_HOME;       break;
		case SDLK_HOME:         *key = K_HOME;          break;
		case SDLK_KP_1:          *key = K_KP_END;        break;
		case SDLK_END:          *key = K_END;           break;
		case SDLK_KP_4:          *key = K_KP_LEFTARROW;  break;
		case SDLK_LEFT:         *key = K_LEFTARROW;     break;
		case SDLK_KP_6:          *key = K_KP_RIGHTARROW; break;
		case SDLK_RIGHT:        *key = K_RIGHTARROW;    break;
		case SDLK_KP_2:          *key = K_KP_DOWNARROW;  break;
		case SDLK_DOWN:         *key = K_DOWNARROW;     break;
		case SDLK_KP_8:          *key = K_KP_UPARROW;    break;
		case SDLK_UP:           *key = K_UPARROW;       break;
		case SDLK_ESCAPE:       *key = K_ESCAPE;        break;
		case SDLK_KP_ENTER:     *key = K_KP_ENTER;      break;
		case SDLK_RETURN:       *key = K_ENTER;         break;
		case SDLK_TAB:          *key = K_TAB;           break;
		case SDLK_F1:           *key = K_F1;            break;
		case SDLK_F2:           *key = K_F2;            break;
		case SDLK_F3:           *key = K_F3;            break;
		case SDLK_F4:           *key = K_F4;            break;
		case SDLK_F5:           *key = K_F5;            break;
		case SDLK_F6:           *key = K_F6;            break;
		case SDLK_F7:           *key = K_F7;            break;
		case SDLK_F8:           *key = K_F8;            break;
		case SDLK_F9:           *key = K_F9;            break;
		case SDLK_F10:          *key = K_F10;           break;
		case SDLK_F11:          *key = K_F11;           break;
		case SDLK_F12:          *key = K_F12;           break;
		case SDLK_F13:          *key = K_F13;           break;
		case SDLK_F14:          *key = K_F14;           break;
		case SDLK_F15:          *key = K_F15;           break;

		case SDLK_BACKSPACE:
			*key = K_BACKSPACE;
			buf[0] = 8;
			break;
		case SDLK_KP_PERIOD:    *key = K_KP_DEL;        break;
		case SDLK_DELETE:       *key = K_DEL;           break;
		case SDLK_PAUSE:        *key = K_PAUSE;         break;

		case SDLK_LSHIFT:
		case SDLK_RSHIFT:       *key = K_SHIFT;         break;

		case SDLK_LCTRL:
		case SDLK_RCTRL:        *key = K_CTRL;          break;

		case SDLK_RALT:
		case SDLK_LALT:         *key = K_ALT;           break;

		case SDLK_KP_5:          *key = K_KP_5;          break;
		case SDLK_INSERT:       *key = K_INS;           break;
		case SDLK_KP_0:          *key = K_KP_INS;        break;
		case SDLK_KP_MULTIPLY:  *key = K_KP_STAR;       break;
		case SDLK_KP_PLUS:      *key = K_KP_PLUS;       break;
		case SDLK_KP_MINUS:     *key = K_KP_MINUS;      break;
		case SDLK_KP_DIVIDE:    *key = K_KP_SLASH;      break;

		case SDLK_MODE:         *key = K_MODE;          break;
		case SDLK_SYSREQ:       *key = K_SYSREQ;        break;
		case SDLK_MENU:         *key = K_MENU;          break;
		case SDLK_UNDO:         *key = K_UNDO;          break;
		case SDLK_CAPSLOCK:     *key = K_CAPSLOCK;      break;

		default:
			*key = 0;
			break;
		}
	}

	if (in_keyboardDebug->integer)
	{
		IN_PrintKey(keysym, *key, down);
	}

	return (char *)buf;
}
Esempio n. 8
0
/**
 * @brief Handle input events like keys presses and joystick movement as well
 * as window events
 * @sa CL_Frame
 * @sa IN_Parse
 * @sa IN_JoystickMove
 */
void IN_Frame (void)
{
	int mouse_buttonstate;
	unsigned short unicode;
	unsigned int key;
	SDL_Event event;

	IN_Parse();

	IN_JoystickMove();

	if (vid_grabmouse->modified) {
		vid_grabmouse->modified = qfalse;

		if (!vid_grabmouse->integer) {
			/* ungrab the pointer */
			Com_Printf("Switch grab input off\n");
			SDL_WM_GrabInput(SDL_GRAB_OFF);
		/* don't allow grabbing the input in fullscreen mode */
		} else if (!vid_fullscreen->integer) {
			/* grab the pointer */
			Com_Printf("Switch grab input on\n");
			SDL_WM_GrabInput(SDL_GRAB_ON);
		} else {
			Com_Printf("No input grabbing in fullscreen mode\n");
			Cvar_SetValue("vid_grabmouse", 0);
		}
	}

	oldMousePosX = mousePosX;
	oldMousePosY = mousePosY;

	while (SDL_PollEvent(&event)) {
		switch (event.type) {
		case SDL_MOUSEBUTTONDOWN:
		case SDL_MOUSEBUTTONUP:
			switch (event.button.button) {
			case SDL_BUTTON_LEFT:
				mouse_buttonstate = K_MOUSE1;
				break;
			case SDL_BUTTON_MIDDLE:
				mouse_buttonstate = K_MOUSE3;
				break;
			case SDL_BUTTON_RIGHT:
				mouse_buttonstate = K_MOUSE2;
				break;
			case SDL_BUTTON_WHEELUP:
				mouse_buttonstate = K_MWHEELUP;
				break;
			case SDL_BUTTON_WHEELDOWN:
				mouse_buttonstate = K_MWHEELDOWN;
				break;
			case 6:
				mouse_buttonstate = K_MOUSE4;
				break;
			case 7:
				mouse_buttonstate = K_MOUSE5;
				break;
			default:
				mouse_buttonstate = K_AUX1 + (event.button.button - 8) % 16;
				break;
			}
			IN_EventEnqueue(mouse_buttonstate, 0, (event.type == SDL_MOUSEBUTTONDOWN));
			break;

		case SDL_MOUSEMOTION:
			SDL_GetMouseState(&mousePosX, &mousePosY);
			mousePosX /= viddef.rx;
			mousePosY /= viddef.ry;
			break;

		case SDL_KEYDOWN:
			IN_PrintKey(&event, 1);
#ifndef _WIN32
			if ((event.key.keysym.mod & KMOD_ALT) && event.key.keysym.sym == SDLK_RETURN) {
				SDL_Surface *surface = SDL_GetVideoSurface();
				if (!SDL_WM_ToggleFullScreen(surface)) {
					int flags = surface->flags ^= SDL_FULLSCREEN;
					SDL_SetVideoMode(surface->w, surface->h, 0, flags);
				}

				if (surface->flags & SDL_FULLSCREEN) {
					Cvar_SetValue("vid_fullscreen", 1);
					/* make sure, that input grab is deactivated in fullscreen mode */
					Cvar_SetValue("vid_grabmouse", 0);
				} else {
					Cvar_SetValue("vid_fullscreen", 0);
				}
				vid_fullscreen->modified = qfalse; /* we just changed it with SDL. */
				break; /* ignore this key */
			}
#endif

			if ((event.key.keysym.mod & KMOD_CTRL) && event.key.keysym.sym == SDLK_g) {
				SDL_GrabMode gm = SDL_WM_GrabInput(SDL_GRAB_QUERY);
				Cvar_SetValue("vid_grabmouse", (gm == SDL_GRAB_ON) ? 0 : 1);
				break; /* ignore this key */
			}

			/* console key is hardcoded, so the user can never unbind it */
			if ((event.key.keysym.mod & KMOD_SHIFT) && event.key.keysym.sym == SDLK_ESCAPE) {
				Con_ToggleConsole_f();
				break;
			}

			IN_TranslateKey(&event.key.keysym, &key, &unicode);
			IN_EventEnqueue(key, unicode, qtrue);
			break;

		case SDL_VIDEOEXPOSE:
			break;

		case SDL_KEYUP:
			IN_PrintKey(&event, 0);
			IN_TranslateKey(&event.key.keysym, &key, &unicode);
			IN_EventEnqueue(key, unicode, qfalse);
			break;

		case SDL_ACTIVEEVENT:
			/* make sure menu no more capture input when the game window lose the focus */
			if (event.active.state == SDL_APPINPUTFOCUS && event.active.gain == 0)
				UI_ReleaseInput();
			break;

		case SDL_QUIT:
			Cmd_ExecuteString("quit");
			break;

		case SDL_VIDEORESIZE:
			/* make sure that SDL_SetVideoMode is called again after we changed the size
			 * otherwise the mouse will make problems */
			vid_mode->modified = qtrue;
			break;
		}
	}
}
Esempio n. 9
0
/*
===============
IN_TranslateSDLToJKKey
===============
*/
static fakeAscii_t IN_TranslateSDLToJKKey( SDL_Keysym *keysym, qboolean down ) {
	fakeAscii_t key = A_NULL;

	if (keysym->sym >= SDLK_SPACE && keysym->sym < SDLK_DELETE) {
		key = (fakeAscii_t)keysym->sym;
	} else {
		switch( keysym->sym )
		{
			case SDLK_PAGEUP:       key = A_PAGE_UP;       break;
			case SDLK_KP_9:         key = A_KP_9;          break;
			case SDLK_PAGEDOWN:     key = A_PAGE_DOWN;     break;
			case SDLK_KP_3:         key = A_KP_3;          break;
			case SDLK_KP_7:         key = A_KP_7;          break;
			case SDLK_HOME:         key = A_HOME;          break;
			case SDLK_KP_1:         key = A_KP_1;          break;
			case SDLK_END:          key = A_END;           break;
			case SDLK_KP_4:         key = A_KP_4;          break;
			case SDLK_LEFT:         key = A_CURSOR_LEFT;   break;
			case SDLK_KP_6:         key = A_KP_6;          break;
			case SDLK_RIGHT:        key = A_CURSOR_RIGHT;  break;
			case SDLK_KP_2:         key = A_KP_2;          break;
			case SDLK_DOWN:         key = A_CURSOR_DOWN;   break;
			case SDLK_KP_8:         key = A_KP_8;          break;
			case SDLK_UP:           key = A_CURSOR_UP;     break;
			case SDLK_ESCAPE:       key = A_ESCAPE;        break;
			case SDLK_KP_ENTER:     key = A_KP_ENTER;      break;
			case SDLK_RETURN:       key = A_ENTER;         break;
			case SDLK_TAB:          key = A_TAB;           break;
			case SDLK_F1:           key = A_F1;            break;
			case SDLK_F2:           key = A_F2;            break;
			case SDLK_F3:           key = A_F3;            break;
			case SDLK_F4:           key = A_F4;            break;
			case SDLK_F5:           key = A_F5;            break;
			case SDLK_F6:           key = A_F6;            break;
			case SDLK_F7:           key = A_F7;            break;
			case SDLK_F8:           key = A_F8;            break;
			case SDLK_F9:           key = A_F9;            break;
			case SDLK_F10:          key = A_F10;           break;
			case SDLK_F11:          key = A_F11;           break;
			case SDLK_F12:          key = A_F12;           break;

			case SDLK_BACKSPACE:    key = A_BACKSPACE;     break;
			case SDLK_KP_PERIOD:    key = A_KP_PERIOD;     break;
			case SDLK_DELETE:       key = A_DELETE;        break;
			case SDLK_PAUSE:        key = A_PAUSE;         break;

			case SDLK_LSHIFT:
			case SDLK_RSHIFT:       key = A_SHIFT;         break;

			case SDLK_LCTRL:
			case SDLK_RCTRL:        key = A_CTRL;          break;

			case SDLK_RALT:
			case SDLK_LALT:         key = A_ALT;           break;

			case SDLK_KP_5:         key = A_KP_5;          break;
			case SDLK_INSERT:       key = A_INSERT;        break;
			case SDLK_KP_0:         key = A_KP_0;          break;
			case SDLK_KP_MULTIPLY:  key = A_STAR;          break;
			case SDLK_KP_PLUS:      key = A_KP_PLUS;       break;
			case SDLK_KP_MINUS:     key = A_KP_MINUS;      break;
			case SDLK_KP_DIVIDE:    key = A_FORWARD_SLASH; break;

			case SDLK_SCROLLLOCK:   key = A_SCROLLLOCK;    break;
			case SDLK_NUMLOCKCLEAR: key = A_NUMLOCK;       break;
			case SDLK_CAPSLOCK:     key = A_CAPSLOCK;      break;

			default:
				break;
		}
	}

	if( in_keyboardDebug->integer )
		IN_PrintKey( keysym, key, down );

	return key;
}