diff options
| author | Max Horn | 2009-03-10 02:57:30 +0000 | 
|---|---|---|
| committer | Max Horn | 2009-03-10 02:57:30 +0000 | 
| commit | 7f1a9b385dd515fc48e797b2e167dc70e3f67ecb (patch) | |
| tree | 0dc4acf41c21f3074fc562e0f43235d015be5bd4 | |
| parent | 6b5897353611421bad8d05df42bef5c2eccce798 (diff) | |
| download | scummvm-rg350-7f1a9b385dd515fc48e797b2e167dc70e3f67ecb.tar.gz scummvm-rg350-7f1a9b385dd515fc48e797b2e167dc70e3f67ecb.tar.bz2 scummvm-rg350-7f1a9b385dd515fc48e797b2e167dc70e3f67ecb.zip  | |
SCI: SongIterator::Message only needs to transfer a single argument, so get rid of the second slot
svn-id: r39290
| -rw-r--r-- | engines/sci/sfx/iterator.cpp | 84 | ||||
| -rw-r--r-- | engines/sci/sfx/iterator.h | 41 | 
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:  | 
