[Scummvm-cvs-logs] SF.net SVN: scummvm:[40274] scummvm/trunk/engines/sci/engine

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun May 3 13:07:07 CEST 2009


Revision: 40274
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40274&view=rev
Author:   fingolfin
Date:     2009-05-03 11:07:07 +0000 (Sun, 03 May 2009)

Log Message:
-----------
SCI: Continue transition from MemObject to MemObjectNEW

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel.cpp
    scummvm/trunk/engines/sci/engine/klists.cpp
    scummvm/trunk/engines/sci/engine/kmovement.cpp
    scummvm/trunk/engines/sci/engine/kscripts.cpp
    scummvm/trunk/engines/sci/engine/scriptconsole.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.h
    scummvm/trunk/engines/sci/engine/vm.cpp

Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -239,10 +239,9 @@
 
 // Returns a pointer to the memory indicated by the specified handle
 byte *kmem(EngineState *s, reg_t handle) {
-	MemObject *mobj = GET_SEGMENT(*s->seg_manager, handle.segment, MEM_OBJ_HUNK);
-	HunkTable *ht = &(mobj->data.hunks);
+	HunkTable *ht = (HunkTable *)GET_SEGMENT(*s->seg_manager, handle.segment, MEM_OBJ_HUNK);
 
-	if (!mobj || !ENTRY_IS_VALID(ht, handle.offset)) {
+	if (!ht || !ENTRY_IS_VALID(ht, handle.offset)) {
 		SCIkwarn(SCIkERROR, "Error: kmem() with invalid handle\n");
 		return NULL;
 	}
@@ -686,7 +685,7 @@
 			return KSIG_REF;
 
 	case MEM_OBJ_CLONES:
-		if (allow_invalid || ENTRY_IS_VALID(&(mobj->data.clones), reg.offset))
+		if (allow_invalid || ENTRY_IS_VALID((CloneTable *)mobj, reg.offset))
 			return KSIG_OBJECT;
 		else
 			return KSIG_OBJECT | KSIG_INVALID;
@@ -711,13 +710,13 @@
 			return KSIG_REF | KSIG_INVALID;
 
 	case MEM_OBJ_LISTS:
-		if (allow_invalid || ENTRY_IS_VALID(&(mobj->data.lists), reg.offset))
+		if (allow_invalid || ENTRY_IS_VALID((ListTable *)mobj, reg.offset))
 			return KSIG_LIST;
 		else
 			return KSIG_LIST | KSIG_INVALID;
 
 	case MEM_OBJ_NODES:
-		if (allow_invalid || ENTRY_IS_VALID(&(mobj->data.nodes), reg.offset))
+		if (allow_invalid || ENTRY_IS_VALID((NodeTable *)mobj, reg.offset))
 			return KSIG_NODE;
 		else
 			return KSIG_NODE | KSIG_INVALID;

Modified: scummvm/trunk/engines/sci/engine/klists.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/klists.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/klists.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -42,7 +42,7 @@
 		return NULL;
 	}
 
-	NodeTable *nt = &(mobj->data.nodes);
+	NodeTable *nt = (NodeTable *)mobj;
 
 	if (!ENTRY_IS_VALID(nt, addr.offset)) {
 		sciprintf("%s, L%d: Attempt to use non-node "PREG" as list node\n", __FILE__, __LINE__, PRINT_REG(addr));
@@ -62,7 +62,7 @@
 		return NULL;
 	}
 
-	ListTable *lt = &(mobj->data.lists);
+	ListTable *lt = (ListTable *)mobj;
 
 	if (!ENTRY_IS_VALID(lt, addr.offset)) {
 		sciprintf("%s, L%d: Attempt to use non-list "PREG" as list\n", __FILE__, __LINE__, PRINT_REG(addr));

Modified: scummvm/trunk/engines/sci/engine/kmovement.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -270,7 +270,7 @@
 			return;
 		}
 
-		buf = s->seg_manager->heap[fptr.segment]->data.script.buf + fptr.offset;
+		buf = s->seg_manager->getScript(fptr.segment, SEG_ID)->buf + fptr.offset;
 		handle_movecnt = (SCI_VERSION_MAJOR(s->version) == 0 || checksum_bytes(buf, 8) == 0x216) ? INCREMENT_MOVECNT : IGNORE_MOVECNT;
 		sciprintf("b-moveCnt action based on checksum: %s\n", handle_movecnt == IGNORE_MOVECNT ? "ignore" : "increment");
 	} else {

Modified: scummvm/trunk/engines/sci/engine/kscripts.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kscripts.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/kscripts.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -246,7 +246,7 @@
 	if (!scriptid)
 		return NULL_REG;
 
-	scr = &(s->seg_manager->heap[scriptid]->data.script);
+	scr = s->seg_manager->getScript(scriptid, SEG_ID);
 
 	if (!scr->exports_nr) {
 		SCIkdebug(SCIkERROR, "Script 0x%x does not have a dispatch table\n", script);

Modified: scummvm/trunk/engines/sci/engine/scriptconsole.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptconsole.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/scriptconsole.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -312,9 +312,9 @@
 
 			if (mobj) {
 				if (mobj->getType() == MEM_OBJ_SCRIPT)
-					max_index = mobj->data.script.objects_nr;
+					max_index = (*(Script *)mobj).objects_nr;
 				else if (mobj->getType() == MEM_OBJ_CLONES)
-					max_index = mobj->data.clones.max_entry;
+					max_index = (*(CloneTable *)mobj).max_entry;
 			}
 
 			while (idx < max_index) {
@@ -325,12 +325,12 @@
 				objpos.segment = i;
 
 				if (mobj->getType() == MEM_OBJ_SCRIPT) {
-					obj = mobj->data.script.objects + idx;
+					obj = (*(Script *)mobj).objects + idx;
 					objpos.offset = obj->pos.offset;
 				} else if (mobj->getType() == MEM_OBJ_CLONES) {
-					obj = &(mobj->data.clones.table[idx]);
+					obj = &((*(CloneTable *)mobj).table[idx]);
 					objpos.offset = idx;
-					valid = clone_is_used(&mobj->data.clones, idx);
+					valid = clone_is_used((CloneTable *)mobj, idx);
 				}
 
 				if (valid) {

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -1084,7 +1084,7 @@
 	offset = table->allocEntry();
 
 	*addr = make_reg(Clones_seg_id, offset);
-	return &(mobj->data.clones.table[offset]);
+	return &(table->table[offset]);
 }
 
 List *SegManager::alloc_List(reg_t *addr) {
@@ -1102,7 +1102,7 @@
 	offset = table->allocEntry();
 
 	*addr = make_reg(Lists_seg_id, offset);
-	return &(mobj->data.lists.table[offset]);
+	return &(table->table[offset]);
 }
 
 Node *SegManager::alloc_Node(reg_t *addr) {
@@ -1120,7 +1120,7 @@
 	offset = table->allocEntry();
 
 	*addr = make_reg(Nodes_seg_id, offset);
-	return &(mobj->data.nodes.table[offset]);
+	return &(table->table[offset]);
 }
 
 Hunk *SegManager::alloc_Hunk(reg_t *addr) {
@@ -1138,7 +1138,7 @@
 	offset = table->allocEntry();
 
 	*addr = make_reg(Hunks_seg_id, offset);
-	return &(mobj->data.hunks.table[offset]);
+	return &(table->table[offset]);
 }
 
 

Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h	2009-05-03 11:07:07 UTC (rev 40274)
@@ -38,15 +38,15 @@
 	SEG_ID
 };
 
-#define GET_SEGMENT(mgr, index, rtype) ((index) > 0 && (mgr).heap_size > index) ?		\
-		(((mgr).heap[index] && (mgr).heap[index]->getType() == rtype)? (mgr).heap[index]	: NULL) : NULL
+#define GET_SEGMENT(mgr, index, rtype) (((index) > 0 && (mgr).heap_size > index) ?		\
+		(((mgr).heap[index] && (mgr).heap[index]->getType() == rtype)? (mgr).heap[index]	: NULL) : NULL)
 
-#define GET_SEGMENT_ANY(mgr, index) ((index) > 0 && (mgr).heap_size > index) ?			\
-		(((mgr).heap[index])? (mgr).heap[index]	: NULL) : NULL
+#define GET_SEGMENT_ANY(mgr, index) (((index) > 0 && (mgr).heap_size > index) ?			\
+		(((mgr).heap[index])? (mgr).heap[index]	: NULL) : NULL)
 
-#define GET_OBJECT_SEGMENT(mgr, index) ((index) > 0 && (mgr).heap_size > index) ?		\
+#define GET_OBJECT_SEGMENT(mgr, index) (((index) > 0 && (mgr).heap_size > index) ?		\
 		(((mgr).heap[index]	&& ((mgr).heap[index]->getType() == MEM_OBJ_SCRIPT || (mgr).heap[index]->getType() == MEM_OBJ_CLONES))? (mgr).heap[index]	\
-		: NULL): NULL
+		: NULL): NULL)
 
 class SegInterface;
 

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2009-05-03 11:04:37 UTC (rev 40273)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2009-05-03 11:07:07 UTC (rev 40274)
@@ -530,7 +530,7 @@
 static Script *script_locate_by_segment(EngineState *s, SegmentId seg) {
 	MemObject *memobj = GET_SEGMENT(*s->seg_manager, seg, MEM_OBJ_SCRIPT);
 	if (memobj)
-		return &(memobj->data.script);
+		return (Script *)memobj;
 
 	return NULL;
 }
@@ -1640,7 +1640,7 @@
 	memobj = GET_SEGMENT(*s->seg_manager, seg, MEM_OBJ_SCRIPT);
 
 	if (memobj)
-		script = &(memobj->data.script);
+		script = (Script *)memobj;
 
 #ifndef DISABLE_VALIDATIONS
 	if (script
@@ -1703,7 +1703,7 @@
 			seg_id = seg;
 			mem = s->seg_manager->heap[seg];
 			assert(mem);
-			s->seg_manager->freeScript(mem->data.script);
+			s->seg_manager->freeScript(*(Script *)mem);
 		}
 	} else if (!(mem = s->seg_manager->allocateScript(s, script_nr, &seg_id))) {  // ALL YOUR SCRIPT BASE ARE BELONG TO US
 		sciprintf("Not enough heap space for script size 0x%x of script 0x%x, should this happen?`\n", (*script)->size, script_nr);
@@ -1711,7 +1711,7 @@
 		return 0;
 	}
 
-	s->seg_manager->initialiseScript(mem->data.script, s, script_nr);
+	s->seg_manager->initialiseScript(*(Script *)mem, s, script_nr);
 
 	reg.segment = seg_id;
 	reg.offset = 0;
@@ -2088,14 +2088,14 @@
 	int idx;
 
 	if (memobj != NULL) {
-		if (memobj->getType() == MEM_OBJ_CLONES && ENTRY_IS_VALID(&memobj->data.clones, offset.offset))
-			obj = &(memobj->data.clones.table[offset.offset]);
+		if (memobj->getType() == MEM_OBJ_CLONES && ENTRY_IS_VALID((CloneTable *)memobj, offset.offset))
+			obj = &((*(CloneTable *)memobj).table[offset.offset]);
 		else if (memobj->getType() == MEM_OBJ_SCRIPT) {
-			if (offset.offset <= memobj->data.script.buf_size && offset.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
-			        && RAW_IS_OBJECT(memobj->data.script.buf + offset.offset)) {
-				idx = RAW_GET_CLASS_INDEX(&(memobj->data.script), offset);
-				if (idx >= 0 && idx < memobj->data.script.objects_nr)
-					obj = memobj->data.script.objects + idx;
+			if (offset.offset <= (*(Script *)memobj).buf_size && offset.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
+			        && RAW_IS_OBJECT((*(Script *)memobj).buf + offset.offset)) {
+				idx = RAW_GET_CLASS_INDEX((Script *)memobj, offset);
+				if (idx >= 0 && idx < (*(Script *)memobj).objects_nr)
+					obj = (*(Script *)memobj).objects + idx;
 			}
 		}
 	}


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