[Scummvm-cvs-logs] SF.net SVN: scummvm:[46739] scummvm/trunk/engines/sci/engine
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Wed Dec 30 13:55:24 CET 2009
Revision: 46739
http://scummvm.svn.sourceforge.net/scummvm/?rev=46739&view=rev
Author: thebluegr
Date: 2009-12-30 12:55:24 +0000 (Wed, 30 Dec 2009)
Log Message:
-----------
SCI32: added some of clone2727's changes to kArray and kString, and implemented kListIndexOf
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kernel.cpp
scummvm/trunk/engines/sci/engine/kernel.h
scummvm/trunk/engines/sci/engine/kernel32.cpp
Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp 2009-12-30 10:42:52 UTC (rev 46738)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp 2009-12-30 12:55:24 UTC (rev 46739)
@@ -341,7 +341,7 @@
// SCI2 Kernel Functions
DEFUN("IsHiRes", kIsHiRes, ""),
DEFUN("Array", kArray, ".*"),
- DEFUN("ListAt", kListAt, ".*"),
+ DEFUN("ListAt", kListAt, "li"),
DEFUN("String", kString, ".*"),
DEFUN("AddScreenItem", kAddScreenItem, "o"),
DEFUN("UpdateScreenItem", kUpdateScreenItem, "o"),
@@ -352,6 +352,7 @@
DEFUN("RepaintPlane", kRepaintPlane, "o"),
DEFUN("FrameOut", kFrameOut, ""),
DEFUN("ListEachElementDo", kListEachElementDo, ".*"),
+ DEFUN("ListIndexOf", kListIndexOf, "lo"),
DEFUN("OnMe", kOnMe, "iio.*"),
// SCI2.1 Kernel Functions
Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h 2009-12-30 10:42:52 UTC (rev 46738)
+++ scummvm/trunk/engines/sci/engine/kernel.h 2009-12-30 12:55:24 UTC (rev 46739)
@@ -406,6 +406,7 @@
reg_t kUpdatePlane(EngineState *s, int argc, reg_t *argv);
reg_t kRepaintPlane(EngineState *s, int argc, reg_t *argv);
reg_t kFrameOut(EngineState *s, int argc, reg_t *argv);
+reg_t kListIndexOf(EngineState *s, int argc, reg_t *argv);
reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv);
reg_t kOnMe(EngineState *s, int argc, reg_t *argv);
Modified: scummvm/trunk/engines/sci/engine/kernel32.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel32.cpp 2009-12-30 10:42:52 UTC (rev 46738)
+++ scummvm/trunk/engines/sci/engine/kernel32.cpp 2009-12-30 12:55:24 UTC (rev 46739)
@@ -389,7 +389,8 @@
return argv[1]; // We also have to return the handle
}
case 4: // Free
- s->_segMan->freeArray(argv[1]);
+ if (!argv[1].isNull())
+ s->_segMan->freeArray(argv[1]);
return s->r_acc;
case 5: { // Fill
SciArray<reg_t> *array = s->_segMan->lookupArray(argv[1]);
@@ -519,7 +520,8 @@
return argv[1]; // We also have to return the handle
}
case 4: // Free
- s->_segMan->freeString(argv[1]);
+ if (!argv[1].isNull())
+ s->_segMan->freeString(argv[1]);
return s->r_acc;
case 5: { // Fill
SciString *string = s->_segMan->lookupString(argv[1]);
@@ -597,10 +599,10 @@
// TODO: Store a formatted string in a specified string
warning("kString(PrintfBuf)");
break;
- case 13: // atoi
- // TODO: String to integer
- warning("kString(atoi)");
- break;
+ case 13: { // atoi
+ Common::String string = s->_segMan->getString(argv[1]);
+ return make_reg(0, (uint16)atoi(string.c_str()));
+ }
default:
error("Unknown kString subop %d", argv[0].toUint16());
}
@@ -631,7 +633,8 @@
//int16 control = 0;
// HACK: just draw the view on screen
- s->_gui->drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, 0);
+ if (viewId != 0xffff)
+ s->_gui->drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, 0);
// TODO
@@ -651,7 +654,8 @@
//int16 control = 0;
// HACK: just draw the view on screen
- s->_gui->drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, 0);
+ 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);
return NULL_REG;
@@ -724,6 +728,27 @@
return NULL_REG;
}
+reg_t kListIndexOf(EngineState *s, int argc, reg_t *argv) {
+ List *list = s->_segMan->lookupList(argv[0]);
+
+ reg_t curAddress = list->first;
+ Node *curNode = s->_segMan->lookupNode(curAddress);
+ reg_t curObject;
+ uint16 curIndex = 0;
+
+ while (curNode) {
+ curObject = curNode->value;
+ if (curObject == argv[1])
+ return make_reg(0, curIndex);
+
+ curAddress = curNode->succ;
+ curNode = s->_segMan->lookupNode(curAddress);
+ curIndex++;
+ }
+
+ return SIGNAL_REG;
+}
+
reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv) {
List *list = s->_segMan->lookupList(argv[0]);
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