mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-24 02:36:27 +00:00
SCI: SongIterator::Message only needs to transfer a single argument, so get rid of the second slot
svn-id: r39290
This commit is contained in:
parent
6b58973536
commit
7f1a9b385d
@ -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;
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user