diff options
-rw-r--r-- | engines/sci/console.cpp | 1 | ||||
-rw-r--r-- | engines/sci/console.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kfile.cpp | 30 |
3 files changed, 32 insertions, 0 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 27d8a489cb..259687461c 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -109,6 +109,7 @@ Console::Console(SciEngine *vm) : GUI::Debugger() { DCmd_Register("version", WRAP_METHOD(Console, cmdGetVersion)); DCmd_Register("room", WRAP_METHOD(Console, cmdRoomNumber)); DCmd_Register("exit", WRAP_METHOD(Console, cmdExit)); + DCmd_Register("listsaves", WRAP_METHOD(Console, cmdListSaves)); // Screen DCmd_Register("sci0_palette", WRAP_METHOD(Console, cmdSci0Palette)); DCmd_Register("clear_screen", WRAP_METHOD(Console, cmdClearScreen)); diff --git a/engines/sci/console.h b/engines/sci/console.h index 6aa1027fa2..b6bc7523d6 100644 --- a/engines/sci/console.h +++ b/engines/sci/console.h @@ -79,6 +79,7 @@ private: bool cmdGetVersion(int argc, const char **argv); bool cmdRoomNumber(int argc, const char **argv); bool cmdExit(int argc, const char **argv); + bool cmdListSaves(int argc, const char **argv); // Screen bool cmdSci0Palette(int argc, const char **argv); bool cmdClearScreen(int argc, const char **argv); 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<SavegameDesc> &saves) { qsort(saves.begin(), saves.size(), sizeof(SavegameDesc), _savegame_index_struct_compare); } +bool Console::cmdListSaves(int argc, const char **argv) { + Common::Array<SavegameDesc> 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]; |