[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