(RARCH_CONSOLE) Refactored sram_dir_enable / state_dir_enable setting -

also fixed a reentrant bug to do with set savestate dir/set sram dir
boolean variables in parse_input
This commit is contained in:
twinaphex 2013-01-13 04:12:10 +01:00
parent c1f5fc8890
commit ae9a1167b7
6 changed files with 86 additions and 60 deletions

View File

@ -326,8 +326,8 @@ begin_loop:
args.verbose = g_extern.verbose;
args.config_path = g_extern.config_path;
args.sram_path = g_extern.console.main_wrap.state.default_sram_dir.enable ? g_extern.console.main_wrap.paths.default_sram_dir : NULL;
args.state_path = g_extern.console.main_wrap.state.default_savestate_dir.enable ? g_extern.console.main_wrap.paths.default_savestate_dir : NULL;
args.sram_path = (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? g_extern.console.main_wrap.default_sram_dir : NULL;
args.state_path = (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? g_extern.console.main_wrap.default_savestate_dir : NULL;
args.rom_path = g_extern.fullpath;
args.libretro_path = g_settings.libretro;

View File

@ -467,10 +467,10 @@ static void render_text(rgui_handle_t *rgui)
snprintf(type_str, sizeof(type_str), "Cache");
break;
case RGUI_SETTINGS_SRAM_DIR:
snprintf(type_str, sizeof(type_str), g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF");
snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF");
break;
case RGUI_SETTINGS_STATE_DIR:
snprintf(type_str, sizeof(type_str), g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF");
snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF");
break;
case RGUI_SETTINGS_DEBUG_TEXT:
snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF");
@ -764,15 +764,15 @@ static int rgui_settings_toggle_setting(rgui_file_type_t setting, rgui_action_t
break;
case RGUI_SETTINGS_SRAM_DIR:
if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT)
g_extern.console.main_wrap.state.default_sram_dir.enable = false;
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
else if (action == RGUI_ACTION_RIGHT)
g_extern.console.main_wrap.state.default_sram_dir.enable = true;
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
break;
case RGUI_SETTINGS_STATE_DIR:
if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT)
g_extern.console.main_wrap.state.default_savestate_dir.enable = false;
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
else if (action == RGUI_ACTION_RIGHT)
g_extern.console.main_wrap.state.default_savestate_dir.enable = true;
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
break;
case RGUI_SETTINGS_DEBUG_TEXT:
if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT)

View File

@ -357,17 +357,17 @@ static void populate_setting_item(void *data, unsigned input)
break;
case SETTING_PATH_DEFAULT_ROM_DIRECTORY:
snprintf(current_item->text, sizeof(current_item->text), "Startup ROM Directory");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_rom_startup_dir);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_rom_startup_dir);
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default [Startup ROM directory]. NOTE: You will have to\nrestart the emulator for this change to have any effect.");
break;
case SETTING_PATH_SAVESTATES_DIRECTORY:
snprintf(current_item->text, sizeof(current_item->text), "Savestate Directory");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_savestate_dir);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_savestate_dir);
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default path where all the savestate files will be saved to.");
break;
case SETTING_PATH_SRAM_DIRECTORY:
snprintf(current_item->text, sizeof(current_item->text), "SRAM Directory");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_sram_dir);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_sram_dir);
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default SRAM (SaveRAM) directory path. All the\nbattery backup saves will be stored in this directory.");
break;
#ifdef HAVE_XML
@ -384,13 +384,13 @@ static void populate_setting_item(void *data, unsigned input)
break;
case SETTING_ENABLE_SRAM_PATH:
snprintf(current_item->text, sizeof(current_item->text), "Custom SRAM Dir Enable");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom SRAM Dir Path] is set to '%s'.", g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom SRAM Dir Path] is set to '%s'.", (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF");
break;
case SETTING_ENABLE_STATE_PATH:
snprintf(current_item->text, sizeof(current_item->text), "Custom Savestate Dir Enable");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom Savestate Dir Path] is set to '%s'.", g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom Savestate Dir Path] is set to '%s'.", (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF");
break;
case SETTING_CONTROLS_SCHEME:
snprintf(current_item->text, sizeof(current_item->text), "Control Scheme Preset");
@ -778,13 +778,13 @@ int select_directory(void *data, void *state)
switch(current_menu->enum_id)
{
case PATH_SAVESTATES_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir));
strlcpy(g_extern.console.main_wrap.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.default_savestate_dir));
break;
case PATH_SRAM_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, path, sizeof(g_extern.console.main_wrap.paths.default_sram_dir));
strlcpy(g_extern.console.main_wrap.default_sram_dir, path, sizeof(g_extern.console.main_wrap.default_sram_dir));
break;
case PATH_DEFAULT_ROM_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.default_rom_startup_dir));
break;
#ifdef HAVE_XML
case PATH_CHEATS_DIR_CHOICE:
@ -804,13 +804,13 @@ int select_directory(void *data, void *state)
switch(current_menu->enum_id)
{
case PATH_SAVESTATES_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir));
strlcpy(g_extern.console.main_wrap.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.default_savestate_dir));
break;
case PATH_SRAM_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, path, sizeof(g_extern.console.main_wrap.paths.default_sram_dir));
strlcpy(g_extern.console.main_wrap.default_sram_dir, path, sizeof(g_extern.console.main_wrap.default_sram_dir));
break;
case PATH_DEFAULT_ROM_DIR_CHOICE:
strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.default_rom_startup_dir));
break;
#ifdef HAVE_XML
case PATH_CHEATS_DIR_CHOICE:
@ -1517,7 +1517,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, default_paths.filesystem_root_dir, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, default_paths.filesystem_root_dir, sizeof(g_extern.console.main_wrap.default_rom_startup_dir));
break;
case SETTING_PATH_SAVESTATES_DIRECTORY:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
@ -1527,7 +1527,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir));
strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir));
break;
case SETTING_PATH_SRAM_DIRECTORY:
@ -1538,7 +1538,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.paths.default_sram_dir));
strlcpy(g_extern.console.main_wrap.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.default_sram_dir));
break;
#ifdef HAVE_XML
case SETTING_PATH_CHEATS:
@ -1564,25 +1564,36 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
break;
case SETTING_ENABLE_SRAM_PATH:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)))
g_extern.console.main_wrap.state.default_sram_dir.enable = !g_extern.console.main_wrap.state.default_sram_dir.enable;
{
if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE))
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
else
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
g_extern.console.main_wrap.state.default_sram_dir.enable = true;
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
break;
case SETTING_ENABLE_STATE_PATH:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)))
g_extern.console.main_wrap.state.default_savestate_dir.enable = !g_extern.console.main_wrap.state.default_savestate_dir.enable;
{
if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE))
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
else
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
g_extern.console.main_wrap.state.default_savestate_dir.enable = true;
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
break;
case SETTING_PATH_DEFAULT_ALL:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)) || (input & (1ULL << RMENU_DEVICE_NAV_START)))
{
strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, "/", sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.port_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir));
strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, "/", sizeof(g_extern.console.main_wrap.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.port_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir));
#ifdef HAVE_XML
strlcpy(g_settings.cheat_database, default_paths.port_dir, sizeof(g_settings.cheat_database));
#endif
strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, "", sizeof(g_extern.console.main_wrap.paths.default_sram_dir));
strlcpy(g_extern.console.main_wrap.default_sram_dir, "", sizeof(g_extern.console.main_wrap.default_sram_dir));
}
break;
case SETTING_CONTROLS_SCHEME:

View File

@ -104,6 +104,8 @@ enum menu_enums
{
MODE_GAME = 0,
MODE_LOAD_GAME,
MODE_LOAD_GAME_SRAM_DIR_ENABLE,
MODE_LOAD_GAME_STATE_DIR_ENABLE,
MODE_LOAD_FIRST_SHADER,
MODE_LOAD_SECOND_SHADER,
MODE_INIT,
@ -266,12 +268,6 @@ enum rarch_game_type
RARCH_CART_SUFAMI
};
typedef struct rarch_boolean_state
{
bool enable;
unsigned value;
} rarch_boolean_state_t;
typedef struct rarch_resolution
{
unsigned idx;
@ -545,18 +541,9 @@ struct global
struct
{
struct
{
char default_rom_startup_dir[PATH_MAX];
char default_savestate_dir[PATH_MAX];
char default_sram_dir[PATH_MAX];
} paths;
struct
{
rarch_boolean_state_t default_sram_dir;
rarch_boolean_state_t default_savestate_dir;
} state;
char default_rom_startup_dir[PATH_MAX];
char default_savestate_dir[PATH_MAX];
char default_sram_dir[PATH_MAX];
} main_wrap;
#ifdef HAVE_OSKUTIL

View File

@ -886,6 +886,12 @@ static void parse_input(int argc, char *argv[])
#endif
const char *optstring = "hs:fvS:m:p4jJA:g:b:c:B:Y:Z:U:DN:X:" BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG;
#ifdef RARCH_CONSOLE
// hack - done for reentrancy reasons
g_extern.has_set_save_path = false;
g_extern.has_set_state_path = false;
#endif
for (;;)
{
val = 0;
@ -895,6 +901,7 @@ static void parse_input(int argc, char *argv[])
if (c == -1)
break;
switch (c)
{
case 'h':

View File

@ -255,7 +255,7 @@ void config_set_defaults(void)
g_settings.video.aspect_ratio = -1.0f;
// g_extern
strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.paths.default_sram_dir));
strlcpy(g_extern.console.main_wrap.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.default_sram_dir));
g_extern.console.screen.overscan_amount = 0.0f;
g_extern.console.screen.gamma_correction = DEFAULT_GAMMA;
g_extern.lifecycle_mode_state |= (1ULL << MODE_VIDEO_OVERSCAN_ENABLE);
@ -267,12 +267,10 @@ void config_set_defaults(void)
g_extern.lifecycle_mode_state |= (1ULL << MODE_VIDEO_FLICKER_FILTER_ENABLE);
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE);
g_extern.console.main_wrap.state.default_savestate_dir.enable = false;
g_extern.console.main_wrap.state.default_sram_dir.enable = false;
g_extern.console.screen.orientation = ORIENTATION_NORMAL;
g_extern.console.screen.resolutions.current.id = 0;
strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, default_paths.filebrowser_startup_dir, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir));
strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, default_paths.filebrowser_startup_dir, sizeof(g_extern.console.main_wrap.default_rom_startup_dir));
strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir));
g_settings.video.aspect_ratio_idx = 0;
g_extern.state_slot = 0;
g_extern.audio_data.mute = 0;
@ -467,7 +465,7 @@ bool config_load_file(const char *path)
CONFIG_GET_INT(input.device[i], cfg);
}
CONFIG_GET_STRING_EXTERN(console.main_wrap.paths.default_rom_startup_dir, "default_rom_startup_dir");
CONFIG_GET_STRING_EXTERN(console.main_wrap.default_rom_startup_dir, "default_rom_startup_dir");
CONFIG_GET_BOOL_EXTERN(console.screen.gamma_correction, "gamma_correction");
bool msg_enable = false;
@ -478,6 +476,8 @@ bool config_load_file(const char *path)
bool screenshots_enable = false;
bool flicker_filter_enable = false;
bool soft_filter_enable = false;
bool sram_dir_enable = false;
bool state_dir_enable = false;
int zip_extract_mode = 0;
if (config_get_bool(conf, "info_msg_enable", &msg_enable))
@ -563,8 +563,22 @@ bool config_load_file(const char *path)
}
}
CONFIG_GET_BOOL_EXTERN(console.main_wrap.state.default_sram_dir.enable, "sram_dir_enable");
CONFIG_GET_BOOL_EXTERN(console.main_wrap.state.default_savestate_dir.enable, "savestate_dir_enable");
if (config_get_bool(conf, "sram_dir_enable", &sram_dir_enable))
{
if (sram_dir_enable)
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
else
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
}
if (config_get_bool(conf, "savestate_dir_enable", &state_dir_enable))
{
if (state_dir_enable)
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
else
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE);
}
CONFIG_GET_FLOAT_EXTERN(console.screen.overscan_amount, "overscan_amount");
CONFIG_GET_INT_EXTERN(console.screen.flicker_filter_index, "flicker_filter_index");
CONFIG_GET_INT_EXTERN(console.screen.soft_filter_index, "soft_filter_index");
@ -1217,7 +1231,7 @@ bool config_save_file(const char *path)
config_set_int(conf, "custom_viewport_height", g_extern.console.screen.viewports.custom_vp.height);
config_set_int(conf, "custom_viewport_x", g_extern.console.screen.viewports.custom_vp.x);
config_set_int(conf, "custom_viewport_y", g_extern.console.screen.viewports.custom_vp.y);
config_set_string(conf, "default_rom_startup_dir", g_extern.console.main_wrap.paths.default_rom_startup_dir);
config_set_string(conf, "default_rom_startup_dir", g_extern.console.main_wrap.default_rom_startup_dir);
config_set_float(conf, "overscan_amount", g_extern.console.screen.overscan_amount);
config_set_float(conf, "video_font_size", g_settings.video.font_size);
@ -1233,8 +1247,15 @@ bool config_save_file(const char *path)
else
config_set_bool(conf, "custom_bgm_enable", false);
config_set_bool(conf, "sram_dir_enable", g_extern.console.main_wrap.state.default_sram_dir.enable);
config_set_bool(conf, "savestate_dir_enable", g_extern.console.main_wrap.state.default_savestate_dir.enable);
if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE))
config_set_bool(conf, "sram_dir_enable", true);
else
config_set_bool(conf, "sram_dir_enable", false);
if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE))
config_set_bool(conf, "savestate_dir_enable", true);
else
config_set_bool(conf, "savestate_dir_enable", false);
for (unsigned i = 0; i < MAX_PLAYERS; i++)
{