From ec291ed39830db7ceacf1e84edf7a194ceeb63c2 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 05:12:33 +0200 Subject: [PATCH 01/10] Remove bloat code for custom gettimeofday implementation --- gfx/gfx_common.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/gfx/gfx_common.c b/gfx/gfx_common.c index 66b5ed8baf..2c89e2dc9a 100644 --- a/gfx/gfx_common.c +++ b/gfx/gfx_common.c @@ -23,27 +23,25 @@ #include #include #endif -static int gettimeofday(struct timeval *val, void *dummy) -{ - (void)dummy; -#ifdef _XBOX360 - DWORD msec = GetTickCount(); -#else - DWORD msec = timeGetTime(); -#endif - uint64_t usec = msec * 1000; - val->tv_sec = usec / 1000000; - val->tv_usec = usec % 1000000; - return 0; -} #endif -#ifdef __CELLOS_LV2__ -#include +#if defined(__CELLOS_LV2__) || defined(_MSC_VER) static int gettimeofday(struct timeval *val, void *dummy) { (void)dummy; +#if defined(_MSC_VER) && !defined(_XBOX360) + DWORD msec = timeGetTime(); +#elif defined(_XBOX360) + DWORD msec = GetTickCount(); +#endif + +#if defined(__CELLOS_LV2__) +#include uint64_t usec = sys_time_get_system_time(); +#else + uint64_t usec = msec * 1000; +#endif + val->tv_sec = usec / 1000000; val->tv_usec = usec % 1000000; return 0; From 58595a7c97222c87d45b081633434e614815cdd2 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 05:24:32 +0200 Subject: [PATCH 02/10] (Salamander) Add Xbox 1 defines --- console/salamander/main.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/console/salamander/main.c b/console/salamander/main.c index ab7e5ba721..8502316d09 100644 --- a/console/salamander/main.c +++ b/console/salamander/main.c @@ -100,7 +100,7 @@ static void rarch_manage_libretro_set_first_file(char *first_file, size_t size_o if(first_exe) { -#ifdef _XBOX +#ifdef _XBOX360 char fname_tmp[PATH_MAX]; fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); @@ -136,8 +136,10 @@ static void find_and_set_first_file(void) char first_file[PATH_MAX]; rarch_manage_libretro_set_first_file(first_file, sizeof(first_file), -#if defined(_XBOX) +#if defined(_XBOX360) "game:\\", "xex" +#elif defined(_XBOX1) + "D:\\", "xbe" #elif defined(__CELLOS_LV2__) LIBRETRO_DIR_PATH, "SELF" #endif @@ -167,8 +169,10 @@ static void init_settings(void) //try to find CORE executable char core_executable[1024]; -#if defined(_XBOX) +#if defined(_XBOX360) snprintf(core_executable, sizeof(core_executable), "game:\\CORE.xex"); +#if defined(_XBOX1) + snprintf(core_executable, sizeof(core_executable), "D:\\CORE.xbe"); #elif defined(__CELLOS_LV2__) snprintf(core_executable, sizeof(core_executable), "%s/CORE.SELF", LIBRETRO_DIR_PATH); #endif @@ -199,7 +203,7 @@ static void init_settings(void) static void get_environment_settings (void) { -#if defined(_XBOX) +#if defined(_XBOX360) //for devkits only, we will need to mount all partitions for retail //in a different way //DmMapDevkitDrive(); @@ -244,8 +248,8 @@ static void get_environment_settings (void) break; } } - - strlcpy(SYS_CONFIG_FILE, "game:\\retroarch.cfg", sizeof(SYS_CONFIG_FILE)); +#elif defined(_XBOX1) + strlcpy(SYS_CONFIG_FILE, "D:\\retroarch.cfg", sizeof(SYS_CONFIG_FILE)); #elif defined(__CELLOS_LV2__) unsigned int get_type; unsigned int get_attributes; @@ -317,6 +321,8 @@ int main(int argc, char *argv[]) get_environment_settings(); + //WIP - no Xbox 1 controller input yet +#ifdef _XBOX360 XInputGetState(0, &state); if(state.Gamepad.wButtons & XINPUT_GAMEPAD_Y) @@ -326,6 +332,7 @@ int main(int argc, char *argv[]) find_and_set_first_file(); } else +#endif { //normal executable loading path init_settings(); From d1231fb55bf07e57330f3b386040ea05a934c297 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 05:40:57 +0200 Subject: [PATCH 03/10] (Xbox 1/RARCH_CONSOLE) Create member in console_settings for showing FPS onscreen --- general.h | 7 ++-- xbox1/xdk_d3d8.cpp | 70 +++++++++++++++++++-------------------- xbox1/xinput_xbox_input.c | 64 +++++++++++++++++------------------ 3 files changed, 69 insertions(+), 72 deletions(-) diff --git a/general.h b/general.h index 9ded9fba8c..5f48377bac 100644 --- a/general.h +++ b/general.h @@ -200,14 +200,13 @@ typedef struct struct console_settings { -#ifdef __CELLOS_LV2__ bool custom_bgm_enable; -#endif bool check_available_resolutions; bool block_config_read; bool default_sram_dir_enable; bool default_savestate_dir_enable; bool fbo_enabled; + bool fps_info_enable; bool frame_advance_enable; #ifdef _XBOX bool menus_hd_enable; @@ -242,9 +241,7 @@ struct console_settings uint32_t supported_resolutions_count; uint32_t control_timer_expiration_frame_count; uint32_t timer_expiration_frame_count; -#ifdef RARCH_CONSOLE uint32_t input_loop; -#endif #ifdef _XBOX uint32_t color_format; DWORD volume_device_type; @@ -257,7 +254,7 @@ struct console_settings char default_sram_dir[PATH_MAX]; char launch_app_on_exit[PATH_MAX]; float menu_font_size; -#if defined(__CELLOS_LV2__) && !defined(__PSL1GHT__) +#if defined(__CELLOS_LV2__) oskutil_params oskutil_handle; #endif }; diff --git a/xbox1/xdk_d3d8.cpp b/xbox1/xdk_d3d8.cpp index 26a192c16b..c435a93a16 100644 --- a/xbox1/xdk_d3d8.cpp +++ b/xbox1/xdk_d3d8.cpp @@ -185,7 +185,7 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu if (!d3d->d3d_device) { free(d3d); - OutputDebugString("RetroArch: Failed to create a D3D8 object!"); + RARCH_ERR("Failed to create a D3D8 object.\n"); return NULL; } @@ -344,7 +344,6 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu d3d->vsync = video->vsync; // load debug font (toggle option in later revisions ?) -#ifdef SHOW_DEBUG_INFO XFONT_OpenDefaultFont(&d3d->debug_font); d3d->debug_font->SetBkMode(XFONT_TRANSPARENT); d3d->debug_font->SetBkColor(D3DCOLOR_ARGB(100,0,0,0)); @@ -353,6 +352,10 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu font_x = 0; font_y = 0; + + // TODO: place this somewhere else outside of xdk_d3d8.cpp +#ifdef SHOW_DEBUG_INFO + g_console.fps_info_enable = true; #endif return d3d; @@ -361,13 +364,12 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu static bool xdk_d3d_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { -#if 0 if (!frame) return true; -#endif xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; bool menu_enabled = g_console.menu_enable; + bool fps_enable = g_console.fps_info_enable; if (d3d->last_width != width || d3d->last_height != height) //240*160 { @@ -442,40 +444,38 @@ static bool xdk_d3d_frame(void *data, const void *frame, d3d->d3d_render_device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); d3d->d3d_render_device->EndScene(); - -#ifdef SHOW_DEBUG_INFO - static MEMORYSTATUS stat; - GlobalMemoryStatus(&stat); - d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &d3d->pFrontBuffer); - d3d->d3d_render_device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &d3d->pBackBuffer); - - //Output memory usage - - char buf[128], buf2[128], buf_fps_last[128]; - bool ret = false; - sprintf(buf, "%.2f MB free / %.2f MB total", stat.dwAvailPhys/(1024.0f*1024.0f), stat.dwTotalPhys/(1024.0f*1024.0f)); - rarch_convert_char_to_wchar(strw_buffer, buf, sizeof(strw_buffer)); - d3d->debug_font->TextOut(d3d->pFrontBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); - d3d->debug_font->TextOut(d3d->pBackBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); - - if(ret = gfx_window_title(buf2, sizeof(buf2)) || sizeof(buf_fps_last)) + if(fps_enable) { - if(ret) - { - sprintf(buf_fps_last, buf2); - rarch_convert_char_to_wchar(strw_buffer, buf2, sizeof(strw_buffer)); - } - else if(buf_fps_last) - { - rarch_convert_char_to_wchar(strw_buffer, buf_fps_last, sizeof(strw_buffer)); - } + static MEMORYSTATUS stat; + GlobalMemoryStatus(&stat); + d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &d3d->pFrontBuffer); + d3d->d3d_render_device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &d3d->pBackBuffer); - d3d->debug_font->TextOut(d3d->pFrontBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 70 ); - d3d->debug_font->TextOut(d3d->pBackBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 70 ); - d3d->pFrontBuffer->Release(); - d3d->pBackBuffer->Release(); + //Output memory usage + + char buf[128], buf_fps_last[128]; + bool ret = false; + sprintf(buf, "%.2f MB free / %.2f MB total", stat.dwAvailPhys/(1024.0f*1024.0f), stat.dwTotalPhys/(1024.0f*1024.0f)); + rarch_convert_char_to_wchar(strw_buffer, buf, sizeof(strw_buffer)); + d3d->debug_font->TextOut(d3d->pFrontBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); + d3d->debug_font->TextOut(d3d->pBackBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); + + if(ret = gfx_window_title(buf, sizeof(buf)) || sizeof(buf_fps_last)) + { + if(ret) + { + sprintf(buf_fps_last, buf); + rarch_convert_char_to_wchar(strw_buffer, buf, sizeof(strw_buffer)); + } + else if(buf_fps_last) + rarch_convert_char_to_wchar(strw_buffer, buf_fps_last, sizeof(strw_buffer)); + + d3d->debug_font->TextOut(d3d->pFrontBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 70 ); + d3d->debug_font->TextOut(d3d->pBackBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 70 ); + d3d->pFrontBuffer->Release(); + d3d->pBackBuffer->Release(); + } } -#endif if(!d3d->block_swap) gfx_ctx_swap_buffers(); diff --git a/xbox1/xinput_xbox_input.c b/xbox1/xinput_xbox_input.c index 42eecffc94..7947a0aabc 100644 --- a/xbox1/xinput_xbox_input.c +++ b/xbox1/xinput_xbox_input.c @@ -96,59 +96,59 @@ static int16_t xinput_input_state(void *data, const struct retro_keybind **binds DWORD button = binds[player][id].joykey; int16_t retval = 0; - //Hardcoded binds (WIP) + //FIXME: Hardcoded binds switch(id) { case RETRO_DEVICE_ID_JOYPAD_A: retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_B]) ? 1 : 0; break; case RETRO_DEVICE_ID_JOYPAD_B: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_A]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_A]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_X: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_Y]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_Y]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_Y: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_X]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_X]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_LEFT: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) || (state[player].Gamepad.sThumbLX < -DEADZONE) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) || (state[player].Gamepad.sThumbLX < -DEADZONE) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_RIGHT: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) || (state[player].Gamepad.sThumbLX > DEADZONE) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) || (state[player].Gamepad.sThumbLX > DEADZONE) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_UP: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) || (state[player].Gamepad.sThumbLY > DEADZONE) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) || (state[player].Gamepad.sThumbLY > DEADZONE) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_DOWN: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN)|| (state[player].Gamepad.sThumbLY < -DEADZONE) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN)|| (state[player].Gamepad.sThumbLY < -DEADZONE) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_START: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_START) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_START) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_SELECT: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_BACK) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_BACK) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_L: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_R: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_L2: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_WHITE]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_WHITE]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_R2: - retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_BLACK]) ? 1 : 0; - break; + retval = (state[player].Gamepad.bAnalogButtons[XINPUT_GAMEPAD_BLACK]) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_L3: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) ? 1 : 0; + break; case RETRO_DEVICE_ID_JOYPAD_R3: - retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) ? 1 : 0; - break; + retval = (state[player].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) ? 1 : 0; + break; default: - break; + break; } return retval; From eb20bf47ea6233c7559c682270f58b4aa9fe897e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 16 Jul 2012 05:55:44 +0200 Subject: [PATCH 04/10] (Xbox 1) Fix FPS onscreen - needs an additional temp char buffer --- xbox1/xdk_d3d8.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xbox1/xdk_d3d8.cpp b/xbox1/xdk_d3d8.cpp index c435a93a16..fc126c7f7d 100644 --- a/xbox1/xdk_d3d8.cpp +++ b/xbox1/xdk_d3d8.cpp @@ -453,19 +453,19 @@ static bool xdk_d3d_frame(void *data, const void *frame, //Output memory usage - char buf[128], buf_fps_last[128]; + char buf[128], buf2[128], buf_fps_last[128]; bool ret = false; sprintf(buf, "%.2f MB free / %.2f MB total", stat.dwAvailPhys/(1024.0f*1024.0f), stat.dwTotalPhys/(1024.0f*1024.0f)); rarch_convert_char_to_wchar(strw_buffer, buf, sizeof(strw_buffer)); d3d->debug_font->TextOut(d3d->pFrontBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); d3d->debug_font->TextOut(d3d->pBackBuffer, strw_buffer, (unsigned)-1, font_x + 30, font_y + 50 ); - if(ret = gfx_window_title(buf, sizeof(buf)) || sizeof(buf_fps_last)) + if(ret = gfx_window_title(buf2, sizeof(buf2)) || sizeof(buf_fps_last)) { if(ret) { - sprintf(buf_fps_last, buf); - rarch_convert_char_to_wchar(strw_buffer, buf, sizeof(strw_buffer)); + sprintf(buf_fps_last, buf2); + rarch_convert_char_to_wchar(strw_buffer, buf2, sizeof(strw_buffer)); } else if(buf_fps_last) rarch_convert_char_to_wchar(strw_buffer, buf_fps_last, sizeof(strw_buffer)); From 9695761cfeadfcb96baa43932736a64042a36e47 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 06:09:41 +0200 Subject: [PATCH 05/10] (PS3) Fix build on PS3 --- gfx/gfx_common.c | 5 ++++- ps3/frontend/menu.h | 18 +++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/gfx/gfx_common.c b/gfx/gfx_common.c index 2c89e2dc9a..87b95c9ac1 100644 --- a/gfx/gfx_common.c +++ b/gfx/gfx_common.c @@ -25,6 +25,10 @@ #endif #endif +#ifdef __CELLOS_LV2__ +#include +#endif + #if defined(__CELLOS_LV2__) || defined(_MSC_VER) static int gettimeofday(struct timeval *val, void *dummy) { @@ -36,7 +40,6 @@ static int gettimeofday(struct timeval *val, void *dummy) #endif #if defined(__CELLOS_LV2__) -#include uint64_t usec = sys_time_get_system_time(); #else uint64_t usec = msec * 1000; diff --git a/ps3/frontend/menu.h b/ps3/frontend/menu.h index 12779e93b0..f1aa52e8d9 100644 --- a/ps3/frontend/menu.h +++ b/ps3/frontend/menu.h @@ -21,7 +21,7 @@ typedef struct { - unsigned enum_id; /* enum ID of item */ + unsigned char enum_id; /* enum ID of item */ char text[256]; /* item label */ char setting_text[256]; /* setting label */ float text_xpos; /* text X position (upper left corner) */ @@ -30,18 +30,18 @@ typedef struct char comment[256]; /* item comment */ unsigned item_color; /* color of item */ float comment_ypos; /* comment Y position (upper left corner) */ - unsigned page; /* page */ + unsigned char page; /* page */ } item; typedef struct { - char title[64]; /* menu title */ - unsigned enum_id; /* enum ID of menu */ - unsigned selected; /* index of selected item */ - unsigned page; /* page */ - unsigned first_setting; /* first setting */ - unsigned max_settings; /* max no of settings in menu */ - unsigned category_id; /* category ID */ + char title[64]; + unsigned char enum_id; + unsigned char selected; + unsigned char page; + unsigned char first_setting; + unsigned char max_settings; + unsigned char category_id; } menu; enum From 69cd4ffc4673933d92d8cb6090c43ee99b17a3cf Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 08:13:05 +0200 Subject: [PATCH 06/10] (PS3) Put filebrowsers on heap --- ps3/frontend/menu.c | 110 +++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index b58c5fc3c3..bea016866f 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -49,8 +49,8 @@ menu menuStack[10]; int menuStackindex = 0; static bool set_libretro_core_as_launch; -filebrowser_t browser; -filebrowser_t tmpBrowser; +filebrowser_t *browser; +filebrowser_t *tmpBrowser; unsigned set_shader = 0; static unsigned currently_selected_controller_menu = 0; static char strw_buffer[PATH_MAX]; @@ -391,9 +391,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(browser.extensions, rarch_console_get_rom_ext(), sizeof(browser.extensions)); - filebrowser_set_root(&browser, g_console.default_rom_startup_dir); - filebrowser_iterate(&browser, FILEBROWSER_ACTION_RESET); + strlcpy(browser->extensions, rarch_console_get_rom_ext(), sizeof(browser->extensions)); + filebrowser_set_root(browser, g_console.default_rom_startup_dir); + filebrowser_iterate(browser, FILEBROWSER_ACTION_RESET); break; case LIBRETRO_CHOICE: strlcpy(menuStack[stack_idx].title, "Libretro cores", sizeof(menuStack[stack_idx].title)); @@ -402,9 +402,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "self|SELF|bin|BIN", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, LIBRETRO_DIR_PATH); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "self|SELF|bin|BIN", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, LIBRETRO_DIR_PATH); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case PRESET_CHOICE: strlcpy(menuStack[stack_idx].title, "Shader presets", sizeof(menuStack[stack_idx].title)); @@ -413,9 +413,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "cgp|CGP", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, PRESETS_DIR_PATH); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "cgp|CGP", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, PRESETS_DIR_PATH); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case INPUT_PRESET_CHOICE: strlcpy(menuStack[stack_idx].title, "Input presets", sizeof(menuStack[stack_idx].title)); @@ -424,9 +424,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "cfg|CFG", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, INPUT_PRESETS_DIR_PATH); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "cfg|CFG", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, INPUT_PRESETS_DIR_PATH); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case SHADER_CHOICE: strlcpy(menuStack[stack_idx].title, "Shaders", sizeof(menuStack[stack_idx].title)); @@ -435,9 +435,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "cg|CG", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, SHADERS_DIR_PATH); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "cg|CG", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, SHADERS_DIR_PATH); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case BORDER_CHOICE: strlcpy(menuStack[stack_idx].title, "Borders", sizeof(menuStack[stack_idx].title)); @@ -446,9 +446,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "png|PNG|jpg|JPG|JPEG|jpeg", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, BORDERS_DIR_PATH); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "png|PNG|jpg|JPG|JPEG|jpeg", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, BORDERS_DIR_PATH); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_SAVESTATES_DIR_CHOICE: @@ -461,9 +461,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser.extensions, "empty", sizeof(tmpBrowser.extensions)); - filebrowser_set_root(&tmpBrowser, "/"); - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser->extensions, "empty", sizeof(tmpBrowser->extensions)); + filebrowser_set_root(tmpBrowser, "/"); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); break; case GENERAL_VIDEO_MENU: strlcpy(menuStack[stack_idx].title, "Video", sizeof(menuStack[stack_idx].title)); @@ -581,7 +581,7 @@ static void display_menubar(void) retro_get_system_info(&info); const char *id = info.library_name ? info.library_name : "Unknown"; - filebrowser_t *fb = &browser; + filebrowser_t *fb = browser; switch(menu_obj->enum_id) { @@ -594,7 +594,7 @@ static void display_menubar(void) case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_CHEATS_DIR_CHOICE: case PATH_SRAM_DIR_CHOICE: - fb = &tmpBrowser; + fb = tmpBrowser; case FILE_BROWSER_MENU: cellDbgFontPrintf (0.09f, 0.09f, FONT_SIZE, YELLOW, "PATH: %s", filebrowser_get_current_dir(fb)); break; @@ -737,22 +737,22 @@ static void select_file(void) break; } - browser_update(&tmpBrowser, extensions); + browser_update(tmpBrowser, extensions); if (CTRL_CROSS(trigger_state)) { - if(filebrowser_get_current_path_isdir(&tmpBrowser)) + if(filebrowser_get_current_path_isdir(tmpBrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ - if(tmpBrowser.current_dir.ptr == 0) - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL); + if(tmpBrowser->current_dir.ptr == 0) + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_CANCEL); else - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_OK); } - else if (path_file_exists(filebrowser_get_current_path(&tmpBrowser))) + else if (path_file_exists(filebrowser_get_current_path(tmpBrowser))) { - snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser)); + snprintf(path, sizeof(path), filebrowser_get_current_path(tmpBrowser)); switch(menu_id) { @@ -813,13 +813,13 @@ static void select_directory(void) gl_t * gl = driver.video_data; { - browser_update(&tmpBrowser, "empty"); + browser_update(tmpBrowser, "empty"); if (CTRL_SQUARE(trigger_state)) { - if(filebrowser_get_current_path_isdir(&tmpBrowser)) + if(filebrowser_get_current_path_isdir(tmpBrowser)) { - snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser)); + snprintf(path, sizeof(path), filebrowser_get_current_path(tmpBrowser)); switch(menu_id) { case PATH_SAVESTATES_DIR_CHOICE: @@ -860,15 +860,15 @@ static void select_directory(void) } else if (CTRL_CROSS(trigger_state)) { - if(filebrowser_get_current_path_isdir(&tmpBrowser)) + if(filebrowser_get_current_path_isdir(tmpBrowser)) { /* if 'filename' is in fact '..' - then pop back directory instead of * adding '..' to filename path */ - if(tmpBrowser.current_dir.ptr == 0) - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL); + if(tmpBrowser->current_dir.ptr == 0) + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_CANCEL); else - filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK); + filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_OK); } } } @@ -1631,7 +1631,7 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac if(filebrowser_get_current_path_isdir(filebrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ - if(browser.current_dir.ptr == 0) + if(browser->current_dir.ptr == 0) filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_CANCEL); else filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK); @@ -1667,7 +1667,7 @@ static void select_rom(void) { gl_t * gl = driver.video_data; - browser_update(&browser, rarch_console_get_rom_ext()); + browser_update(browser, rarch_console_get_rom_ext()); menu_romselect_action_t action = MENU_ROMSELECT_ACTION_NOOP; if (CTRL_SELECT(trigger_state)) @@ -1676,19 +1676,19 @@ static void select_rom(void) action = MENU_ROMSELECT_ACTION_OK; if (action != MENU_ROMSELECT_ACTION_NOOP) - menu_romselect_iterate(&browser, action); + menu_romselect_iterate(browser, action); - if (filebrowser_get_current_path_isdir(&browser)) + if (filebrowser_get_current_path_isdir(browser)) { - if(!strcmp(filebrowser_get_current_path(&browser),"app_home") || !strcmp(filebrowser_get_current_path(&browser),"host_root")) + if(!strcmp(filebrowser_get_current_path(browser),"app_home") || !strcmp(filebrowser_get_current_path(browser),"host_root")) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, RED, "WARNING - This path only works on DEX PS3 systems. Do not attempt to open\n this directory on CEX PS3 systems, or you might have to restart."); - else if(!strcmp(filebrowser_get_current_path(&browser),"..")) + else if(!strcmp(filebrowser_get_current_path(browser),"..")) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to go back to the previous directory."); else cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to enter the directory."); } - if (path_file_exists(filebrowser_get_current_path(&browser))) + if (path_file_exists(filebrowser_get_current_path(browser))) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to load the game. "); display_menubar(); @@ -2057,14 +2057,18 @@ static bool check_shoulder_buttons(uint64_t state_tmp) void menu_init (void) { + browser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); + tmpBrowser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); menu_stack_push(0, FILE_BROWSER_MENU); - filebrowser_set_root(&tmpBrowser, "/"); + filebrowser_set_root(tmpBrowser, "/"); } void menu_free (void) { - filebrowser_free(&browser); - filebrowser_free(&tmpBrowser); + filebrowser_free(browser); + filebrowser_free(tmpBrowser); + free(browser); + free(tmpBrowser); } void menu_loop(void) @@ -2124,13 +2128,13 @@ void menu_loop(void) rarch_render_cached_frame(); - filebrowser_t * fb = &browser; + filebrowser_t * fb = browser; switch(menu_id) { case FILE_BROWSER_MENU: select_rom(); - fb = &browser; + fb = browser; break; case GENERAL_VIDEO_MENU: case GENERAL_AUDIO_MENU: @@ -2147,14 +2151,14 @@ void menu_loop(void) case LIBRETRO_CHOICE: case INPUT_PRESET_CHOICE: select_file(); - fb = &tmpBrowser; + fb = tmpBrowser; break; case PATH_SAVESTATES_DIR_CHOICE: case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_CHEATS_DIR_CHOICE: case PATH_SRAM_DIR_CHOICE: select_directory(); - fb = &tmpBrowser; + fb = tmpBrowser; break; case INGAME_MENU: if(g_console.ingame_menu_enable) From 28691bef9a217b5ef845a204b3cadcf86102aab6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 16 Jul 2012 08:37:58 +0200 Subject: [PATCH 07/10] (360) put filebrowser on heap --- 360/frontend-xdk/menu.cpp | 72 +++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index 0fb68fed64..3107092897 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -28,8 +28,8 @@ CRetroArch app; HXUIOBJ hCur; -filebrowser_t browser; -filebrowser_t tmp_browser; +filebrowser_t *browser; +filebrowser_t *tmp_browser; uint32_t set_shader = 0; wchar_t strw_buffer[PATH_MAX]; @@ -89,10 +89,10 @@ HRESULT CRetroArchFileBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled GetChildById(L"XuiBtnGameDir", &m_dir_game); GetChildById(L"XuiBtnCacheDir", &m_dir_cache); - filebrowser_set_root(&browser, g_console.default_rom_startup_dir); - strlcpy(tmp_browser.extensions, rarch_console_get_rom_ext(), sizeof(tmp_browser.extensions)); + filebrowser_set_root(browser, g_console.default_rom_startup_dir); + strlcpy(tmp_browser->extensions, rarch_console_get_rom_ext(), sizeof(tmp_browser->extensions)); filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, - &browser, &m_romlist, &m_rompathtitle); + browser, &m_romlist, &m_rompathtitle); return 0; } @@ -103,9 +103,9 @@ HRESULT CRetroArchCoreBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled GetChildById(L"XuiBackButton1", &m_back); GetChildById(L"XuiTxtRomPath", &m_rompathtitle); - filebrowser_set_root(&tmp_browser, "game:"); - strlcpy(tmp_browser.extensions, "xex|XEX", sizeof(tmp_browser.extensions)); - filebrowser_fetch_directory_entries("game:", &tmp_browser, &m_romlist, &m_rompathtitle); + filebrowser_set_root(tmp_browser, "game:"); + strlcpy(tmp_browser->extensions, "xex|XEX", sizeof(tmp_browser->extensions)); + filebrowser_fetch_directory_entries("game:", tmp_browser, &m_romlist, &m_rompathtitle); return 0; } @@ -116,9 +116,9 @@ HRESULT CRetroArchShaderBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandl GetChildById(L"XuiBackButton1", &m_back); GetChildById(L"XuiTxtRomPath", &m_shaderpathtitle); - filebrowser_set_root(&tmp_browser, "game:\\media\\shaders"); - strlcpy(tmp_browser.extensions, "cg|CG", sizeof(tmp_browser.extensions)); - filebrowser_fetch_directory_entries("game:\\media\\shaders", &tmp_browser, + filebrowser_set_root(tmp_browser, "game:\\media\\shaders"); + strlcpy(tmp_browser->extensions, "cg|CG", sizeof(tmp_browser->extensions)); + filebrowser_fetch_directory_entries("game:\\media\\shaders", tmp_browser, &m_shaderlist, &m_shaderpathtitle); return 0; @@ -544,35 +544,35 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle { int index = m_romlist.GetCurSel(); const char *strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); - if(path_file_exists(browser.current_dir.list->elems[index].data)) + if(path_file_exists(browser->current_dir.list->elems[index].data)) { char path_tmp[1024]; struct retro_system_info info; retro_get_system_info(&info); bool block_zip_extract = info.block_extract; - snprintf(path_tmp, sizeof(path_tmp), "%s\\%s", filebrowser_get_current_dir(&browser), strbuffer); + snprintf(path_tmp, sizeof(path_tmp), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); if((strstr(strbuffer, ".zip") || strstr(strbuffer, ".ZIP")) && !block_zip_extract) rarch_extract_zipfile(path_tmp); else rarch_console_load_game(path_tmp); } - else if(browser.current_dir.list->elems[index].attr.b) + else if(browser->current_dir.list->elems[index].attr.b) { - snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(&browser), strbuffer); - filebrowser_fetch_directory_entries(path, &browser, &m_romlist, &m_rompathtitle); + snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); + filebrowser_fetch_directory_entries(path, browser, &m_romlist, &m_rompathtitle); } } else if (hObjPressed == m_dir_game) { - filebrowser_new(&browser, g_console.default_rom_startup_dir, rarch_console_get_rom_ext()); - filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, &browser, &m_romlist, &m_rompathtitle); + filebrowser_new(browser, g_console.default_rom_startup_dir, rarch_console_get_rom_ext()); + filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, browser, &m_romlist, &m_rompathtitle); } #ifdef HAVE_HDD_CACHE_PARTITION else if (hObjPressed == m_dir_cache) { - filebrowser_new(&browser, "cache:", rarch_console_get_rom_ext()); - filebrowser_fetch_directory_entries("cache:", &browser, &m_romlist, &m_rompathtitle); + filebrowser_new(browser, "cache:", rarch_console_get_rom_ext()); + filebrowser_fetch_directory_entries("cache:", browser, &m_romlist, &m_rompathtitle); if (g_console.info_msg_enable) rarch_settings_msg(S_MSG_CACHE_PARTITION, S_DELAY_180); @@ -591,29 +591,29 @@ HRESULT CRetroArchShaderBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHand if(hObjPressed == m_shaderlist) { int index = m_shaderlist.GetCurSel(); - if(path_file_exists(tmp_browser.current_dir.list->elems[index].data)) + if(path_file_exists(tmp_browser->current_dir.list->elems[index].data)) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); switch(set_shader) { case 1: - snprintf(g_settings.video.cg_shader_path, sizeof(g_settings.video.cg_shader_path), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); + snprintf(g_settings.video.cg_shader_path, sizeof(g_settings.video.cg_shader_path), "%s\\%s", filebrowser_get_current_dir(tmp_browser), strbuffer); rarch_load_shader(set_shader, g_settings.video.cg_shader_path); break; case 2: - snprintf (g_settings.video.second_pass_shader, sizeof(g_settings.video.second_pass_shader), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); + snprintf (g_settings.video.second_pass_shader, sizeof(g_settings.video.second_pass_shader), "%s\\%s", filebrowser_get_current_dir(tmp_browser), strbuffer); rarch_load_shader(set_shader, g_settings.video.second_pass_shader); break; default: break; } } - else if(tmp_browser.current_dir.list->elems[index].attr.b) + else if(tmp_browser->current_dir.list->elems[index].attr.b) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); - snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); - filebrowser_fetch_directory_entries(path, &tmp_browser, &m_shaderlist, &m_shaderpathtitle); + snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(tmp_browser), strbuffer); + filebrowser_fetch_directory_entries(path, tmp_browser, &m_shaderlist, &m_shaderpathtitle); } } @@ -629,17 +629,17 @@ HRESULT CRetroArchCoreBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle if(hObjPressed == m_romlist) { int index = m_romlist.GetCurSel(); - if(path_file_exists(tmp_browser.current_dir.list->elems[index].data)) + if(path_file_exists(tmp_browser->current_dir.list->elems[index].data)) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); - snprintf(g_console.launch_app_on_exit, sizeof(g_console.launch_app_on_exit), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); + snprintf(g_console.launch_app_on_exit, sizeof(g_console.launch_app_on_exit), "%s\\%s", filebrowser_get_current_dir(tmp_browser), strbuffer); rarch_settings_change(S_RETURN_TO_LAUNCHER); } - else if(tmp_browser.current_dir.list->elems[index].attr.b) + else if(tmp_browser->current_dir.list->elems[index].attr.b) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); - snprintf(path, sizeof(path), "%s%s\\", filebrowser_get_current_dir(&tmp_browser), strbuffer); - filebrowser_fetch_directory_entries(path, &tmp_browser, &m_romlist, &m_rompathtitle); + snprintf(path, sizeof(path), "%s%s\\", filebrowser_get_current_dir(tmp_browser), strbuffer); + filebrowser_fetch_directory_entries(path, tmp_browser, &m_romlist, &m_rompathtitle); } } @@ -851,15 +851,19 @@ int menu_init (void) hCur = app.hMainScene; XuiSceneNavigateFirst(app.GetRootObj(), app.hMainScene, XUSER_INDEX_FOCUS); - filebrowser_new(&browser, g_console.default_rom_startup_dir, rarch_console_get_rom_ext()); + browser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); + tmp_browser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); + filebrowser_new(browser, g_console.default_rom_startup_dir, rarch_console_get_rom_ext()); return 0; } void menu_free (void) { - filebrowser_free(&browser); - filebrowser_free(&tmp_browser); + filebrowser_free(browser); + filebrowser_free(tmp_browser); + free(browser); + free(tmp_browser); app.Uninit(); } From dcb670f2436f635b00819b543891ac52ae50ae4f Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 08:44:13 +0200 Subject: [PATCH 08/10] Revert "(PS3) Put filebrowsers on heap" This reverts commit 69cd4ffc4673933d92d8cb6090c43ee99b17a3cf. --- ps3/frontend/menu.c | 110 +++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index bea016866f..b58c5fc3c3 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -49,8 +49,8 @@ menu menuStack[10]; int menuStackindex = 0; static bool set_libretro_core_as_launch; -filebrowser_t *browser; -filebrowser_t *tmpBrowser; +filebrowser_t browser; +filebrowser_t tmpBrowser; unsigned set_shader = 0; static unsigned currently_selected_controller_menu = 0; static char strw_buffer[PATH_MAX]; @@ -391,9 +391,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(browser->extensions, rarch_console_get_rom_ext(), sizeof(browser->extensions)); - filebrowser_set_root(browser, g_console.default_rom_startup_dir); - filebrowser_iterate(browser, FILEBROWSER_ACTION_RESET); + strlcpy(browser.extensions, rarch_console_get_rom_ext(), sizeof(browser.extensions)); + filebrowser_set_root(&browser, g_console.default_rom_startup_dir); + filebrowser_iterate(&browser, FILEBROWSER_ACTION_RESET); break; case LIBRETRO_CHOICE: strlcpy(menuStack[stack_idx].title, "Libretro cores", sizeof(menuStack[stack_idx].title)); @@ -402,9 +402,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "self|SELF|bin|BIN", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, LIBRETRO_DIR_PATH); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "self|SELF|bin|BIN", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, LIBRETRO_DIR_PATH); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case PRESET_CHOICE: strlcpy(menuStack[stack_idx].title, "Shader presets", sizeof(menuStack[stack_idx].title)); @@ -413,9 +413,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "cgp|CGP", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, PRESETS_DIR_PATH); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "cgp|CGP", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, PRESETS_DIR_PATH); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case INPUT_PRESET_CHOICE: strlcpy(menuStack[stack_idx].title, "Input presets", sizeof(menuStack[stack_idx].title)); @@ -424,9 +424,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "cfg|CFG", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, INPUT_PRESETS_DIR_PATH); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "cfg|CFG", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, INPUT_PRESETS_DIR_PATH); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case SHADER_CHOICE: strlcpy(menuStack[stack_idx].title, "Shaders", sizeof(menuStack[stack_idx].title)); @@ -435,9 +435,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "cg|CG", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, SHADERS_DIR_PATH); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "cg|CG", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, SHADERS_DIR_PATH); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case BORDER_CHOICE: strlcpy(menuStack[stack_idx].title, "Borders", sizeof(menuStack[stack_idx].title)); @@ -446,9 +446,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "png|PNG|jpg|JPG|JPEG|jpeg", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, BORDERS_DIR_PATH); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "png|PNG|jpg|JPG|JPEG|jpeg", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, BORDERS_DIR_PATH); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_SAVESTATES_DIR_CHOICE: @@ -461,9 +461,9 @@ static void menu_stack_push(unsigned stack_idx, unsigned menu_id) menuStack[stack_idx].page = 0; menuStack[stack_idx].category_id = CATEGORY_FILEBROWSER; menu_stack_refresh(items_generalsettings, stack_idx); - strlcpy(tmpBrowser->extensions, "empty", sizeof(tmpBrowser->extensions)); - filebrowser_set_root(tmpBrowser, "/"); - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_RESET); + strlcpy(tmpBrowser.extensions, "empty", sizeof(tmpBrowser.extensions)); + filebrowser_set_root(&tmpBrowser, "/"); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET); break; case GENERAL_VIDEO_MENU: strlcpy(menuStack[stack_idx].title, "Video", sizeof(menuStack[stack_idx].title)); @@ -581,7 +581,7 @@ static void display_menubar(void) retro_get_system_info(&info); const char *id = info.library_name ? info.library_name : "Unknown"; - filebrowser_t *fb = browser; + filebrowser_t *fb = &browser; switch(menu_obj->enum_id) { @@ -594,7 +594,7 @@ static void display_menubar(void) case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_CHEATS_DIR_CHOICE: case PATH_SRAM_DIR_CHOICE: - fb = tmpBrowser; + fb = &tmpBrowser; case FILE_BROWSER_MENU: cellDbgFontPrintf (0.09f, 0.09f, FONT_SIZE, YELLOW, "PATH: %s", filebrowser_get_current_dir(fb)); break; @@ -737,22 +737,22 @@ static void select_file(void) break; } - browser_update(tmpBrowser, extensions); + browser_update(&tmpBrowser, extensions); if (CTRL_CROSS(trigger_state)) { - if(filebrowser_get_current_path_isdir(tmpBrowser)) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ - if(tmpBrowser->current_dir.ptr == 0) - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_CANCEL); + if(tmpBrowser.current_dir.ptr == 0) + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL); else - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_OK); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK); } - else if (path_file_exists(filebrowser_get_current_path(tmpBrowser))) + else if (path_file_exists(filebrowser_get_current_path(&tmpBrowser))) { - snprintf(path, sizeof(path), filebrowser_get_current_path(tmpBrowser)); + snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser)); switch(menu_id) { @@ -813,13 +813,13 @@ static void select_directory(void) gl_t * gl = driver.video_data; { - browser_update(tmpBrowser, "empty"); + browser_update(&tmpBrowser, "empty"); if (CTRL_SQUARE(trigger_state)) { - if(filebrowser_get_current_path_isdir(tmpBrowser)) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { - snprintf(path, sizeof(path), filebrowser_get_current_path(tmpBrowser)); + snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser)); switch(menu_id) { case PATH_SAVESTATES_DIR_CHOICE: @@ -860,15 +860,15 @@ static void select_directory(void) } else if (CTRL_CROSS(trigger_state)) { - if(filebrowser_get_current_path_isdir(tmpBrowser)) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { /* if 'filename' is in fact '..' - then pop back directory instead of * adding '..' to filename path */ - if(tmpBrowser->current_dir.ptr == 0) - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_CANCEL); + if(tmpBrowser.current_dir.ptr == 0) + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL); else - filebrowser_iterate(tmpBrowser, FILEBROWSER_ACTION_OK); + filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK); } } } @@ -1631,7 +1631,7 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac if(filebrowser_get_current_path_isdir(filebrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ - if(browser->current_dir.ptr == 0) + if(browser.current_dir.ptr == 0) filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_CANCEL); else filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK); @@ -1667,7 +1667,7 @@ static void select_rom(void) { gl_t * gl = driver.video_data; - browser_update(browser, rarch_console_get_rom_ext()); + browser_update(&browser, rarch_console_get_rom_ext()); menu_romselect_action_t action = MENU_ROMSELECT_ACTION_NOOP; if (CTRL_SELECT(trigger_state)) @@ -1676,19 +1676,19 @@ static void select_rom(void) action = MENU_ROMSELECT_ACTION_OK; if (action != MENU_ROMSELECT_ACTION_NOOP) - menu_romselect_iterate(browser, action); + menu_romselect_iterate(&browser, action); - if (filebrowser_get_current_path_isdir(browser)) + if (filebrowser_get_current_path_isdir(&browser)) { - if(!strcmp(filebrowser_get_current_path(browser),"app_home") || !strcmp(filebrowser_get_current_path(browser),"host_root")) + if(!strcmp(filebrowser_get_current_path(&browser),"app_home") || !strcmp(filebrowser_get_current_path(&browser),"host_root")) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, RED, "WARNING - This path only works on DEX PS3 systems. Do not attempt to open\n this directory on CEX PS3 systems, or you might have to restart."); - else if(!strcmp(filebrowser_get_current_path(browser),"..")) + else if(!strcmp(filebrowser_get_current_path(&browser),"..")) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to go back to the previous directory."); else cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to enter the directory."); } - if (path_file_exists(filebrowser_get_current_path(browser))) + if (path_file_exists(filebrowser_get_current_path(&browser))) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, LIGHTBLUE, "INFO - Press X to load the game. "); display_menubar(); @@ -2057,18 +2057,14 @@ static bool check_shoulder_buttons(uint64_t state_tmp) void menu_init (void) { - browser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); - tmpBrowser = (filebrowser_t*)malloc(1 * sizeof(filebrowser_t)); menu_stack_push(0, FILE_BROWSER_MENU); - filebrowser_set_root(tmpBrowser, "/"); + filebrowser_set_root(&tmpBrowser, "/"); } void menu_free (void) { - filebrowser_free(browser); - filebrowser_free(tmpBrowser); - free(browser); - free(tmpBrowser); + filebrowser_free(&browser); + filebrowser_free(&tmpBrowser); } void menu_loop(void) @@ -2128,13 +2124,13 @@ void menu_loop(void) rarch_render_cached_frame(); - filebrowser_t * fb = browser; + filebrowser_t * fb = &browser; switch(menu_id) { case FILE_BROWSER_MENU: select_rom(); - fb = browser; + fb = &browser; break; case GENERAL_VIDEO_MENU: case GENERAL_AUDIO_MENU: @@ -2151,14 +2147,14 @@ void menu_loop(void) case LIBRETRO_CHOICE: case INPUT_PRESET_CHOICE: select_file(); - fb = tmpBrowser; + fb = &tmpBrowser; break; case PATH_SAVESTATES_DIR_CHOICE: case PATH_DEFAULT_ROM_DIR_CHOICE: case PATH_CHEATS_DIR_CHOICE: case PATH_SRAM_DIR_CHOICE: select_directory(); - fb = tmpBrowser; + fb = &tmpBrowser; break; case INGAME_MENU: if(g_console.ingame_menu_enable) From d6c32186d6ae2fc408a86fc3e536c4d6ab843939 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 09:40:26 +0200 Subject: [PATCH 09/10] (PS3) Beginning of platform-agnostic controls - using a wrapper for now --- ps3/frontend/menu.c | 60 +++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index b58c5fc3c3..d34bc18b5d 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -609,40 +609,70 @@ static void display_menubar(void) } uint64_t state, trigger_state, held_state; +uint16_t input_state, old_input_state = 0; static uint64_t old_state = 0; static uint64_t older_state = 0; -static void browser_update(filebrowser_t * b, const char *extensions) +static void control_update_wrap(void) { - filebrowser_action_t action = FILEBROWSER_ACTION_NOOP; + input_state = 0; + input_ps3.poll(NULL); if (CTRL_LSTICK_DOWN(trigger_state)) - action = FILEBROWSER_ACTION_DOWN; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_DOWN); else if (CTRL_DOWN(trigger_state)) - action = FILEBROWSER_ACTION_DOWN; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_DOWN); else if (CTRL_LSTICK_UP(trigger_state)) - action = FILEBROWSER_ACTION_UP; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_UP); else if (CTRL_UP(trigger_state)) - action = FILEBROWSER_ACTION_UP; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_UP); else if (CTRL_RIGHT(trigger_state)) - action = FILEBROWSER_ACTION_RIGHT; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT); else if (CTRL_LSTICK_RIGHT(trigger_state)) - action = FILEBROWSER_ACTION_RIGHT; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT); else if (CTRL_LEFT(trigger_state)) - action = FILEBROWSER_ACTION_LEFT; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_LEFT); else if (CTRL_LSTICK_LEFT(trigger_state)) - action = FILEBROWSER_ACTION_LEFT; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_LEFT); else if (CTRL_R1(trigger_state)) - action = FILEBROWSER_ACTION_SCROLL_DOWN; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_R); else if (CTRL_R2(trigger_state)) - action = FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_R2); else if (CTRL_L2(trigger_state)) - action = FILEBROWSER_ACTION_SCROLL_UP_SMOOTH; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_L2); else if (CTRL_L1(trigger_state)) - action = FILEBROWSER_ACTION_SCROLL_UP; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_L); else if (CTRL_CIRCLE(trigger_state)) - action = FILEBROWSER_ACTION_CANCEL; + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_X); else if (CTRL_START(trigger_state)) + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_START); +} + +static void browser_update(filebrowser_t * b, const char *extensions) +{ + control_update_wrap(); + filebrowser_action_t action = FILEBROWSER_ACTION_NOOP; + uint16_t trigger_st = input_state & ~old_input_state; + + if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN)) + action = FILEBROWSER_ACTION_DOWN; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_UP)) + action = FILEBROWSER_ACTION_UP; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) + action = FILEBROWSER_ACTION_RIGHT; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) + action = FILEBROWSER_ACTION_LEFT; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_R)) + action = FILEBROWSER_ACTION_SCROLL_DOWN; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_R2)) + action = FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_L2)) + action = FILEBROWSER_ACTION_SCROLL_UP_SMOOTH; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_L)) + action = FILEBROWSER_ACTION_SCROLL_UP; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_A)) + action = FILEBROWSER_ACTION_CANCEL; + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_START)) { action = FILEBROWSER_ACTION_RESET; filebrowser_set_root(b, "/"); From 74e118aec5c845a208566dd3a5c78b93b9296dd7 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 16 Jul 2012 09:53:27 +0200 Subject: [PATCH 10/10] (PS3) More reworking of controls in menu code --- ps3/frontend/menu.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index d34bc18b5d..dbbe7a32ce 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -642,10 +642,18 @@ static void control_update_wrap(void) input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_L2); else if (CTRL_L1(trigger_state)) input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_L); - else if (CTRL_CIRCLE(trigger_state)) + else if (CTRL_SQUARE(trigger_state)) + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_Y); + else if (CTRL_TRIANGLE(trigger_state)) input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_X); + else if (CTRL_CIRCLE(trigger_state)) + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_A); + else if (CTRL_CROSS(trigger_state)) + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_B); else if (CTRL_START(trigger_state)) input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_START); + else if (CTRL_SELECT(trigger_state)) + input_state |= (1 << RETRO_DEVICE_ID_JOYPAD_SELECT); } static void browser_update(filebrowser_t * b, const char *extensions) @@ -768,8 +776,9 @@ static void select_file(void) } browser_update(&tmpBrowser, extensions); + uint16_t trigger_st = input_state & ~old_input_state; - if (CTRL_CROSS(trigger_state)) + if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_B)) { if(filebrowser_get_current_path_isdir(&tmpBrowser)) { @@ -826,7 +835,7 @@ static void select_file(void) menu_stack_decrement(); } } - else if (CTRL_TRIANGLE(trigger_state)) + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_X)) menu_stack_decrement(); display_menubar(); @@ -1698,11 +1707,13 @@ static void select_rom(void) gl_t * gl = driver.video_data; browser_update(&browser, rarch_console_get_rom_ext()); + uint16_t trigger_st = input_state & ~old_input_state; + menu_romselect_action_t action = MENU_ROMSELECT_ACTION_NOOP; - if (CTRL_SELECT(trigger_state)) + if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT)) action = MENU_ROMSELECT_ACTION_GOTO_SETTINGS; - else if (CTRL_CROSS(trigger_state)) + else if (trigger_st & (1 << RETRO_DEVICE_ID_JOYPAD_B)) action = MENU_ROMSELECT_ACTION_OK; if (action != MENU_ROMSELECT_ACTION_NOOP)