[Scummvm-cvs-logs] SF.net SVN: scummvm:[49082] scummvm/trunk/engines/saga/resource_rsc.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue May 18 17:16:53 CEST 2010


Revision: 49082
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49082&view=rev
Author:   thebluegr
Date:     2010-05-18 15:16:53 +0000 (Tue, 18 May 2010)

Log Message:
-----------
Started simplifying and removing a lot of unused code from the SAGA Mac resource loader, to be ultimately replaced by the common Mac resource loader

Modified Paths:
--------------
    scummvm/trunk/engines/saga/resource_rsc.cpp

Modified: scummvm/trunk/engines/saga/resource_rsc.cpp
===================================================================
--- scummvm/trunk/engines/saga/resource_rsc.cpp	2010-05-18 14:59:20 UTC (rev 49081)
+++ scummvm/trunk/engines/saga/resource_rsc.cpp	2010-05-18 15:16:53 UTC (rev 49082)
@@ -39,22 +39,10 @@
 
 namespace Saga {
 
-struct MacResMap {
-	int16 resAttr;
-	int16 typeOffset;
-	int16 nameOffset;
-	int16 numTypes;
-};
-
 struct MacResource {
 	int16 id;
-	int16 nameOffset;
-	byte attr;
 	int32 dataOffset;
-	byte name[255];
-	MacResource() : id(0), nameOffset(0), attr(0), dataOffset(0) {
-		name[0] = 0;
-	}
+	MacResource() : id(0), dataOffset(0) {}
 };
 
 class MacResourceArray : public Common::Array<MacResource> {
@@ -62,11 +50,10 @@
 
 struct MacResType {
 	uint32 id;
-	int16 items;
 	int16 maxItemId;
 	int16 offset;
 	MacResourceArray resources;
-	MacResType() : id(0), items(0), maxItemId(0), offset(0) {
+	MacResType() : id(0), maxItemId(0), offset(0) {
 	}
 };
 
@@ -76,99 +63,67 @@
 #define ID_MIDI     MKID_BE('Midi')
 
 bool ResourceContext_RSC::loadMac() {
-	int32 macDataSize, macDataSizePad;
-	int32 macResSize, macResSizePad;
-	int32 macResOffset;
+	int32 macDataSize, macResSizePad, macResOffset;
+	uint32 macMapOffset, macDataOffset;
 
-	uint32 macMapLength;
-	uint32 macDataLength;
-	uint32 macMapOffset;
-	uint32 macDataOffset;
-
-	MacResMap macResMap;
 	MacResTypeArray macResTypes;
 
-	byte macNameLen;
 	bool notSagaContext = false;
 
-	if (_fileSize < RSC_MIN_FILESIZE + MAC_BINARY_HEADER_SIZE) {
+	// Sanity check
+	if (_fileSize < RSC_MIN_FILESIZE + MAC_BINARY_HEADER_SIZE)
 		return false;
-	}
 
-	if (_file.readByte() != 0) {
-		return false;
-	}
-	_file.readByte(); //MAX Name Len
-	_file.seek(74);
-	if (_file.readByte() != 0) {
-		return false;
-	}
 	_file.seek(82);
-	if (_file.readByte() != 0) {
+	if (_file.readByte() != 0)
 		return false;
-	}
 
 	macDataSize = _file.readSint32BE();
-	macResSize = _file.readSint32BE();
-	macDataSizePad = (((macDataSize + 127) >> 7) << 7);
-	macResSizePad = (((macResSize + 127) >> 7) << 7);
+	macResOffset = MAC_BINARY_HEADER_SIZE + (((macDataSize + 127) >> 7) << 7);
 
-	macResOffset = MAC_BINARY_HEADER_SIZE + macDataSizePad;
+	macResSizePad = (((_file.readSint32BE() + 127) >> 7) << 7);
 	_file.seek(macResOffset);
 
 	macDataOffset = _file.readUint32BE() + macResOffset;
 	macMapOffset = _file.readUint32BE() + macResOffset;
-	macDataLength = _file.readUint32BE();
-	macMapLength = _file.readUint32BE();
+	// Used for sanity checks
+	uint32 macDataLength = _file.readUint32BE();
+	uint32 macMapLength = _file.readUint32BE();
 
 	if (macDataOffset >= (uint)_fileSize || macMapOffset >= (uint)_fileSize ||
-		macDataLength + macMapLength > (uint)_fileSize) {
+		macDataLength + macMapLength > (uint)_fileSize)
 			return false;
-	}
 
 	_file.seek(macMapOffset + 22);
 
-	macResMap.resAttr = _file.readUint16BE();
-	macResMap.typeOffset = _file.readUint16BE();
-	macResMap.nameOffset = _file.readUint16BE();
-	macResMap.numTypes = _file.readUint16BE();
-	macResMap.numTypes++;
+	_file.readUint16BE();	// resAttr
+	int16 typeOffset = _file.readUint16BE();
+	_file.readUint16BE();	// nameOffset
+	int16 numTypes = _file.readUint16BE() + 1;
+	macResTypes.resize(numTypes);
 
-	_file.seek(macMapOffset + macResMap.typeOffset + 2);
+	_file.seek(macMapOffset + typeOffset + 2);
 
-	macResTypes.resize(macResMap.numTypes);
-
 	for (MacResTypeArray::iterator k = macResTypes.begin(); k != macResTypes.end(); ++k) {
 		k->id = _file.readUint32BE();
-		k->items = _file.readUint16BE();
+		int16 items = _file.readUint16BE() + 1;
+		k->resources.resize(items);
 		k->offset = _file.readUint16BE();
-		k->items++;
-		k->resources.resize(k->items);
 	}
 
 	for (MacResTypeArray::iterator k = macResTypes.begin(); k != macResTypes.end(); ++k) {
-		_file.seek(k->offset + macMapOffset + macResMap.typeOffset);
+		_file.seek(k->offset + macMapOffset + typeOffset);
 
 		for (MacResourceArray::iterator j = k->resources.begin(); j != k->resources.end(); ++j) {
 			j->id = _file.readUint16BE();
-			j->nameOffset = _file.readUint16BE();
+			_file.readUint16BE();	// nameOffset
 			j->dataOffset = _file.readUint32BE();
-			macResSize = _file.readUint32BE();
+			_file.readUint32BE();	// macResSize
 
-			j->attr = j->dataOffset >> 24;
 			j->dataOffset &= 0xFFFFFF;
-			if (j->id > k->maxItemId) {
+			if (j->id > k->maxItemId)
 				k->maxItemId = j->id;
-			}
 		}
-
-		for (MacResourceArray::iterator j = k->resources.begin(); j != k->resources.end(); ++j) {
-			if (j->nameOffset != -1) {
-				_file.seek(j->nameOffset + macMapOffset + macResMap.nameOffset);
-				macNameLen = _file.readByte();
-				_file.read(j->name, macNameLen);
-			}
-		}
 	}
 
 	//


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