From 9b97d851fe7caef9c6c87ec5a073f44060112b9c Mon Sep 17 00:00:00 2001 From: James Brown Date: Sat, 7 Feb 2004 04:53:59 +0000 Subject: Add -c/--config option to specific alternate configuration file. Sorry Max, but it's damn useful for coverdiscs :) svn-id: r12758 --- base/gameDetector.cpp | 5 +++++ base/main.cpp | 23 +++++++++++++++++++++++ common/config-manager.cpp | 11 ++++++++++- common/config-manager.h | 2 ++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp index d6ccdb7af9..98f91a3796 100644 --- a/base/gameDetector.cpp +++ b/base/gameDetector.cpp @@ -48,6 +48,7 @@ static const char USAGE_STRING[] = " -z, --list-games Display list of supported games and exit\n" " -t, --list-targets Display list of configured targets and exit\n" "\n" + " -c, --config=CONFIG Use alternate configuration file\n" " -p, --path=PATH Path to where the game is installed\n" " -x, --save-slot[=NUM] Save game slot to load (default: autosave)\n" " -f, --fullscreen Force full-screen mode\n" @@ -284,6 +285,10 @@ void GameDetector::parseCommandLine(int argc, char **argv) { cmdValue = (shortCmdLower == s[1]); s += 2; + DO_OPTION('c', "config") + // Dummy + END_OPTION + DO_OPTION('b', "boot-param") ConfMan.set("boot_param", (int)strtol(option, 0, 10), kTransientDomain); END_OPTION diff --git a/base/main.cpp b/base/main.cpp index 36409fe41e..bf33c75084 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -245,6 +245,7 @@ int main(int argc, char *argv[]) { extern "C" int scummvm_main(GameDetector &detector, int argc, char *argv[]) { #endif OSystem::Property prop; + char *cfgFilename = NULL, *s=argv[1]; #if defined(UNIX) /* On Unix, do a quick endian / alignement check before starting */ @@ -286,6 +287,28 @@ extern "C" int scummvm_main(GameDetector &detector, int argc, char *argv[]) { #endif //defined(WIN32) && defined(USE_CONSOLE) + + // Quick preparse of command-line, looking for alt configfile path + for (int i = argc - 1; i >= 1; i--) { + s = argv[i]; + bool shortOpt = (s[0] == '-' && tolower(s[1]) == 'c'); + bool longOpt = (s[0] == '-' && s[1] == '-' && s[2] == 'c' && s[3] == 'o' \ + && s[4] == 'n' && s[5] == 'f' && s[6] == 'i' && s[7] == 'g'); + + if (shortOpt || longOpt) { + if (longOpt) s+=9; + if (shortOpt) s+=2; + + if (*s == '\0') + break; + + cfgFilename = s; + break; + } + } + if (cfgFilename != NULL) + ConfMan.switchFile(cfgFilename); + // Update the config file ConfMan.set("versioninfo", gScummVMVersion, Common::ConfigManager::kApplicationDomain); diff --git a/common/config-manager.cpp b/common/config-manager.cpp index 299d3c817e..46881ecde3 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -86,6 +86,14 @@ ConfigManager::ConfigManager() { #endif #endif + switchFile(configFile); +} + +void ConfigManager::switchFile(const String &filename) { + _globalDomains.clear(); + _gameDomains.clear(); + _transientDomain.clear(); + // Ensure the global domain(s) are setup. _globalDomains.addKey(kApplicationDomain); #ifdef _WIN32_WCE @@ -94,8 +102,9 @@ ConfigManager::ConfigManager() { _globalDomains.addKey("smartfon-keys"); #endif - _filename = configFile; + _filename = filename; loadFile(_filename); + printf("Switched to configuration %s\n", _filename.c_str()); } void ConfigManager::loadFile(const String &filename) { diff --git a/common/config-manager.h b/common/config-manager.h index ddc97b76ee..ee3159fb0a 100644 --- a/common/config-manager.h +++ b/common/config-manager.h @@ -61,6 +61,8 @@ public: /** The transient (pseudo) domain. */ static const String kTransientDomain; + void switchFile(const String &filename); + bool hasKey(const String &key) const; bool hasKey(const String &key, const String &dom) const; -- cgit v1.2.3