aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Brown2004-02-07 04:53:59 +0000
committerJames Brown2004-02-07 04:53:59 +0000
commit9b97d851fe7caef9c6c87ec5a073f44060112b9c (patch)
tree4078f6a0bbed03596af3da67b6a63615984ddd21
parenta2039576fb698d50c6459d7f2ea66804dcbd33d6 (diff)
downloadscummvm-rg350-9b97d851fe7caef9c6c87ec5a073f44060112b9c.tar.gz
scummvm-rg350-9b97d851fe7caef9c6c87ec5a073f44060112b9c.tar.bz2
scummvm-rg350-9b97d851fe7caef9c6c87ec5a073f44060112b9c.zip
Add -c/--config option to specific alternate configuration file. Sorry Max, but it's damn useful for coverdiscs :)
svn-id: r12758
-rw-r--r--base/gameDetector.cpp5
-rw-r--r--base/main.cpp23
-rw-r--r--common/config-manager.cpp11
-rw-r--r--common/config-manager.h2
4 files changed, 40 insertions, 1 deletions
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;