[Scummvm-cvs-logs] SF.net SVN: scummvm:[49832] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Jun 15 14:18:32 CEST 2010


Revision: 49832
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49832&view=rev
Author:   fingolfin
Date:     2010-06-15 12:18:31 +0000 (Tue, 15 Jun 2010)

Log Message:
-----------
SCI: Add ResourceManager::updateResource(); change some code to use addResource()

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp
    scummvm/trunk/engines/sci/resource.h
    scummvm/trunk/engines/sci/resource_audio.cpp
    scummvm/trunk/engines/sci/resource_intern.h

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-06-15 12:18:07 UTC (rev 49831)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-06-15 12:18:31 UTC (rev 49832)
@@ -1134,20 +1134,12 @@
 		return;
 	}
 
-	// Prepare destination, if neccessary
-	if (_resMap.contains(resId) == false) {
-		newrsc = new Resource;
-		_resMap.setVal(resId, newrsc);
-	} else
-		newrsc = _resMap.getVal(resId);
-
 	// Overwrite everything, because we're patching
-	newrsc->_id = resId;
-	newrsc->_status = kResStatusNoMalloc;
-	newrsc->_source = source;
-	newrsc->size = fsize - patchDataOffset - 2;
+	newrsc = updateResource(resId, source, fsize - patchDataOffset - 2);
 	newrsc->_headerSize = patchDataOffset;
 	newrsc->_fileOffset = 0;
+
+
 	debugC(1, kDebugLevelResMan, "Patching %s - OK", source->getLocationName().c_str());
 }
 
@@ -1285,7 +1277,6 @@
 
 int ResourceManager::readResourceMapSCI0(ResourceSource *map) {
 	Common::SeekableReadStream *fileStream = 0;
-	Resource *res;
 	ResourceType type;
 	uint16 number, id;
 	uint32 offset;
@@ -1323,9 +1314,8 @@
 		ResourceId resId = ResourceId(type, number);
 		// adding a new resource
 		if (_resMap.contains(resId) == false) {
-			res = new Resource;
-			res->_source = findVolume(map, offset >> bShift);
-			if (!res->_source) {
+			ResourceSource *source = findVolume(map, offset >> bShift);
+			if (!source) {
 				warning("Could not get volume for resource %d, VolumeID %d", id, offset >> bShift);
 				if (_mapVersion != _volVersion) {
 					warning("Retrying with the detected volume version instead");
@@ -1333,12 +1323,11 @@
 					_mapVersion = _volVersion;
 					bMask = (_mapVersion == kResVersionSci1Middle) ? 0xF0 : 0xFC;
 					bShift = (_mapVersion == kResVersionSci1Middle) ? 28 : 26;
-					res->_source = findVolume(map, offset >> bShift);
+					source = findVolume(map, offset >> bShift);
 				}
 			}
-			res->_fileOffset = offset & (((~bMask) << 24) | 0xFFFFFF);
-			res->_id = resId;
-			_resMap.setVal(resId, res);
+
+			addResource(resId, source, offset & (((~bMask) << 24) | 0xFFFFFF));
 		}
 	} while (!fileStream->eos());
 
@@ -1348,7 +1337,6 @@
 
 int ResourceManager::readResourceMapSCI1(ResourceSource *map) {
 	Common::SeekableReadStream *fileStream = 0;
-	Resource *res;
 
 	if (map->_resourceFile) {
 		fileStream = map->_resourceFile->createReadStream();
@@ -1409,16 +1397,11 @@
 			resId = ResourceId((ResourceType)type, number);
 			// adding new resource only if it does not exist
 			if (_resMap.contains(resId) == false) {
-				res = new Resource;
-				_resMap.setVal(resId, res);
-				res->_id = resId;
-				
 				// NOTE: We add the map's volume number here to the specified volume number
 				// for SCI2.1 and SCI3 maps that are not resmap.000. The resmap.* files' numbers
 				// need to be used in concurrence with the volume specified in the map to get
 				// the actual resource file.
-				res->_source = findVolume(map, volume_nr + map->_volumeNumber);
-				res->_fileOffset = off;
+				addResource(resId, findVolume(map, volume_nr + map->_volumeNumber), off);
 			}
 		}
 	}
@@ -1494,21 +1477,8 @@
 
 			ResourceId resId = ResourceId(type, idArray[j]);
 
-			Resource *newrsc = NULL;
-
-			// Prepare destination, if neccessary. Resource forks may contain patches.
-			if (!resMan->_resMap.contains(resId)) {
-				newrsc = new Resource;
-				resMan->_resMap.setVal(resId, newrsc);
-			} else
-				newrsc = resMan->_resMap.getVal(resId);
-
-			// Overwrite everything
-			newrsc->_id = resId;
-			newrsc->_status = kResStatusNoMalloc;
-			newrsc->_source = this;
-			newrsc->size = fileSize;
-			newrsc->_headerSize = 0;
+			// Overwrite Resource instance. Resource forks may contain patches.
+			resMan->updateResource(resId, this, fileSize);
 		}
 	}
 }
@@ -1525,6 +1495,26 @@
 	}
 }
 
+Resource *ResourceManager::updateResource(ResourceId resId, ResourceSource *src, uint32 size) {
+	// Update a patched resource, whether it exists or not
+	Resource *res = 0;
+
+	if (_resMap.contains(resId)) {
+		res = _resMap.getVal(resId);
+	} else {
+		res = new Resource;
+		_resMap.setVal(resId, res);
+	}
+
+	res->_id = resId;
+	res->_status = kResStatusNoMalloc;
+	res->_source = src;
+	res->_headerSize = 0;
+	res->size = size;
+
+	return res;
+}
+
 int ResourceManager::readResourceInfo(Resource *res, Common::SeekableReadStream *file,
                                       uint32 &szPacked, ResourceCompression &compression) {
 	// SCI0 volume format:  {wResId wPacked+4 wUnpacked wCompression} = 8 bytes

Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h	2010-06-15 12:18:07 UTC (rev 49831)
+++ scummvm/trunk/engines/sci/resource.h	2010-06-15 12:18:31 UTC (rev 49832)
@@ -395,6 +395,7 @@
 	int decompress(Resource *res, Common::SeekableReadStream *file);
 	int readResourceInfo(Resource *res, Common::SeekableReadStream *file, uint32 &szPacked, ResourceCompression &compression);
 	void addResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size = 0);
+	Resource *updateResource(ResourceId resId, ResourceSource *src, uint32 size);
 	void removeAudioResource(ResourceId resId);
 
 	/**--- Resource map decoding functions ---*/

Modified: scummvm/trunk/engines/sci/resource_audio.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource_audio.cpp	2010-06-15 12:18:07 UTC (rev 49831)
+++ scummvm/trunk/engines/sci/resource_audio.cpp	2010-06-15 12:18:31 UTC (rev 49832)
@@ -170,24 +170,11 @@
 
 void ResourceManager::processWavePatch(ResourceId resourceId, Common::String name) {
 	ResourceSource *resSrc = new WaveResourceSource(name);
+	Common::File file;
+	file.open(name);
 
-	Resource *newRes = 0;
+	updateResource(resourceId, resSrc, name.size());
 
-	if (_resMap.contains(resourceId)) {
-		newRes = _resMap.getVal(resourceId);
-	} else {
-		newRes = new Resource;
-		_resMap.setVal(resourceId, newRes);
-	}
-
-	Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember(name);
-	newRes->size = stream->size();
-	delete stream;
-
-	newRes->_id = resourceId;
-	newRes->_status = kResStatusNoMalloc;
-	newRes->_source = resSrc;
-	newRes->_headerSize = 0;
 	debugC(1, kDebugLevelResMan, "Patching %s - OK", name.c_str());
 }
 

Modified: scummvm/trunk/engines/sci/resource_intern.h
===================================================================
--- scummvm/trunk/engines/sci/resource_intern.h	2010-06-15 12:18:07 UTC (rev 49831)
+++ scummvm/trunk/engines/sci/resource_intern.h	2010-06-15 12:18:31 UTC (rev 49832)
@@ -170,6 +170,9 @@
 	virtual void loadResource(Resource *res);
 };
 
+/**
+ * Reads SCI1.1+ resources from a Mac resource fork.
+ */
 class MacResourceForkResourceSource : public ResourceSource {
 protected:
 	Common::MacResManager *_macResMan;
@@ -178,9 +181,6 @@
 	MacResourceForkResourceSource(const Common::String &name, int volNum);
 	~MacResourceForkResourceSource();
 
-	/**
-	 * Reads the SCI1.1+ resource file from a Mac resource fork.
-	 */
 	virtual void scanSource();
 
 	virtual void loadResource(Resource *res);


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