[Scummvm-cvs-logs] CVS: scummvm-new/scumm imuse.cpp,1.2,1.3 scummvm.cpp,1.1.1.1,1.2

Ruediger Hanke tomjoad at users.sourceforge.net
Thu Aug 22 05:10:03 CEST 2002


Update of /cvsroot/scummvm/scummvm-new/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv29460/scumm

Modified Files:
	imuse.cpp scummvm.cpp 
Log Message:
Changed MorphOS MIDI code so that data sent from different threads are no longer a problem. Ensure Midi driver is closed, otherwise no other MIDI application will run after ScummVM has exited.

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm-new/scumm/imuse.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- imuse.cpp	21 Aug 2002 16:53:11 -0000	1.2
+++ imuse.cpp	22 Aug 2002 12:09:06 -0000	1.3
@@ -298,6 +298,7 @@
 	virtual uint32 get_base_tempo() = 0;
 	virtual byte get_hardware_type() = 0;
 	virtual void init(IMuseInternal *eng, OSystem *syst) = 0;
+	virtual void uninit() = 0;
 	virtual void update_pris() = 0;
 	virtual void set_instrument(uint slot, byte *instr) = 0;
 	virtual void part_set_instrument(Part *part, Instrument * instr) = 0;
@@ -408,7 +409,7 @@
 	IMuseDriver *driver() {
 		return _driver;
 	}
-
+	
 	int initialize(OSystem *syst, MidiDriver *midi, SoundMixer *mixer);
 
 	/* Public interface */
@@ -553,7 +554,7 @@
 	IMuseAdlib(SoundMixer *mixer) {
 		_mixer = mixer;
 	}
-	void uninit();
+	void uninit() {}
 	void init(IMuseInternal *eng, OSystem *syst);
 	void update_pris() {
 	}
@@ -1297,6 +1298,11 @@
 
 int IMuseInternal::terminate()
 {
+	if (_driver) {
+		_driver->uninit();
+		delete _driver;
+		_driver = NULL;
+	}
 	return 0;
 	/* not implemented */
 }
@@ -4278,30 +4284,31 @@
 	}
 }
 #else
-#include <exec/semaphores.h>
 #include <proto/exec.h>
 #include <proto/dos.h>
-#include "../morphos/morphos.h"
+#include "morphos.h"
+#include "morphos_sound.h"
 int IMuseGM::midi_driver_thread(void *param)
 {
 	IMuseGM *mid = (IMuseGM *) param;
 	int old_time, cur_time;
-	bool initialized;
+	MsgPort *music_timer_port = NULL;
+	timerequest *music_timer_request = NULL;
 
 	ObtainSemaphore(&ScummMusicThreadRunning);
 
-	initialized = init_morphos_music(0);
-
-	old_time = mid->_system->get_msecs();
-
-	if (!initialized)
+	if (!OSystem_MorphOS::OpenATimer(&music_timer_port, (IORequest **) &music_timer_request, UNIT_MICROHZ, false)) {
+		warning("Could not open a timer - music will not play");
 		Wait(SIGBREAKF_CTRL_C);
+	}
 	else {
+		old_time = mid->_system->get_msecs();
+
 		for (;;) {
-			MusicTimerIORequest->tr_time.tv_micro = 10000;
-			MusicTimerIORequest->tr_node.io_Command = TR_ADDREQUEST;
-			MusicTimerIORequest->tr_time.tv_secs = 0;
-			DoIO((struct IORequest *)MusicTimerIORequest);
+			music_timer_request->tr_node.io_Command = TR_ADDREQUEST;
+			music_timer_request->tr_time.tv_secs = 0;
+			music_timer_request->tr_time.tv_micro = 10000;
+			DoIO((struct IORequest *)music_timer_request);
 
 			if (CheckSignal(SIGBREAKF_CTRL_C))
 				break;
@@ -4314,8 +4321,6 @@
 		}
 	}
 
-	exit_morphos_music();
-
 	ReleaseSemaphore(&ScummMusicThreadRunning);
 	RemTask(NULL);
 	return 0;
@@ -4342,6 +4347,11 @@
 		mc->_chan = i;
 }
 
+void IMuseGM::uninit()
+{
+	_md->close();
+}
+
 void IMuseGM::update_pris()
 {
 	Part *part, *hipart;
@@ -4493,8 +4503,10 @@
 
 IMuse::~IMuse()
 {
-	if (_imuse)
+	if (_imuse) {
+		_imuse->terminate();
 		delete _imuse;
+	}
 }
 
 void IMuse::on_timer()

Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm-new/scumm/scummvm.cpp,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- scummvm.cpp	21 Aug 2002 16:07:35 -0000	1.1.1.1
+++ scummvm.cpp	22 Aug 2002 12:09:06 -0000	1.2
@@ -154,6 +154,7 @@
 	delete _bundle;
 	delete _timer;
 	delete _sound;
+	delete _imuse;
 }
 
 void Scumm::scummInit()





More information about the Scummvm-git-logs mailing list