From d4738631d5d61bd341270f450676d32a2d775a2c Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sat, 2 Jan 2010 14:08:26 +0000 Subject: SCI: implemented new console command "listsaves" svn-id: r46883 --- engines/sci/engine/kfile.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'engines/sci/engine') diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index cfee0ed47d..5610a5c751 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -32,6 +32,7 @@ #include "sci/engine/state.h" #include "sci/engine/kernel.h" #include "sci/engine/savegame.h" +#include "sci/console.h" namespace Sci { @@ -278,6 +279,35 @@ void listSavegames(Common::Array &saves) { qsort(saves.begin(), saves.size(), sizeof(SavegameDesc), _savegame_index_struct_compare); } +bool Console::cmdListSaves(int argc, const char **argv) { + Common::Array saves; + listSavegames(saves); + + Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + + for (uint i = 0; i < saves.size(); i++) { + Common::String filename = ((Sci::SciEngine*)g_engine)->getSavegameName(saves[i].id); + Common::SeekableReadStream *in; + if ((in = saveFileMan->openForLoading(filename))) { + SavegameMetadata meta; + if (!get_savegame_metadata(in, &meta)) { + // invalid + delete in; + continue; + } + + if (!meta.savegame_name.empty()) { + if (meta.savegame_name.lastChar() == '\n') + meta.savegame_name.deleteLastChar(); + + DebugPrintf("%s: '%s'\n", filename.c_str(), meta.savegame_name.c_str()); + } + delete in; + } + } + return true; +} + reg_t kFGets(EngineState *s, int argc, reg_t *argv) { int maxsize = argv[1].toUint16(); char *buf = new char[maxsize]; -- cgit v1.2.3