[Scummvm-cvs-logs] SF.net SVN: scummvm:[46740] scummvm/trunk/engines/sci/engine/kernel32.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Dec 30 14:19:52 CET 2009


Revision: 46740
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46740&view=rev
Author:   thebluegr
Date:     2009-12-30 13:19:52 +0000 (Wed, 30 Dec 2009)

Log Message:
-----------
SCI32: added handling of variable selectors in kListEachElementDo() and silenced some annoying warnings

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel32.cpp

Modified: scummvm/trunk/engines/sci/engine/kernel32.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel32.cpp	2009-12-30 12:55:24 UTC (rev 46739)
+++ scummvm/trunk/engines/sci/engine/kernel32.cpp	2009-12-30 13:19:52 UTC (rev 46740)
@@ -638,7 +638,7 @@
 
 	// TODO
 
-	warning("kAddScreenItem, object %04x:%04x, view %d, loop %d, cel %d, pri %d", PRINT_REG(viewObj), viewId, loopNo, celNo, priority);
+	//warning("kAddScreenItem, object %04x:%04x, view %d, loop %d, cel %d, pri %d", PRINT_REG(viewObj), viewId, loopNo, celNo, priority);
 	//s->_gui->addToPicView(viewId, loopNo, celNo, leftPos, topPos, priority, control);
 	return NULL_REG;
 }
@@ -657,7 +657,7 @@
 	if (viewId != 0xffff)
 		s->_gui->drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, 0);
 
-	warning("kUpdateScreenItem, object %04x:%04x, view %d, loop %d, cel %d, pri %d", PRINT_REG(viewObj), viewId, loopNo, celNo, priority);
+	//warning("kUpdateScreenItem, object %04x:%04x, view %d, loop %d, cel %d, pri %d", PRINT_REG(viewObj), viewId, loopNo, celNo, priority);
 	return NULL_REG;
 }
 
@@ -673,7 +673,7 @@
 
 	// TODO
 
-	warning("kDeleteScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority);
+	//warning("kDeleteScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority);
 	return NULL_REG;
 }
 
@@ -755,21 +755,34 @@
 	reg_t curAddress = list->first;
 	Node *curNode = s->_segMan->lookupNode(curAddress);
 	reg_t curObject;
+	Selector slc = argv[1].toUint16();
 
+	ObjVarRef address;
+
 	while (curNode) {
 		curObject = curNode->value;
 
-		// FIXME: Yes, this is an ugly hack...
-		if (argc == 2) {
-			invoke_selector(s, curObject, argv[1].toUint16(), kContinueOnInvalidSelector, argv, argc, 0);
-		} else if (argc == 3) {
-			invoke_selector(s, curObject, argv[1].toUint16(), kContinueOnInvalidSelector, argv, argc, 1, argv[2]);
-		} else if (argc == 4) {
-			invoke_selector(s, curObject, argv[1].toUint16(), kContinueOnInvalidSelector, argv, argc, 2, argv[2], argv[3]);
-		} else if (argc == 5) {
-			invoke_selector(s, curObject, argv[1].toUint16(), kContinueOnInvalidSelector, argv, argc, 3, argv[2], argv[3], argv[4]);
+		// First, check if the target selector is a variable
+		if (lookup_selector(s->_segMan, curObject, slc, &address, NULL) == kSelectorVariable) {
+			// This can only happen with 3 params (list, target object, variable)
+			if (argc != 3) {
+				warning("kListEachElementDo: Attempted to modify a variable selector with %d params", argc);
+			} else {
+				write_selector(s->_segMan, curObject, slc, argv[2]);
+			}
 		} else {
-			warning("kListEachElementDo: called with %d params", argc);
+			// FIXME: Yes, this is an ugly hack...
+			if (argc == 2) {
+				invoke_selector(s, curObject, slc, kContinueOnInvalidSelector, argv, argc, 0);
+			} else if (argc == 3) {
+				invoke_selector(s, curObject, slc, kContinueOnInvalidSelector, argv, argc, 1, argv[2]);
+			} else if (argc == 4) {
+				invoke_selector(s, curObject, slc, kContinueOnInvalidSelector, argv, argc, 2, argv[2], argv[3]);
+			} else if (argc == 5) {
+				invoke_selector(s, curObject, slc, kContinueOnInvalidSelector, argv, argc, 3, argv[2], argv[3], argv[4]);
+			} else {
+				warning("kListEachElementDo: called with %d params", argc);
+			}
 		}
 
 		// Lookup node again, since the nodetable it was in may have been reallocated


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