SCI: Remove selector_name function, some cleanup
svn-id: r49966
This commit is contained in:
parent
337711d321
commit
cfcbdf8656
5 changed files with 40 additions and 56 deletions
|
@ -419,13 +419,6 @@ ResourceType parseResourceType(const char *resid) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *selector_name(EngineState *s, int selector) {
|
|
||||||
if (selector >= 0 && selector < (int)g_sci->getKernel()->getSelectorNamesSize())
|
|
||||||
return g_sci->getKernel()->getSelectorName(selector).c_str();
|
|
||||||
else
|
|
||||||
return "--INVALID--";
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Console::cmdGetVersion(int argc, const char **argv) {
|
bool Console::cmdGetVersion(int argc, const char **argv) {
|
||||||
const char *viewTypeDesc[] = { "Unknown", "EGA", "VGA", "VGA SCI1.1", "Amiga" };
|
const char *viewTypeDesc[] = { "Unknown", "EGA", "VGA", "VGA SCI1.1", "Amiga" };
|
||||||
|
|
||||||
|
@ -2217,7 +2210,7 @@ bool Console::cmdViewReference(int argc, const char **argv) {
|
||||||
|
|
||||||
if (reg_end.segment != 0 && size < reg_end.offset - reg.offset) {
|
if (reg_end.segment != 0 && size < reg_end.offset - reg.offset) {
|
||||||
DebugPrintf("Block end out of bounds (size %d). Resetting.\n", size);
|
DebugPrintf("Block end out of bounds (size %d). Resetting.\n", size);
|
||||||
reg_end = NULL_REG;
|
reg_end = NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg_end.segment != 0 && (size >= reg_end.offset - reg.offset))
|
if (reg_end.segment != 0 && (size >= reg_end.offset - reg.offset))
|
||||||
|
@ -2324,11 +2317,10 @@ bool Console::cmdBacktrace(int argc, const char **argv) {
|
||||||
|
|
||||||
switch (call.type) {
|
switch (call.type) {
|
||||||
|
|
||||||
case EXEC_STACK_TYPE_CALL: {// Normal function
|
case EXEC_STACK_TYPE_CALL: // Normal function
|
||||||
DebugPrintf(" %x:[%x] %s::%s(", i, call.origin, objname, (call.selector == -1) ? "<call[be]?>" :
|
DebugPrintf(" %x:[%x] %s::%s(", i, call.origin, objname, (call.selector == -1) ? "<call[be]?>" :
|
||||||
selector_name(_engine->_gamestate, call.selector));
|
_engine->getKernel()->getSelectorName(call.selector).c_str());
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case EXEC_STACK_TYPE_KERNEL: // Kernel function
|
case EXEC_STACK_TYPE_KERNEL: // Kernel function
|
||||||
DebugPrintf(" %x:[%x] k%s(", i, call.origin, _engine->getKernel()->getKernelName(call.selector).c_str());
|
DebugPrintf(" %x:[%x] k%s(", i, call.origin, _engine->getKernel()->getKernelName(call.selector).c_str());
|
||||||
|
@ -2554,11 +2546,11 @@ bool Console::cmdSend(int argc, const char **argv) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *selector_name = argv[2];
|
const char *selectorName = argv[2];
|
||||||
int selectorId = _engine->getKernel()->findSelector(selector_name);
|
int selectorId = _engine->getKernel()->findSelector(selectorName);
|
||||||
|
|
||||||
if (selectorId < 0) {
|
if (selectorId < 0) {
|
||||||
DebugPrintf("Unknown selector: \"%s\"\n", selector_name);
|
DebugPrintf("Unknown selector: \"%s\"\n", selectorName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2571,7 +2563,7 @@ bool Console::cmdSend(int argc, const char **argv) {
|
||||||
SelectorType selector_type = lookupSelector(_engine->_gamestate->_segMan, object, selectorId, NULL, NULL);
|
SelectorType selector_type = lookupSelector(_engine->_gamestate->_segMan, object, selectorId, NULL, NULL);
|
||||||
|
|
||||||
if (selector_type == kSelectorNone) {
|
if (selector_type == kSelectorNone) {
|
||||||
DebugPrintf("Object does not support selector: \"%s\"\n", selector_name);
|
DebugPrintf("Object does not support selector: \"%s\"\n", selectorName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3273,7 +3265,7 @@ int Console::printObject(reg_t pos) {
|
||||||
DebugPrintf(" ");
|
DebugPrintf(" ");
|
||||||
if (i < var_container->getVarCount()) {
|
if (i < var_container->getVarCount()) {
|
||||||
uint16 varSelector = var_container->getVarSelector(i);
|
uint16 varSelector = var_container->getVarSelector(i);
|
||||||
DebugPrintf("[%03x] %s = ", varSelector, selector_name(s, varSelector));
|
DebugPrintf("[%03x] %s = ", varSelector, _engine->getKernel()->getSelectorName(varSelector).c_str());
|
||||||
} else
|
} else
|
||||||
DebugPrintf("p#%x = ", i);
|
DebugPrintf("p#%x = ", i);
|
||||||
|
|
||||||
|
@ -3292,7 +3284,7 @@ int Console::printObject(reg_t pos) {
|
||||||
DebugPrintf(" -- methods:\n");
|
DebugPrintf(" -- methods:\n");
|
||||||
for (i = 0; i < obj->getMethodCount(); i++) {
|
for (i = 0; i < obj->getMethodCount(); i++) {
|
||||||
reg_t fptr = obj->getFunction(i);
|
reg_t fptr = obj->getFunction(i);
|
||||||
DebugPrintf(" [%03x] %s = %04x:%04x\n", obj->getFuncSelector(i), selector_name(s, obj->getFuncSelector(i)), PRINT_REG(fptr));
|
DebugPrintf(" [%03x] %s = %04x:%04x\n", obj->getFuncSelector(i), _engine->getKernel()->getSelectorName(obj->getFuncSelector(i)).c_str(), PRINT_REG(fptr));
|
||||||
}
|
}
|
||||||
if (s->_segMan->_heap[pos.segment]->getType() == SEG_TYPE_SCRIPT)
|
if (s->_segMan->_heap[pos.segment]->getType() == SEG_TYPE_SCRIPT)
|
||||||
DebugPrintf("\nOwner script: %d\n", s->_segMan->getScript(pos.segment)->_nr);
|
DebugPrintf("\nOwner script: %d\n", s->_segMan->getScript(pos.segment)->_nr);
|
||||||
|
|
|
@ -410,7 +410,8 @@ SciKernelFunction kfunct_mappers[] = {
|
||||||
{NULL, NULL, NULL} // Terminator
|
{NULL, NULL, NULL} // Terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
Kernel::Kernel(ResourceManager *resMan, SegManager *segMan) : _resMan(resMan), _segMan(segMan) {
|
Kernel::Kernel(ResourceManager *resMan, SegManager *segMan)
|
||||||
|
: _resMan(resMan), _segMan(segMan), _invalid("<invalid>") {
|
||||||
loadSelectorNames();
|
loadSelectorNames();
|
||||||
mapSelectors(); // Map a few special selectors for later use
|
mapSelectors(); // Map a few special selectors for later use
|
||||||
}
|
}
|
||||||
|
@ -428,6 +429,8 @@ uint Kernel::getSelectorNamesSize() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Common::String &Kernel::getSelectorName(uint selector) const {
|
const Common::String &Kernel::getSelectorName(uint selector) const {
|
||||||
|
if (selector >= _selectorNames.size())
|
||||||
|
return _invalid;
|
||||||
return _selectorNames[selector];
|
return _selectorNames[selector];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,9 +442,8 @@ const Common::String &Kernel::getKernelName(uint number) const {
|
||||||
// FIXME: The following check is a temporary workaround for
|
// FIXME: The following check is a temporary workaround for
|
||||||
// an issue leading to crashes when using the debugger's backtrace
|
// an issue leading to crashes when using the debugger's backtrace
|
||||||
// command.
|
// command.
|
||||||
static const Common::String invalid = "(invalid)";
|
|
||||||
if (number >= _kernelNames.size())
|
if (number >= _kernelNames.size())
|
||||||
return invalid;
|
return _invalid;
|
||||||
return _kernelNames[number];
|
return _kernelNames[number];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,6 +246,8 @@ private:
|
||||||
// Kernel-related lists
|
// Kernel-related lists
|
||||||
Common::StringArray _selectorNames;
|
Common::StringArray _selectorNames;
|
||||||
Common::StringArray _kernelNames;
|
Common::StringArray _kernelNames;
|
||||||
|
|
||||||
|
const Common::String _invalid;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_OLD_MUSIC_FUNCTIONS
|
#ifdef USE_OLD_MUSIC_FUNCTIONS
|
||||||
|
|
|
@ -63,9 +63,7 @@ const char *opcodeNames[] = {
|
||||||
"-sli", "-sti", "-spi"
|
"-sli", "-sti", "-spi"
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const char *selector_name(EngineState *s, int selector);
|
DebugState g_debugState; // FIXME: Avoid non-const global vars
|
||||||
|
|
||||||
DebugState g_debugState;
|
|
||||||
|
|
||||||
// Disassembles one command from the heap, returns address of next command or 0 if a ret was encountered.
|
// Disassembles one command from the heap, returns address of next command or 0 if a ret was encountered.
|
||||||
reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecode) {
|
reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecode) {
|
||||||
|
@ -197,7 +195,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
if (!obj)
|
if (!obj)
|
||||||
warning("Attempted to reference on non-object at %04x:%04x", PRINT_REG(s->xs->objp));
|
warning("Attempted to reference on non-object at %04x:%04x", PRINT_REG(s->xs->objp));
|
||||||
else
|
else
|
||||||
printf(" (%s)", selector_name(s, obj->propertyOffsetToId(s->_segMan, scr[pos.offset + 1])));
|
printf(" (%s)", g_sci->getKernel()->getSelectorName(obj->propertyOffsetToId(s->_segMan, scr[pos.offset + 1])).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,7 +242,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
if (!name)
|
if (!name)
|
||||||
name = "<invalid>";
|
name = "<invalid>";
|
||||||
|
|
||||||
printf(" %s::%s[", name, (selector > kernel->getSelectorNamesSize()) ? "<invalid>" : selector_name(s, selector));
|
printf(" %s::%s[", name, g_sci->getKernel()->getSelectorName(selector).c_str());
|
||||||
|
|
||||||
switch (lookupSelector(s->_segMan, called_obj_addr, selector, 0, &fun_ref)) {
|
switch (lookupSelector(s->_segMan, called_obj_addr, selector, 0, &fun_ref)) {
|
||||||
case kSelectorMethod:
|
case kSelectorMethod:
|
||||||
|
@ -314,17 +312,15 @@ void script_debug(EngineState *s) {
|
||||||
if (paramb1 != g_debugState.seekSpecial)
|
if (paramb1 != g_debugState.seekSpecial)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case kDebugSeekCallk: {
|
case kDebugSeekCallk:
|
||||||
if (op != op_callk)
|
if (op != op_callk)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case kDebugSeekLevelRet: {
|
case kDebugSeekLevelRet:
|
||||||
if ((op != op_ret) || (g_debugState.seekLevel < (int)s->_executionStack.size()-1))
|
if ((op != op_ret) || (g_debugState.seekLevel < (int)s->_executionStack.size()-1))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case kDebugSeekGlobal:
|
case kDebugSeekGlobal:
|
||||||
if (op < op_sag)
|
if (op < op_sag)
|
||||||
|
@ -361,7 +357,7 @@ void script_debug(EngineState *s) {
|
||||||
|
|
||||||
g_debugState.debugging = false;
|
g_debugState.debugging = false;
|
||||||
|
|
||||||
Console *con = ((Sci::SciEngine*)g_engine)->getSciDebugger();
|
Console *con = ((Sci::SciEngine *)g_engine)->getSciDebugger();
|
||||||
con->attach();
|
con->attach();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,19 +487,17 @@ void Kernel::dissectScript(int scriptNumber, Vocabulary *vocab) {
|
||||||
dumpScriptObject((char *)script->data, seeker, objsize);
|
dumpScriptObject((char *)script->data, seeker, objsize);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCI_OBJ_CODE: {
|
case SCI_OBJ_CODE:
|
||||||
printf("Code\n");
|
printf("Code\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 3: {
|
case 3:
|
||||||
printf("<unknown>\n");
|
printf("<unknown>\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case SCI_OBJ_SAID: {
|
case SCI_OBJ_SAID:
|
||||||
printf("Said\n");
|
printf("Said\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
|
|
||||||
|
@ -551,46 +545,40 @@ void Kernel::dissectScript(int scriptNumber, Vocabulary *vocab) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case SCI_OBJ_STRINGS: {
|
case SCI_OBJ_STRINGS:
|
||||||
printf("Strings\n");
|
printf("Strings\n");
|
||||||
while (script->data [seeker]) {
|
while (script->data [seeker]) {
|
||||||
printf("%04x: %s\n", seeker, script->data + seeker);
|
printf("%04x: %s\n", seeker, script->data + seeker);
|
||||||
seeker += strlen((char *)script->data + seeker) + 1;
|
seeker += strlen((char *)script->data + seeker) + 1;
|
||||||
}
|
}
|
||||||
seeker++; // the ending zero byte
|
seeker++; // the ending zero byte
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case SCI_OBJ_CLASS:
|
case SCI_OBJ_CLASS:
|
||||||
dumpScriptClass((char *)script->data, seeker, objsize);
|
dumpScriptClass((char *)script->data, seeker, objsize);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCI_OBJ_EXPORTS: {
|
case SCI_OBJ_EXPORTS:
|
||||||
printf("Exports\n");
|
printf("Exports\n");
|
||||||
Common::hexdump((unsigned char *)script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump((unsigned char *)script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case SCI_OBJ_POINTERS: {
|
case SCI_OBJ_POINTERS:
|
||||||
printf("Pointers\n");
|
printf("Pointers\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 9: {
|
case 9:
|
||||||
printf("<unknown>\n");
|
printf("<unknown>\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case SCI_OBJ_LOCALVARS: {
|
case SCI_OBJ_LOCALVARS:
|
||||||
printf("Local vars\n");
|
printf("Local vars\n");
|
||||||
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
Common::hexdump(script->data + seeker, objsize - 4, 16, seeker);
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("Unsupported!\n");
|
printf("Unsupported!\n");
|
||||||
|
|
|
@ -276,7 +276,7 @@ Common::Error SciEngine::run() {
|
||||||
#ifdef ENABLE_SCI32
|
#ifdef ENABLE_SCI32
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_kernel->loadKernelNames(_features); // Must be called after game_init()
|
_kernel->loadKernelNames(_features); // Must be called after game_init()
|
||||||
|
|
||||||
script_adjust_opcode_formats();
|
script_adjust_opcode_formats();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue