2021-07-05 17:44:08 +00:00
|
|
|
/*
|
|
|
|
Copyright 2021 flyinghead
|
|
|
|
|
|
|
|
This file is part of Flycast.
|
|
|
|
|
|
|
|
Flycast is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
Flycast is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#include "oslib.h"
|
|
|
|
#include "stdclass.h"
|
|
|
|
#include "cfg/cfg.h"
|
|
|
|
|
|
|
|
namespace hostfs
|
|
|
|
{
|
|
|
|
|
|
|
|
std::string getVmuPath(const std::string& port)
|
|
|
|
{
|
|
|
|
char tempy[512];
|
|
|
|
sprintf(tempy, "vmu_save_%s.bin", port.c_str());
|
|
|
|
// VMU saves used to be stored in .reicast, not in .reicast/data
|
|
|
|
std::string apath = get_writable_config_path(tempy);
|
|
|
|
if (!file_exists(apath))
|
|
|
|
apath = get_writable_data_path(tempy);
|
|
|
|
return apath;
|
|
|
|
}
|
|
|
|
|
2021-07-20 08:06:44 +00:00
|
|
|
std::string getArcadeFlashPath()
|
2021-07-05 17:44:08 +00:00
|
|
|
{
|
|
|
|
std::string nvmemSuffix = cfgLoadStr("net", "nvmem", "");
|
2021-07-20 08:06:44 +00:00
|
|
|
return get_game_save_prefix() + nvmemSuffix;
|
2021-07-05 17:44:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
std::string findFlash(const std::string& prefix, const std::string& names)
|
|
|
|
{
|
|
|
|
const size_t npos = std::string::npos;
|
|
|
|
size_t start = 0;
|
|
|
|
while (start < names.size())
|
|
|
|
{
|
|
|
|
size_t semicolon = names.find(';', start);
|
|
|
|
std::string name = names.substr(start, semicolon == npos ? semicolon : semicolon - start);
|
|
|
|
|
|
|
|
size_t percent = name.find('%');
|
|
|
|
if (percent != npos)
|
|
|
|
name = name.replace(percent, 1, prefix);
|
|
|
|
|
|
|
|
std::string fullpath = get_readonly_data_path(name);
|
|
|
|
if (file_exists(fullpath))
|
|
|
|
return fullpath;
|
|
|
|
|
|
|
|
start = semicolon;
|
|
|
|
if (start != npos)
|
|
|
|
start++;
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getFlashSavePath(const std::string& prefix, const std::string& name)
|
|
|
|
{
|
|
|
|
return get_writable_data_path(prefix + name);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string findNaomiBios(const std::string& name)
|
|
|
|
{
|
|
|
|
return get_readonly_data_path(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getSavestatePath(int index, bool writable)
|
|
|
|
{
|
|
|
|
std::string state_file = settings.imgread.ImagePath;
|
|
|
|
size_t lastindex = state_file.find_last_of('/');
|
|
|
|
#ifdef _WIN32
|
|
|
|
size_t lastindex2 = state_file.find_last_of('\\');
|
|
|
|
if (lastindex == std::string::npos)
|
|
|
|
lastindex = lastindex2;
|
|
|
|
else if (lastindex2 != std::string::npos)
|
|
|
|
lastindex = std::max(lastindex, lastindex2);
|
|
|
|
#endif
|
|
|
|
if (lastindex != std::string::npos)
|
|
|
|
state_file = state_file.substr(lastindex + 1);
|
|
|
|
lastindex = state_file.find_last_of('.');
|
|
|
|
if (lastindex != std::string::npos)
|
|
|
|
state_file = state_file.substr(0, lastindex);
|
|
|
|
|
|
|
|
char index_str[4] = "";
|
|
|
|
if (index != 0) // When index is 0, use same name before multiple states is added
|
|
|
|
sprintf(index_str, "_%d", index);
|
|
|
|
|
|
|
|
state_file = state_file + index_str + ".state";
|
|
|
|
if (writable)
|
|
|
|
return get_writable_data_path(state_file);
|
|
|
|
else
|
|
|
|
return get_readonly_data_path(state_file);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getVulkanCachePath()
|
|
|
|
{
|
|
|
|
return get_writable_data_path("vulkan_pipeline.cache");
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getTextureLoadPath(const std::string& gameId)
|
|
|
|
{
|
|
|
|
if (gameId.length() > 0)
|
|
|
|
return get_readonly_data_path("textures/" + gameId) + "/";
|
|
|
|
else
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getTextureDumpPath()
|
|
|
|
{
|
|
|
|
return get_writable_data_path("texdump/");
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string getBiosFontPath()
|
|
|
|
{
|
|
|
|
return get_readonly_data_path("font.bin");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|