Add SET_VARIABLES interface.

This commit is contained in:
Themaister 2012-02-06 16:13:29 +01:00
parent fea632b0e9
commit 3bda32d6f1
4 changed files with 28 additions and 5 deletions

View File

@ -337,7 +337,7 @@ static bool environment_cb(unsigned cmd, void *data)
case SNES_ENVIRONMENT_GET_VARIABLE:
{
struct snes_variable *var = data;
struct snes_variable *var = (struct snes_variable*)data;
if (var->key)
{
// Split string has '\0' delimiters so we have to find the position in original string,
@ -362,6 +362,23 @@ static bool environment_cb(unsigned cmd, void *data)
break;
}
case SNES_ENVIRONMENT_SET_VARIABLES:
{
SSNES_LOG("Environ SET_VARIABLES:\n");
SSNES_LOG("=======================\n");
const struct snes_variable *vars = (const struct snes_variable*)data;
while (vars->key)
{
SSNES_LOG("\t%s :: %s\n",
vars->key,
vars->value ? vars->value : "N/A");
vars++;
}
SSNES_LOG("=======================\n");
break;
}
default:
SSNES_LOG("Environ UNSUPPORTED (#%u)!\n", cmd);
return false;

View File

@ -150,7 +150,7 @@ static void *sdl_input_init(void)
if (g_settings.input.joypad_map[i] < 0)
continue;
if (sdl->num_joysticks > g_settings.input.joypad_map[i])
if (sdl->num_joysticks > (unsigned)g_settings.input.joypad_map[i])
{
sdl->joysticks[i] = SDL_JoystickOpen(g_settings.input.joypad_map[i]);
if (!sdl->joysticks[i])

View File

@ -99,12 +99,18 @@ extern "C" {
// Boolean value telling if SSNES is able to rewind.
// Some implementations might need to take extra precautions
// to allow this as smoothly as possible.
//
#define SNES_ENVIRONMENT_GET_VARIABLE 8 // struct snes_variable * --
// Interface to aquire user-defined information from environment
// that cannot feasibly be supported in a multi-system way.
// Mostly used for obscure,
// specific features that the user can tap into when neseccary.
//
#define SNES_ENVIRONMENT_SET_VARIABLES 9 // const struct snes_variable * --
// Allows an implementation to signal the environment
// which variables it might want to check for later using GET_VARIABLE.
// 'data' points to an array of snes_variable structs terminated by a { NULL, NULL } element.
// snes_variable::value should contain a human readable description of the key.
struct snes_variable
{

View File

@ -216,8 +216,8 @@ void config_set_defaults(void)
memcpy(g_settings.input.binds[i], snes_keybinds_rest, sizeof(snes_keybinds_rest));
// Verify that binds are in proper order.
for (unsigned i = 0; i < MAX_PLAYERS; i++)
for (unsigned j = 0; j < SSNES_BIND_LIST_END; j++)
for (int i = 0; i < MAX_PLAYERS; i++)
for (int j = 0; j < SSNES_BIND_LIST_END; j++)
if (g_settings.input.binds[i][j].valid)
ssnes_assert(j == g_settings.input.binds[i][j].id);