[Scummvm-cvs-logs] SF.net SVN: scummvm:[46744] scummvm/trunk/engines/sci/engine
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Wed Dec 30 15:31:00 CET 2009
Revision: 46744
http://scummvm.svn.sourceforge.net/scummvm/?rev=46744&view=rev
Author: thebluegr
Date: 2009-12-30 14:31:00 +0000 (Wed, 30 Dec 2009)
Log Message:
-----------
Initial implementation of the SCI21 kList kernel function (which calls all the other list-related functions), thanks to the help of waltervn
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kernel.cpp
scummvm/trunk/engines/sci/engine/kernel.h
scummvm/trunk/engines/sci/engine/klists.cpp
Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp 2009-12-30 14:13:25 UTC (rev 46743)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp 2009-12-30 14:31:00 UTC (rev 46744)
@@ -359,6 +359,7 @@
// SCI2.1 Kernel Functions
DEFUN("Save", kSave, ".*"),
+ DEFUN("List", kList, ".*"),
#endif
// its a stub, but its needed for Pharkas to work
Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h 2009-12-30 14:13:25 UTC (rev 46743)
+++ scummvm/trunk/engines/sci/engine/kernel.h 2009-12-30 14:31:00 UTC (rev 46744)
@@ -414,6 +414,8 @@
// SCI2.1 Kernel Functions
reg_t kSave(EngineState *s, int argc, reg_t *argv);
+reg_t kList(EngineState *s, int argc, reg_t *argv);
+
#endif
} // End of namespace Sci
Modified: scummvm/trunk/engines/sci/engine/klists.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/klists.cpp 2009-12-30 14:13:25 UTC (rev 46743)
+++ scummvm/trunk/engines/sci/engine/klists.cpp 2009-12-30 14:31:00 UTC (rev 46744)
@@ -632,6 +632,69 @@
return s->r_acc;
}
+// In SCI2.1, all the list functions were merged in one
+reg_t kList(EngineState *s, int argc, reg_t *argv) {
+
+ switch (argv[0].toUint16()) {
+ case 0:
+ return kNewList(s, argc - 1, argv + 1);
+ case 1:
+ return kDisposeList(s, argc - 1, argv + 1);
+ case 2:
+ return kNewNode(s, argc - 1, argv + 1);
+ case 3:
+ return kFirstNode(s, argc - 1, argv + 1);
+ case 4:
+ return kLastNode(s, argc - 1, argv + 1);
+ case 5:
+ return kEmptyList(s, argc - 1, argv + 1);
+ case 6:
+ return kNextNode(s, argc - 1, argv + 1);
+ case 7:
+ return kPrevNode(s, argc - 1, argv + 1);
+ case 8:
+ return kNodeValue(s, argc - 1, argv + 1);
+ case 9:
+ return kAddAfter(s, argc - 1, argv + 1);
+ case 10:
+ return kAddToFront(s, argc - 1, argv + 1);
+ case 11:
+ return kAddToEnd(s, argc - 1, argv + 1);
+ case 12:
+ warning("kList: unimplemented subfunction kAddBefore");
+ //return kAddBefore(s, argc - 1, argv + 1);
+ return NULL_REG;
+ case 13:
+ warning("kList: unimplemented subfunction kMoveToFront");
+ //return kMoveToFront(s, argc - 1, argv + 1);
+ return NULL_REG;
+ case 14:
+ warning("kList: unimplemented subfunction kMoveToEnd");
+ //return kMoveToEnd(s, argc - 1, argv + 1);
+ return NULL_REG;
+ case 15:
+ return kFindKey(s, argc - 1, argv + 1);
+ case 16:
+ return kDeleteKey(s, argc - 1, argv + 1);
+ case 17:
+ return kListAt(s, argc - 1, argv + 1);
+ case 18:
+ return kListIndexOf(s, argc - 1, argv + 1);
+ case 19:
+ return kListEachElementDo(s, argc - 1, argv + 1);
+ case 20:
+ return kListFirstTrue(s, argc - 1, argv + 1);
+ case 21:
+ return kListAllTrue(s, argc - 1, argv + 1);
+ case 22:
+ return kSort(s, argc - 1, argv + 1);
+ default:
+ warning("kList: Unhandled case %d");
+ return NULL_REG;
+ }
+
+}
+
#endif
} // End of namespace Sci
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