From 11509592e4f9249f50640b78bfff8eaf095eb5a3 Mon Sep 17 00:00:00 2001 From: zeromus Date: Thu, 2 Jul 2009 05:12:34 +0000 Subject: [PATCH] win32: repair path-related things --- desmume/src/common.cpp | 8 +++ desmume/src/common.h | 2 + desmume/src/windows/main.cpp | 72 ++++++++++++++++----------- desmume/src/windows/pathsettings.cpp | 5 +- desmume/src/windows/resources.rc | Bin 683662 -> 683214 bytes 5 files changed, 55 insertions(+), 32 deletions(-) diff --git a/desmume/src/common.cpp b/desmume/src/common.cpp index 0b3d664f9..3aaa1614d 100644 --- a/desmume/src/common.cpp +++ b/desmume/src/common.cpp @@ -141,4 +141,12 @@ void SetRomName(const char *filename) const char *GetRomName() { return RomName.c_str(); +} + +std::string GetRomNameWithoutExtension() +{ + int x = RomName.find_first_of("."); + if (x > 0) + return RomName.substr(0,x); + else return RomName; } \ No newline at end of file diff --git a/desmume/src/common.h b/desmume/src/common.h index 0c6f85290..084a39aec 100644 --- a/desmume/src/common.h +++ b/desmume/src/common.h @@ -26,9 +26,11 @@ #include #include "types.h" +#include extern u8 gba_header_data_0x04[156]; const char* GetRomName(); //adelikat: return the name of the Rom currently loaded +std::string GetRomNameWithoutExtension(); void SetRomName(const char *filename); diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index c0c117816..0393c771f 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -82,6 +82,7 @@ #include "../lua-engine.h" #include "7zip.h" #include "pathsettings.h" +#include "utils/xstring.h" #include "directx/ddraw.h" @@ -131,6 +132,8 @@ void wxTest() { #endif +static BOOL OpenCore(const char* filename); + unsigned int lastSaveState = 0; //Keeps track of last savestate used for quick save/load functions //----Recent ROMs menu globals---------- vector RecentRoms; //The list of recent ROM filenames @@ -1264,18 +1267,22 @@ void LoadSaveStateInfo() -static BOOL LoadROM(const char * filename) +static BOOL LoadROM(const char * filename, const char * logicalName) { ResetSaveStateTimes(); NDS_Pause(); //if (strcmp(filename,"")!=0) INFO("Attempting to load ROM: %s\n",filename); + //extract the internal part of the logical rom name + std::vector parts = tokenize_str(logicalName,"|"); + SetRomName(parts[parts.size()-1].c_str()); + if (NDS_LoadROM(filename) > 0) { INFO("Loading %s was successful\n",filename); LoadSaveStateInfo(); lagframecounter=0; - UpdateRecentRoms(filename); + UpdateRecentRoms(logicalName); osd->setRotate(GPU_rotation); if (AutoRWLoad) { @@ -1283,7 +1290,7 @@ static BOOL LoadROM(const char * filename) OpenRWRecentFile(0); RamWatchHWnd = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_RAMWATCH), MainWindow->getHWnd(), (DLGPROC) RamWatchProc); } - SetRomName(filename); + return TRUE; } INFO("Loading %s FAILED.\n",filename); @@ -1464,6 +1471,7 @@ std::string GetPrivateProfileStdString(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR int _main() { + InitDecoder(); #ifdef WX_STUB wxInitialize(); @@ -1724,7 +1732,8 @@ int _main() activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); } #endif - GetPrivateProfileString("General", "Language", "0", text, 80, IniName); //================================================== ??? + + GetPrivateProfileString("General", "Language", "0", text, 80, IniName); CheckLanguage(IDC_LANGENGLISH+atoi(text)); GetPrivateProfileString("Video", "FrameSkip", "0", text, 80, IniName); @@ -1822,7 +1831,7 @@ int _main() if (cmdline.nds_file != "") { - if(LoadROM(cmdline.nds_file.c_str())) + if(OpenCore(cmdline.nds_file.c_str())) { romloaded = TRUE; if(!cmdline.start_paused) @@ -1837,8 +1846,6 @@ int _main() HK_StateLoadSlot(cmdline.load_slot); } - InitDecoder(); - MainWindow->Show(SW_NORMAL); run(); SaveRecentRoms(); @@ -2292,7 +2299,7 @@ void OpenRecentROM(int listNum) char filename[MAX_PATH]; strcpy(filename, RecentRoms[listNum].c_str()); //LOG("Attempting to load %s\n",filename); - if(LoadROM(filename)) + if(OpenCore(filename)) { romloaded = TRUE; } @@ -2314,6 +2321,31 @@ void OpenRecentROM(int listNum) #include "OpenArchive.h" #include "utils/xstring.h" +static BOOL OpenCore(const char* filename) +{ + if(!strcmp(getExtension(filename).c_str(), "gz") || !strcmp(getExtension(filename).c_str(), "nds.gz")) { + if(LoadROM(filename,filename)) { + NDS_UnPause(); + return FALSE; + } + } + + char LogicalName[1024], PhysicalName[1024]; + + const char* s_nonRomExtensions [] = {"txt", "nfo", "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "gmv", "gm2", "lua", "luasav", "sav", "srm", "brm", "cfg", "wch", "gs*"}; + + if(!ObtainFile(filename, LogicalName, PhysicalName, "rom", s_nonRomExtensions, ARRAY_SIZE(s_nonRomExtensions))) + return FALSE; + + if(LoadROM(PhysicalName, LogicalName)) + { + romloaded = TRUE; + NDS_UnPause(); + return TRUE; + } + else return FALSE; +} + LRESULT OpenFile() { HWND hwnd = MainWindow->getHWnd(); @@ -2367,8 +2399,6 @@ LRESULT OpenFile() ofn.lpstrInitialDir = buffer; - const char* s_nonRomExtensions [] = {"txt", "nfo", "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "gmv", "gm2", "lua", "luasav", "sav", "srm", "brm", "cfg", "wch", "gs*"}; - if (GetOpenFileName(&ofn) == NULL) { NDS_UnPause(); return 0; @@ -2387,19 +2417,8 @@ LRESULT OpenFile() } } - - char LogicalName[1024], PhysicalName[1024]; - - if(!strcmp(getExtension(filename).c_str(), "gz") || !strcmp(getExtension(filename).c_str(), "nds.gz")) { - if(LoadROM(filename)) { - NDS_UnPause(); - return 0; - } - } - - if(!ObtainFile(filename, LogicalName, PhysicalName, "rom", s_nonRomExtensions, sizeof(s_nonRomExtensions)/sizeof(*s_nonRomExtensions))) { + if(!OpenCore(filename)) return 0; - } // if(!GetOpenFileName(&ofn)) // { @@ -2411,12 +2430,7 @@ LRESULT OpenFile() // return 0; // } - //LOG("%s\r\n", filename); - if(LoadROM(PhysicalName)) - { - romloaded = TRUE; - NDS_UnPause(); - } + return 0; } @@ -2863,7 +2877,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM char filename[MAX_PATH] = ""; DragQueryFile((HDROP)wParam,0,filename,MAX_PATH); DragFinish((HDROP)wParam); - if(LoadROM(filename)) + if(OpenCore(filename)) { romloaded = TRUE; } diff --git a/desmume/src/windows/pathsettings.cpp b/desmume/src/windows/pathsettings.cpp index 74332c5d2..eda860c05 100644 --- a/desmume/src/windows/pathsettings.cpp +++ b/desmume/src/windows/pathsettings.cpp @@ -35,6 +35,7 @@ the default paths are saved on first load #include "NDSSystem.h" #include "pathSettings.h" #include "../debug.h" +#include "common.h" /*macros to forward messages the dialog procedure was getting long and confusing for me @@ -191,9 +192,7 @@ void SwitchPath(Action action, KnownPath path, char * buffer, int maxCount) //returns "filename" void GetFilename(char *buffer, int maxCount) { - char *lchr = strrchr(pathFilenameToROMwithoutExt, '\\'); - lchr++; - strncpy(buffer, lchr, maxCount); + strcpy(buffer,GetRomNameWithoutExtension().c_str()); } void GetFullPathNoExt(KnownPath path, char *buffer, int maxCount) diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index c9708af58ca33e92260af3936ede72b36a5f3363..706964ffc421c3ef9978641a86ddfaf5eb8191d2 100644 GIT binary patch delta 486 zcmeCXt9kCGW6H9+Y6^ND>6dakqbCj*~X4I$pW2ce#S8#7$}$HNG5&7%nQ;inPe{bvy3doRJo+a1p^ zZ+ASyGPQR43@_GIlM_C3Oi%dAYQbncUC@g)mDP~Jh`}7h6rUW{CDtC{%?iY9K+L{9 y!kc4PFwBQT&*wm2Gdr_Rj_XvKt~ZT2YI?(WR;B3;GdS4V@7(0re&;6VrYQjH+lFxf delta 930 zcmX?iQ?u``WzTQRLlwI{@0T%4W7osKmKld0-mM%s^yu!!Wl#7XTzbk6;nK74FfKg@ zPvX+^`V=lb+!t}^X-_=Oygl(W%hcNG2MSrtrYpSSU}3bF{?L;(b^1L|R;B6RJXlvv zk8tD?Yp?KP1!6WJX5U`n#jz_GYYdIXs>k*Lk5yodGCQ+Qj_XvKt~ZT2YWjk2z?fVx SorA4i<_5=hnH!v&rT_p1t