aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2011-05-23 19:36:45 +0200
committerMax Horn2011-05-23 19:39:25 +0200
commit20cad6e8b6fe9ae843245697e872256c4ca1e545 (patch)
treee6ddd7b3f8ff6be39ea9ceab523050e73e3ba354
parent6f6051a9e1da4d4debc1bf851b101c7a40d8b531 (diff)
downloadscummvm-rg350-20cad6e8b6fe9ae843245697e872256c4ca1e545.tar.gz
scummvm-rg350-20cad6e8b6fe9ae843245697e872256c4ca1e545.tar.bz2
scummvm-rg350-20cad6e8b6fe9ae843245697e872256c4ca1e545.zip
COMMON: Modify Base::processSettings, get rid of Common::kArgumentNotProcessed
Instead of defining a hacked up Common::Error code, split the return value of processSettings into two parts: An error code, and a value which indicates whether the specified command was completely handled by processSettings or not.
-rw-r--r--base/commandLine.cpp24
-rw-r--r--base/commandLine.h21
-rw-r--r--base/main.cpp3
-rw-r--r--common/error.cpp3
-rw-r--r--common/error.h3
-rw-r--r--common/forbidden.h5
-rw-r--r--common/textconsole.cpp2
7 files changed, 42 insertions, 19 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index f819b03658..78eea50082 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -23,6 +23,8 @@
// FIXME: Avoid using printf
#define FORBIDDEN_SYMBOL_EXCEPTION_printf
+#define FORBIDDEN_SYMBOL_EXCEPTION_exit
+
#include "engines/metaengine.h"
#include "base/commandLine.h"
#include "base/plugins.h"
@@ -885,7 +887,8 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha
#endif // DISABLE_COMMAND_LINE
-Common::Error processSettings(Common::String &command, Common::StringMap &settings) {
+bool processSettings(Common::String &command, Common::StringMap &settings, Common::Error &err) {
+ err = Common::kNoError;
#ifndef DISABLE_COMMAND_LINE
@@ -894,33 +897,34 @@ Common::Error processSettings(Common::String &command, Common::StringMap &settin
// have been loaded.
if (command == "list-targets") {
listTargets();
- return Common::kNoError;
+ return true;
} else if (command == "list-games") {
listGames();
- return Common::kNoError;
+ return true;
} else if (command == "list-saves") {
- return listSaves(settings["list-saves"].c_str());
+ err = listSaves(settings["list-saves"].c_str());
+ return true;
} else if (command == "list-themes") {
listThemes();
- return Common::kNoError;
+ return true;
} else if (command == "version") {
printf("%s\n", gScummVMFullVersion);
printf("Features compiled in: %s\n", gScummVMFeatures);
- return Common::kNoError;
+ return true;
} else if (command == "help") {
printf(HELP_STRING, s_appName);
- return Common::kNoError;
+ return true;
}
#ifdef DETECTOR_TESTING_HACK
else if (command == "test-detector") {
runDetectorTest();
- return Common::kNoError;
+ return true;
}
#endif
#ifdef UPGRADE_ALL_TARGETS_HACK
else if (command == "upgrade-targets") {
upgradeTargets();
- return Common::kNoError;
+ return true;
}
#endif
@@ -972,7 +976,7 @@ Common::Error processSettings(Common::String &command, Common::StringMap &settin
ConfMan.set(key, value, Common::ConfigManager::kTransientDomain);
}
- return Common::kArgumentNotProcessed;
+ return false;
}
} // End of namespace Base
diff --git a/base/commandLine.h b/base/commandLine.h
index 4e611d97bf..2798ab0934 100644
--- a/base/commandLine.h
+++ b/base/commandLine.h
@@ -32,9 +32,28 @@ class String;
namespace Base {
+/**
+ * Register various defaults with the ConfigManager.
+ */
void registerDefaults();
+
+/**
+ * Parse the command line for options and a command; the options
+ * are stored in the map 'settings, the command (if any) is returned.
+ */
Common::String parseCommandLine(Common::StringMap &settings, int argc, const char * const *argv);
-Common::Error processSettings(Common::String &command, Common::StringMap &settings);
+
+/**
+ * Process the command line options and arguments.
+ * Returns true if everything was handled and ScummVM should quit
+ * (e.g. because "--help" was specified, and handled).
+ *
+ * @param[in] command the command as returned by parseCommandLine
+ * @param[in] settings the settings as returned by parseCommandLine
+ * @param[out] err indicates whether any error occurred, and which
+ * @return true if the command was completely processed and ScummVM should quit, false otherwise
+ */
+bool processSettings(Common::String &command, Common::StringMap &settings, Common::Error &err);
} // End of namespace Base
diff --git a/base/main.cpp b/base/main.cpp
index 4ed70a5587..906f4c9242 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -349,8 +349,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
Common::Error res;
// TODO: deal with settings that require plugins to be loaded
- res = Base::processSettings(command, settings);
- if (res.getCode() != Common::kArgumentNotProcessed) {
+ if (Base::processSettings(command, settings, res)) {
if (res.getCode() != Common::kNoError)
warning("%s", res.getDesc().c_str());
return res.getCode();
diff --git a/common/error.cpp b/common/error.cpp
index f150f268c0..a6c52a0ce9 100644
--- a/common/error.cpp
+++ b/common/error.cpp
@@ -67,9 +67,6 @@ static String errorToString(ErrorCode errorCode) {
case kEnginePluginNotSupportSaves:
return _s("Engine plugin does not support save states");
- case kArgumentNotProcessed:
- return _s("Command line argument not processed");
-
case kUnknownError:
default:
return _s("Unknown error");
diff --git a/common/error.h b/common/error.h
index c06cec4a0b..23c12b67e4 100644
--- a/common/error.h
+++ b/common/error.h
@@ -47,7 +47,6 @@ enum ErrorCode {
kUnsupportedGameidError, ///< Engine initialization: Gameid not supported by this (Meta)Engine
kUnsupportedColorMode, ///< Engine initialization: Engine does not support backend's color mode
-
kReadPermissionDenied, ///< Unable to read data due to missing read permission
kWritePermissionDenied, ///< Unable to write data due to missing write permission
@@ -63,8 +62,6 @@ enum ErrorCode {
kEnginePluginNotFound, ///< Failed to find plugin to handle target
kEnginePluginNotSupportSaves, ///< Failed if plugin does not support listing save states
- kArgumentNotProcessed, ///< Used in command line parsing
-
kUnknownError ///< Catch-all error, used if no other error code matches
};
diff --git a/common/forbidden.h b/common/forbidden.h
index d9282b7885..f127983006 100644
--- a/common/forbidden.h
+++ b/common/forbidden.h
@@ -140,6 +140,11 @@
#define system(a) FORBIDDEN_SYMBOL_REPLACEMENT
#endif
+#ifndef FORBIDDEN_SYMBOL_EXCEPTION_exit
+#undef exit
+#define exit(a) FORBIDDEN_SYMBOL_REPLACEMENT
+#endif
+
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_getenv
#undef getenv
#define getenv(a) FORBIDDEN_SYMBOL_REPLACEMENT
diff --git a/common/textconsole.cpp b/common/textconsole.cpp
index 0bd233d206..f2325ac9ad 100644
--- a/common/textconsole.cpp
+++ b/common/textconsole.cpp
@@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#define FORBIDDEN_SYMBOL_EXCEPTION_exit
+
#include "common/textconsole.h"
#include "common/system.h"
#include "common/str.h"