aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/sfx/iterator.cpp84
-rw-r--r--engines/sci/sfx/iterator.h41
2 files changed, 53 insertions, 72 deletions
diff --git a/engines/sci/sfx/iterator.cpp b/engines/sci/sfx/iterator.cpp
index 80c32d76bb..ab868b05d8 100644
--- a/engines/sci/sfx/iterator.cpp
+++ b/engines/sci/sfx/iterator.cpp
@@ -589,17 +589,17 @@ Audio::AudioStream *Sci0SongIterator::getAudioStream() {
}
SongIterator *Sci0SongIterator::handleMessage(Message msg) {
- if (msg.recipient == _SIMSG_BASE) {
- switch (msg.type) {
+ if (msg._class == _SIMSG_BASE) {
+ switch (msg._type) {
case _SIMSG_BASEMSG_PRINT:
- print_tabs_id(msg.args[0].i, ID);
+ print_tabs_id(msg._arg.i, ID);
fprintf(stderr, "SCI0: dev=%d, active-chan=%d, size=%d, loops=%d\n",
_deviceId, active_channels, _size, loops);
break;
case _SIMSG_BASEMSG_SET_LOOPS:
- loops = msg.args[0].i;
+ loops = msg._arg.i;
break;
case _SIMSG_BASEMSG_STOP: {
@@ -612,7 +612,7 @@ SongIterator *Sci0SongIterator::handleMessage(Message msg) {
case _SIMSG_BASEMSG_SET_PLAYMASK: {
int i;
- _deviceId = msg.args[0].i;
+ _deviceId = msg._arg.i;
/* Set all but the rhytm channel mask bits */
channel.playmask &= ~(1 << MIDI_RHYTHM_CHANNEL);
@@ -626,12 +626,12 @@ SongIterator *Sci0SongIterator::handleMessage(Message msg) {
case _SIMSG_BASEMSG_SET_RHYTHM:
channel.playmask &= ~(1 << MIDI_RHYTHM_CHANNEL);
- if (msg.args[0].i)
+ if (msg._arg.i)
channel.playmask |= (1 << MIDI_RHYTHM_CHANNEL);
break;
case _SIMSG_BASEMSG_SET_FADE: {
- fade_params_t *fp = (fade_params_t *) msg.args[0].p;
+ fade_params_t *fp = (fade_params_t *) msg._arg.p;
fade.action = fp->action;
fade.final_volume = fp->final_volume;
fade.ticks_per_step = fp->ticks_per_step;
@@ -1076,8 +1076,8 @@ int Sci1SongIterator::nextCommand(byte *buf, int *result) {
}
SongIterator *Sci1SongIterator::handleMessage(Message msg) {
- if (msg.recipient == _SIMSG_BASE) { /* May extend this in the future */
- switch (msg.type) {
+ if (msg._class == _SIMSG_BASE) { /* May extend this in the future */
+ switch (msg._type) {
case _SIMSG_BASEMSG_PRINT: {
int playmask = 0;
@@ -1086,7 +1086,7 @@ SongIterator *Sci1SongIterator::handleMessage(Message msg) {
for (i = 0; i < _numChannels; i++)
playmask |= _channels[i].playmask;
- print_tabs_id(msg.args[0].i, ID);
+ print_tabs_id(msg._arg.i, ID);
fprintf(stderr, "SCI1: chan-nr=%d, playmask=%04x\n",
_numChannels, playmask);
}
@@ -1111,13 +1111,13 @@ SongIterator *Sci1SongIterator::handleMessage(Message msg) {
_deviceId
= sci0_to_sci1_device_map
- [sci_ffs(msg.args[0].i & 0xff) - 1]
+ [sci_ffs(msg._arg.i & 0xff) - 1]
[sfx_pcm_available()]
;
if (_deviceId == 0xff) {
sciprintf("[iterator-1] Warning: Device %d(%d) not supported",
- msg.args[0].i & 0xff, sfx_pcm_available());
+ msg._arg.i & 0xff, sfx_pcm_available());
}
if (_initialised) {
int i;
@@ -1152,20 +1152,20 @@ SongIterator *Sci1SongIterator::handleMessage(Message msg) {
case _SIMSG_BASEMSG_SET_LOOPS:
if (msg.ID == ID)
- loops = (msg.args[0].i > 32767) ? 99 : 0;
+ loops = (msg._arg.i > 32767) ? 99 : 0;
/* 99 is arbitrary, but we can't use '1' because of
** the way we're testing in the decoding section. */
break;
case _SIMSG_BASEMSG_SET_HOLD:
- _hold = msg.args[0].i;
+ _hold = msg._arg.i;
break;
case _SIMSG_BASEMSG_SET_RHYTHM:
/* Ignore */
break;
case _SIMSG_BASEMSG_SET_FADE: {
- fade_params_t *fp = (fade_params_t *) msg.args[0].p;
+ fade_params_t *fp = (fade_params_t *) msg._arg.p;
fade.action = fp->action;
fade.final_volume = fp->final_volume;
fade.ticks_per_step = fp->ticks_per_step;
@@ -1174,7 +1174,7 @@ SongIterator *Sci1SongIterator::handleMessage(Message msg) {
}
default:
- warning(SIPFX "Unsupported command %d to SCI1 iterator", msg.type);
+ warning(SIPFX "Unsupported command %d to SCI1 iterator", msg._type);
}
return this;
}
@@ -1247,8 +1247,8 @@ public:
};
SongIterator *CleanupSongIterator::handleMessage(Message msg) {
- if (msg.recipient == _SIMSG_BASEMSG_PRINT && msg.type == _SIMSG_BASEMSG_PRINT) {
- print_tabs_id(msg.args[0].i, ID);
+ if (msg._class == _SIMSG_BASEMSG_PRINT && msg._type == _SIMSG_BASEMSG_PRINT) {
+ print_tabs_id(msg._arg.i, ID);
fprintf(stderr, "CLEANUP\n");
}
@@ -1300,8 +1300,8 @@ Audio::AudioStream *FastForwardSongIterator::getAudioStream() {
}
SongIterator *FastForwardSongIterator::handleMessage(Message msg) {
- if (msg.recipient == _SIMSG_PLASTICWRAP) {
- assert(msg.type == _SIMSG_PLASTICWRAP_ACK_MORPH);
+ if (msg._class == _SIMSG_PLASTICWRAP) {
+ assert(msg._type == _SIMSG_PLASTICWRAP_ACK_MORPH);
if (_delta <= 0) {
SongIterator *it = _delegate;
@@ -1313,10 +1313,10 @@ SongIterator *FastForwardSongIterator::handleMessage(Message msg) {
return this;
}
- if (msg.recipient == _SIMSG_BASE && msg.type == _SIMSG_BASEMSG_PRINT) {
- print_tabs_id(msg.args[0].i, ID);
+ if (msg._class == _SIMSG_BASE && msg._type == _SIMSG_BASEMSG_PRINT) {
+ print_tabs_id(msg._arg.i, ID);
fprintf(stderr, "FASTFORWARD:\n");
- msg.args[0].i++;
+ msg._arg.i++;
}
// And continue with the delegate
@@ -1600,8 +1600,8 @@ Audio::AudioStream *TeeSongIterator::getAudioStream() {
}
SongIterator *TeeSongIterator::handleMessage(Message msg) {
- if (msg.recipient == _SIMSG_PLASTICWRAP) {
- assert(msg.type == _SIMSG_PLASTICWRAP_ACK_MORPH);
+ if (msg._class == _SIMSG_PLASTICWRAP) {
+ assert(msg._type == _SIMSG_PLASTICWRAP_ACK_MORPH);
SongIterator *old_it;
if (!(_status & (TEE_LEFT_ACTIVE | TEE_RIGHT_ACTIVE))) {
@@ -1625,10 +1625,10 @@ SongIterator *TeeSongIterator::handleMessage(Message msg) {
return this;
}
- if (msg.recipient == _SIMSG_BASE && msg.type == _SIMSG_BASEMSG_PRINT) {
- print_tabs_id(msg.args[0].i, ID);
+ if (msg._class == _SIMSG_BASE && msg._type == _SIMSG_BASEMSG_PRINT) {
+ print_tabs_id(msg._arg.i, ID);
fprintf(stderr, "TEE:\n");
- msg.args[0].i++;
+ msg._arg.i++;
}
// And continue with the children
@@ -1674,7 +1674,8 @@ int songit_next(SongIterator **it, byte *buf, int *result, int mask) {
fprintf(stderr, " Morphing %p (stored at %p)\n", (void *)*it, (void *)it);
if (!SIMSG_SEND((*it), SIMSG_ACK_MORPH)) {
BREAKPOINT();
- } else fprintf(stderr, "SI_MORPH successful\n");
+ } else
+ fprintf(stderr, "SI_MORPH successful\n");
}
if (retval == SI_FINISHED)
@@ -1704,8 +1705,7 @@ int songit_next(SongIterator **it, byte *buf, int *result, int mask) {
|| (retval == SI_FINISHED)
));
- if (retval == SI_FINISHED
- && (mask & IT_READER_MAY_FREE)) {
+ if (retval == SI_FINISHED && (mask & IT_READER_MAY_FREE)) {
delete *it;
*it = NULL;
}
@@ -1763,28 +1763,6 @@ SongIterator *songit_new(byte *data, uint size, int type, songit_id_t id) {
return it;
}
-SongIterator::Message::Message() {
- ID = 0;
- recipient = 0;
- type = 0;
-}
-
-SongIterator::Message::Message(songit_id_t id, int r, int t, int a1, int a2) {
- ID = id;
- recipient = r;
- type = t;
- args[0].i = a1;
- args[1].i = a2;
-}
-
-SongIterator::Message::Message(songit_id_t id, int r, int t, void *a1, int a2) {
- ID = id;
- recipient = r;
- type = t;
- args[0].p = a1;
- args[1].i = a2;
-}
-
int songit_handle_message(SongIterator **it_reg_p, SongIterator::Message msg) {
SongIterator *it = *it_reg_p;
SongIterator *newit;
diff --git a/engines/sci/sfx/iterator.h b/engines/sci/sfx/iterator.h
index 775869e50b..aff2a4c7b9 100644
--- a/engines/sci/sfx/iterator.h
+++ b/engines/sci/sfx/iterator.h
@@ -81,18 +81,17 @@ enum {
};
/* Messages */
-#define SIMSG_SET_LOOPS(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_LOOPS,(x),0
-#define SIMSG_SET_PLAYMASK(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_PLAYMASK,(x),0
-#define SIMSG_SET_RHYTHM(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_RHYTHM,(x),0
-#define SIMSG_ACK_MORPH _SIMSG_PLASTICWRAP,_SIMSG_PLASTICWRAP_ACK_MORPH,0,0
-#define SIMSG_STOP _SIMSG_BASE,_SIMSG_BASEMSG_STOP,0,0
-#define SIMSG_PRINT(indentation) _SIMSG_BASE,_SIMSG_BASEMSG_PRINT,(indentation),0
-#define SIMSG_SET_HOLD(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_HOLD,(x),0
-/*#define SIMSG_SET_FADE(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_FADE,(x),0*/
+#define SIMSG_SET_LOOPS(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_LOOPS,(x)
+#define SIMSG_SET_PLAYMASK(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_PLAYMASK,(x)
+#define SIMSG_SET_RHYTHM(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_RHYTHM,(x)
+#define SIMSG_ACK_MORPH _SIMSG_PLASTICWRAP,_SIMSG_PLASTICWRAP_ACK_MORPH,0
+#define SIMSG_STOP _SIMSG_BASE,_SIMSG_BASEMSG_STOP,0
+#define SIMSG_PRINT(indentation) _SIMSG_BASE,_SIMSG_BASEMSG_PRINT,(indentation)
+#define SIMSG_SET_HOLD(x) _SIMSG_BASE,_SIMSG_BASEMSG_SET_HOLD,(x)
/* Message transmission macro: Takes song reference, message reference */
#define SIMSG_SEND(o, m) songit_handle_message(&(o), SongIterator::Message((o)->ID, m))
-#define SIMSG_SEND_FADE(o, m) songit_handle_message(&(o), SongIterator::Message((o)->ID, _SIMSG_BASE, _SIMSG_BASEMSG_SET_FADE, m, 0))
+#define SIMSG_SEND_FADE(o, m) songit_handle_message(&(o), SongIterator::Message((o)->ID, _SIMSG_BASE, _SIMSG_BASEMSG_SET_FADE, m))
typedef unsigned long songit_id_t;
@@ -105,14 +104,14 @@ class SongIterator {
public:
struct Message {
songit_id_t ID;
- uint recipient; /* Type of iterator supposed to receive this */
- uint type;
+ uint _class; /* Type of iterator supposed to receive this */
+ uint _type;
union {
uint i;
void *p;
- } args[SONG_ITERATOR_MESSAGE_ARGUMENTS_NR];
+ } _arg;
- Message();
+ Message() : ID(0), _class(0xFFFF), _type(0xFFFF) {}
/**
* Create a song iterator message.
@@ -120,12 +119,14 @@ public:
* @param id: song ID the message is targeted to
* @param recipient_class: Message recipient class
* @param type message type
- * @param a1 first message argument
- * @param a2 second message argument
+ * @param a argument
*
* @note You should only use this with the SIMSG_* macros
*/
- Message(songit_id_t id, int recipient_class, int type, int a1, int a2);
+ Message(songit_id_t id, int recipient_class, int type, int a)
+ : ID(id), _class(recipient_class), _type(type) {
+ _arg.i = a;
+ }
/**
* Create a song iterator message, wherein the first parameter is a pointer.
@@ -133,12 +134,14 @@ public:
* @param id: song ID the message is targeted to
* @param recipient_class: Message recipient class
* @param type message type
- * @param a1 first message argument
- * @param a2 second message argument
+ * @param a argument
*
* @note You should only use this with the SIMSG_* macros
*/
- Message(songit_id_t id, int recipient_class, int type, void *a1, int a2);
+ Message(songit_id_t id, int recipient_class, int type, void *a)
+ : ID(id), _class(recipient_class), _type(type) {
+ _arg.p = a;
+ }
};
public: