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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon Sep 7 08:07:18 CEST 2009


Revision: 43999
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43999&view=rev
Author:   fingolfin
Date:     2009-09-07 06:07:18 +0000 (Mon, 07 Sep 2009)

Log Message:
-----------
SCI: Replace GET_SEGMENT_ANY and GET_OBJECT_SEGMENT macros by new segman methods

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/engine/savegame.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/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2009-09-06 23:04:06 UTC (rev 43998)
+++ scummvm/trunk/engines/sci/console.cpp	2009-09-07 06:07:18 UTC (rev 43999)
@@ -1642,7 +1642,7 @@
 		return true;
 	}
 
-	MemObject *mobj = GET_SEGMENT_ANY(*_vm->_gamestate->segMan, addr.segment);
+	MemObject *mobj = _vm->_gamestate->segMan->getMemObject(addr.segment);
 	if (!mobj) {
 		DebugPrintf("Unknown segment : %x\n", addr.segment);
 		return 1;
@@ -1671,7 +1671,7 @@
 		return true;
 	}
 
-	MemObject *mobj = GET_SEGMENT_ANY(*_vm->_gamestate->segMan, addr.segment);
+	MemObject *mobj = _vm->_gamestate->segMan->getMemObject(addr.segment);
 	if (!mobj) {
 		DebugPrintf("Unknown segment : %x\n", addr.segment);
 		return true;
@@ -1701,7 +1701,7 @@
 		return true;
 	}
 
-	MemObject *mobj = GET_SEGMENT_ANY(*_vm->_gamestate->segMan, addr.segment);
+	MemObject *mobj = _vm->_gamestate->segMan->getMemObject(addr.segment);
 	if (!mobj) {
 		DebugPrintf("Unknown segment : %x\n", addr.segment);
 		return true;

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-06 23:04:06 UTC (rev 43998)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-07 06:07:18 UTC (rev 43999)
@@ -533,10 +533,8 @@
 	retval->stack_top = retval->stack_base + VM_STACK_SIZE;
 }
 
-static void load_script(EngineState *s, SegmentId seg) {
+static void load_script(EngineState *s, Script *scr) {
 	Resource *script, *heap = NULL;
-	Script *scr = (Script *)(s->segMan->_heap[seg]);
-	assert(scr);
 
 	scr->buf = (byte *)malloc(scr->buf_size);
 	assert(scr->buf);
@@ -566,7 +564,7 @@
 				Script *scr = (Script *)mobj;
 
 				// FIXME: Unify this code with script_instantiate_*
-				load_script(s, i);
+				load_script(s, scr);
 				scr->locals_block = (scr->locals_segment == 0) ? NULL : (LocalVariables *)(s->segMan->_heap[scr->locals_segment]);
 				if (s->resMan->sciVersion() >= SCI_VERSION_1_1) {
 					scr->export_table = 0;

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-06 23:04:06 UTC (rev 43998)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-07 06:07:18 UTC (rev 43999)
@@ -246,8 +246,7 @@
 }
 
 Script *SegManager::getScriptIfLoaded(const SegmentId seg) {
-	// FIXME: We accept segment 0, but that is actually an invalid segment...
-	if (seg <= 0 || (uint)seg >= _heap.size() || !_heap[seg] || _heap[seg]->getType() != MEM_OBJ_SCRIPT)
+	if (seg <= 1 || (uint)seg >= _heap.size() || !_heap[seg] || _heap[seg]->getType() != MEM_OBJ_SCRIPT)
 		return 0;
 	return (Script *)_heap[seg];
 }
@@ -259,6 +258,18 @@
 	return -1;
 }
 
+MemObject *SegManager::getMemObject(SegmentId seg) {
+	if (seg <= 1 || (uint)seg >= _heap.size() || !_heap[seg])
+		return 0;
+	return _heap[seg];
+}
+
+MemObjectType SegManager::getMemObjectType(SegmentId seg) {
+	if (seg <= 1 || (uint)seg >= _heap.size() || !_heap[seg])
+		return MEM_OBJ_INVALID;
+	return _heap[seg]->getType();
+}
+
 // validate the seg
 // return:
 //	false - invalid seg

Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h	2009-09-06 23:04:06 UTC (rev 43998)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h	2009-09-07 06:07:18 UTC (rev 43999)
@@ -33,16 +33,8 @@
 
 namespace Sci {
 
-#define GET_SEGMENT(mgr, index, rtype) (((index) > 0 && (int)(mgr)._heap.size() > index) ?		\
-		(((mgr)._heap[index] && (mgr)._heap[index]->getType() == rtype)? (mgr)._heap[index]	: NULL) : NULL)
+#define GET_SEGMENT(mgr, index, rtype) (((mgr).getMemObjectType(index) == (rtype))? (mgr)._heap[index] : NULL)
 
-#define GET_SEGMENT_ANY(mgr, index) (((index) > 0 && (int)(mgr)._heap.size() > index) ?			\
-		(((mgr)._heap[index])? (mgr)._heap[index]	: NULL) : NULL)
-
-#define GET_OBJECT_SEGMENT(mgr, index) (((index) > 0 && (int)(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)
-
 /**
  * Parameters for getScriptSegment().
  */
@@ -132,6 +124,7 @@
 	 */
 	Script *getScript(SegmentId seg);
 
+
 	/**
 	 * Return a pointer to the specified script.
 	 * If the id is invalid, does not refer to a script, or 
@@ -141,14 +134,7 @@
 	 */
 	Script *getScriptIfLoaded(SegmentId seg);
 
-	/**
-	 * Finds a unique segment by type
-	 * @param type	The type of the segment to find
-	 * @return		The segment number, or -1 if the segment wasn't found
-	 */
-	SegmentId findSegmentByType(int type);
 
-
 	// 1b. Script Initialisation
 
 	// The set of functions below are intended
@@ -346,7 +332,20 @@
 	 */
 	byte *dereference(reg_t reg, int *size);
 
+	/**
+	 * Finds a unique segment by type
+	 * @param type	The type of the segment to find
+	 * @return		The segment number, or -1 if the segment wasn't found
+	 */
+	SegmentId findSegmentByType(int type);
 
+	// TODO: document this
+	MemObject *getMemObject(SegmentId seg);
+
+	// TODO: document this
+	MemObjectType getMemObjectType(SegmentId seg);
+
+
 	void heapRelocate(reg_t block);
 	void scriptRelocateExportsSci11(SegmentId seg);
 	void scriptInitialiseObjectsSci11(SegmentId seg);

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-06 23:04:06 UTC (rev 43998)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-07 06:07:18 UTC (rev 43999)
@@ -467,7 +467,7 @@
 }
 
 static reg_t pointer_add(EngineState *s, reg_t base, int offset) {
-	MemObject *mobj = GET_SEGMENT_ANY(*s->segMan, base.segment);
+	MemObject *mobj = s->segMan->getMemObject(base.segment);
 
 	if (!mobj) {
 		error("[VM] Error: Attempt to add %d to invalid pointer %04x:%04x", offset, PRINT_REG(base));
@@ -1933,7 +1933,7 @@
 }
 
 Object *obj_get(SegManager *segMan, reg_t offset) {
-	MemObject *mobj = GET_OBJECT_SEGMENT(*segMan, offset.segment);
+	MemObject *mobj = segMan->getMemObject(offset.segment);
 	SciVersion version = segMan->sciVersion();
 	Object *obj = NULL;
 


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