diff options
| author | Max Horn | 2003-10-02 22:52:57 +0000 | 
|---|---|---|
| committer | Max Horn | 2003-10-02 22:52:57 +0000 | 
| commit | bb6765f85d6272f736fa9bbe0981582fa7679ef5 (patch) | |
| tree | 11f5ee1e2c310da73ccd29b016c951733108e186 | |
| parent | 3f55f2669d560489ee017d64f5bdd0f785cf796e (diff) | |
| download | scummvm-rg350-bb6765f85d6272f736fa9bbe0981582fa7679ef5.tar.gz scummvm-rg350-bb6765f85d6272f736fa9bbe0981582fa7679ef5.tar.bz2 scummvm-rg350-bb6765f85d6272f736fa9bbe0981582fa7679ef5.zip | |
cleanup & restructuring; in particular move the midi driver list to its own source file
svn-id: r10550
| -rw-r--r-- | TODO | 7 | ||||
| -rw-r--r-- | base/gameDetector.cpp | 158 | ||||
| -rw-r--r-- | base/gameDetector.h | 31 | ||||
| -rw-r--r-- | base/plugins.cpp | 3 | ||||
| -rw-r--r-- | gui/options.cpp | 27 | ||||
| -rw-r--r-- | sound/mididrv.cpp | 68 | ||||
| -rw-r--r-- | sound/mididrv.h | 78 | ||||
| -rw-r--r-- | sound/module.mk | 1 | 
8 files changed, 212 insertions, 161 deletions
| @@ -111,6 +111,13 @@ Descumm  * Rewrite code to use 2 passes; first pass builds an intermediate graph, the    second pass then tries to detect loops, break/continue statements etc. +Backend +======= +* Several of the backend factory functions take config parameters. It should +  be possible to get rid of those once the config system rewrite (see above) +  has been done. In that case, the backends simply can query the config +  manager for these parameters (or any others they might like :-). +  SDL backend  ===========  * Maybe change the shortcuts? One idea (add ctrl-alt in all cases): diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp index 4e44eb1a62..41a00ee967 100644 --- a/base/gameDetector.cpp +++ b/base/gameDetector.cpp @@ -21,12 +21,15 @@   */  #include "stdafx.h" +  #include "backends/intern.h" +#include "base/engine.h"  #include "base/gameDetector.h"  #include "base/plugins.h" +  #include "common/config-file.h" -#include "base/engine.h"  #include "common/scaler.h"	// Only for gfx_modes +  #include "sound/mididrv.h"  #include "sound/mixer.h" @@ -51,52 +54,50 @@ static const char USAGE_STRING[] = "NoUsageString"; // save more data segment sp  static const char USAGE_STRING[] =   	"ScummVM - Graphical Adventure Game Interpreter\n"  	"Syntax:\n" -	"\tscummvm [OPTIONS] [game]\n" +	"  scummvm [OPTIONS] [game]\n"  	"Options:\n" -	"\t-p<path>       - Look for game in <path>\n" -	"\t-x[num]        - Load this savegame (default: 0 - autosave)\n" -	"\t-f             - Full-screen mode (-F forces window mode.)\n" -	"\t-g<mode>       - Graphics mode (normal,2x,3x,2xsai,super2xsai,\n" -	"\t                 supereagle,advmame2x,advmame3x,hq2x,hq3x,\n" -	"\t                 tv2x,dotmatrix)\n" -	"\t-e<mode>       - Set music engine (see README for details)\n" -	"\t-q<lang>       - Specify language (en,de,fr,it,pt,es,jp,zh,kr,se,\n" -	"\t                 gb,hb)\n" +	"  -p<path>       - Look for game in <path>\n" +	"  -x[num]        - Load this savegame (default: 0 - autosave)\n" +	"  -f             - Full-screen mode (-F forces window mode.)\n" +	"  -g<mode>       - Graphics mode (normal,2x,3x,2xsai,super2xsai,supereagle,\n" +	"                   advmame2x,advmame3x,hq2x,hq3x,tv2x,dotmatrix)\n" +	"  -e<mode>       - Set music engine (see README for details)\n" +	"  -q<lang>       - Specify language (en,de,fr,it,pt,es,jp,zh,kr,se,gb,hb)\n"  	"\n" -	"\t-c<num>        - Use cdrom <num> for cd audio\n" -	"\t-j[num]        - Enable input with joystick (default: 0 - 1st joystick)\n" -	"\t-m<num>        - Set music volume to <num> (0-255)\n" -	"\t-o<num>        - Set master volume to <num> (0-255)\n" -	"\t-s<num>        - Set sfx volume to <num> (0-255)\n" -	"\t-t<num>        - Set music tempo (50-200, default 100%%)\n" +	"  -c<num>        - Use cdrom <num> for cd audio\n" +	"  -j[num]        - Enable input with joystick (default: 0 - first joystick)\n" +	"  -m<num>        - Set music volume to <num> (0-255)\n" +	"  -o<num>        - Set master volume to <num> (0-255)\n" +	"  -s<num>        - Set sfx volume to <num> (0-255)\n" +	"  -t<num>        - Set music tempo (50-200, default 100%%)\n"  	"\n" -	"\t-n             - No subtitles for speech\n" -	"\t-y             - Set text speed (default: 60)\n" +	"  -n             - No subtitles for speech\n" +	"  -y             - Set text speed (default: 60)\n"  	"\n" -	"\t-l<file>       - Load config file instead of default\n" +	"  -l<file>       - Load config file instead of default\n"  #if defined(UNIX) -	"\t-w[file]       - Write to config file [~/.scummvmrc]\n" +	"  -w[file]       - Write to config file [~/.scummvmrc]\n"  #else -	"\t-w[file]       - Write to config file [scummvm.ini]\n" +	"  -w[file]       - Write to config file [scummvm.ini]\n"  #endif -	"\t-v             - Show version info and exit\n" -	"\t-h             - Display this text and exit\n" -	"\t-z             - Display list of games\n" +	"  -v             - Show version info and exit\n" +	"  -h             - Display this text and exit\n" +	"  -z             - Display list of games\n"  	"\n" -	"\t-b<num>        - Pass number to the boot script (boot param)\n" -	"\t-d[num]        - Enable debug output (debug level [0])\n" -	"\t-u             - Dump scripts\n" +	"  -b<num>        - Pass number to the boot script (boot param)\n" +	"  -d[num]        - Enable debug output (debug level [0])\n" +	"  -u             - Dump scripts\n"  	"\n" -	"\t--platform=    - Specify version of game (amiga,atari-st,macintosh)\n" -	"\t--multi-midi   - Enable combination Adlib and native MIDI\n" -	"\t--native-mt32  - True Roland MT-32 (disable GM emulation)\n" -	"\t--fullscreen   - Full-screen mode (same as -f)\n" -	"\t--aspect-ratio - Enable aspect ratio correction\n" +	"  --platform=    - Specify version of game (amiga,atari-st,macintosh)\n" +	"  --multi-midi   - Enable combination Adlib and native MIDI\n" +	"  --native-mt32  - True Roland MT-32 (disable GM emulation)\n" +	"  --fullscreen   - Full-screen mode (same as -f)\n" +	"  --aspect-ratio - Enable aspect ratio correction\n"  #ifndef DISABLE_SCUMM -	"\t--demo-mode    - Start demo mode of Maniac Mansion (Classic version)\n" +	"  --demo-mode    - Start demo mode of Maniac Mansion (Classic version)\n"  #endif  #ifndef DISABLE_SKY -	"\t--floppy-intro - Use floppy version intro for Beneath a Steel Sky CD\n" +	"  --floppy-intro - Use floppy version intro for Beneath a Steel Sky CD\n"  #endif  	"\n"  	"The meaning of long options can be inverted by prefixing them with \"no-\",\n" @@ -104,6 +105,20 @@ static const char USAGE_STRING[] =  ;  #endif + +struct GraphicsMode { +	const char *name; +	const char *description; +	int id; +}; + +/** + * List of graphic 'modes' we potentially support. Potentially because not all + * backends actually support all the filters listed here. At this point only + * the SDL backend supports all (except for the PalmOS ones of course). + * @todo Remove this explicit list of graphic modes and rather extend the  + * OSystem API to allow querying a backend for the modes it supports. + */  static const struct GraphicsMode gfx_modes[] = {  	{"normal", "Normal (no scaling)", GFX_NORMAL},  	{"1x", "Normal (no scaling)", GFX_NORMAL}, @@ -128,6 +143,12 @@ static const struct GraphicsMode gfx_modes[] = {  	{0, 0, 0}  }; +struct Language { +	const char *name; +	const char *description; +	int id; +}; +  static const struct Language languages[] = {  	{"en", "English", EN_USA},  	{"de", "German", DE_DEU}, @@ -144,25 +165,6 @@ static const struct Language languages[] = {  	{0, 0, 0}  }; -static const struct MusicDriver music_drivers[] = { -	{"auto", "Default", MD_AUTO}, -	{"null", "No music", MD_NULL}, -#ifndef __PALM_OS__	// reduce contant data size -	{"windows", "Windows MIDI", MD_WINDOWS}, -	{"seq", "SEQ", MD_SEQ}, -	{"qt", "QuickTime", MD_QTMUSIC}, -	{"core", "CoreAudio", MD_COREAUDIO}, -	{"etude", "Etude", MD_ETUDE}, -	{"alsa", "ALSA", MD_ALSA}, -	{"adlib", "Adlib", MD_ADLIB}, -	{"pcspk", "PC Speaker", MD_PCSPK}, -	{"pcjr", "IBM PCjr", MD_PCJR}, -#else -	{"ypa1", "Yamaha Pa1", MD_YPA1}, -#endif -	{0, 0, 0} -}; -  GameDetector::GameDetector() {  	_fullScreen = false; @@ -363,6 +365,10 @@ void GameDetector::parseCommandLine(int argc, char **argv) {  				break;  			case 'e':  				HANDLE_OPTION(); +				// TODO: Instead of just showing the generic help text, +				// maybe print a message like: +				// "'option' is not a supported music driver on this machine. +				//  Available driver: ..."  				if (!parseMusicDriver(option))  					goto ShowHelpAndExit;  				g_config->set("music_driver", option); @@ -376,6 +382,10 @@ void GameDetector::parseCommandLine(int argc, char **argv) {  			case 'g':  				HANDLE_OPTION();  				_gfx_mode = parseGraphicsMode(option); +				// TODO: Instead of just showing the generic help text, +				// maybe print a message like: +				// "'option' is not a supported graphic mode on this machine. +				//  Available graphic modes: ..."  				if (_gfx_mode == -1)  					goto ShowHelpAndExit;  				g_config->set("gfx_mode", option); @@ -593,46 +603,8 @@ int GameDetector::parseLanguage(const char *s) {  	return -1;  } -bool GameDetector::isMusicDriverAvailable(int drv) { -	switch(drv) { -	case MD_AUTO: -	case MD_NULL: return true; -#ifndef __PALM_OS__	// don't show it on palmos -	case MD_ADLIB: -	case MD_PCSPK: -	case MD_PCJR:  return true; -#else -	case MD_YPA1: return true; -#endif -#if defined(WIN32) && !defined(_WIN32_WCE) -	case MD_WINDOWS: return true; -#endif -#if defined(__MORPHOS__) -	case MD_ETUDE: return true; -#endif -#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOSX) -	case MD_SEQ: return true; -#endif -#if defined(MACOSX) || defined(macintosh) -	case MD_QTMUSIC: return true; -#endif -#if defined(MACOSX) -	case MD_COREAUDIO: return true; -#endif -#if defined(UNIX) && defined(USE_ALSA) -	case MD_ALSA: return true; -#endif -	} -	return false; -} - -const MusicDriver *GameDetector::getMusicDrivers() { -	return music_drivers; -} - -  bool GameDetector::parseMusicDriver(const char *s) { -	const MusicDriver *md = music_drivers; +	const MidiDriverDescription *md = getAvailableMidiDrivers();  	while (md->name) {  		if (!scumm_stricmp(md->name, s)) { diff --git a/base/gameDetector.h b/base/gameDetector.h index 798780adf9..038a7681c4 100644 --- a/base/gameDetector.h +++ b/base/gameDetector.h @@ -46,9 +46,10 @@ enum {  	GF_DEFAULT_TO_1X_SCALER = 1 << 31  }; -/* Languages - * note: values 0->8 are are _needed_ for scripts in comi please don't - * remove/change fixed numbers from this enum +/** + * List of language ids. + * @note The order and mappings of the values 0..8 are *required* to stay the + * way they are now, as scripts in COMI rely on them. So don't touch them.   */  enum {  	EN_USA = 0, @@ -82,34 +83,10 @@ struct TargetSettings {  	const char *detectname;  }; -struct MusicDriver { -	const char *name; -	const char *description; -	int id; -}; - -struct GraphicsMode { -	const char *name; -	const char *description; -	int id; -}; - -struct Language { -	const char *name; -	const char *description; -	int id; -}; - -typedef Engine *(*EngineFactory)(GameDetector *detector, OSystem *syst); -  class GameDetector {  	typedef Common::String String;  public: -	static const MusicDriver *getMusicDrivers(); -	static bool isMusicDriverAvailable(int drv); - -public:  	GameDetector();  	void parseCommandLine(int argc, char **argv); diff --git a/base/plugins.cpp b/base/plugins.cpp index 3ba63f3e0e..04d1460ec2 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -26,6 +26,9 @@  #include "common/util.h" +typedef Engine *(*EngineFactory)(GameDetector *detector, OSystem *syst); + +  #ifdef DYNAMIC_MODULES  #ifdef UNIX diff --git a/gui/options.cpp b/gui/options.cpp index abba0229e0..0e3bc0ea73 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -19,15 +19,16 @@   */  #include "stdafx.h" -#include "browser.h" -#include "chooser.h" -#include "newgui.h" -#include "options.h" -#include "PopUpWidget.h" +#include "gui/browser.h" +#include "gui/chooser.h" +#include "gui/newgui.h" +#include "gui/options.h" +#include "gui/PopUpWidget.h"  #include "backends/fs/fs.h" -#include "common/config-file.h"  #include "base/gameDetector.h" +#include "common/config-file.h" +#include "sound/mididrv.h"  #if (!( defined(__DC__) || defined(__GP32__)) && !defined(_MSC_VER))  #include <unistd.h> @@ -90,14 +91,12 @@ GlobalOptionsDialog::GlobalOptionsDialog(NewGui *gui, GameDetector &detector)  	int midiSelected = 0, i = 0;;  	// Populate it -	const MusicDriver *md = GameDetector::getMusicDrivers(); +	const MidiDriverDescription *md = getAvailableMidiDrivers();  	while (md->name) { -		if (GameDetector::isMusicDriverAvailable(md->id)) { -			_midiPopUp->appendEntry(md->description, md->id); -			if (md->id == _detector._midi_driver) -				midiSelected = i; -			i++; -		} +		_midiPopUp->appendEntry(md->description, md->id); +		if (md->id == _detector._midi_driver) +			midiSelected = i; +		i++;  		md++;  	}  	_midiPopUp->setSelected(midiSelected); @@ -205,7 +204,7 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3  		break;  	case kPopUpItemSelectedCmd:  		if (sender == _midiPopUp) { -			const MusicDriver *md = GameDetector::getMusicDrivers(); +			const MidiDriverDescription *md = getAvailableMidiDrivers();  			for (; md->name; md++) {  				if (md->id == (int) data) {  					g_config->set ("music_driver", md->name, "_USER_OVERRIDES"); diff --git a/sound/mididrv.cpp b/sound/mididrv.cpp new file mode 100644 index 0000000000..3f175ce1f6 --- /dev/null +++ b/sound/mididrv.cpp @@ -0,0 +1,68 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001  Ludvig Strigeus + * Copyright (C) 2001-2003 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. + * + * $Header$ + * + */ + +#include "stdafx.h" +#include "sound/mididrv.h" + + +/** Internal list of all available 'midi' drivers. */ +static const struct MidiDriverDescription midiDrivers[] = { +	{"auto", "Default", MD_AUTO}, +	{"null", "No music", MD_NULL}, + +#if defined(WIN32) && !defined(_WIN32_WCE) +	{"windows", "Windows MIDI", MD_WINDOWS}, +#endif + +#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOSX) +	{"seq", "SEQ", MD_SEQ}, +#endif + +#if defined(MACOSX) +	{"qt", "QuickTime", MD_QTMUSIC}, +	{"core", "CoreAudio", MD_COREAUDIO}, +#endif + +#if defined(__MORPHOS__) +	{"etude", "Etude", MD_ETUDE}, +#endif + +#if defined(UNIX) && defined(USE_ALSA) +	{"alsa", "ALSA", MD_ALSA}, +#endif + +#if !defined(__PALM_OS__) +	{"adlib", "Adlib", MD_ADLIB}, +	{"pcspk", "PC Speaker", MD_PCSPK}, +	{"pcjr", "IBM PCjr", MD_PCJR}, +#endif + +#if defined(__PALM_OS__) +	{"ypa1", "Yamaha Pa1", MD_YPA1}, +#endif +	{0, 0, 0} +}; + + +const MidiDriverDescription *getAvailableMidiDrivers() { +	return midiDrivers; +} diff --git a/sound/mididrv.h b/sound/mididrv.h index f9164cb3fb..65043ff5f9 100644 --- a/sound/mididrv.h +++ b/sound/mididrv.h @@ -28,13 +28,53 @@  class MidiChannel;  class SoundMixer; -// Abstract MIDI Driver Class + +/** MIDI Driver Types */ +enum { +	MD_AUTO = 0, +	MD_NULL = 1, +	MD_WINDOWS = 2, +	MD_TIMIDITY = 3, +	MD_SEQ = 4, +	MD_QTMUSIC = 5, +	MD_ETUDE = 6, +	MD_COREAUDIO = 7, +	MD_MIDIEMU = 8, +	MD_ALSA = 9, +	MD_ADLIB = 10, +	MD_PCSPK = 11, +	MD_PCJR = 12, +	 +	MD_YPA1 = 100	// palmos +}; + +/** + * Abstract description of a MIDI driver. Used by the config file and command + * line parsing code, and also to be able to give the user a list of available + * drivers. + */ +struct MidiDriverDescription { +	const char *name; +	const char *description; +	int id; +}; + +/** + * Get a list of all available MidiDriver types. + * @return list of all available midi drivers, terminated by  a zero entry + */ +extern const MidiDriverDescription *getAvailableMidiDrivers(); + + +/** Abstract MIDI Driver Class */  class MidiDriver {  public:  	virtual ~MidiDriver() { } -	// Error codes returned by open. -	// Can be converted to a string with getErrorName() +	/** +	 * Error codes returned by open. +	 * Can be converted to a string with getErrorName(). +	 */  	enum {  		MERR_CANNOT_CONNECT = 1,  //		MERR_STREAMING_NOT_AVAILABLE = 2, @@ -48,20 +88,22 @@ public:  		PROP_CHANNEL_MASK = 3  	}; -	// Open the midi driver. -	// Returns 0 if successful, otherwise an error code. +	/** +	 * Open the midi driver. +	 * @return 0 if successful, otherwise an error code. +	 */  	virtual int open() = 0; -	// Close the midi driver +	/** Close the midi driver. */  	virtual void close() = 0; -	// Output a packed midi command to the midi stream +	/** Output a packed midi command to the midi stream. */  	virtual void send(uint32 b) = 0; -	// Get or set a property +	/** Get or set a property. */  	virtual uint32 property(int prop, uint32 param) { return 0; } -	// Retrieve a string representation of an error code +	/** Retrieve a string representation of an error code. */  	static const char *getErrorName(int error_code);  	// HIGH-LEVEL SEMANTIC METHODS @@ -117,24 +159,6 @@ public:  	virtual void sysEx_customInstrument (uint32 type, byte *instr) = 0;  }; -// MIDI Driver Types -enum { -	MD_AUTO = 0, -	MD_NULL = 1, -	MD_WINDOWS = 2, -	MD_TIMIDITY = 3, -	MD_SEQ = 4, -	MD_QTMUSIC = 5, -	MD_ETUDE = 6, -	MD_COREAUDIO = 7, -	MD_MIDIEMU = 8, -	MD_ALSA = 9, -	MD_ADLIB = 10, -	MD_PCSPK = 11, -	MD_PCJR = 12, -	 -	MD_YPA1 = 100	// palmos -};  // Factory functions, for faster compile  extern MidiDriver *MidiDriver_NULL_create(); diff --git a/sound/module.mk b/sound/module.mk index 50072c0b5b..e0974162a5 100644 --- a/sound/module.mk +++ b/sound/module.mk @@ -3,6 +3,7 @@ MODULE := sound  MODULE_OBJS := \  	sound/audiostream.o \  	sound/fmopl.o \ +	sound/mididrv.o \  	sound/midiparser.o \  	sound/midiparser_smf.o \  	sound/midiparser_xmidi.o \ | 
