[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