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

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Sun Jan 24 18:52:27 CET 2010


Revision: 47506
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47506&view=rev
Author:   waltervn
Date:     2010-01-24 17:52:27 +0000 (Sun, 24 Jan 2010)

Log Message:
-----------
SCI: Cleanup

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/segment.cpp
    scummvm/trunk/engines/sci/engine/segment.h

Modified: scummvm/trunk/engines/sci/engine/segment.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.cpp	2010-01-24 17:46:37 UTC (rev 47505)
+++ scummvm/trunk/engines/sci/engine/segment.cpp	2010-01-24 17:52:27 UTC (rev 47506)
@@ -247,28 +247,17 @@
 }
 
 SegmentRef LocalVariables::dereference(reg_t pointer) {
-	// FIXME: The following doesn't seem to be endian safe.
-	// To fix this, we'd have to always treat the reg_t
-	// values stored here as in the little endian format.
-	// Anyway, generate a warning for now to see if this ever
-	// happens.
-	// One has to wonder whether we return the right value anyway.
-	// Here are three potential options:
-	//   1:  ((byte *)&_locals[0]) + pointer.offset
-	//   2:  ((byte *)&_locals[pointer.offset/2]) + (pointer.offset % 2)
-	//   3:  ((byte *)&_locals[pointer.offset])
-	// So which one is correct? :)
 	if (pointer.offset & 1)
 		warning("LocalVariables::dereference: Odd offset in pointer  %04x:%04x", PRINT_REG(pointer));
 
 	SegmentRef ret;
 	ret.isRaw = false;	// reg_t based data!
-	ret.maxSize = (_locals.size() - pointer.offset/2) * 2;
+	ret.maxSize = (_locals.size() - pointer.offset / 2) * 2;
 	if (ret.maxSize > 0) {
-		ret.raw = (byte *)&_locals[pointer.offset/2];
+		ret.reg = &_locals[pointer.offset / 2];
 	} else {
 		warning("LocalVariables::dereference: Offset at end or out of bounds %04x:%04x", PRINT_REG(pointer));
-		ret.raw = 0;
+		ret.reg = 0;
 	}
 	return ret;
 }
@@ -280,11 +269,11 @@
 SegmentRef DataStack::dereference(reg_t pointer) {
 	SegmentRef ret;
 	ret.isRaw = false;	// reg_t based data!
-	ret.maxSize = (_capacity - pointer.offset/2) * 2;
-	// FIXME: Is this correct? See comment in LocalVariables::dereference
+	ret.maxSize = (_capacity - pointer.offset / 2) * 2;
+
 	if (pointer.offset & 1)
 		warning("LocalVariables::dereference: Odd offset in pointer  %04x:%04x", PRINT_REG(pointer));
-	ret.raw = (byte *)&_entries[pointer.offset/2];
+	ret.reg = &_entries[pointer.offset / 2];
 	return ret;
 }
 

Modified: scummvm/trunk/engines/sci/engine/segment.h
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.h	2010-01-24 17:46:37 UTC (rev 47505)
+++ scummvm/trunk/engines/sci/engine/segment.h	2010-01-24 17:52:27 UTC (rev 47506)
@@ -47,7 +47,7 @@
 
 	SegmentRef() : isRaw(true), raw(0), maxSize(0) {}
 
-	bool isValid() const { return raw != 0; }
+	bool isValid() const { return (isRaw ? raw != 0 : reg != 0); }
 };
 
 


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