diff --git a/src/drivers/win/taseditor.cpp b/src/drivers/win/taseditor.cpp index c7e2ec2b..82b56d6e 100644 --- a/src/drivers/win/taseditor.cpp +++ b/src/drivers/win/taseditor.cpp @@ -365,7 +365,7 @@ void OpenProject() LoadProject(nameo); } } -bool LoadProject(char* fullname) +bool LoadProject(const char* fullname) { // try to load project if (project.load(fullname)) diff --git a/src/drivers/win/taseditor.h b/src/drivers/win/taseditor.h index 97d33547..ff383091 100644 --- a/src/drivers/win/taseditor.h +++ b/src/drivers/win/taseditor.h @@ -14,7 +14,7 @@ void UpdateTasEditor(); void NewProject(); void OpenProject(); -bool LoadProject(char* fullname); +bool LoadProject(const char* fullname); bool SaveProject(); bool SaveProjectAs(); void SaveCompact(); diff --git a/src/drivers/win/taseditor/taseditor_project.cpp b/src/drivers/win/taseditor/taseditor_project.cpp index 92e3d397..073c5c96 100644 --- a/src/drivers/win/taseditor/taseditor_project.cpp +++ b/src/drivers/win/taseditor/taseditor_project.cpp @@ -158,7 +158,7 @@ bool TASEDITOR_PROJECT::save(const char* different_name, bool save_binary, bool return false; } } -bool TASEDITOR_PROJECT::load(char* fullname) +bool TASEDITOR_PROJECT::load(const char* fullname) { bool load_all = true; EMUFILE_FILE ifs(fullname, "rb"); @@ -275,7 +275,7 @@ bool TASEDITOR_PROJECT::load(char* fullname) return true; } -void TASEDITOR_PROJECT::RenameProject(char* new_fullname, bool filename_is_correct) +void TASEDITOR_PROJECT::RenameProject(const char* new_fullname, bool filename_is_correct) { projectFile = new_fullname; char drv[512], dir[512], name[512], ext[512]; // For getting the filename diff --git a/src/drivers/win/taseditor/taseditor_project.h b/src/drivers/win/taseditor/taseditor_project.h index 98cac334..a75504c4 100644 --- a/src/drivers/win/taseditor/taseditor_project.h +++ b/src/drivers/win/taseditor/taseditor_project.h @@ -40,9 +40,9 @@ public: void update(); bool save(const char* different_name = 0, bool save_binary = true, bool save_markers = true, bool save_bookmarks = true, bool save_greenzone = true, bool save_history = true, bool save_piano_roll = true, bool save_selection = true); - bool load(char* fullname); + bool load(const char* fullname); - void RenameProject(char* new_fullname, bool filename_is_correct); + void RenameProject(const char* new_fullname, bool filename_is_correct); std::string GetProjectFile(); std::string GetProjectName(); diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index a056994a..a5ca8694 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -18,6 +18,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +//http://www.nubaria.com/en/blog/?p=289 + // File description: Everything relevant for the main window should go here. This // does not include functions relevant for dialog windows. @@ -1009,7 +1011,7 @@ void CloseGame() } } -bool ALoad(char *nameo, char* innerFilename) +bool ALoad(const char *nameo, char* innerFilename) { int oldPaused = EmulationPaused; @@ -1374,13 +1376,14 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) case WM_DROPFILES: { UINT len; - char *ftmp; - len=DragQueryFile((HDROP)wParam,0,0,0)+1; - if((ftmp=(char*)malloc(len))) + len=DragQueryFileW((HDROP)wParam,0,0,0)+1; + wchar_t* wftmp; + wftmp=new wchar_t[len]; { - DragQueryFile((HDROP)wParam,0,ftmp,len); - string fileDropped = ftmp; + DragQueryFileW((HDROP)wParam,0,wftmp,len); + std::string fileDropped = wcstombs(wftmp); + delete[] wftmp; //adelikat: Drag and Drop only checks file extension, the internal functions are responsible for file error checking //------------------------------------------------------- @@ -1441,8 +1444,8 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) if (GameInfo && !(fileDropped.find(".fm2") == string::npos)) { //.fm2 is at the end of the filename so that must be the extension - FCEUI_LoadMovie(ftmp, 1, false); //We are convinced it is a movie file, attempt to load it - FCEUX_LoadMovieExtras(ftmp); + FCEUI_LoadMovie(fileDropped.c_str(), 1, false); //We are convinced it is a movie file, attempt to load it + FCEUX_LoadMovieExtras(fileDropped.c_str()); } } //------------------------------------------------------- @@ -1456,11 +1459,11 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { //.fm3 is at the end of the filename so that must be the extension extern bool EnterTasEditor(); - extern bool LoadProject(char* fullname); + extern bool LoadProject(const char* fullname); extern bool AskSaveProject(); if (EnterTasEditor()) //We are convinced it is a TAS Editor project file, attempt to load in TAS Editor if (AskSaveProject()) // in case there's unsaved project - LoadProject(ftmp); + LoadProject(fileDropped.c_str()); } } //------------------------------------------------------- @@ -1482,7 +1485,7 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) #ifdef _S9XLUA_H else if (!(fileDropped.find(".lua") == string::npos) && (fileDropped.find(".lua") == fileDropped.length()-4)) { - FCEU_LoadLuaCode(ftmp); + FCEU_LoadLuaCode(fileDropped.c_str()); UpdateLuaConsole(fileDropped.c_str()); } #endif @@ -1500,10 +1503,9 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) //------------------------------------------------------- else { - ALoad(ftmp); - free(ftmp); + ALoad(fileDropped.c_str()); } - } + } } break; diff --git a/src/drivers/win/window.h b/src/drivers/win/window.h index 22292b04..a5e38ccb 100644 --- a/src/drivers/win/window.h +++ b/src/drivers/win/window.h @@ -32,7 +32,7 @@ void ByebyeWindow(); void DoTimingConfigFix(); int CreateMainWindow(); void UpdateCheckedMenuItems(); -bool ALoad(char* nameo, char* innerFilename=0); +bool ALoad(const char* nameo, char* innerFilename=0); void LoadNewGamey(HWND hParent, const char *initialdir); int BrowseForFolder(HWND hParent, const char *htext, char *buf); void SetMainWindowStuff(); diff --git a/src/emufile.cpp b/src/emufile.cpp index 7306bde0..4119da3f 100644 --- a/src/emufile.cpp +++ b/src/emufile.cpp @@ -20,9 +20,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "emufile.h" - #include +#include "emufile.h" +#include "utils/xstring.h" bool EMUFILE::readAllBytes(std::vector* dstbuf, const std::string& fname) { @@ -59,6 +59,24 @@ size_t EMUFILE_MEMORY::_fread(const void *ptr, size_t bytes){ return todo; } +void EMUFILE_FILE::open(const char* fname, const char* mode) +{ + fp = fopen(fname,mode); + if(!fp) + { +#ifdef _MSC_VER + std::wstring wfname = mbstowcs((std::string)fname); + std::wstring wfmode = mbstowcs((std::string)mode); + fp = _wfopen(wfname.c_str(),wfmode.c_str()); +#endif + if(!fp) + failbit = true; + } + this->fname = fname; + strcpy(this->mode,mode); +} + + void EMUFILE_FILE::truncate(s32 length) { ::fflush(fp); diff --git a/src/emufile.h b/src/emufile.h index 3888f16f..bb1ab8bf 100644 --- a/src/emufile.h +++ b/src/emufile.h @@ -268,14 +268,7 @@ protected: char mode[16]; private: - void open(const char* fname, const char* mode) - { - fp = fopen(fname,mode); - if(!fp) - failbit = true; - this->fname = fname; - strcpy(this->mode,mode); - } + void open(const char* fname, const char* mode); public: