diff options
-rw-r--r-- | base/commandLine.cpp | 35 | ||||
-rw-r--r-- | base/commandLine.h | 2 | ||||
-rw-r--r-- | base/main.cpp | 6 | ||||
-rw-r--r-- | common/error.h | 10 |
4 files changed, 34 insertions, 19 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp index 8fa2f54b03..207ff79c4c 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -602,7 +602,9 @@ static void listTargets() { } /** List all saves states for the given target. */ -static void listSaves(const char *target) { +static Common::Error listSaves(const char *target) { + Common::Error result = Common::kNoError; + // FIXME HACK g_system->initBackend(); @@ -627,13 +629,14 @@ static void listSaves(const char *target) { GameDescriptor game = EngineMan.findGame(gameid, &plugin); if (!plugin) { - error("Could not find any plugin to handle target '%s' (gameid '%s')", target, gameid.c_str()); - return; + warning("Could not find any plugin to handle target '%s' (gameid '%s')", target, gameid.c_str()); + return Common::kPluginNotFound; } if (!(*plugin)->hasFeature(MetaEngine::kSupportsListSaves)) { // TODO: Include more info about the target (desc, engine name, ...) ??? printf("ScummVM does not support listing save states for target '%s' (gameid '%s') .\n", target, gameid.c_str()); + result = Common::kPluginNotSupportSaves; } else { // Query the plugin for a list of savegames SaveStateList saveList = (*plugin)->listSaves(target); @@ -643,6 +646,9 @@ static void listSaves(const char *target) { printf(" Slot Description \n" " ---- ------------------------------------------------------\n"); + if (saveList.size() == 0) + result = Common::kNoSavesError; + for (SaveStateList::const_iterator x = saveList.begin(); x != saveList.end(); ++x) { printf(" %-4s %s\n", x->save_slot().c_str(), x->description().c_str()); // TODO: Could also iterate over the full hashmap, printing all key-value pairs @@ -651,6 +657,8 @@ static void listSaves(const char *target) { // Revert to the old active domain ConfMan.setActiveDomain(oldDomain); + + return result; } /** Lists all usable themes */ @@ -863,7 +871,7 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha #endif // DISABLE_COMMAND_LINE -bool processSettings(Common::String &command, Common::StringMap &settings) { +Common::Error processSettings(Common::String &command, Common::StringMap &settings) { #ifndef DISABLE_COMMAND_LINE @@ -872,34 +880,33 @@ bool processSettings(Common::String &command, Common::StringMap &settings) { // have been loaded. if (command == "list-targets") { listTargets(); - return false; + return Common::kNoError; } else if (command == "list-games") { listGames(); - return false; + return Common::kNoError; } else if (command == "list-saves") { - listSaves(settings["list-saves"].c_str()); - return false; + return listSaves(settings["list-saves"].c_str()); } else if (command == "list-themes") { listThemes(); - return false; + return Common::kNoError; } else if (command == "version") { printf("%s\n", gScummVMFullVersion); printf("Features compiled in: %s\n", gScummVMFeatures); - return false; + return Common::kNoError; } else if (command == "help") { printf(HELP_STRING, s_appName); - return false; + return Common::kNoError; } #ifdef DETECTOR_TESTING_HACK else if (command == "test-detector") { runDetectorTest(); - return false; + return Common::kNoError; } #endif #ifdef UPGRADE_ALL_TARGETS_HACK else if (command == "upgrade-targets") { upgradeTargets(); - return false; + return Common::kNoError; } #endif @@ -971,7 +978,7 @@ bool processSettings(Common::String &command, Common::StringMap &settings) { ConfMan.set(key, value, Common::ConfigManager::kTransientDomain); } - return true; + return Common::kArgumentNotProcessed; } } // End of namespace Base diff --git a/base/commandLine.h b/base/commandLine.h index 8801ed17d8..c7e8d8b0d0 100644 --- a/base/commandLine.h +++ b/base/commandLine.h @@ -33,7 +33,7 @@ namespace Base { void registerDefaults(); Common::String parseCommandLine(Common::StringMap &settings, int argc, const char * const *argv); -bool processSettings(Common::String &command, Common::StringMap &settings); +Common::Error processSettings(Common::String &command, Common::StringMap &settings); } // End of namespace Base diff --git a/base/main.cpp b/base/main.cpp index 2658d1dc67..bfb6611a91 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -340,8 +340,10 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { // Process the remaining command line settings. Must be done after the // config file and the plugins have been loaded. - if (!Base::processSettings(command, settings)) - return 0; + Common::Error res; + + if ((res = Base::processSettings(command, settings)) != Common::kArgumentNotProcessed) + return res; // Init the backend. Must take place after all config data (including // the command line params) was read. diff --git a/common/error.h b/common/error.h index c4d383e508..7aff8d40b9 100644 --- a/common/error.h +++ b/common/error.h @@ -59,10 +59,16 @@ enum Error { kPathNotDirectory, ///< The specified path does not point to a directory kPathNotFile, ///< The specified path does not point to a file - kCreatingFileFailed, - kReadingFailed, ///< Failed creating a (savestate) file + kCreatingFileFailed, ///< Failed creating a (savestate) file + kReadingFailed, ///< Failed to read a file (permission denied?) kWritingFailed, ///< Failure to write data -- disk full? + // The following are used by --list-saves + kPluginNotFound, ///< Failed to find plugin to handle tager + kPluginNotSupportSaves, ///< Failed if plugin does not support saves + kNoSavesError, ///< There are no saves to show + + kArgumentNotProcessed, ///< Used in command line parsing kUnknownError ///< Catch-all error, used if no other error code matches }; |