aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2010-05-18 15:16:53 +0000
committerFilippos Karapetis2010-05-18 15:16:53 +0000
commit512435893b14e942f342e69a2b17c9a499ccf3a0 (patch)
treeea0c9c471521f35fd34a78b32266b71f75058b24
parentbddceced34f829b0640d1aecacac1e1079eb0839 (diff)
downloadscummvm-rg350-512435893b14e942f342e69a2b17c9a499ccf3a0.tar.gz
scummvm-rg350-512435893b14e942f342e69a2b17c9a499ccf3a0.tar.bz2
scummvm-rg350-512435893b14e942f342e69a2b17c9a499ccf3a0.zip
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
svn-id: r49082
-rw-r--r--engines/saga/resource_rsc.cpp95
1 files changed, 25 insertions, 70 deletions
diff --git a/engines/saga/resource_rsc.cpp b/engines/saga/resource_rsc.cpp
index 7d5753ea07..b07741436b 100644
--- a/engines/saga/resource_rsc.cpp
+++ b/engines/saga/resource_rsc.cpp
@@ -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 @@ class MacResourceArray : public Common::Array<MacResource> {
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,98 +63,66 @@ class MacResTypeArray : public Common::Array<MacResType> {
#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);
-
- macResTypes.resize(macResMap.numTypes);
+ _file.seek(macMapOffset + typeOffset + 2);
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);
- }
}
}