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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Thu Jun 3 12:16:21 CEST 2010


Revision: 49406
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49406&view=rev
Author:   thebluegr
Date:     2010-06-03 10:16:21 +0000 (Thu, 03 Jun 2010)

Log Message:
-----------
Moved several object-related defines inside vm.h into segment.h, where the Object class resides. Also, removed several unused defines

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/engine/kscripts.cpp
    scummvm/trunk/engines/sci/engine/script.cpp
    scummvm/trunk/engines/sci/engine/segment.cpp
    scummvm/trunk/engines/sci/engine/segment.h
    scummvm/trunk/engines/sci/engine/vm.h

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/console.cpp	2010-06-03 10:16:21 UTC (rev 49406)
@@ -3067,7 +3067,7 @@
 	DebugPrintf("[%04x:%04x] %s : %3d vars, %3d methods\n", PRINT_REG(pos), s->_segMan->getObjectName(pos),
 				obj->getVarCount(), obj->getMethodCount());
 
-	if (!(obj->getInfoSelector().offset & SCRIPT_INFO_CLASS))
+	if (!obj->isClass())
 		var_container = s->_segMan->getObject(obj->getSuperClassSelector());
 	DebugPrintf("  -- member variables:\n");
 	for (i = 0; (uint)i < obj->getVarCount(); i++) {

Modified: scummvm/trunk/engines/sci/engine/kscripts.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kscripts.cpp	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/engine/kscripts.cpp	2010-06-03 10:16:21 UTC (rev 49406)
@@ -132,7 +132,7 @@
 	*clone_obj = *parent_obj;
 
 	// Mark as clone
-	clone_obj->setInfoSelector(make_reg(0, SCRIPT_INFO_CLONE));
+	clone_obj->markAsClone();
 	clone_obj->setSpeciesSelector(clone_obj->getPos());
 	if (parent_obj->isClass())
 		clone_obj->setSuperClassSelector(parent_obj->getPos());
@@ -154,7 +154,7 @@
 		return s->r_acc;
 	}
 
-	if (victim_obj->getInfoSelector().offset != SCRIPT_INFO_CLONE) {
+	if (!victim_obj->isClone()) {
 		//warning("Attempt to dispose something other than a clone at %04x", offset);
 		// SCI silently ignores this behaviour; some games actually depend on it
 		return s->r_acc;

Modified: scummvm/trunk/engines/sci/engine/script.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/script.cpp	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/engine/script.cpp	2010-06-03 10:16:21 UTC (rev 49406)
@@ -205,7 +205,7 @@
 	const byte *seeker = scr->_heapStart + 4 + READ_SCI11ENDIAN_UINT16(scr->_heapStart + 2) * 2;
 
 	while (READ_SCI11ENDIAN_UINT16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER) {
-		if (READ_SCI11ENDIAN_UINT16(seeker + 14) & SCRIPT_INFO_CLASS) {	// -info- selector
+		if (READ_SCI11ENDIAN_UINT16(seeker + 14) & kInfoFlagClass) {	// -info- selector
 			int classpos = seeker - scr->_buf;
 			int species = READ_SCI11ENDIAN_UINT16(seeker + 10);
 

Modified: scummvm/trunk/engines/sci/engine/segment.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.cpp	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/engine/segment.cpp	2010-06-03 10:16:21 UTC (rev 49406)
@@ -240,7 +240,7 @@
 
 	obj = allocateObject(obj_pos.offset);
 
-	VERIFY(obj_pos.offset + SCRIPT_FUNCTAREAPTR_OFFSET < (int)_bufSize, "Function area pointer stored beyond end of script\n");
+	VERIFY(obj_pos.offset + kOffsetFunctionArea < (int)_bufSize, "Function area pointer stored beyond end of script\n");
 
 	obj->init(_buf, obj_pos, fullObjectInit);
 
@@ -693,9 +693,9 @@
 	_pos = obj_pos;
 
 	if (getSciVersion() < SCI_VERSION_1_1) {
-		_variables.resize(READ_LE_UINT16(data + SCRIPT_SELECTORCTR_OFFSET));
+		_variables.resize(READ_LE_UINT16(data + kOffsetSelectorCounter));
 		_baseVars = (const uint16 *)(_baseObj + _variables.size() * 2);
-		_baseMethod = (const uint16 *)(data + READ_LE_UINT16(data + SCRIPT_FUNCTAREAPTR_OFFSET));
+		_baseMethod = (const uint16 *)(data + READ_LE_UINT16(data + kOffsetFunctionArea));
 		_methodCount = READ_LE_UINT16(_baseMethod - 1);
 	} else {
 		_variables.resize(READ_SCI11ENDIAN_UINT16(data + 2));
@@ -720,7 +720,7 @@
 
 	if (getSciVersion() < SCI_VERSION_1_1) {
 		varnum = getVarCount();
-		int selector_name_offset = varnum * 2 + SCRIPT_SELECTOR_OFFSET;
+		int selector_name_offset = varnum * 2 + kOffsetSelectorSegment;
 		buf = _baseObj + selector_name_offset;
 	} else {
 		const Object *obj = getClass(segMan);
@@ -749,11 +749,11 @@
 	}
 
 	if (getSciVersion() < SCI_VERSION_1_1) {
-		const byte *selectoroffset = ((const byte *)(_baseObj)) + SCRIPT_SELECTOR_OFFSET + selectors * 2;
+		const byte *selectoroffset = ((const byte *)(_baseObj)) + kOffsetSelectorSegment + selectors * 2;
 		return READ_SCI11ENDIAN_UINT16(selectoroffset + propertyOffset);
 	} else {
 		const Object *obj = this;
-		if (!(getInfoSelector().offset & SCRIPT_INFO_CLASS))
+		if (!isClass())
 			obj = segMan->getObject(getSuperClassSelector());
 
 		return READ_SCI11ENDIAN_UINT16((const byte *)obj->_baseVars + propertyOffset);

Modified: scummvm/trunk/engines/sci/engine/segment.h
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.h	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/engine/segment.h	2010-06-03 10:16:21 UTC (rev 49406)
@@ -205,6 +205,22 @@
 	OBJECT_FLAG_FREED = (1 << 0)
 };
 
+enum infoSelectorFlags {
+	kInfoFlagClone = 0x0001,
+	kInfoFlagClass = 0x8000
+};
+
+enum ObjectOffsets {
+	kOffsetLocalVariables = -6,
+	kOffsetFunctionArea = -4,
+	kOffsetSelectorCounter = -2,
+	kOffsetSelectorSegment = 0,
+	kOffsetInfoSelectorSci0 = 4,
+	kOffsetNamePointerSci0 = 6,
+	kOffsetInfoSelectorSci11 = 14,
+	kOffsetNamePointerSci11 = 16,
+};
+
 class Object {
 public:
 	Object() {
@@ -264,9 +280,12 @@
 	 */
 	int locateVarSelector(SegManager *segMan, Selector slc) const;
 
-	bool isClass() const { return (getInfoSelector().offset & SCRIPT_INFO_CLASS); }
+	bool isClass() const { return (getInfoSelector().offset & kInfoFlagClass); }
 	const Object *getClass(SegManager *segMan) const;
 
+	void markAsClone() { setInfoSelector(make_reg(0, kInfoFlagClone)); }
+	bool isClone() const { return (getInfoSelector().offset & kInfoFlagClone); }
+
 	void markAsFreed() { _flags |= OBJECT_FLAG_FREED; }
 	bool isFreed() const { return _flags & OBJECT_FLAG_FREED; }
 

Modified: scummvm/trunk/engines/sci/engine/vm.h
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.h	2010-06-03 09:34:32 UTC (rev 49405)
+++ scummvm/trunk/engines/sci/engine/vm.h	2010-06-03 10:16:21 UTC (rev 49406)
@@ -43,44 +43,9 @@
 /** Number of bytes to be allocated for the stack */
 #define VM_STACK_SIZE 0x1000
 
-/** Maximum number of calls residing on the stack */
-#define SCRIPT_MAX_EXEC_STACK 256
-/** Maximum number of entries in the class table */
-#define SCRIPT_MAX_classTable_SIZE 256
-/** Maximum number of cloned objects on the heap */
-#define SCRIPT_MAX_CLONES 256
-
-
-/** Object-relative offset of the selector area inside a script */
-#define SCRIPT_SELECTOR_OFFSET 8 -8
-
-/** Object-relative offset of the pointer to the underlying script's local variables */
-#define SCRIPT_LOCALVARPTR_OFFSET 2 -8
-
-/** Object-relative offset of the selector counter */
-#define SCRIPT_SELECTORCTR_OFFSET 6 -8
-
-/** Object-relative offset of the offset of the function area */
-#define SCRIPT_FUNCTAREAPTR_OFFSET 4 -8
-
-/** Offset that has to be added to the function area pointer */
-#define SCRIPT_FUNCTAREAPTR_MAGIC 8 -8
-
-/** Offset of the name pointer */
-#define SCRIPT_NAME_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? 14 -8 : 16)
-
-/** Object-relative offset of the -info- selector */
-#define SCRIPT_INFO_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? 12 -8 : 14)
-
-/** Flag fo the -info- selector */
-#define SCRIPT_INFO_CLONE 0x0001
-
-/** Flag for the -info- selector */
-#define SCRIPT_INFO_CLASS 0x8000
-
-
 /** Magical object identifier */
 #define SCRIPT_OBJECT_MAGIC_NUMBER 0x1234
+
 /** Offset of this identifier */
 #define SCRIPT_OBJECT_MAGIC_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? -8 : 0)
 
@@ -89,9 +54,6 @@
 
 #define SCRIPT_SUPERCLASS_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? 10 -8 : 12)
 
-/** Magic adjustment value for lofsa and lofss */
-#define SCRIPT_LOFS_MAGIC 3
-
 /** Stack pointer value: Use predecessor's value */
 #define CALL_SP_CARRY 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