From 0f8f40c11185edd361bedf443f79b64328be6088 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 7 Jun 2015 20:34:02 +0300 Subject: SHERLOCK: Implement the "dumpfile" debugger command This can help us debug resources bundled within LIB files --- engines/sherlock/debugger.cpp | 30 ++++++++++++++++++++++++++++++ engines/sherlock/debugger.h | 5 +++++ 2 files changed, 35 insertions(+) diff --git a/engines/sherlock/debugger.cpp b/engines/sherlock/debugger.cpp index 4d8ea6c447..7a727e8224 100644 --- a/engines/sherlock/debugger.cpp +++ b/engines/sherlock/debugger.cpp @@ -39,6 +39,7 @@ Debugger::Debugger(SherlockEngine *vm) : GUI::Debugger(), _vm(vm) { registerCmd("3do_playmovie", WRAP_METHOD(Debugger, cmd3DO_PlayMovie)); registerCmd("3do_playaudio", WRAP_METHOD(Debugger, cmd3DO_PlayAudio)); registerCmd("song", WRAP_METHOD(Debugger, cmdSong)); + registerCmd("dumpfile", WRAP_METHOD(Debugger, cmdDumpFile)); } void Debugger::postEnter() { @@ -140,4 +141,33 @@ bool Debugger::cmdSong(int argc, const char **argv) { return false; } +bool Debugger::cmdDumpFile(int argc, const char **argv) { + if (argc != 2) { + debugPrintf("Format: dumpfile \n"); + return true; + } + + Common::SeekableReadStream *s = _vm->_res->load(argv[1]); + if (!s) { + debugPrintf("Invalid resource.\n"); + return true; + } + + byte *buffer = new byte[s->size()]; + s->read(buffer, s->size()); + + Common::DumpFile dumpFile; + dumpFile.open(argv[1]); + + dumpFile.write(buffer, s->size()); + dumpFile.flush(); + dumpFile.close(); + + delete[] buffer; + + debugPrintf("Resource %s has been dumped to disk.\n", argv[1]); + + return true; +} + } // End of namespace Sherlock diff --git a/engines/sherlock/debugger.h b/engines/sherlock/debugger.h index 9b12668679..2252f6d8ea 100644 --- a/engines/sherlock/debugger.h +++ b/engines/sherlock/debugger.h @@ -65,6 +65,11 @@ private: */ bool cmdSong(int argc, const char **argv); + /** + * Dumps a file to disk + */ + bool cmdDumpFile(int argc, const char **argv); + private: Common::String _3doPlayMovieFile; }; -- cgit v1.2.3