[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