DIRECTOR: Show code offsets for stack printouts in Lingo::execute

This commit is contained in:
Scott Percival 2019-11-30 23:56:53 +08:00
parent 473a2b7463
commit f1b0c10fe4
3 changed files with 8 additions and 7 deletions

View File

@ -1003,7 +1003,7 @@ void Lingo::c_whencode() {
Datum d;
uint start = g_lingo->_pc;
uint end = g_lingo->readInt() + start - 1;
Common::String eventname(g_lingo->readString())
Common::String eventname(g_lingo->readString());
start = g_lingo->_pc;

View File

@ -55,17 +55,18 @@ namespace Director {
void Lingo::execute(uint pc) {
for (_pc = pc; !_returning && (*_currentScript)[_pc] != STOP;) {
Common::String instr = decodeInstruction(_currentScript, _pc);
uint current = _pc;
if (debugChannelSet(5, kDebugLingoExec))
printStack("Stack before: ");
printStack("Stack before: ", current);
debugC(1, kDebugLingoExec, "[%3d]: %s", _pc, instr.c_str());
debugC(1, kDebugLingoExec, "[%3d]: %s", current, instr.c_str());
_pc++;
(*((*_currentScript)[_pc - 1]))();
if (debugChannelSet(5, kDebugLingoExec))
printStack("Stack after: ");
printStack("Stack after: ", current);
if (_pc >= (*_currentScript).size()) {
warning("Lingo::execute(): Bad PC (%d)", _pc);
@ -74,7 +75,7 @@ void Lingo::execute(uint pc) {
}
}
void Lingo::printStack(const char *s) {
void Lingo::printStack(const char *s, uint pc) {
Common::String stack(s);
for (uint i = 0; i < _stack.size(); i++) {
@ -82,7 +83,7 @@ void Lingo::printStack(const char *s) {
d.toString();
stack += Common::String::format("<%s> ", d.u.s->c_str());
}
debugC(5, kDebugLingoExec, "%s", stack.c_str());
debugC(5, kDebugLingoExec, "[%3d]: %s", pc, stack.c_str());
}
Common::String Lingo::decodeInstruction(ScriptData *sd, uint pc, uint *newPc) {

View File

@ -172,7 +172,7 @@ public:
void addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType type, uint16 id);
void addNamesV4(Common::SeekableSubReadStreamEndian &stream);
void executeScript(ScriptType type, uint16 id, uint16 function);
void printStack(const char *s);
void printStack(const char *s, uint pc);
Common::String decodeInstruction(ScriptData *sd, uint pc, uint *newPC = NULL);
void initBuiltIns();