aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2013-03-30 21:21:21 +0200
committerFilippos Karapetis2013-03-30 21:21:51 +0200
commit4990bdfbe5a0da69e10de478eab32829ea06114f (patch)
tree4ac22f1b7f24cff3995dbb6a4791247f6ec41d4e
parent880f2641502c3c946bc1b619a13f704007f791f5 (diff)
downloadscummvm-rg350-4990bdfbe5a0da69e10de478eab32829ea06114f.tar.gz
scummvm-rg350-4990bdfbe5a0da69e10de478eab32829ea06114f.tar.bz2
scummvm-rg350-4990bdfbe5a0da69e10de478eab32829ea06114f.zip
WINTERMUTE: Add a console command, "dump_file", to dump resource files to disk
-rw-r--r--engines/wintermute/debugger.cpp38
-rw-r--r--engines/wintermute/debugger.h1
2 files changed, 38 insertions, 1 deletions
diff --git a/engines/wintermute/debugger.cpp b/engines/wintermute/debugger.cpp
index 1160a16d37..0dab75356b 100644
--- a/engines/wintermute/debugger.cpp
+++ b/engines/wintermute/debugger.cpp
@@ -22,12 +22,15 @@
#include "engines/wintermute/debugger.h"
#include "engines/wintermute/wintermute.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/base_game.h"
namespace Wintermute {
Console::Console(WintermuteEngine *vm) : GUI::Debugger(), _engineRef(vm) {
DCmd_Register("show_fps", WRAP_METHOD(Console, Cmd_ShowFps));
+ DCmd_Register("dump_file", WRAP_METHOD(Console, Cmd_DumpFile));
}
Console::~Console(void) {
@@ -44,5 +47,38 @@ bool Console::Cmd_ShowFps(int argc, const char **argv) {
}
return true;
}
-
+
+bool Console::Cmd_DumpFile(int argc, const char **argv) {
+ if (argc != 3) {
+ DebugPrintf("Usage: %s <file path> <output file name>\n", argv[0]);
+ return true;
+ }
+
+ Common::String filePath = argv[1];
+ Common::String outFileName = argv[2];
+
+ BaseFileManager *fileManager = BaseEngine::instance().getFileManager();
+ Common::SeekableReadStream *inFile = fileManager->openFile(filePath);
+ if (!inFile) {
+ DebugPrintf("File '%s' not found\n", argv[1]);
+ return true;
+ }
+
+ Common::DumpFile *outFile = new Common::DumpFile();
+ outFile->open(outFileName);
+
+ byte *data = new byte[inFile->size()];
+ inFile->read(data, inFile->size());
+ outFile->write(data, inFile->size());
+ outFile->finalize();
+ outFile->close();
+ delete[] data;
+
+ delete outFile;
+ delete inFile;
+
+ DebugPrintf("Resource file '%s' dumped to file '%s'\n", argv[1], argv[2]);
+ return true;
+}
+
} // end of namespace Wintermute
diff --git a/engines/wintermute/debugger.h b/engines/wintermute/debugger.h
index 069980385e..588b81af97 100644
--- a/engines/wintermute/debugger.h
+++ b/engines/wintermute/debugger.h
@@ -34,6 +34,7 @@ public:
virtual ~Console();
bool Cmd_ShowFps(int argc, const char **argv);
+ bool Cmd_DumpFile(int argc, const char **argv);
private:
WintermuteEngine *_engineRef;
};