[Scummvm-cvs-logs] SF.net SVN: scummvm: [29777] scummvm/trunk/engines/lure

chrilith at users.sourceforge.net chrilith at users.sourceforge.net
Sun Dec 9 11:39:58 CET 2007


Revision: 29777
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29777&view=rev
Author:   chrilith
Date:     2007-12-09 02:39:57 -0800 (Sun, 09 Dec 2007)

Log Message:
-----------
Hack to workaround struct padding added by some compilers (mainly on PalmOS)

Modified Paths:
--------------
    scummvm/trunk/engines/lure/res.cpp
    scummvm/trunk/engines/lure/res_struct.cpp
    scummvm/trunk/engines/lure/res_struct.h

Modified: scummvm/trunk/engines/lure/res.cpp
===================================================================
--- scummvm/trunk/engines/lure/res.cpp	2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res.cpp	2007-12-09 10:39:57 UTC (rev 29777)
@@ -168,7 +168,8 @@
 	while (READ_LE_UINT16(&joinRec->hotspot1Id) != 0xffff) {
 		RoomExitJoinData *newEntry = new RoomExitJoinData(joinRec);
 		_exitJoins.push_back(newEntry);
-		++joinRec;
+
+		GET_NEXT(joinRec, RoomExitJoinResource);
 	}
 	delete mb;
 
@@ -178,7 +179,8 @@
 	while (READ_LE_UINT16(&hsRec->hotspotId) != 0xffff) {
 		HotspotData *newEntry = new HotspotData(hsRec);
 		_hotspotData.push_back(newEntry);
-		++hsRec;
+
+		GET_NEXT(hsRec, HotspotResource);
 	}
 	delete mb;
 

Modified: scummvm/trunk/engines/lure/res_struct.cpp
===================================================================
--- scummvm/trunk/engines/lure/res_struct.cpp	2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res_struct.cpp	2007-12-09 10:39:57 UTC (rev 29777)
@@ -77,8 +77,9 @@
 RoomData::RoomData(RoomResource *rec, MemoryBlock *pathData) { 
 	roomNumber = READ_LE_UINT16(&rec->roomNumber);
 	hdrFlags = rec->hdrFlags;
-	actions = FROM_LE_32(rec->actions) & 0xfffffff;
-	flags = (FROM_LE_32(rec->actions) >> 24) & 0xf0;
+
+	actions = READ_LE_UINT32(&rec->actions) & 0xfffffff;
+	flags = (READ_LE_UINT32(&rec->actions) >> 24) & 0xf0;
 	descId = READ_LE_UINT16(&rec->descId);
 	sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
 	numLayers = READ_LE_UINT16(&rec->numLayers);
@@ -90,7 +91,7 @@
 
 	clippingXStart = READ_LE_UINT16(&rec->clippingXStart);
 	clippingXEnd = READ_LE_UINT16(&rec->clippingXEnd);
-	exitTime = FROM_LE_32(rec->exitTime);
+	exitTime = READ_LE_UINT32(&rec->exitTime);
 	areaFlag = rec->areaFlag;
 	walkBounds.left = READ_LE_UINT16(&rec->walkBounds.xs);
 	walkBounds.right = READ_LE_UINT16(&rec->walkBounds.xe);
@@ -361,7 +362,8 @@
 
 HotspotActionData::HotspotActionData(HotspotActionResource *rec) {
 	action = (Action) rec->action;
-	sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
+	// FIXME: some compilers may add padding to properly align the second member
+	sequenceOffset = READ_LE_UINT16(((byte *)rec) + 1);
 }
 
 uint16 HotspotActionList::getActionOffset(Action action) {
@@ -604,7 +606,9 @@
 
 	HotspotActionResource *actionRec = (HotspotActionResource *) data;
 	
-	for (int actionCtr = 0; actionCtr < numItems; ++actionCtr, ++actionRec) {
+	for (int actionCtr = 0; actionCtr < numItems; ++actionCtr, 
+		GET_NEXT(actionRec, HotspotActionResource)) {
+
 		HotspotActionData *actionEntry = new HotspotActionData(actionRec);
 		push_back(actionEntry);
 	}

Modified: scummvm/trunk/engines/lure/res_struct.h
===================================================================
--- scummvm/trunk/engines/lure/res_struct.h	2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res_struct.h	2007-12-09 10:39:57 UTC (rev 29777)
@@ -39,6 +39,18 @@
 /*                                                                         */
 /*-------------------------------------------------------------------------*/
 
+/* HACK/FIXME: three structs are misaligned (at least on 4-byte aligned system,
+   should have more troubles with coming 64bit systems), GET_NEXT let us read
+   properly sequence of struct in lure.dat hardcoding size of struct.
+*/
+
+#define GET_NEXT(v, sc)		v = (sc *)(((byte *)v) + kSizeOf##sc)
+
+#define kSizeOfRoomExitJoinResource			13
+#define kSizeOfHotspotResource				62
+#define kSizeOfHotspotActionResource		3
+
+
 #include "common/pack-start.h"	// START STRUCT PACKING
 
 struct VersionStructure {


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