diff options
| author | Sven Hesse | 2009-05-23 20:38:08 +0000 | 
|---|---|---|
| committer | Sven Hesse | 2009-05-23 20:38:08 +0000 | 
| commit | be6fd784b43ba2f6c6055e939f33d198cdd8d55b (patch) | |
| tree | 889c936563ddfc57bfe07b850556a3c83a6125d1 | |
| parent | 5878acfc0e5dc6e6f1096d793bcafc0fa94b5d2c (diff) | |
| download | scummvm-rg350-be6fd784b43ba2f6c6055e939f33d198cdd8d55b.tar.gz scummvm-rg350-be6fd784b43ba2f6c6055e939f33d198cdd8d55b.tar.bz2 scummvm-rg350-be6fd784b43ba2f6c6055e939f33d198cdd8d55b.zip | |
Allow for different MOD signatures
svn-id: r40827
| -rw-r--r-- | sound/mods/module.cpp | 21 | ||||
| -rw-r--r-- | sound/mods/module.h | 3 | 
2 files changed, 20 insertions, 4 deletions
| diff --git a/sound/mods/module.cpp b/sound/mods/module.cpp index c2a6190308..992c2a28e3 100644 --- a/sound/mods/module.cpp +++ b/sound/mods/module.cpp @@ -26,6 +26,7 @@  #include "sound/mods/module.h"  #include "common/util.h" +#include "common/endian.h"  namespace Modules { @@ -111,6 +112,10 @@ const int16 Module::periods[16][60] = {  	 216 , 203 , 192 , 181 , 171 , 161 , 152 , 144 , 136 , 128 , 121 , 114,  	 108 , 101 , 96  , 90  , 85  , 80  , 76  , 72  , 68  , 64  , 60  , 57 }}; +const uint32 Module::signatures[] = { +	MKID_BE('M.K.'), MKID_BE('M!K!'), MKID_BE('FLT4') +}; +  bool Module::load(Common::SeekableReadStream &st, int offs) {  	if (offs) {  		// Load the module with the common sample data @@ -138,9 +143,19 @@ bool Module::load(Common::SeekableReadStream &st, int offs) {  	undef = st.readByte();  	st.read(songpos, 128); -	st.read(sig, 4); -	if (memcmp(sig, "M.K.", 4)) { -		warning("Expected 'M.K.' in protracker module"); + +	sig = st.readUint32BE(); + +	bool foundSig = false; +	for (int i = 0; i < ARRAYSIZE(signatures); i++) { +		if (sig == signatures[i]) { +			foundSig = true; +			break; +		} +	} + +	if (!foundSig) { +		warning("No known signature found in protracker module");  		return false;  	} diff --git a/sound/mods/module.h b/sound/mods/module.h index 0d2282f770..550b63617e 100644 --- a/sound/mods/module.h +++ b/sound/mods/module.h @@ -70,7 +70,7 @@ public:  	byte songlen;  	byte undef;  	byte songpos[128]; -	byte sig[4]; +	uint32 sig;  	pattern_t *pattern;  	Module(); @@ -82,6 +82,7 @@ public:  private:  	static const int16 periods[16][60]; +	static const uint32 signatures[];  };  } // End of namespace Modules | 
