From 21d4d0aeb20b19f17784338fbf663774b2728562 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 19 Aug 2016 12:39:08 +0200 Subject: DIRECTOR: Lingo: Added generated script decompilation --- engines/director/lingo/lingo-codegen.cpp | 5 ++++- engines/director/lingo/lingo.cpp | 14 ++++++++++++++ engines/director/lingo/lingo.h | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'engines') diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp index 3b7278488f..6584a92855 100644 --- a/engines/director/lingo/lingo-codegen.cpp +++ b/engines/director/lingo/lingo-codegen.cpp @@ -71,7 +71,7 @@ void Lingo::execute(int pc) { } } -Common::String Lingo::decodeInstruction(int pc) { +Common::String Lingo::decodeInstruction(int pc, int *newPc) { Symbol sym; Common::String res; @@ -118,6 +118,9 @@ Common::String Lingo::decodeInstruction(int pc) { res = ""; } + if (newPc) + *newPc = pc; + return res; } diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index 412b817892..5728a2980f 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -181,6 +181,14 @@ void Lingo::addCode(const char *code, ScriptType type, uint16 id) { parse(chunk.c_str()); + if (debugChannelSet(3, kDebugLingoCompile)) { + int pc = 0; + while (pc < _currentScript->size()) { + Common::String instr = decodeInstruction(pc, &pc); + debugC(3, kDebugLingoCompile, "[%5d] %s", pc, instr.c_str()); + } + } + _currentScript->clear(); begin = end; @@ -201,6 +209,12 @@ void Lingo::addCode(const char *code, ScriptType type, uint16 id) { if (debugChannelSet(3, kDebugLingoCompile)) { if (_currentScript->size() && !_hadError) Common::hexdump((byte *)&_currentScript->front(), _currentScript->size() * sizeof(inst)); + + int pc = 0; + while (pc < _currentScript->size()) { + Common::String instr = decodeInstruction(pc, &pc); + debugC(3, kDebugLingoCompile, "[%5d] %s", pc, instr.c_str()); + } } } diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index e674b22265..71708cf910 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -180,7 +180,7 @@ public: void addCode(const char *code, ScriptType type, uint16 id); void executeScript(ScriptType type, uint16 id); - Common::String decodeInstruction(int pc); + Common::String decodeInstruction(int pc, int *newPC = NULL); void processEvent(LEvent event, int entityId); -- cgit v1.2.3