Add support for .ini loading

This commit is contained in:
Christian Semmler 2025-06-08 08:56:52 -07:00
parent 41d9cca994
commit e1173eb0d0
No known key found for this signature in database
GPG Key ID: 086DAA1360BEEE5C
3 changed files with 31 additions and 4 deletions

View File

@ -8,10 +8,29 @@
#include <SDL3/SDL_log.h>
#include <emscripten/wasmfs.h>
static backend_t opfs = nullptr;
static backend_t fetchfs = nullptr;
void Emscripten_SetupConfig(const char* p_iniConfig)
{
if (!p_iniConfig || !*p_iniConfig) {
return;
}
opfs = wasmfs_create_opfs_backend();
MxString iniConfig = p_iniConfig;
char* parse = iniConfig.GetData();
while ((parse = SDL_strchr(++parse, '/'))) {
*parse = '\0';
wasmfs_create_directory(iniConfig.GetData(), 0644, opfs);
*parse = '/';
}
}
void Emscripten_SetupFilesystem()
{
auto fetchfs =
wasmfs_create_fetch_backend((MxString(Emscripten_streamHost) + MxString("/LEGO")).GetData(), 512 * 1024);
fetchfs = wasmfs_create_fetch_backend((MxString(Emscripten_streamHost) + MxString("/LEGO")).GetData(), 512 * 1024);
wasmfs_create_directory("/LEGO", 0644, fetchfs);
wasmfs_create_directory("/LEGO/Scripts", 0644, fetchfs);
@ -26,7 +45,7 @@ void Emscripten_SetupFilesystem()
wasmfs_create_directory("/LEGO/Scripts/Race", 0644, fetchfs);
wasmfs_create_directory("/LEGO/data", 0644, fetchfs);
const auto registerFile = [&fetchfs](const char* p_path) {
const auto registerFile = [](const char* p_path) {
MxString path = MxString(Emscripten_bundledPath) + MxString(p_path);
path.MapPathToFilesystem();
@ -89,7 +108,9 @@ void Emscripten_SetupFilesystem()
registerFile("/LEGO/data/testinf.dta");
if (GameState()->GetSavePath() && *GameState()->GetSavePath()) {
auto opfs = wasmfs_create_opfs_backend();
if (!opfs) {
opfs = wasmfs_create_opfs_backend();
}
MxString savePath = GameState()->GetSavePath();
if (savePath.GetData()[savePath.GetLength() - 1] != '/') {

View File

@ -10,6 +10,7 @@ inline static const char* Emscripten_savePath = "/save";
inline static const char* Emscripten_streamPath = "/";
inline static const char* Emscripten_streamHost = ISLE_EMSCRIPTEN_HOST;
void Emscripten_SetupConfig(const char* p_iniConfig);
void Emscripten_SetupFilesystem();
#endif // EMSCRIPTEN_FILESYSTEM_H

View File

@ -721,6 +721,10 @@ bool IsleApp::LoadConfig()
}
SDL_Log("Reading configuration from \"%s\"", iniConfig);
#ifdef __EMSCRIPTEN__
Emscripten_SetupConfig(iniConfig);
#endif
dictionary* dict = iniparser_load(iniConfig);
// [library:config]
@ -996,5 +1000,6 @@ MxResult IsleApp::ParseArguments(int argc, char** argv)
return FAILURE;
}
}
return SUCCESS;
}