aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamieson Christian2003-05-20 16:42:25 +0000
committerJamieson Christian2003-05-20 16:42:25 +0000
commit733326b7275aea3e08afe7604eb8761c11e76d1a (patch)
treeb95bfa3c79aa376ca9487ae0861b71cd3af0fd7d
parentfe57d155f876071f395b5476d365d02033b7ff55 (diff)
downloadscummvm-rg350-733326b7275aea3e08afe7604eb8761c11e76d1a.tar.gz
scummvm-rg350-733326b7275aea3e08afe7604eb8761c11e76d1a.tar.bz2
scummvm-rg350-733326b7275aea3e08afe7604eb8761c11e76d1a.zip
Fixed file scan alignment problem
svn-id: r7742
-rw-r--r--simon/midi.cpp46
1 files changed, 30 insertions, 16 deletions
diff --git a/simon/midi.cpp b/simon/midi.cpp
index ca4cab92ac..6f7c2bdbb2 100644
--- a/simon/midi.cpp
+++ b/simon/midi.cpp
@@ -104,17 +104,15 @@ void MidiPlayer::metaEvent (byte type, byte *data, uint16 length) {
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 @@ void MidiPlayer::jump (uint16 track, uint16 tick) {
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::stop() {
}
void MidiPlayer::pause (bool b) {
- if (_paused == b)
+ if (_paused == b || !_driver)
return;
_paused = b;
@@ -251,9 +249,10 @@ void MidiPlayer::playSMF (File *in, int song) {
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 @@ void MidiPlayer::playMultipleSMF (File *in) {
_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 @@ void MidiPlayer::playXMIDI (File *in) {
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 @@ void MidiPlayer::playXMIDI (File *in) {
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);
}