diff options
| author | Filippos Karapetis | 2010-05-26 14:25:51 +0000 | 
|---|---|---|
| committer | Filippos Karapetis | 2010-05-26 14:25:51 +0000 | 
| commit | bfaba64c6a3aee6875bf135147c2f29a621c876b (patch) | |
| tree | 865ac5f5ccb5c802bb57fc681e903a56aec42b32 | |
| parent | d502bdf982410dfc0e5731fa9a83f543f08bd744 (diff) | |
| download | scummvm-rg350-bfaba64c6a3aee6875bf135147c2f29a621c876b.tar.gz scummvm-rg350-bfaba64c6a3aee6875bf135147c2f29a621c876b.tar.bz2 scummvm-rg350-bfaba64c6a3aee6875bf135147c2f29a621c876b.zip | |
Made find_unique_script_block() a member of the Script class
svn-id: r49241
| -rw-r--r-- | engines/sci/engine/savegame.cpp | 24 | ||||
| -rw-r--r-- | engines/sci/engine/segment.cpp | 24 | ||||
| -rw-r--r-- | engines/sci/engine/segment.h | 5 | 
3 files changed, 31 insertions, 22 deletions
| diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index ff51f4015c..8f341895c6 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -748,26 +748,6 @@ int gamestate_save(EngineState *s, Common::WriteStream *fh, const char* savename  	return 0;  } -static byte *find_unique_script_block(EngineState *s, byte *buf, int type) { -	bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); - -	if (oldScriptHeader) -		buf += 2; - -	do { -		int seeker_type = READ_LE_UINT16(buf); - -		if (seeker_type == 0) break; -		if (seeker_type == type) return buf; - -		int seeker_size = READ_LE_UINT16(buf + 2); -		assert(seeker_size > 0); -		buf += seeker_size; -	} while (1); - -	return NULL; -} -  // TODO: This should probably be turned into an EngineState or DataStack method.  static void reconstruct_stack(EngineState *retval) {  	SegmentId stack_seg = retval->_segMan->findSegmentByType(SEG_TYPE_STACK); @@ -821,8 +801,8 @@ void SegManager::reconstructScripts(EngineState *s) {  				s->_segMan->scriptRelocateExportsSci11(i);  			}  		} else { -			scr->_exportTable = (uint16 *) find_unique_script_block(s, scr->_buf, SCI_OBJ_EXPORTS); -			scr->_synonyms = find_unique_script_block(s, scr->_buf, SCI_OBJ_SYNONYMS); +			scr->_exportTable = (uint16 *) scr->findBlock(SCI_OBJ_EXPORTS); +			scr->_synonyms = scr->findBlock(SCI_OBJ_SYNONYMS);  			scr->_exportTable += 3;  		}  		scr->_codeBlocks.clear(); diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index 0c468a3cc2..b26ac4f78e 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -395,6 +395,30 @@ int Script::getSynonymsNr() const {  	return _numSynonyms;  } +byte *Script::findBlock(int type) { +	byte *buf = _buf; +	bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); + +	if (oldScriptHeader) +		buf += 2; + +	do { +		int seekerType = READ_LE_UINT16(buf); + +		if (seekerType == 0) +			break; +		if (seekerType == type) +			return buf; + +		int seekerSize = READ_LE_UINT16(buf + 2); +		assert(seekerSize > 0); +		buf += seekerSize; +	} while (1); + +	return NULL; +} + +  // memory operations  void Script::mcpyInOut(int dst, const void *src, size_t n) { diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index 876a081295..764d235e54 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -498,6 +498,11 @@ public:  	 */  	int16 getHeap(uint16 offset) const; +	/** +	 * Finds the pointer where a block of a specific type starts from +	 */ +	byte *Script::findBlock(int type); +  private:  	void setScriptSize(int script_nr, ResourceManager *resMan);  }; | 
