summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debug.c2
-rw-r--r--debug.h1
-rw-r--r--driver.c121
-rw-r--r--functions.h1
-rw-r--r--hal.h1
-rw-r--r--os2.c43
-rw-r--r--unix.c58
-rw-r--r--video/dedicated_v.c6
-rw-r--r--video/sdl_v.c4
-rw-r--r--win32.c81
10 files changed, 104 insertions, 214 deletions
diff --git a/debug.c b/debug.c
index 3b32e4f0e..c97e5f0a3 100644
--- a/debug.c
+++ b/debug.c
@@ -10,6 +10,7 @@
#include "string.h"
int _debug_ai_level;
+int _debug_driver_level;
int _debug_grf_level;
int _debug_map_level;
int _debug_misc_level;
@@ -45,6 +46,7 @@ typedef struct DebugLevel {
#define DEBUG_LEVEL(x) { #x, &_debug_##x##_level }
static const DebugLevel debug_level[] = {
DEBUG_LEVEL(ai),
+ DEBUG_LEVEL(driver),
DEBUG_LEVEL(grf),
DEBUG_LEVEL(map),
DEBUG_LEVEL(misc),
diff --git a/debug.h b/debug.h
index 4f46b1af0..b89722685 100644
--- a/debug.h
+++ b/debug.h
@@ -9,6 +9,7 @@
#define DEBUG(name, level) if (level == 0 || _debug_ ## name ## _level >= level) debug
extern int _debug_ai_level;
+ extern int _debug_driver_level;
extern int _debug_grf_level;
extern int _debug_map_level;
extern int _debug_misc_level;
diff --git a/driver.c b/driver.c
index 81f572f8f..8fa816288 100644
--- a/driver.c
+++ b/driver.c
@@ -2,11 +2,28 @@
#include "stdafx.h"
#include "openttd.h"
+#include "debug.h"
#include "driver.h"
#include "functions.h"
#include "hal.h"
#include "string.h"
+#include "music/bemidi.h"
+#include "music/dmusic.h"
+#include "music/extmidi.h"
+#include "music/null_m.h"
+#include "music/os2_m.h"
+#include "music/win32_m.h"
+
+#include "sound/null_s.h"
+#include "sound/sdl_s.h"
+#include "sound/win32_s.h"
+
+#include "video/dedicated_v.h"
+#include "video/null_v.h"
+#include "video/sdl_v.h"
+#include "video/win32_v.h"
+
typedef struct {
const DriverDesc *descs;
const char *name;
@@ -31,21 +48,6 @@ static const DriverDesc* GetDriverByName(const DriverDesc* dd, const char* name)
return NULL;
}
-static const DriverDesc* ChooseDefaultDriver(const DriverDesc* dd)
-{
- byte os_version = GetOSVersion();
- const DriverDesc *best = NULL;
- int best_pri = -1;
-
- for (; dd->name != NULL; dd++) {
- if ((int)(dd->flags & DF_PRIORITY_MASK) > best_pri && os_version >= (byte)dd->flags) {
- best_pri = dd->flags & DF_PRIORITY_MASK;
- best = dd;
- }
- }
- return best;
-}
-
void LoadDriver(int driver, const char *name)
{
const DriverClass *dc = &_driver_classes[driver];
@@ -59,8 +61,23 @@ void LoadDriver(int driver, const char *name)
parms[0] = NULL;
- if (!*name) {
- dd = ChooseDefaultDriver(dc->descs);
+ if (*name == '\0') {
+ for (dd = dc->descs; dd->name != NULL; dd++) {
+ err = ((const HalCommonDriver*)dd->drv)->start(parms);
+ if (err == NULL) break;
+ DEBUG(driver, 1) ("Probing %s driver \"%s\" failed with error: %s",
+ dc->name, dd->name, err
+ );
+ }
+ if (dd->name == NULL) {
+ error("Couldn't find any suitable %s driver", dc->name);
+ }
+
+ DEBUG(driver, 1)
+ ("Successfully probed %s driver \"%s\"", dc->name, dd->name);
+
+ var = dc->var;
+ *var = dd->drv;
} else {
// Extract the driver name and put parameter list in parm
ttd_strlcpy(buffer, name, sizeof(buffer));
@@ -80,16 +97,20 @@ void LoadDriver(int driver, const char *name)
dd = GetDriverByName(dc->descs, buffer);
if (dd == NULL)
error("No such %s driver: %s\n", dc->name, buffer);
+
+ var = dc->var;
+ if (*var != NULL) ((const HalCommonDriver*)*var)->stop();
+ *var = NULL;
+ drv = dd->drv;
+
+ err = ((const HalCommonDriver*)drv)->start(parms);
+ if (err != NULL) {
+ error("Unable to load driver %s(%s). The error was: %s\n",
+ dd->name, dd->longname, err
+ );
+ }
+ *var = drv;
}
- var = dc->var;
- if (*var != NULL) ((const HalCommonDriver*)*var)->stop();
- *var = NULL;
- drv = dd->drv;
-
- err = ((const HalCommonDriver*)drv)->start(parms);
- if (err != NULL)
- error("Unable to load driver %s(%s). The error was: %s\n", dd->name, dd->longname, err);
- *var = drv;
}
@@ -133,3 +154,51 @@ void GetDriverList(char* p)
}
}
}
+
+
+const DriverDesc _music_driver_descs[] = {
+#ifdef __BEOS__
+ { "bemidi", "BeOS MIDI Driver", &_bemidi_music_driver },
+#endif
+#ifdef __OS2__
+ { "os2", "OS/2 Music Driver", &_os2_music_driver},
+#endif
+#ifdef WIN32_ENABLE_DIRECTMUSIC_SUPPORT
+ { "dmusic", "DirectMusic MIDI Driver", &_dmusic_midi_driver },
+#endif
+#ifdef WIN32
+ { "win32", "Win32 MIDI Driver", &_win32_music_driver },
+#endif
+#ifdef UNIX
+#if !defined(__BEOS__) && !defined(__MORPHOS__) && !defined(__AMIGA__)
+ { "extmidi", "External MIDI Driver", &_extmidi_music_driver },
+#endif
+#endif
+ { "null", "Null Music Driver", &_null_music_driver },
+ { NULL, NULL, NULL}
+};
+
+const DriverDesc _sound_driver_descs[] = {
+#ifdef WIN32
+ { "win32", "Win32 WaveOut Driver", &_win32_sound_driver },
+#endif
+#ifdef WITH_SDL
+ { "sdl", "SDL Sound Driver", &_sdl_sound_driver },
+#endif
+ { "null", "Null Sound Driver", &_null_sound_driver },
+ { NULL, NULL, NULL}
+};
+
+const DriverDesc _video_driver_descs[] = {
+#ifdef WIN32
+ { "win32", "Win32 GDI Video Driver", &_win32_video_driver },
+#endif
+#ifdef WITH_SDL
+ { "sdl", "SDL Video Driver", &_sdl_video_driver },
+#endif
+ { "null", "Null Video Driver", &_null_video_driver},
+#ifdef ENABLE_NETWORK
+ { "dedicated", "Dedicated Video Driver", &_dedicated_video_driver},
+#endif
+ { NULL, NULL, NULL}
+};
diff --git a/functions.h b/functions.h
index 34e667fd5..8a0fa4897 100644
--- a/functions.h
+++ b/functions.h
@@ -273,7 +273,6 @@ void LoadFromConfig(void);
void SaveToConfig(void);
void CheckConfig(void);
int ttd_main(int argc, char* argv[]);
-byte GetOSVersion(void);
void DeterminePaths(void);
char * CDECL str_fmt(const char *str, ...);
diff --git a/hal.h b/hal.h
index ae7e2b4b0..ac75a3ebf 100644
--- a/hal.h
+++ b/hal.h
@@ -41,7 +41,6 @@ typedef struct {
const char *name;
const char *longname;
const void *drv;
- uint32 flags;
} DriverDesc;
enum {
diff --git a/os2.c b/os2.c
index 2d33ca593..c942672f4 100644
--- a/os2.c
+++ b/os2.c
@@ -2,6 +2,7 @@
#include "stdafx.h"
#include "openttd.h"
+#include "hal.h"
#include "variables.h"
#include "string.h"
#include "table/strings.h"
@@ -28,16 +29,6 @@
#include <i86.h>
-#include "sound/null_s.h"
-#include "sound/sdl_s.h"
-
-#include "video/dedicated_v.h"
-#include "video/null_v.h"
-#include "video/sdl_v.h"
-
-#include "music/null_m.h"
-#include "music/os2_m.h"
-
static inline int strcasecmp(const char* s1, const char* s2)
{
return stricmp(s1, s2);
@@ -432,38 +423,6 @@ void FiosDelete(const char *name)
unlink(path);
}
-const DriverDesc _video_driver_descs[] = {
- { "null", "Null Video Driver", &_null_video_driver, 0},
-#if defined(WITH_SDL)
- { "sdl", "SDL Video Driver", &_sdl_video_driver, 1},
-#endif
-#ifdef ENABLE_NETWORK
- { "dedicated", "Dedicated Video Driver", &_dedicated_video_driver, 0},
-#endif
- { NULL, NULL, NULL, 0}
-};
-
-const DriverDesc _sound_driver_descs[] = {
- { "null", "Null Sound Driver", &_null_sound_driver, 0},
-#if defined(WITH_SDL)
- { "sdl", "SDL Sound Driver", &_sdl_sound_driver, 1},
-#endif
- { NULL, NULL, NULL, 0}
-};
-
-const DriverDesc _music_driver_descs[] = {
- { "os2", "OS/2 Music Driver", &_os2_music_driver, 0},
- { "null", "Null Music Driver", &_null_music_driver, 1},
- { NULL, NULL, NULL, 0}
-};
-
-/* GetOSVersion returns the minimal required version of OS to be able to use that driver.
- Not needed for OS/2. */
-byte GetOSVersion(void)
-{
- return 2; // any arbitrary number bigger then 0
-}
-
bool FileExists(const char *filename)
{
return access(filename, 0) == 0;
diff --git a/unix.c b/unix.c
index 51ed2d1e1..1a6104a40 100644
--- a/unix.c
+++ b/unix.c
@@ -9,17 +9,6 @@
#include "hal.h"
#include "variables.h"
-#include "music/bemidi.h"
-#include "music/extmidi.h"
-#include "music/null_m.h"
-
-#include "sound/null_s.h"
-#include "sound/sdl_s.h"
-
-#include "video/dedicated_v.h"
-#include "video/null_v.h"
-#include "video/sdl_v.h"
-
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
@@ -369,53 +358,6 @@ void FiosDelete(const char *name)
unlink(path);
}
-const DriverDesc _video_driver_descs[] = {
- {"null", "Null Video Driver", &_null_video_driver, 0},
-#if defined(WITH_SDL)
- { "sdl", "SDL Video Driver", &_sdl_video_driver, 1},
-#endif
-#ifdef ENABLE_NETWORK
- { "dedicated", "Dedicated Video Driver", &_dedicated_video_driver, 0},
-#endif
- { NULL, NULL, NULL, 0}
-};
-
-const DriverDesc _sound_driver_descs[] = {
- {"null", "Null Sound Driver", &_null_sound_driver, 0},
-#if defined(WITH_SDL)
- { "sdl", "SDL Sound Driver", &_sdl_sound_driver, 1},
-#endif
- { NULL, NULL, NULL, 0}
-};
-
-#if defined(__APPLE__)
-#define EXTMIDI_PRI 2
-#else
-#define EXTMIDI_PRI 0
-#endif
-
-const DriverDesc _music_driver_descs[] = {
-#ifndef __BEOS__
-#if !defined(__MORPHOS__) && !defined(__AMIGA__)
-// MorphOS and AmigaOS have no music support
- {"extmidi", "External MIDI Driver", &_extmidi_music_driver, EXTMIDI_PRI},
-#endif
-#endif
-#ifdef __BEOS__
- { "bemidi", "BeOS MIDI Driver", &_bemidi_music_driver, 1},
-#endif
- { "null", "Null Music Driver", &_null_music_driver, 1},
- { NULL, NULL, NULL, 0}
-};
-
-/* GetOSVersion returns the minimal required version of OS to be able to use that driver.
- Not needed for *nix. */
-byte GetOSVersion(void)
-{
- return 2; // any arbitrary number bigger than 0
- // numbers lower than 2 breaks default music selection on mac
-}
-
bool FileExists(const char *filename)
{
return access(filename, 0) == 0;
diff --git a/video/dedicated_v.c b/video/dedicated_v.c
index e0408c9bf..e15922e0c 100644
--- a/video/dedicated_v.c
+++ b/video/dedicated_v.c
@@ -86,14 +86,14 @@ static void CreateWindowsConsoleThread(void)
if (hThread == NULL)
error("Cannot create console thread!");
- DEBUG(misc, 0) ("Windows console thread started...");
+ DEBUG(driver, 1) ("Windows console thread started...");
}
static void CloseWindowsConsoleThread(void)
{
CloseHandle(hThread);
CloseHandle(hEvent);
- DEBUG(misc, 0) ("Windows console thread shut down...");
+ DEBUG(driver, 1) ("Windows console thread shut down...");
}
#endif
@@ -126,7 +126,7 @@ static const char *DedicatedVideoStart(const char * const *parm)
OS2_SwitchToConsoleMode();
#endif
- DEBUG(misc,0)("Loading dedicated server...");
+ DEBUG(driver, 1)("Loading dedicated server...");
return NULL;
}
diff --git a/video/sdl_v.c b/video/sdl_v.c
index 4e7b36ab1..2c7aa8ad7 100644
--- a/video/sdl_v.c
+++ b/video/sdl_v.c
@@ -169,7 +169,7 @@ static bool CreateMainSurface(int w, int h)
GetAvailableVideoMode(&w, &h);
- DEBUG(misc, 1) ("sdl: using mode %dx%d", w, h);
+ DEBUG(driver, 1) ("sdl: using mode %dx%d", w, h);
// DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK
newscreen = SDL_CALL SDL_SetVideoMode(w, h, 8, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
@@ -385,7 +385,7 @@ static const char *SdlVideoStart(const char * const *parm)
if (s != NULL) return s;
SDL_CALL SDL_VideoDriverName(buf, 30);
- DEBUG(misc, 1) ("sdl: using driver '%s'", buf);
+ DEBUG(driver, 1) ("sdl: using driver '%s'", buf);
GetVideoModes();
CreateMainSurface(_cur_resolution[0], _cur_resolution[1]);
diff --git a/win32.c b/win32.c
index 18b268b15..b14955a5b 100644
--- a/win32.c
+++ b/win32.c
@@ -17,20 +17,6 @@
#include <fcntl.h>
#include "variables.h"
#include "win32.h"
-
-#include "driver.h"
-
-#include "music/dmusic.h"
-#include "music/null_m.h"
-#include "music/win32_m.h"
-
-#include "sound/null_s.h"
-#include "sound/sdl_s.h"
-#include "sound/win32_s.h"
-
-#include "video/dedicated_v.h"
-#include "video/null_v.h"
-#include "video/sdl_v.h"
#include "video/win32_v.h"
static bool _has_console;
@@ -933,73 +919,6 @@ void FiosDelete(const char *name)
DeleteFile(path);
}
-#define Windows_2000 5
-#define Windows_NT3_51 4
-
-/* flags show the minimum required OS to use a given feature. Currently
- only dwMajorVersion and dwMinorVersion (WindowsME) are used
- MajorVersion MinorVersion
- Windows Server 2003 5 2 dmusic
- Windows XP 5 1 dmusic
- Windows 2000 5 0 dmusic
- Windows NT 4.0 4 0 win32
- Windows Me 4 90 dmusic
- Windows 98 4 10 win32
- Windows 95 4 0 win32
- Windows NT 3.51 3 51 ?????
-*/
-
-const DriverDesc _video_driver_descs[] = {
- {"null", "Null Video Driver", &_null_video_driver, 0},
-#if defined(WITH_SDL)
- {"sdl", "SDL Video Driver", &_sdl_video_driver, 1},
-#endif
- {"win32", "Win32 GDI Video Driver", &_win32_video_driver, Windows_NT3_51},
-#ifdef ENABLE_NETWORK
- { "dedicated", "Dedicated Video Driver", &_dedicated_video_driver, 0},
-#endif
- { NULL, NULL, NULL, 0 }
-};
-
-const DriverDesc _sound_driver_descs[] = {
- {"null", "Null Sound Driver", &_null_sound_driver, 0},
-#if defined(WITH_SDL)
- {"sdl", "SDL Sound Driver", &_sdl_sound_driver, 1},
-#endif
- {"win32", "Win32 WaveOut Driver", &_win32_sound_driver, Windows_NT3_51},
- { NULL, NULL, NULL, 0 }
-};
-
-const DriverDesc _music_driver_descs[] = {
- {"null", "Null Music Driver", &_null_music_driver, 0},
-#ifdef WIN32_ENABLE_DIRECTMUSIC_SUPPORT
- {"dmusic", "DirectMusic MIDI Driver", &_dmusic_midi_driver, Windows_2000},
-#endif
- // Win32 MIDI driver has higher priority than DMusic, so this one is chosen
- {"win32", "Win32 MIDI Driver", &_win32_music_driver, Windows_NT3_51},
- { NULL, NULL, NULL, 0 }
-};
-
-byte GetOSVersion(void)
-{
- OSVERSIONINFO osvi;
-
- ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- if (GetVersionEx(&osvi)) {
- DEBUG(misc, 2) ("Windows Version is %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
- // WinME needs directmusic too (dmusic, Windows_2000 mode), all others default to OK
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) { return Windows_2000;} // WinME
-
- return osvi.dwMajorVersion;
- }
-
- // GetVersionEx failed, but we can safely assume at least Win95/WinNT3.51 is used
- DEBUG(misc, 0) ("Windows version retrieval failed, defaulting to level 4");
- return Windows_NT3_51;
-}
-
bool FileExists(const char *filename)
{
HANDLE hand = CreateFile(filename, 0, 0, NULL, OPEN_EXISTING, 0, NULL);