[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