aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorMartin Kiewitz2010-01-02 14:08:26 +0000
committerMartin Kiewitz2010-01-02 14:08:26 +0000
commitd4738631d5d61bd341270f450676d32a2d775a2c (patch)
tree24698afde79afcfd95ff710e7942697fda2f04e0 /engines/sci/engine
parent2bc0ffdeb7734b4165a0426b3e533e477a5b0d0d (diff)
downloadscummvm-rg350-d4738631d5d61bd341270f450676d32a2d775a2c.tar.gz
scummvm-rg350-d4738631d5d61bd341270f450676d32a2d775a2c.tar.bz2
scummvm-rg350-d4738631d5d61bd341270f450676d32a2d775a2c.zip
SCI: implemented new console command "listsaves"
svn-id: r46883
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/kfile.cpp30
1 files changed, 30 insertions, 0 deletions
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];