[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