diff --git a/360/file_browser.c b/360/file_browser.c index 89f4792724..3254db7e05 100644 --- a/360/file_browser.c +++ b/360/file_browser.c @@ -17,7 +17,7 @@ */ #include -#include "fileio.h" +#include "file_browser.h" #include "../general.h" #include "../file.h" @@ -89,7 +89,7 @@ void filebrowser_parse_directory(filebrowser_t * filebrowser, const char * path, found_dir = true; filebrowser->cur[filebrowser->file_count].d_type = found_dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL; - strlcat(filebrowser->cur[filebrowser->file_count].d_nam, ffd.cFileName, PATH_MAX); + sprintf(filebrowser->cur[filebrowser->file_count].d_name, ffd.cFileName); filebrowser->file_count++; }while (FindNextFile(hFind, &ffd) != 0 && (filebrowser->file_count + 1) < FATX_MAX_FILE_LIMIT); diff --git a/360/file_browser.h b/360/file_browser.h index fd5115e366..70f251c5e3 100644 --- a/360/file_browser.h +++ b/360/file_browser.h @@ -20,7 +20,7 @@ typedef struct { unsigned d_type; - char d_nam[XCONTENT_MAX_FILENAME_LENGTH]; + CHAR d_name[MAX_PATH]; } DirectoryEntry; typedef struct { diff --git a/360/main.c b/360/main.c index 9458008637..0c9949e03b 100644 --- a/360/main.c +++ b/360/main.c @@ -23,6 +23,7 @@ #include #include "menu.h" #include "xdk360_video.h" +#include "../console/main_wrap.h" #include "../general.h" #include "shared.h" @@ -121,22 +122,6 @@ static int Mount( int Device, char* MountPoint ) return DriveMounted(MountPoint); } - -static void MountAll() -{ - memset(&Mounted,0,20); - - Mounted[DEVICE_USB0] = Mount(DEVICE_USB0,"Usb0:"); - Mounted[DEVICE_USB1] = Mount(DEVICE_USB1,"Usb1:"); - Mounted[DEVICE_USB2] = Mount(DEVICE_USB2,"Usb2:"); - Mounted[DEVICE_HARDISK0_PART1] = Mount(DEVICE_HARDISK0_PART1,"Hdd1:"); - Mounted[DEVICE_HARDISK0_SYSPART] = Mount(DEVICE_HARDISK0_SYSPART,"HddX:"); - Mounted[DEVICE_MEMORY_UNIT0] = Mount(DEVICE_MEMORY_UNIT0,"Memunit0:"); - Mounted[DEVICE_MEMORY_UNIT1] = Mount(DEVICE_MEMORY_UNIT1,"Memunit1:"); - Mounted[DEVICE_MEMORY_ONBOARD] = Mount(DEVICE_MEMORY_ONBOARD,"OnBoardMU:"); - Mounted[DEVICE_CDROM0] = Mount(DEVICE_CDROM0,"Dvd:"); -} - static void set_default_settings(void) { //g_settings @@ -153,13 +138,23 @@ static void get_environment_settings (void) //in a different way //DmMapDevkitDrive(); - MountAll(); + memset(&Mounted, 0, 20); + + Mounted[DEVICE_USB0] = Mount(DEVICE_USB0,"Usb0:"); + Mounted[DEVICE_USB1] = Mount(DEVICE_USB1,"Usb1:"); + Mounted[DEVICE_USB2] = Mount(DEVICE_USB2,"Usb2:"); + Mounted[DEVICE_HARDISK0_PART1] = Mount(DEVICE_HARDISK0_PART1,"Hdd1:"); + Mounted[DEVICE_HARDISK0_SYSPART] = Mount(DEVICE_HARDISK0_SYSPART,"HddX:"); + Mounted[DEVICE_MEMORY_UNIT0] = Mount(DEVICE_MEMORY_UNIT0,"Memunit0:"); + Mounted[DEVICE_MEMORY_UNIT1] = Mount(DEVICE_MEMORY_UNIT1,"Memunit1:"); + Mounted[DEVICE_MEMORY_ONBOARD] = Mount(DEVICE_MEMORY_ONBOARD,"OnBoardMU:"); + Mounted[DEVICE_CDROM0] = Mount(DEVICE_CDROM0,"Dvd:"); BOOL result_filecache = XSetFileCacheSize(0x100000); if(result_filecache != TRUE) { - SSNES_ERR("Couldn't hange number of bytes reserved for file system cache.\n"); + SSNES_ERR("Couldn't change number of bytes reserved for file system cache.\n"); } DWORD result = XMountUtilityDriveEx(XMOUNTUTILITYDRIVE_FORMAT0,8192, 0); @@ -223,15 +218,15 @@ begin_loop: { if(g_emulator_initialized) ssnes_main_deinit(); + + struct ssnes_main_wrap args; + args.verbose = g_extern.verbose; + args.sram_path = NULL; + args.state_path = NULL; + args.config_path = NULL; + args.rom_path = g_console.rom_path; - char arg1[] = "ssnes"; - char arg2[] = "d:\\roms\\mario.sfc"; - char arg3[] = "-v"; - char arg4[] = "-c"; - char arg5[] = "d:\\ssnes.cfg"; - char *argv_[] = { arg1, arg2, arg3, arg4, arg5, NULL }; - int argc_ = sizeof(argv_) / sizeof(argv_[0]) - 1; - int init_ret = ssnes_main_init(argc_, argv_); + int init_ret = ssnes_main_init_wrap(&args); g_emulator_initialized = 1; init_ssnes = 0; } diff --git a/360/media/ssnes_filebrowser.xui b/360/media/ssnes_filebrowser.xui new file mode 100644 index 0000000000..7308ca57aa --- /dev/null +++ b/360/media/ssnes_filebrowser.xui @@ -0,0 +1,76 @@ + + +1280.000000 +720.000000 + + + +XuiSceneFileBrowser +410.000000 +251.000000 +439.013489,260.875977,0.000000 +SSNESFileBrowser + + + +XuiTxtTitle +111.840027 +40.000000 +28.893612,12.519989,0.000000 +Filebrowser +0xff0f0f0f +0x800f0f0f +Arial Unicode MS +21 + + + + +XuiRomList +362.400024 +118.960022 +22.799980,81.600006,0.000000 + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + + + + +XuiBackButton1 +219.000000 +36.000000 +168.679993,202.600006,0.000000 +22593 + + + + +XuiTxtRomPath +166.559998 +28.480011 +96.000000,42.480011,0.000000 +0xff0f0f0f +0x800f0f0f + + + + +XuiLblPath +72.880005 +28.000000 +26.000000,43.000000,0.000000 +PATH: + + + + diff --git a/360/menu.cpp b/360/menu.cpp index 7f7c85338c..0670f2a988 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -33,6 +33,7 @@ HXUIOBJ hMainScene; HXUIOBJ hFileBrowser; HXUIOBJ hSSNESSettings; filebrowser_t browser; +char strbuffer[1024]; /* Register custom classes */ HRESULT CSSNES::RegisterXuiClasses (void) @@ -40,7 +41,6 @@ HRESULT CSSNES::RegisterXuiClasses (void) CSSNESMain::Register(); CSSNESFileBrowser::Register(); CSSNESSettings::Register(); - filebrowser_parse_directory(&browser, "game:\\roms\\", ssnes_console_get_rom_ext()); return S_OK; } @@ -56,6 +56,24 @@ HRESULT CSSNES::UnregisterXuiClasses (void) HRESULT CSSNESFileBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) { GetChildById(L"XuiRomList", &m_romlist); + GetChildById(L"XuiTxtRomPath", &m_rompathtitle); + + filebrowser_parse_directory(&browser, "game:\\roms\\", ssnes_console_get_rom_ext()); + + DWORD dwNum_rompath = MultiByteToWideChar(CP_ACP, 0, "game:\\roms\\", -1, NULL, 0); + wchar_t * rompath_name = new wchar_t[dwNum_rompath]; + MultiByteToWideChar(CP_ACP, 0, "game:\\roms\\", -1, rompath_name, dwNum_rompath); + m_rompathtitle.SetText(rompath_name); + + m_romlist.InsertItems(0, browser.file_count); + for(unsigned i = 0; i < browser.file_count; i++) + { + DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, NULL, 0); + wchar_t * entry_name = new wchar_t[dwNum]; + MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, entry_name, dwNum); + m_romlist.SetText(i, entry_name); + delete []entry_name; + } return S_OK; } @@ -93,6 +111,17 @@ HRESULT CSSNESMain::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) HRESULT CSSNESFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) { + int index = m_romlist.GetCurSel(); + if(browser.cur[index].d_type != FILE_ATTRIBUTE_DIRECTORY) + { + memset(strbuffer, 0, sizeof(strbuffer)); + wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); + sprintf(g_console.rom_path, "game:\\roms\\%s", strbuffer); + g_console.menu_enable = false; + g_console.mode_switch = MODE_EMULATION; + init_ssnes = 1; + } + bHandled = TRUE; return S_OK; } @@ -125,9 +154,14 @@ HRESULT CSSNESMain::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) if ( hObjPressed == m_filebrowser ) { - g_console.menu_enable = false; - g_console.mode_switch = MODE_EMULATION; - init_ssnes = 1; + hr = XuiSceneCreate(L"file://game:/media/", L"ssnes_filebrowser.xur", NULL, &hFileBrowser); + + if (FAILED(hr)) + { + SSNES_ERR("Failed to load scene.\n"); + } + + NavigateForward(hFileBrowser); } else if ( hObjPressed == m_settings ) { diff --git a/360/menu.h b/360/menu.h index 26b3c4847e..071da459e1 100644 --- a/360/menu.h +++ b/360/menu.h @@ -37,6 +37,7 @@ class CSSNESFileBrowser: public CXuiSceneImpl { protected: CXuiList m_romlist; + CXuiTextElement m_rompathtitle; public: HRESULT OnInit( XUIMessageInit* pInitData, BOOL& bHandled ); HRESULT OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ); diff --git a/console/main_wrap.h b/console/main_wrap.h index 17bb6c5ef9..f9a63353bc 100644 --- a/console/main_wrap.h +++ b/console/main_wrap.h @@ -19,7 +19,6 @@ #define MAIN_WRAP_H__ #ifdef _MSC_VER -unsigned char bool; #else #include #endif diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj b/msvc-360/SSNES-360/SSNES-360.vcxproj index 59b07545aa..fc2df44d7a 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj @@ -278,6 +278,7 @@ true + @@ -408,7 +409,24 @@ $(OutDir)media\ssnes_settings.xur; + + + Document + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + $(OutDir)media\ssnes_filebrowser.xur; + $(OutDir)media\ssnes_filebrowser.xur; + $(OutDir)media\ssnes_filebrowser.xur; + $(OutDir)media\ssnes_filebrowser.xur; + $(OutDir)media\ssnes_filebrowser.xur; + $(OutDir)media\ssnes_filebrowser.xur; + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_filebrowser.xui" "$(OutDir)media\ssnes_filebrowser.xur" + + - + \ No newline at end of file diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters index 5ababc482d..0d26ba7c46 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters @@ -128,6 +128,9 @@ Source Files\360 + + Source Files\console + @@ -234,5 +237,8 @@ Source Files\media + + Source Files\media + - + \ No newline at end of file