diff options
author | Filippos Karapetis | 2013-03-30 21:21:21 +0200 |
---|---|---|
committer | Filippos Karapetis | 2013-03-30 21:21:51 +0200 |
commit | 4990bdfbe5a0da69e10de478eab32829ea06114f (patch) | |
tree | 4ac22f1b7f24cff3995dbb6a4791247f6ec41d4e /engines | |
parent | 880f2641502c3c946bc1b619a13f704007f791f5 (diff) | |
download | scummvm-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
Diffstat (limited to 'engines')
-rw-r--r-- | engines/wintermute/debugger.cpp | 38 | ||||
-rw-r--r-- | engines/wintermute/debugger.h | 1 |
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; }; |