Move PathInfo method definitions to .cpp file.

This commit is contained in:
SuuperW 2018-09-04 00:26:34 -05:00
parent 407b01b39d
commit c9c6049892
2 changed files with 263 additions and 229 deletions

View File

@ -199,6 +199,204 @@ void PathInfo::init(const char *filename)
}
void PathInfo::LoadModulePath()
{
#if defined(HOST_WINDOWS)
char *p;
ZeroMemory(pathToModule, sizeof(pathToModule));
GetModuleFileName(NULL, pathToModule, sizeof(pathToModule));
p = pathToModule + lstrlen(pathToModule);
while (p >= pathToModule && *p != DIRECTORY_DELIMITER_CHAR) p--;
if (++p >= pathToModule) *p = 0;
extern char* _hack_alternateModulePath;
if (_hack_alternateModulePath)
{
strcpy(pathToModule, _hack_alternateModulePath);
}
#elif defined(DESMUME_COCOA)
std::string pathStr = Path::GetFileDirectoryPath(path);
strncpy(pathToModule, pathStr.c_str(), MAX_PATH);
#else
char *cwd = g_build_filename(g_get_user_config_dir(), "desmume", NULL);
g_mkdir_with_parents(cwd, 0755);
strncpy(pathToModule, cwd, MAX_PATH);
g_free(cwd);
#endif
}
void PathInfo::GetDefaultPath(char *pathToDefault, const char *key, int maxCount)
{
#ifdef HOST_WINDOWS
std::string temp = (std::string)"." + DIRECTORY_DELIMITER_CHAR + pathToDefault;
strncpy(pathToDefault, temp.c_str(), maxCount);
#else
strncpy(pathToDefault, pathToModule, maxCount);
#endif
}
void PathInfo::ReadKey(char *pathToRead, const char *key)
{
#ifdef HOST_WINDOWS
GetPrivateProfileString(SECTION, key, key, pathToRead, MAX_PATH, IniName);
if (strcmp(pathToRead, key) == 0) {
//since the variables are all intialized in this file they all use MAX_PATH
GetDefaultPath(pathToRead, key, MAX_PATH);
}
#else
//since the variables are all intialized in this file they all use MAX_PATH
GetDefaultPath(pathToRead, key, MAX_PATH);
#endif
}
void PathInfo::ReadPathSettings()
{
if ((strcmp(pathToModule, "") == 0) || !pathToModule)
LoadModulePath();
ReadKey(pathToRoms, ROMKEY);
ReadKey(pathToBattery, BATTERYKEY);
ReadKey(pathToStates, STATEKEY);
ReadKey(pathToScreenshots, SCREENSHOTKEY);
ReadKey(pathToAviFiles, AVIKEY);
ReadKey(pathToCheats, CHEATKEY);
ReadKey(pathToSounds, SOUNDKEY);
ReadKey(pathToFirmware, FIRMWAREKEY);
ReadKey(pathToLua, LUAKEY);
ReadKey(pathToSlot1D, SLOT1DKEY);
#ifdef HOST_WINDOWS
GetPrivateProfileString(SECTION, FORMATKEY, "%f_%s_%r", screenshotFormat, MAX_FORMAT, IniName);
savelastromvisit = GetPrivateProfileBool(SECTION, LASTVISITKEY, true, IniName);
currentimageformat = (ImageFormat)GetPrivateProfileInt(SECTION, DEFAULTFORMATKEY, PNG, IniName);
r4Format = (R4Format)GetPrivateProfileInt(SECTION, R4FORMATKEY, R4_CHEAT_DAT, IniName);
if ((r4Format != R4_CHEAT_DAT) && (r4Format != R4_USRCHEAT_DAT))
{
r4Format = R4_USRCHEAT_DAT;
WritePrivateProfileInt(SECTION, R4FORMATKEY, r4Format, IniName);
}
#endif
/*
needsSaving = GetPrivateProfileInt(SECTION, NEEDSSAVINGKEY, TRUE, IniName);
if(needsSaving)
{
needsSaving = FALSE;
WritePathSettings();
}*/
}
void PathInfo::SwitchPath(Action action, KnownPath path, char *buffer)
{
char *pathToCopy = 0;
switch (path)
{
case ROMS:
pathToCopy = pathToRoms;
break;
case BATTERY:
pathToCopy = pathToBattery;
break;
case STATES:
pathToCopy = pathToStates;
break;
case SCREENSHOTS:
pathToCopy = pathToScreenshots;
break;
case AVI_FILES:
pathToCopy = pathToAviFiles;
break;
case CHEATS:
pathToCopy = pathToCheats;
break;
case SOUNDS:
pathToCopy = pathToSounds;
break;
case FIRMWARE:
pathToCopy = pathToFirmware;
break;
case MODULE:
pathToCopy = pathToModule;
break;
case SLOT1D:
pathToCopy = pathToSlot1D;
break;
}
if (action == GET)
{
std::string thePath = pathToCopy;
std::string relativePath = (std::string)"." + DIRECTORY_DELIMITER_CHAR;
int len = (int)thePath.size() - 1;
if (len == -1)
thePath = relativePath;
else
if (thePath[len] != DIRECTORY_DELIMITER_CHAR)
thePath += DIRECTORY_DELIMITER_CHAR;
if (!Path::IsPathRooted(thePath))
{
thePath = (std::string)pathToModule + thePath;
}
strncpy(buffer, thePath.c_str(), MAX_PATH);
#ifdef HOST_WINDOWS
FCEUD_MakePathDirs(buffer);
#endif
}
else if (action == SET)
{
int len = strlen(buffer) - 1;
if (buffer[len] == DIRECTORY_DELIMITER_CHAR)
buffer[len] = '\0';
strncpy(pathToCopy, buffer, MAX_PATH);
}
}
std::string PathInfo::getpath(KnownPath path)
{
char temp[MAX_PATH];
SwitchPath(GET, path, temp);
return temp;
}
void PathInfo::getpath(KnownPath path, char *buffer)
{
SwitchPath(GET, path, buffer);
}
void PathInfo::setpath(KnownPath path, char *buffer)
{
SwitchPath(SET, path, buffer);
}
void PathInfo::getfilename(char *buffer, int maxCount)
{
strcpy(buffer, noextension().c_str());
}
void PathInfo::getpathnoext(KnownPath path, char *buffer)
{
getpath(path, buffer);
strcat(buffer, GetRomNameWithoutExtension().c_str());
}
std::string PathInfo::extension()
{
return Path::GetFileExt(path);
}
std::string PathInfo::noextension()
{
std::string romNameWithPath = Path::GetFileDirectoryPath(path) + DIRECTORY_DELIMITER_CHAR + Path::GetFileNameWithoutExt(RomName);
return romNameWithPath;
}
void PathInfo::formatname(char *output)
{
// Except 't' for tick and 'r' for random.
@ -211,10 +409,10 @@ void PathInfo::formatname(char *output)
srand((unsigned)now);
for (char* p = screenshotFormat,
*end = p + sizeof(screenshotFormat); p < end; p++)
{
*end = p + sizeof(screenshotFormat); p < end; p++)
{
if (*p != '%')
{
{
file.append(1, *p);
}
else
@ -228,18 +426,18 @@ void PathInfo::formatname(char *output)
else if (*p == 'r')
{
file.append(stditoa(rand()));
}
}
else if (*p == 't')
{
{
file.append(stditoa(clock() >> 5));
}
}
else if (strchr(strftimeArgs, *p))
{
char tmp[MAX_PATH];
char format[] = { '%', *p, '\0' };
strftime(tmp, MAX_PATH, format, time_struct);
file.append(tmp);
}
}
}
}
@ -256,4 +454,44 @@ void PathInfo::formatname(char *output)
#endif
strncpy(output, file.c_str(), MAX_PATH);
}
}
PathInfo::ImageFormat PathInfo::imageformat() {
return currentimageformat;
}
void PathInfo::SetRomName(const char *filename)
{
std::string romPath = filename;
RomName = Path::GetFileNameFromPath(romPath);
RomName = Path::ScrubInvalid(RomName);
RomDirectory = Path::GetFileDirectoryPath(romPath);
}
const char *PathInfo::GetRomName()
{
return RomName.c_str();
}
std::string PathInfo::GetRomNameWithoutExtension()
{
if (RomName.c_str() == NULL)
return "";
return Path::GetFileNameWithoutExt(RomName);
}
bool PathInfo::isdsgba(std::string fileName)
{
size_t i = fileName.find_last_of(FILE_EXT_DELIMITER_CHAR);
if (i != std::string::npos) {
fileName = fileName.substr(i - 2);
}
if (fileName == "ds.gba") {
return true;
}
return false;
}

View File

@ -118,34 +118,7 @@ public:
void init(const char *filename);
void LoadModulePath()
{
#if defined(HOST_WINDOWS)
char *p;
ZeroMemory(pathToModule, sizeof(pathToModule));
GetModuleFileName(NULL, pathToModule, sizeof(pathToModule));
p = pathToModule + lstrlen(pathToModule);
while (p >= pathToModule && *p != DIRECTORY_DELIMITER_CHAR) p--;
if (++p >= pathToModule) *p = 0;
extern char* _hack_alternateModulePath;
if(_hack_alternateModulePath)
{
strcpy(pathToModule,_hack_alternateModulePath);
}
#elif defined(DESMUME_COCOA)
std::string pathStr = Path::GetFileDirectoryPath(path);
strncpy(pathToModule, pathStr.c_str(), MAX_PATH);
#else
char *cwd = g_build_filename(g_get_user_config_dir(), "desmume", NULL);
g_mkdir_with_parents(cwd, 0755);
strncpy(pathToModule, cwd, MAX_PATH);
g_free(cwd);
#endif
}
void LoadModulePath();
enum Action
{
@ -153,174 +126,27 @@ public:
SET
};
void GetDefaultPath(char *pathToDefault, const char *key, int maxCount)
{
#ifdef HOST_WINDOWS
std::string temp = (std::string)"." + DIRECTORY_DELIMITER_CHAR + pathToDefault;
strncpy(pathToDefault, temp.c_str(), maxCount);
#else
strncpy(pathToDefault, pathToModule, maxCount);
#endif
}
void GetDefaultPath(char *pathToDefault, const char *key, int maxCount);
void ReadKey(char *pathToRead, const char *key)
{
#ifdef HOST_WINDOWS
GetPrivateProfileString(SECTION, key, key, pathToRead, MAX_PATH, IniName);
if(strcmp(pathToRead, key) == 0) {
//since the variables are all intialized in this file they all use MAX_PATH
GetDefaultPath(pathToRead, key, MAX_PATH);
}
#else
//since the variables are all intialized in this file they all use MAX_PATH
GetDefaultPath(pathToRead, key, MAX_PATH);
#endif
}
void ReadKey(char *pathToRead, const char *key);
void ReadPathSettings()
{
if( ( strcmp(pathToModule, "") == 0) || !pathToModule)
LoadModulePath();
void ReadPathSettings();
ReadKey(pathToRoms, ROMKEY);
ReadKey(pathToBattery, BATTERYKEY);
ReadKey(pathToStates, STATEKEY);
ReadKey(pathToScreenshots, SCREENSHOTKEY);
ReadKey(pathToAviFiles, AVIKEY);
ReadKey(pathToCheats, CHEATKEY);
ReadKey(pathToSounds, SOUNDKEY);
ReadKey(pathToFirmware, FIRMWAREKEY);
ReadKey(pathToLua, LUAKEY);
ReadKey(pathToSlot1D, SLOT1DKEY);
#ifdef HOST_WINDOWS
GetPrivateProfileString(SECTION, FORMATKEY, "%f_%s_%r", screenshotFormat, MAX_FORMAT, IniName);
savelastromvisit = GetPrivateProfileBool(SECTION, LASTVISITKEY, true, IniName);
currentimageformat = (ImageFormat)GetPrivateProfileInt(SECTION, DEFAULTFORMATKEY, PNG, IniName);
r4Format = (R4Format)GetPrivateProfileInt(SECTION, R4FORMATKEY, R4_CHEAT_DAT, IniName);
if ((r4Format != R4_CHEAT_DAT) && (r4Format != R4_USRCHEAT_DAT))
{
r4Format = R4_USRCHEAT_DAT;
WritePrivateProfileInt(SECTION, R4FORMATKEY, r4Format, IniName);
}
#endif
/*
needsSaving = GetPrivateProfileInt(SECTION, NEEDSSAVINGKEY, TRUE, IniName);
if(needsSaving)
{
needsSaving = FALSE;
WritePathSettings();
}*/
}
void SwitchPath(Action action, KnownPath path, char *buffer);
void SwitchPath(Action action, KnownPath path, char *buffer)
{
char *pathToCopy = 0;
switch(path)
{
case ROMS:
pathToCopy = pathToRoms;
break;
case BATTERY:
pathToCopy = pathToBattery;
break;
case STATES:
pathToCopy = pathToStates;
break;
case SCREENSHOTS:
pathToCopy = pathToScreenshots;
break;
case AVI_FILES:
pathToCopy = pathToAviFiles;
break;
case CHEATS:
pathToCopy = pathToCheats;
break;
case SOUNDS:
pathToCopy = pathToSounds;
break;
case FIRMWARE:
pathToCopy = pathToFirmware;
break;
case MODULE:
pathToCopy = pathToModule;
break;
case SLOT1D:
pathToCopy = pathToSlot1D;
break;
}
std::string getpath(KnownPath path);
if(action == GET)
{
std::string thePath = pathToCopy;
std::string relativePath = (std::string)"." + DIRECTORY_DELIMITER_CHAR;
int len = (int)thePath.size()-1;
void getpath(KnownPath path, char *buffer);
if(len == -1)
thePath = relativePath;
else
if(thePath[len] != DIRECTORY_DELIMITER_CHAR)
thePath += DIRECTORY_DELIMITER_CHAR;
if(!Path::IsPathRooted(thePath))
{
thePath = (std::string)pathToModule + thePath;
}
void setpath(KnownPath path, char *buffer);
strncpy(buffer, thePath.c_str(), MAX_PATH);
#ifdef HOST_WINDOWS
FCEUD_MakePathDirs(buffer);
#endif
}
else if(action == SET)
{
int len = strlen(buffer)-1;
if(buffer[len] == DIRECTORY_DELIMITER_CHAR)
buffer[len] = '\0';
void getfilename(char *buffer, int maxCount);
strncpy(pathToCopy, buffer, MAX_PATH);
}
}
void getpathnoext(KnownPath path, char *buffer);
std::string getpath(KnownPath path)
{
char temp[MAX_PATH];
SwitchPath(GET, path, temp);
return temp;
}
std::string extension();
void getpath(KnownPath path, char *buffer)
{
SwitchPath(GET, path, buffer);
}
void setpath(KnownPath path, char *buffer)
{
SwitchPath(SET, path, buffer);
}
void getfilename(char *buffer, int maxCount)
{
strcpy(buffer,noextension().c_str());
}
void getpathnoext(KnownPath path, char *buffer)
{
getpath(path, buffer);
strcat(buffer, GetRomNameWithoutExtension().c_str());
}
std::string extension()
{
return Path::GetFileExt(path);
}
std::string noextension()
{
std::string romNameWithPath = Path::GetFileDirectoryPath(path) + DIRECTORY_DELIMITER_CHAR + Path::GetFileNameWithoutExt(RomName);
return romNameWithPath;
}
std::string noextension();
void formatname(char *output);
@ -339,45 +165,15 @@ public:
ImageFormat currentimageformat;
ImageFormat imageformat() {
return currentimageformat;
}
ImageFormat imageformat();
void SetRomName(const char *filename)
{
std::string romPath = filename;
void SetRomName(const char *filename);
RomName = Path::GetFileNameFromPath(romPath);
RomName = Path::ScrubInvalid(RomName);
RomDirectory = Path::GetFileDirectoryPath(romPath);
}
const char *GetRomName();
const char *GetRomName()
{
return RomName.c_str();
}
std::string GetRomNameWithoutExtension();
std::string GetRomNameWithoutExtension()
{
if (RomName.c_str() == NULL)
return "";
return Path::GetFileNameWithoutExt(RomName);
}
bool isdsgba(std::string fileName)
{
size_t i = fileName.find_last_of(FILE_EXT_DELIMITER_CHAR);
if (i != std::string::npos) {
fileName = fileName.substr(i - 2);
}
if(fileName == "ds.gba") {
return true;
}
return false;
}
bool isdsgba(std::string fileName);
};
extern PathInfo path;