[Scummvm-cvs-logs] SF.net SVN: scummvm:[49820] scummvm/trunk/engines/sci
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Tue Jun 15 14:13:53 CEST 2010
Revision: 49820
http://scummvm.svn.sourceforge.net/scummvm/?rev=49820&view=rev
Author: fingolfin
Date: 2010-06-15 12:13:52 +0000 (Tue, 15 Jun 2010)
Log Message:
-----------
SCI: Add loadResource impls to MacResourceForkResourceSource and PatchResourceSource; move _macResMan to MacResourceForkResourceSource
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:29 UTC (rev 49819)
+++ scummvm/trunk/engines/sci/resource.cpp 2010-06-15 12:13:52 UTC (rev 49820)
@@ -176,7 +176,6 @@
associated_map = NULL;
audioCompressionType = 0;
audioCompressionOffsetMapping = NULL;
- _macResMan = NULL;
}
ResourceSource::~ResourceSource() {
@@ -185,6 +184,7 @@
MacResourceForkResourceSource::MacResourceForkResourceSource(const Common::String &name)
: ResourceSource(kSourceMacResourceFork, name) {
_macResMan = new Common::MacResManager();
+ assert(_macResMan);
}
MacResourceForkResourceSource::~MacResourceForkResourceSource() {
@@ -351,27 +351,32 @@
res->_source->loadResource(res, this);
}
-void ResourceSource::loadResource(Resource *res, ResourceManager *resMan) {
- if (getSourceType() == kSourcePatch && resMan->loadFromPatchFile(res))
- return;
+void PatchResourceSource::loadResource(Resource *res, ResourceManager *resMan) {
+ bool result = resMan->loadFromPatchFile(res);
+ if (!result) {
+ // TODO: We used to fallback to the "default" code here if loadFromPatchFile
+ // failed, but I am not sure whether that is really appropriate.
+ // In fact it looks like a bug to me, so I commented this out for now.
+ //ResourceSource::loadResource(res, resMan);
+ }
+}
- if (getSourceType() == kSourceMacResourceFork) {
- assert(_macResMan);
- Common::SeekableReadStream *stream = _macResMan->getResource(resTypeToMacTag(res->_id.type), res->_id.number);
+void MacResourceForkResourceSource::loadResource(Resource *res, ResourceManager *resMan) {
+ 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);
+ if (!stream)
+ error("Could not get Mac resource fork resource: %d %d", res->_id.type, res->_id.number);
- 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]);
- res->unalloc();
- }
- return;
+ 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]);
+ res->unalloc();
}
+}
+void ResourceSource::loadResource(Resource *res, ResourceManager *resMan) {
Common::SeekableReadStream *fileStream = resMan->getVolumeFile(this);
if (!fileStream) {
@@ -1471,7 +1476,6 @@
}
void MacResourceForkResourceSource::scanSource(ResourceManager *resMan) {
- assert(_macResMan);
if (!_macResMan->open(getLocationName().c_str()))
error("%s is not a valid Mac resource fork", getLocationName().c_str());
Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h 2010-06-15 12:13:29 UTC (rev 49819)
+++ scummvm/trunk/engines/sci/resource.h 2010-06-15 12:13:52 UTC (rev 49820)
@@ -204,9 +204,12 @@
// ease transition to the ResourceSource class system.
friend class ResourceSource;
friend class DirectoryResourceSource;
+ friend class PatchResourceSource;
friend class ExtMapResourceSource;
friend class IntMapResourceSource;
+ friend class AudioVolumeResourceSource;
friend class ExtAudioMapResourceSource;
+ friend class WaveResourceSource;
friend class MacResourceForkResourceSource;
public:
Modified: scummvm/trunk/engines/sci/resource_intern.h
===================================================================
--- scummvm/trunk/engines/sci/resource_intern.h 2010-06-15 12:13:29 UTC (rev 49819)
+++ scummvm/trunk/engines/sci/resource_intern.h 2010-06-15 12:13:52 UTC (rev 49820)
@@ -59,7 +59,6 @@
ResourceSource *associated_map; // TODO: Move to VolumeResourceSource
uint32 audioCompressionType; // TODO: Move to AudioVolumeResourceSource
int32 *audioCompressionOffsetMapping; // TODO: Move to AudioVolumeResourceSource
- Common::MacResManager *_macResMan; // TODO: Move to MacResourceForkResourceSource
protected:
ResourceSource(ResSourceType type, const Common::String &name);
@@ -99,6 +98,8 @@
class PatchResourceSource : public ResourceSource {
public:
PatchResourceSource(const Common::String &name) : ResourceSource(kSourcePatch, name) {}
+
+ virtual void loadResource(Resource *res, ResourceManager *resMan);
};
class VolumeResourceSource : public ResourceSource {
@@ -134,6 +135,8 @@
AudioVolumeResourceSource(const Common::String &name, ResourceSource *map)
: VolumeResourceSource(name, map, kSourceAudioVolume) {
}
+
+ //virtual void loadResource(Resource *res, ResourceManager *resMan);
};
class ExtAudioMapResourceSource : public ResourceSource {
@@ -146,9 +149,14 @@
class WaveResourceSource : public ResourceSource {
public:
WaveResourceSource(const Common::String &name) : ResourceSource(kSourceWave, name) {}
+
+ //virtual void loadResource(Resource *res, ResourceManager *resMan);
};
class MacResourceForkResourceSource : public ResourceSource {
+protected:
+ Common::MacResManager *_macResMan;
+
public:
MacResourceForkResourceSource(const Common::String &name);
~MacResourceForkResourceSource();
@@ -157,6 +165,8 @@
* Reads the SCI1.1+ resource file from a Mac resource fork.
*/
virtual void scanSource(ResourceManager *resMan);
+
+ virtual void loadResource(Resource *res, ResourceManager *resMan);
};
} // End of namespace Sci
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