#include "SDL_internal.h"
#if defined(SDL_INPUT_LINUXEV) || defined(SDL_VIDEO_DRIVER_WAYLAND) || defined(SDL_VIDEO_DRIVER_X11)
#include "SDL_scancode_tables_c.h"
#include "scancodes_darwin.h"
#include "scancodes_linux.h"
#include "scancodes_xfree86.h"
static const struct
{
SDL_ScancodeTable table;
SDL_Scancode const *scancodes;
int num_entries;
} SDL_scancode_tables[] = {
{ SDL_SCANCODE_TABLE_DARWIN, darwin_scancode_table, SDL_arraysize(darwin_scancode_table) },
{ SDL_SCANCODE_TABLE_LINUX, linux_scancode_table, SDL_arraysize(linux_scancode_table) },
{ SDL_SCANCODE_TABLE_XFREE86_1, xfree86_scancode_table, SDL_arraysize(xfree86_scancode_table) },
{ SDL_SCANCODE_TABLE_XFREE86_2, xfree86_scancode_table2, SDL_arraysize(xfree86_scancode_table2) },
{ SDL_SCANCODE_TABLE_XVNC, xvnc_scancode_table, SDL_arraysize(xvnc_scancode_table) },
};
const SDL_Scancode *SDL_GetScancodeTable(SDL_ScancodeTable table, int *num_entries)
{
int i;
for (i = 0; i < SDL_arraysize(SDL_scancode_tables); ++i) {
if (table == SDL_scancode_tables[i].table) {
*num_entries = SDL_scancode_tables[i].num_entries;
return SDL_scancode_tables[i].scancodes;
}
}
*num_entries = 0;
return NULL;
}
SDL_Scancode SDL_GetScancodeFromTable(SDL_ScancodeTable table, int keycode)
{
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
int num_entries;
const SDL_Scancode *scancodes = SDL_GetScancodeTable(table, &num_entries);
if (keycode >= 0 && keycode < num_entries) {
scancode = scancodes[keycode];
}
return scancode;
}
#endif