[Scummvm-cvs-logs] CVS: scummvm/simon midi.cpp,1.29,1.30

Jamieson Christian jamieson630 at users.sourceforge.net
Tue May 20 09:43:08 CEST 2003


Update of /cvsroot/scummvm/scummvm/simon
In directory sc8-pr-cvs1:/tmp/cvs-serv32535/scummvm/simon

Modified Files:
	midi.cpp 
Log Message:
Fixed file scan alignment problem

Index: midi.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/simon/midi.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- midi.cpp	20 May 2003 14:53:45 -0000	1.29
+++ midi.cpp	20 May 2003 16:42:25 -0000	1.30
@@ -104,17 +104,15 @@
 
 void MidiPlayer::onTimer (void *data) {
 	MidiPlayer *player = (MidiPlayer *) data;
-	if (player->_paused)
+	if (player->_paused || !player->_parser)
 		return;
-	if (player->_parser) {
-		player->_system->lock_mutex (player->_mutex);
-		player->_parser->onTimer();
-		player->_system->unlock_mutex (player->_mutex);
-	}
+	player->_system->lock_mutex (player->_mutex);
+	player->_parser->onTimer();
+	player->_system->unlock_mutex (player->_mutex);
 }
 
 void MidiPlayer::jump (uint16 track, uint16 tick) {
-	if (track == _currentTrack)
+	if (track == _currentTrack || !_parser)
 		return;
 
 	if (_num_songs > 0) {
@@ -142,15 +140,15 @@
 		for (int i = ARRAYSIZE (_volumeTable); i; --i)
 			_volumeTable[i-1] = 127;
 		_parser = parser; // That plugs the power cord into the wall
-
-		_system->unlock_mutex (_mutex);
 	} else if (_parser) {
 		_system->lock_mutex (_mutex);
 		_currentTrack = (byte) track;
 		_parser->setTrack ((byte) track);
-		_parser->jumpToTick (tick - 1);
-		_system->unlock_mutex (_mutex);
 	}
+
+	_parser->jumpToTick (tick ? tick - 1 : 0);
+	pause (false);
+	_system->unlock_mutex (_mutex);
 }
 
 void MidiPlayer::stop() {
@@ -162,7 +160,7 @@
 }
 
 void MidiPlayer::pause (bool b) {
-	if (_paused == b)
+	if (_paused == b || !_driver)
 		return;
 	_paused = b;
 
@@ -251,9 +249,10 @@
 		parser = 0;
 	}
 
-	_currentTrack = 0;
+	_currentTrack = 255;
 	for (int i = ARRAYSIZE (_volumeTable); i; --i)
 		_volumeTable[i-1] = 127;
+	_paused = true;
 	_parser = parser; // That plugs the power cord into the wall
 	_system->unlock_mutex (_mutex);
 }
@@ -307,8 +306,10 @@
 		_song_sizes[i] = size;
 	}
 
+	_paused = true;
+	_currentTrack = 255;
 	_system->unlock_mutex (_mutex);
-	jump (0, 1);
+//	jump (0, 1);
 }
 
 void MidiPlayer::playXMIDI (File *in) {
@@ -320,7 +321,19 @@
 	uint32 size = 4;
 	in->read (buf, 4);
 	if (!memcmp (buf, "FORM", 4)) {
-		while (memcmp (buf, "CAT ", 4)) { size += 4; in->read (buf, 4); }
+		int i;
+		for (i = 0; i < 16; ++i) {
+			if (!memcmp (buf, "CAT ", 4))
+				break;
+			size += 2;
+			memcpy (buf, &buf[2], 2);
+			in->read (&buf[2], 2);
+		}
+		if (memcmp (buf, "CAT ", 4)) {
+			printf ("ERROR! Could not find 'CAT ' tag to determine resource size!\n");
+			_system->unlock_mutex (_mutex);
+			return;
+		}
 		size += 4 + in->readUint32BE();
 		in->seek (pos, 0);
 		_data = (byte *) calloc (size, 1);
@@ -340,9 +353,10 @@
 		parser = 0;
 	}
 
-	_currentTrack = 0;
+	_currentTrack = 255;
 	for (int i = ARRAYSIZE (_volumeTable); i; --i)
 		_volumeTable[i-1] = 127;
+	_paused = true;
 	_parser = parser; // That plugs the power cord into the wall
 	_system->unlock_mutex (_mutex);
 }





More information about the Scummvm-git-logs mailing list