From 734afe2058e9c57af7bd12ace882e9ab4c0356b4 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Mon, 30 Jan 2012 17:18:31 +0100 Subject: [PATCH] (PS3) Implement file_is_directory on PS3 --- file.c | 12 +++++++++++- general.h | 2 ++ ps3/main.c | 33 ++++++++++++++++++++++++++------- ps3/menu.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 87 insertions(+), 10 deletions(-) diff --git a/file.c b/file.c index 35b6d38fa5..fb05ce9b36 100644 --- a/file.c +++ b/file.c @@ -32,6 +32,10 @@ #include "sha256.h" #endif +#ifdef __CELLOS_LV2__ +#include +#endif + #if defined(_WIN32) && !defined(_XBOX) #include #include @@ -939,7 +943,13 @@ bool path_is_directory(const char *path) #ifdef _WIN32 DWORD ret = GetFileAttributes(path); return (ret & FILE_ATTRIBUTE_DIRECTORY) && (ret != INVALID_FILE_ATTRIBUTES); -#elif defined(__CELLOS_LV2__) || defined(XENON) +#elif defined(__CELLOS_LV2__) + CellFsStat buf; + if (cellFsStat(path, &buf) < 0) + return false; + + return buf.st_mode & CELL_FS_S_IFDIR; +#elif defined(XENON) // Dummy (void)path; return false; diff --git a/general.h b/general.h index c950905baa..1f7bd05891 100644 --- a/general.h +++ b/general.h @@ -171,6 +171,8 @@ struct settings struct console_settings { bool block_config_read; + bool default_sram_dir_enable; + bool default_savestate_dir_enable; bool ingame_menu_enable; bool return_to_multiman_enable; bool screenshots_enable; diff --git a/ps3/main.c b/ps3/main.c index b05c76d033..ac41ac7551 100644 --- a/ps3/main.c +++ b/ps3/main.c @@ -110,15 +110,21 @@ static void set_default_settings(void) g_settings.video.msg_pos_y = 0.90f; // g_console + g_console.block_config_read = true; g_console.screenshots_enable = false; g_console.throttle_enable = true; g_console.triple_buffering_enable = true; + g_console.default_savestate_dir_enable = false; + g_console.default_sram_dir_enable = false; g_console.current_resolution_id = CELL_VIDEO_OUT_RESOLUTION_UNDEFINED; strlcpy(g_console.default_rom_startup_dir, "/", sizeof(g_console.default_rom_startup_dir)); + strlcpy(g_console.default_savestate_dir, usrDirPath, sizeof(g_console.default_savestate_dir)); + strlcpy(g_console.default_sram_dir, usrDirPath, sizeof(g_console.default_sram_dir)); // g_extern g_extern.state_slot = 0; g_extern.audio_data.mute = 0; + g_extern.verbose = true; } static void init_settings(void) @@ -562,8 +568,6 @@ int main(int argc, char *argv[]) ssnes_main_clear_state(); - g_console.block_config_read = true; - g_extern.verbose = true; config_set_defaults(); SSNES_LOG("Registering Callback\n"); @@ -581,6 +585,7 @@ int main(int argc, char *argv[]) #endif get_path_settings(g_console.return_to_multiman_enable); + set_default_settings(); init_settings(); @@ -629,12 +634,26 @@ begin_loop: char arg5[MAX_PATH_LENGTH]; snprintf(arg5, sizeof(arg5), SYS_CONFIG_FILE); - char *argv_[] = { arg1, arg2, arg3, arg4, arg5, NULL }; - int argc = sizeof(argv_) / sizeof(argv_[0]) - 1; - int init_ret = ssnes_main_init(argc, argv_); - g_emulator_initialized = 1; - init_ssnes = 0; + if(g_console.default_sram_dir_enable) + { + char arg6[] = "-s"; + char arg7[MAX_PATH_LENGTH]; + snprintf(arg7, sizeof(arg7), g_console.default_sram_dir); + char *argv_[] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7, NULL }; + int argc = sizeof(argv_) / sizeof(argv_[0]) - 1; + int init_ret = ssnes_main_init(argc, argv_); + g_emulator_initialized = 1; + init_ssnes = 0; + } + else + { + char *argv_[] = { arg1, arg2, arg3, arg4, arg5, NULL }; + int argc = sizeof(argv_) / sizeof(argv_[0]) - 1; + int init_ret = ssnes_main_init(argc, argv_); + g_emulator_initialized = 1; + init_ssnes = 0; + } } } #ifdef MULTIMAN_SUPPORT diff --git a/ps3/menu.c b/ps3/menu.c index f760f68fbd..3ba4df84f1 100644 --- a/ps3/menu.c +++ b/ps3/menu.c @@ -464,8 +464,10 @@ static void select_directory(uint32_t menu_id) switch(menu_id) { case PATH_SAVESTATES_DIR_CHOICE: + strcpy(g_console.default_savestate_dir, path); break; case PATH_SRAM_DIR_CHOICE: + strcpy(g_console.default_sram_dir, path); break; case PATH_DEFAULT_ROM_DIR_CHOICE: strcpy(g_console.default_rom_startup_dir, path); @@ -483,8 +485,10 @@ static void select_directory(uint32_t menu_id) switch(menu_id) { case PATH_SAVESTATES_DIR_CHOICE: + strcpy(g_console.default_savestate_dir, path); break; case PATH_SRAM_DIR_CHOICE: + strcpy(g_console.default_sram_dir, path); break; case PATH_DEFAULT_ROM_DIR_CHOICE: strcpy(g_console.default_rom_startup_dir, path); @@ -712,13 +716,13 @@ static void set_setting_label(menu * menu_obj, int currentsetting) if(g_settings.rewind_enable) { snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), "ON"); - menu_obj->items[currentsetting].text_color = GREEN; + menu_obj->items[currentsetting].text_color = ORANGE; snprintf(menu_obj->items[currentsetting].comment, sizeof(menu_obj->items[currentsetting].comment), "INFO - [Rewind] feature is set to 'ON'. You can rewind the game in real-time."); } else { snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), "OFF"); - menu_obj->items[currentsetting].text_color = ORANGE; + menu_obj->items[currentsetting].text_color = GREEN; snprintf(menu_obj->items[currentsetting].comment, sizeof(menu_obj->items[currentsetting].comment), "INFO - [Rewind] feature is set to 'OFF'."); } break; @@ -757,8 +761,20 @@ static void set_setting_label(menu * menu_obj, int currentsetting) snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), g_console.default_rom_startup_dir); break; case SETTING_PATH_SAVESTATES_DIRECTORY: + if(!(strcmp(g_console.default_savestate_dir, usrDirPath))) + menu_obj->items[currentsetting].text_color = GREEN; + else + menu_obj->items[currentsetting].text_color = ORANGE; + + snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), g_console.default_savestate_dir); break; case SETTING_PATH_SRAM_DIRECTORY: + if(!(strcmp(g_console.default_sram_dir, usrDirPath))) + menu_obj->items[currentsetting].text_color = GREEN; + else + menu_obj->items[currentsetting].text_color = ORANGE; + + snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), g_console.default_sram_dir); break; case SETTING_PATH_CHEATS: if(!(strcmp(g_settings.cheat_database, usrDirPath))) @@ -1169,8 +1185,29 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue) strcpy(g_console.default_rom_startup_dir, "/"); break; case SETTING_PATH_SAVESTATES_DIRECTORY: + if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state)) + { + menuStackindex++; + menuStack[menuStackindex] = menu_filebrowser; + menuStack[menuStackindex].enum_id = PATH_SAVESTATES_DIR_CHOICE; + set_initial_dir_tmpbrowser = true; + } + + if(CTRL_START(state)) + strcpy(g_console.default_savestate_dir, usrDirPath); + break; case SETTING_PATH_SRAM_DIRECTORY: + if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state)) + { + menuStackindex++; + menuStack[menuStackindex] = menu_filebrowser; + menuStack[menuStackindex].enum_id = PATH_SRAM_DIR_CHOICE; + set_initial_dir_tmpbrowser = true; + } + + if(CTRL_START(state)) + strcpy(g_console.default_sram_dir, ""); break; case SETTING_PATH_CHEATS: if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state)) @@ -1185,6 +1222,15 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue) strcpy(g_settings.cheat_database, usrDirPath); break; case SETTING_PATH_DEFAULT_ALL: + if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state) || CTRL_START(state)) + { + strcpy(g_console.default_rom_startup_dir, "/"); + strcpy(g_console.default_savestate_dir, usrDirPath); + strcpy(g_settings.cheat_database, usrDirPath); + strcpy(g_console.default_sram_dir, ""); + + menu_reinit_settings(); + } break; case SETTING_CONTROLS_SCHEME: break;