[Scummvm-cvs-logs] SF.net SVN: scummvm:[51475] scummvm/trunk/engines/sci/engine
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Thu Jul 29 19:22:39 CEST 2010
Revision: 51475
http://scummvm.svn.sourceforge.net/scummvm/?rev=51475&view=rev
Author: m_kiewitz
Date: 2010-07-29 17:22:38 +0000 (Thu, 29 Jul 2010)
Log Message:
-----------
SCI: some subfunction support for logkernel
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kernel.cpp
scummvm/trunk/engines/sci/engine/kernel.h
scummvm/trunk/engines/sci/engine/vm.cpp
Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp 2010-07-29 16:24:25 UTC (rev 51474)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp 2010-07-29 17:22:38 UTC (rev 51475)
@@ -654,9 +654,15 @@
if (strcmp(kernelName, "*")) {
for (uint id = 0; id < _kernelFuncs.size(); id++) {
if (_kernelFuncs[id].name) {
- if (strcmp(kernelName, _kernelFuncs[id].name) == 0) {
- _kernelFuncs[id].debugLogging = logging;
- return true;
+ if (!_kernelFuncs[id].subFunctions) {
+ // No sub-functions, enable actual kernel function
+ if (strcmp(kernelName, _kernelFuncs[id].name) == 0) {
+ _kernelFuncs[id].debugLogging = logging;
+ return true;
+ }
+ } else {
+ // Sub-Functions available
+ // TODO: do this
}
}
}
@@ -664,8 +670,21 @@
}
// Set debugLogging for all calls
for (uint id = 0; id < _kernelFuncs.size(); id++) {
- if (_kernelFuncs[id].name)
- _kernelFuncs[id].debugLogging = logging;
+ if (_kernelFuncs[id].name) {
+ if (!_kernelFuncs[id].subFunctions) {
+ // No sub-functions, enable actual kernel function
+ _kernelFuncs[id].debugLogging = logging;
+ } else {
+ // Sub-Functions available, enable those too
+ KernelSubFunction *kernelSubCall = _kernelFuncs[id].subFunctions;
+ uint kernelSubCallCount = _kernelFuncs[id].subFunctionCount;
+ for (uint subId = 0; subId < kernelSubCallCount; subId++) {
+ if (kernelSubCall->function)
+ kernelSubCall->debugLogging = logging;
+ kernelSubCall++;
+ }
+ }
+ }
}
return true;
}
Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h 2010-07-29 16:24:25 UTC (rev 51474)
+++ scummvm/trunk/engines/sci/engine/kernel.h 2010-07-29 17:22:38 UTC (rev 51475)
@@ -126,6 +126,7 @@
const char *name;
uint16 *signature;
const SciWorkaroundEntry *workarounds;
+ bool debugLogging;
};
struct KernelFunction {
@@ -133,7 +134,7 @@
const char *name;
uint16 *signature;
const SciWorkaroundEntry *workarounds;
- const KernelSubFunction *subFunctions;
+ KernelSubFunction *subFunctions;
uint16 subFunctionCount;
bool debugLogging;
};
Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp 2010-07-29 16:24:25 UTC (rev 51474)
+++ scummvm/trunk/engines/sci/engine/vm.cpp 2010-07-29 17:22:38 UTC (rev 51475)
@@ -647,9 +647,19 @@
xstack->type = EXEC_STACK_TYPE_KERNEL;
}
-static void logKernelCall(const KernelFunction *kernelCall, EngineState *s, int argc, reg_t *argv, reg_t result) {
+static void logKernelCall(const KernelFunction *kernelCall, const KernelSubFunction *kernelSubCall, EngineState *s, int argc, reg_t *argv, reg_t result) {
Kernel *kernel = g_sci->getKernel();
- printf("k%s: ", kernelCall->name);
+ if (!kernelSubCall) {
+ printf("k%s: ", kernelCall->name);
+ } else {
+ int callNameLen = strlen(kernelCall->name);
+ if (strncmp(kernelCall->name, kernelSubCall->name, callNameLen) == 0) {
+ const char *subCallName = kernelSubCall->name + callNameLen;
+ printf("k%s(%s): ", kernelCall->name, subCallName);
+ } else {
+ printf("k%s(%s): ", kernelCall->name, kernelSubCall->name);
+ }
+ }
for (int parmNr = 0; parmNr < argc; parmNr++) {
if (parmNr)
printf(", ");
@@ -732,7 +742,7 @@
s->r_acc = kernelCall.function(s, argc, argv);
if (kernelCall.debugLogging)
- logKernelCall(&kernelCall, s, argc, argv, s->r_acc);
+ logKernelCall(&kernelCall, NULL, s, argc, argv, s->r_acc);
} else {
// Sub-functions available, check signature and call that one directly
if (argc < 1)
@@ -780,6 +790,9 @@
error("[VM] k%s: subfunction-id %d requested, but not available", kernelCall.name, subId);
addKernelCallToExecStack(s, kernelCallNr, argc, argv);
s->r_acc = kernelSubCall.function(s, argc, argv);
+
+ if (kernelSubCall.debugLogging)
+ logKernelCall(&kernelCall, &kernelSubCall, s, argc, argv, s->r_acc);
}
// Remove callk stack frame again, if there's still an execution stack
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list