[Scummvm-cvs-logs] SF.net SVN: scummvm:[49819] scummvm/trunk/engines/sci
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Tue Jun 15 14:13:29 CEST 2010
Revision: 49819
http://scummvm.svn.sourceforge.net/scummvm/?rev=49819&view=rev
Author: fingolfin
Date: 2010-06-15 12:13:29 +0000 (Tue, 15 Jun 2010)
Log Message:
-----------
SCI: Move code from ResourceManager::loadResource to ResourceSource::loadResource
Modified Paths:
--------------
scummvm/trunk/engines/sci/resource.cpp
scummvm/trunk/engines/sci/resource.h
scummvm/trunk/engines/sci/resource_intern.h
Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp 2010-06-15 12:13:07 UTC (rev 49818)
+++ scummvm/trunk/engines/sci/resource.cpp 2010-06-15 12:13:29 UTC (rev 49819)
@@ -176,14 +176,18 @@
associated_map = NULL;
audioCompressionType = 0;
audioCompressionOffsetMapping = NULL;
+ _macResMan = NULL;
+}
- if (_sourceType == kSourceMacResourceFork)
- _macResMan = new Common::MacResManager();
- else
- _macResMan = NULL;
+ResourceSource::~ResourceSource() {
}
-ResourceSource::~ResourceSource() {
+MacResourceForkResourceSource::MacResourceForkResourceSource(const Common::String &name)
+ : ResourceSource(kSourceMacResourceFork, name) {
+ _macResMan = new Common::MacResManager();
+}
+
+MacResourceForkResourceSource::~MacResourceForkResourceSource() {
delete _macResMan;
}
@@ -344,17 +348,22 @@
static uint32 resTypeToMacTag(ResourceType type);
void ResourceManager::loadResource(Resource *res) {
- if (res->_source->getSourceType() == kSourcePatch && loadFromPatchFile(res))
+ res->_source->loadResource(res, this);
+}
+
+void ResourceSource::loadResource(Resource *res, ResourceManager *resMan) {
+
+ if (getSourceType() == kSourcePatch && resMan->loadFromPatchFile(res))
return;
- if (res->_source->getSourceType() == kSourceMacResourceFork) {
- assert(res->_source->_macResMan);
- Common::SeekableReadStream *stream = res->_source->_macResMan->getResource(resTypeToMacTag(res->_id.type), res->_id.number);
+ if (getSourceType() == kSourceMacResourceFork) {
+ assert(_macResMan);
+ Common::SeekableReadStream *stream = _macResMan->getResource(resTypeToMacTag(res->_id.type), res->_id.number);
if (!stream)
error("Could not get Mac resource fork resource: %d %d", res->_id.type, res->_id.number);
- int error = decompress(res, stream);
+ int error = resMan->decompress(res, stream);
if (error) {
warning("Error %d occured while reading %s from Mac resource file: %s",
error, res->_id.toString().c_str(), sci_error_types[error]);
@@ -363,27 +372,27 @@
return;
}
- Common::SeekableReadStream *fileStream = getVolumeFile(res->_source);
+ Common::SeekableReadStream *fileStream = resMan->getVolumeFile(this);
if (!fileStream) {
- warning("Failed to open %s", res->_source->getLocationName().c_str());
+ warning("Failed to open %s", getLocationName().c_str());
res->unalloc();
return;
}
- switch(res->_source->getSourceType()) {
+ switch(getSourceType()) {
case kSourceWave:
fileStream->seek(res->_fileOffset, SEEK_SET);
- loadFromWaveFile(res, fileStream);
- if (res->_source->_resourceFile)
+ resMan->loadFromWaveFile(res, fileStream);
+ if (_resourceFile)
delete fileStream;
return;
case kSourceAudioVolume:
- if (res->_source->audioCompressionType) {
+ if (audioCompressionType) {
// this file is compressed, so lookup our offset in the offset-translation table and get the new offset
// also calculate the compressed size by using the next offset
- int32 *mappingTable = res->_source->audioCompressionOffsetMapping;
+ int32 *mappingTable = audioCompressionOffsetMapping;
int32 compressedOffset = 0;
do {
@@ -413,8 +422,8 @@
case kResourceTypeAudio:
case kResourceTypeAudio36:
// Directly read the stream, compressed audio wont have resource type id and header size for SCI1.1
- loadFromAudioVolumeSCI1(res, fileStream);
- if (res->_source->_resourceFile)
+ resMan->loadFromAudioVolumeSCI1(res, fileStream);
+ if (_resourceFile)
delete fileStream;
return;
default:
@@ -425,19 +434,19 @@
fileStream->seek(res->_fileOffset, SEEK_SET);
}
if (getSciVersion() < SCI_VERSION_1_1)
- loadFromAudioVolumeSCI1(res, fileStream);
+ resMan->loadFromAudioVolumeSCI1(res, fileStream);
else
- loadFromAudioVolumeSCI11(res, fileStream);
+ resMan->loadFromAudioVolumeSCI11(res, fileStream);
- if (res->_source->_resourceFile)
+ if (_resourceFile)
delete fileStream;
return;
default:
fileStream->seek(res->_fileOffset, SEEK_SET);
- int error = decompress(res, fileStream);
+ int error = resMan->decompress(res, fileStream);
- if (res->_source->_resourceFile)
+ if (_resourceFile)
delete fileStream;
if (error) {
Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h 2010-06-15 12:13:07 UTC (rev 49818)
+++ scummvm/trunk/engines/sci/resource.h 2010-06-15 12:13:29 UTC (rev 49819)
@@ -166,6 +166,7 @@
// FIXME: These 'friend' declarations are meant to be a temporary hack to
// ease transition to the ResourceSource class system.
+ friend class ResourceSource;
friend class MacResourceForkResourceSource;
public:
@@ -201,6 +202,7 @@
class ResourceManager {
// FIXME: These 'friend' declarations are meant to be a temporary hack to
// ease transition to the ResourceSource class system.
+ friend class ResourceSource;
friend class DirectoryResourceSource;
friend class ExtMapResourceSource;
friend class IntMapResourceSource;
Modified: scummvm/trunk/engines/sci/resource_intern.h
===================================================================
--- scummvm/trunk/engines/sci/resource_intern.h 2010-06-15 12:13:07 UTC (rev 49818)
+++ scummvm/trunk/engines/sci/resource_intern.h 2010-06-15 12:13:29 UTC (rev 49819)
@@ -69,6 +69,9 @@
ResSourceType getSourceType() const { return _sourceType; }
const Common::String &getLocationName() const { return _name; }
+ /**
+ * TODO: Document this
+ */
virtual ResourceSource *findVolume(ResourceSource *map, int volume_nr) {
return NULL;
};
@@ -78,6 +81,12 @@
* TODO: The resMan param for now is just a hack.
*/
virtual void scanSource(ResourceManager *resMan) {}
+
+ /**
+ * Load a resource.
+ * TODO: The resMan param for now is just a hack.
+ */
+ virtual void loadResource(Resource *res, ResourceManager *resMan);
};
class DirectoryResourceSource : public ResourceSource {
@@ -141,7 +150,8 @@
class MacResourceForkResourceSource : public ResourceSource {
public:
- MacResourceForkResourceSource(const Common::String &name) : ResourceSource(kSourceMacResourceFork, name) {}
+ MacResourceForkResourceSource(const Common::String &name);
+ ~MacResourceForkResourceSource();
/**
* Reads the SCI1.1+ resource file from a Mac resource fork.
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