aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorFilippos Karapetis2010-10-20 17:31:29 +0000
committerFilippos Karapetis2010-10-20 17:31:29 +0000
commit3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d (patch)
tree5cdb3d4a52cd6cc932e13b84e22958d03df48ece /engines/sci/engine
parent64c0d2a1d1f2b2688e86092834f2e559c437cd29 (diff)
downloadscummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.tar.gz
scummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.tar.bz2
scummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.zip
SCI: Added a new debug command, "find_callk"
This command can be used to find the object methods (including their corresponding objects and owner scripts) that call a specific kernel call. This shall aid us track all the spots where a particular kernel function is called from, therefore it'll be a bit easier to find examples where unimplemented kernel functions are called svn-id: r53646
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/kernel.cpp8
-rw-r--r--engines/sci/engine/kernel.h1
-rw-r--r--engines/sci/engine/segment.h2
3 files changed, 10 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index ff327a0049..b1ee6abaff 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -88,6 +88,14 @@ const Common::String &Kernel::getKernelName(uint number) const {
return _kernelNames[number];
}
+int Kernel::findKernelFuncPos(Common::String kernelFuncName) {
+ for (uint32 i = 0; i < _kernelNames.size(); i++)
+ if (_kernelNames[i] == kernelFuncName)
+ return i;
+
+ return -1;
+}
+
int Kernel::findSelector(const char *selectorName) const {
for (uint pos = 0; pos < _selectorNames.size(); ++pos) {
if (_selectorNames[pos] == selectorName)
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index e50c6aaae2..9833f91a5e 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -151,6 +151,7 @@ public:
uint getSelectorNamesSize() const;
const Common::String &getSelectorName(uint selector);
+ int findKernelFuncPos(Common::String kernelFuncName);
uint getKernelNamesSize() const;
const Common::String &getKernelName(uint number) const;
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index 6eca708e2e..99a41137e9 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -246,7 +246,7 @@ public:
reg_t getInfoSelector() const { return _variables[_offset + 2]; }
void setInfoSelector(reg_t value) { _variables[_offset + 2] = value; }
- reg_t getNameSelector() const { return _variables[_offset + 3]; }
+ reg_t getNameSelector() const { return _offset + 3 < (uint16)_variables.size() ? _variables[_offset + 3] : NULL_REG; }
void setNameSelector(reg_t value) { _variables[_offset + 3] = value; }
reg_t getPropDictSelector() const { return _variables[2]; }