[Scummvm-cvs-logs] CVS: scummvm sound.cpp,1.75,1.76

James Brown ender at users.sourceforge.net
Sat May 4 19:29:02 CEST 2002


Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv4208

Modified Files:
	sound.cpp 
Log Message:
Make the bundle parser code a little cleaner :)



Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- sound.cpp	5 May 2002 01:54:06 -0000	1.75
+++ sound.cpp	5 May 2002 02:28:35 -0000	1.76
@@ -768,11 +768,27 @@
 			free(CompFinal);
 			return;
 		}
-		size = READ_BE_UINT32(ptr); ptr+=4;
-		tag = READ_BE_UINT32(ptr);  ptr+=4;
-		size = READ_BE_UINT32(ptr); ptr+=size+4;
-		tag = READ_BE_UINT32(ptr);  ptr+=4;
-		size = READ_BE_UINT32(ptr); ptr+=4;
+
+		ptr+=12;       /* Skip header */
+		while(tag != 'DATA') {
+			tag = READ_BE_UINT32(ptr);  ptr+=4;
+			switch(tag) {
+				case 'FRMT':
+				case 'TEXT':
+				case 'REGN':
+				case 'STOP':
+				size = READ_BE_UINT32(ptr); ptr+=size+4;
+				break;
+
+				case 'DATA':
+				size = READ_BE_UINT32(ptr); ptr+=4;
+				break;
+
+				default:
+				error("Unknown bundle header %c%c%c%c", tag>>24, tag>>16, tag>>8, tag);
+			}
+		}
+
 		Final = (unsigned char *)malloc(size);
 		memcpy(&Final[0], &ptr[0], size);
 		_mixer->play_raw(NULL, Final, size, 22050, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);





More information about the Scummvm-git-logs mailing list