nestopia/source/unix/kentry.cpp
2013-01-03 23:49:10 -05:00

119 lines
2.6 KiB
C++

/*
NEStopia / Linux
David B. Robins (nestopia@davidrobins.net)
R. Belmont
kentry.cpp - key code mapping
*/
#include "kentry.h"
#include "input.h"
#include "core/api/NstApiInput.hpp"
const KEntry keycodes[] =
{
{ "ENTER", SDLK_RETURN },
{ "LCTRL", SDLK_LCTRL },
{ "RCTRL", SDLK_RCTRL },
{ "LALT", SDLK_LALT },
{ "RALT", SDLK_RALT },
{ "SPACE", SDLK_SPACE },
{ "LSHIFT", SDLK_LSHIFT },
{ "RSHIFT", SDLK_RSHIFT },
{ "TAB", SDLK_TAB },
{ "UP", SDLK_UP },
{ "DOWN", SDLK_DOWN },
{ "LEFT", SDLK_LEFT },
{ "RIGHT", SDLK_RIGHT },
{ "KPENTER", SDLK_KP_ENTER },
{ "KP0", SDLK_KP0 },
{ "KP1", SDLK_KP1 },
{ "KP2", SDLK_KP2 },
{ "KP3", SDLK_KP3 },
{ "KP4", SDLK_KP4 },
{ "KP5", SDLK_KP5 },
{ "KP6", SDLK_KP6 },
{ "KP7", SDLK_KP7 },
{ "KP8", SDLK_KP8 },
{ "KP9", SDLK_KP9 },
{ "KPDOT", SDLK_KP_PERIOD },
{ "KPSLASH", SDLK_KP_DIVIDE },
{ "KPSTAR", SDLK_KP_MULTIPLY },
{ "KPMINUS", SDLK_KP_MINUS },
{ "KPPLUS", SDLK_KP_PLUS },
{ "ESCAPE", SDLK_ESCAPE },
{ "BACKSPACE", SDLK_BACKSPACE },
{ "F1", SDLK_F1 },
{ "F2", SDLK_F2 },
{ "F3", SDLK_F3 },
{ "F4", SDLK_F4 },
{ "F5", SDLK_F5 },
{ "F6", SDLK_F6 },
{ "F7", SDLK_F7 },
{ "F8", SDLK_F8 },
{ "F9", SDLK_F9 },
{ "F10", SDLK_F10 },
{ "F11", SDLK_F11 },
{ "F12", SDLK_F12 },
{ NULL, -1 }
};
#define DEFINE_META(x) { #x, x }
const KEntry metacodes[] =
{
DEFINE_META(RESET), // 0
DEFINE_META(QSAVE1), // 1
DEFINE_META(QLOAD1), // 2
DEFINE_META(QSAVE2), // 3
DEFINE_META(QLOAD2), // 4
DEFINE_META(SAVE), // 5
DEFINE_META(LOAD), // 6
DEFINE_META(MSAVE), // 7
DEFINE_META(MLOAD), // 8
DEFINE_META(MSTOP), // 9
DEFINE_META(FLIP), // 10
DEFINE_META(FSCREEN), // 11
DEFINE_META(RBACK), // 12
DEFINE_META(RFORE), // 13
DEFINE_META(STOP), // 14
DEFINE_META(EXIT), // 15
DEFINE_META(COIN1), // 16
DEFINE_META(COIN2), // 17
{ NULL, -1 }
};
#undef DEFINE_META
#define DEFINE_CONTROL(string, code) { #string, Nes::Api::Input::Controllers::Pad::code }
const KEntry controlcodes[] =
{
DEFINE_CONTROL(UP, UP),
DEFINE_CONTROL(DN, DOWN),
DEFINE_CONTROL(LT, LEFT),
DEFINE_CONTROL(RT, RIGHT),
DEFINE_CONTROL(A, A),
DEFINE_CONTROL(B, B),
DEFINE_CONTROL(START, START),
DEFINE_CONTROL(SELECT, SELECT),
{ NULL, -1 }
};
#undef DEFINE_CONTROL
// try to match str in kentry; returns -1 on failure
int kentry_find_str(const KEntry *kentry, const char *str)
{
for (; kentry->code != -1 && strcmp(str, kentry->string); ++kentry);
return kentry->code;
}
// try to match code in kentry; returns null on failure
const char *kentry_find_code(const KEntry *kentry, int code)
{
for (; kentry->code != -1 && kentry->code != code; ++kentry);
return kentry->string;
}