[Scummvm-cvs-logs] SF.net SVN: scummvm:[49251] scummvm/trunk/engines/sci/engine
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Thu May 27 00:05:52 CEST 2010
Revision: 49251
http://scummvm.svn.sourceforge.net/scummvm/?rev=49251&view=rev
Author: thebluegr
Date: 2010-05-26 22:05:51 +0000 (Wed, 26 May 2010)
Log Message:
-----------
Made _k_new_node() a method of the segment manager, and fixed a bug with the rarely used SCI0 kernel function kSort in the process (_k_new_node was called with key, value instead of value, key inside kSort)
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/klists.cpp
scummvm/trunk/engines/sci/engine/seg_manager.cpp
scummvm/trunk/engines/sci/engine/seg_manager.h
Modified: scummvm/trunk/engines/sci/engine/klists.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/klists.cpp 2010-05-26 20:48:08 UTC (rev 49250)
+++ scummvm/trunk/engines/sci/engine/klists.cpp 2010-05-26 22:05:51 UTC (rev 49251)
@@ -155,29 +155,11 @@
return s->r_acc;
}
-static reg_t _k_new_node(EngineState *s, reg_t value, reg_t key) {
- reg_t nodebase;
- Node *n = s->_segMan->allocateNode(&nodebase);
-
- if (!n) {
- error("[Kernel] Out of memory while creating a node");
- return NULL_REG;
- }
-
- n->pred = n->succ = NULL_REG;
- n->key = key;
- n->value = value;
-
- return nodebase;
-}
-
reg_t kNewNode(EngineState *s, int argc, reg_t *argv) {
+ reg_t nodeValue = argv[0];
+ reg_t nodeKey = (argc == 2) ? argv[1] : NULL_REG;
+ s->r_acc = s->_segMan->newNode(nodeValue, nodeKey);
- if (argc == 1)
- s->r_acc = _k_new_node(s, argv[0], argv[0]);
- else
- s->r_acc = _k_new_node(s, argv[0], argv[1]);
-
debugC(2, kDebugLevelNodes, "New nodebase at %04x:%04x", PRINT_REG(s->r_acc));
return s->r_acc;
@@ -453,7 +435,7 @@
qsort(temp_array, input_size, sizeof(sort_temp_t), sort_temp_cmp);
for (i = 0;i < input_size;i++) {
- reg_t lNode = _k_new_node(s, temp_array[i].key, temp_array[i].value);
+ reg_t lNode = s->_segMan->newNode(temp_array[i].value, temp_array[i].key);
_k_add_to_end(s, output_data, lNode);
}
Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp 2010-05-26 20:48:08 UTC (rev 49250)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp 2010-05-26 22:05:51 UTC (rev 49251)
@@ -523,6 +523,16 @@
return &(table->_table[offset]);
}
+reg_t SegManager::newNode(reg_t value, reg_t key) {
+ reg_t nodebase;
+ Node *n = allocateNode(&nodebase);
+ n->pred = n->succ = NULL_REG;
+ n->key = key;
+ n->value = value;
+
+ return nodebase;
+}
+
List *SegManager::lookupList(reg_t addr) {
if (getSegmentType(addr.segment) != SEG_TYPE_LISTS) {
warning("Attempt to use non-list %04x:%04x as list", PRINT_REG(addr));
Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h 2010-05-26 20:48:08 UTC (rev 49250)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h 2010-05-26 22:05:51 UTC (rev 49251)
@@ -215,6 +215,14 @@
Node *allocateNode(reg_t *addr);
/**
+ * Allocate and initialize a new list node.
+ * @param[in] value The value to set the node to
+ * @param[in] key The key to set
+ * @return Pointer to the newly initialized list node
+ */
+ reg_t newNode(reg_t value, reg_t key);
+
+ /**
* Resolves a list pointer to a list.
* @param addr The address to resolve
* @return The list referenced, or NULL on error
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