aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/posix/posix.cpp68
-rw-r--r--backends/platform/sdl/sdl.cpp222
-rw-r--r--backends/platform/sdl/sdl.h12
-rw-r--r--backends/platform/win32/win32.cpp69
-rw-r--r--backends/platform/win32/win32.h2
5 files changed, 51 insertions, 322 deletions
diff --git a/backends/platform/posix/posix.cpp b/backends/platform/posix/posix.cpp
index 8942ba1408..61871c7f82 100644
--- a/backends/platform/posix/posix.cpp
+++ b/backends/platform/posix/posix.cpp
@@ -31,7 +31,6 @@
#include "common/EventRecorder.h"
#include "backends/saves/posix/posix-saves.h"
-
#include "backends/audiocd/sdl/sdl-audiocd.h"
#include "backends/events/sdl/sdl-events.h"
#include "backends/mutex/sdl/sdl-mutex.h"
@@ -43,76 +42,17 @@
#define DEFAULT_CONFIG_FILE ".scummvmrc"
OSystem_POSIX::OSystem_POSIX() {
+ // Initialze File System Factory
_fsFactory = new POSIXFilesystemFactory();
}
-OSystem_POSIX::~OSystem_POSIX() {
- deinit();
-}
-
void OSystem_POSIX::initBackend() {
- assert(!_inited);
-
- uint32 sdlFlags = 0;
-
- if (ConfMan.hasKey("disable_sdl_parachute"))
- sdlFlags |= SDL_INIT_NOPARACHUTE;
-
- if (SDL_Init(sdlFlags) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
-
- // Enable unicode support if possible
- SDL_EnableUNICODE(1);
-
- // Create and hook up the mutex manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_mutexManager == 0) {
- _mutexManager = new SdlMutexManager();
- }
-
- // Create and hook up the event manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_eventManager == 0) {
- _eventManager = new SdlEventManager(this);
- }
-
- // Create the savefile manager, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_savefileManager == 0) {
+ // Create the savefile manager
+ if (_savefileManager == 0)
_savefileManager = new POSIXSaveFileManager();
- }
-
- // Create and hook up the mixer, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_mixer == 0) {
- if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
-
- _mixer = new SdlMixerImpl(this);
- }
-
- // Create and hook up the timer manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_timerManager == 0) {
- _timerManager = new SdlTimerManager();
- }
-
- // Create and hook up the graphics manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_graphicsManager == 0) {
- _graphicsManager = new SdlGraphicsManager();
- }
-
- if (_audiocdManager == 0) {
- _audiocdManager = (AudioCDManager *)new SdlAudioCDManager();
- }
// Invoke parent implementation of this method
- OSystem::initBackend();
-
- _inited = true;
+ OSystem_SDL::initBackend();
}
Common::String OSystem_POSIX::getDefaultConfigFileName() {
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 2c1ecd2f27..b3b99a2e3a 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -23,12 +23,6 @@
*
*/
-#if defined(WIN32)
-#include <windows.h>
-// winnt.h defines ARRAYSIZE, but we want our own one... - this is needed before including util.h
-#undef ARRAYSIZE
-#endif
-
#include "backends/platform/sdl/sdl.h"
#include "common/archive.h"
#include "common/config-manager.h"
@@ -36,11 +30,7 @@
#include "common/util.h"
#include "common/EventRecorder.h"
-#ifdef UNIX
- #include "backends/saves/posix/posix-saves.h"
-#else
- #include "backends/saves/default/default-saves.h"
-#endif
+#include "backends/saves/default/default-saves.h"
#include "backends/audiocd/sdl/sdl-audiocd.h"
#include "backends/events/sdl/sdl-events.h"
#include "backends/mutex/sdl/sdl-mutex.h"
@@ -49,129 +39,73 @@
#include "icons/scummvm.xpm"
-/*
- * Include header files needed for the getFilesystemFactory() method.
- */
-#if defined(__amigaos4__)
- #include "backends/fs/amigaos4/amigaos4-fs-factory.h"
-#elif defined(UNIX)
- #include "backends/fs/posix/posix-fs-factory.h"
-#elif defined(WIN32)
- #include "backends/fs/windows/windows-fs-factory.h"
-#endif
-
-#if defined(UNIX)
-#ifdef MACOSX
-#define DEFAULT_CONFIG_FILE "Library/Preferences/ScummVM Preferences"
-#elif defined(SAMSUNGTV)
-#define DEFAULT_CONFIG_FILE "/dtv/usb/sda1/.scummvmrc"
-#else
-#define DEFAULT_CONFIG_FILE ".scummvmrc"
-#endif
-#else
#define DEFAULT_CONFIG_FILE "scummvm.ini"
-#endif
-
-#if defined(MACOSX) || defined(IPHONE)
-#include "CoreFoundation/CoreFoundation.h"
-#endif
#include <time.h>
-void OSystem_SDL::initBackend() {
- assert(!_inited);
+OSystem_SDL::OSystem_SDL()
+ :
+ _inited(false),
+ _initedSDL(false) {
- uint32 sdlFlags = 0;
+}
- if (ConfMan.hasKey("disable_sdl_parachute"))
- sdlFlags |= SDL_INIT_NOPARACHUTE;
+OSystem_SDL::~OSystem_SDL() {
+ deinit();
+}
- if (SDL_Init(sdlFlags) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
+void OSystem_SDL::initBackend() {
+ // Check if backend has not been initialized
+ assert(!_inited);
- // Enable unicode support if possible
- SDL_EnableUNICODE(1);
+ // Initialize SDL
+ initSDL();
- // Create and hook up the mutex manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_mutexManager == 0) {
+ // Creates the backend managers, if they don't exist yet (we check
+ // for this to allow subclasses to provide their own).
+ if (_mutexManager == 0)
_mutexManager = new SdlMutexManager();
- }
- // Create and hook up the event manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_eventManager == 0) {
+ if (_eventManager == 0)
_eventManager = new SdlEventManager(this);
- }
- // Create the savefile manager, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_savefileManager == 0) {
-#ifdef UNIX
- _savefileManager = new POSIXSaveFileManager();
-#else
- _savefileManager = new DefaultSaveFileManager();
-#endif
- }
-
- // Create and hook up the mixer, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_mixer == 0) {
- if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
+ if (_savefileManager == 0)
+ _savefileManager = new DefaultSaveFileManager();
+ if (_mixer == 0)
_mixer = new SdlMixerImpl(this);
- }
- // Create and hook up the timer manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_timerManager == 0) {
+ if (_timerManager == 0)
_timerManager = new SdlTimerManager();
- }
- // Create and hook up the graphics manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_graphicsManager == 0) {
+ if (_graphicsManager == 0)
_graphicsManager = new SdlGraphicsManager();
- }
- if (_audiocdManager == 0) {
- _audiocdManager = (AudioCDManager *)new SdlAudioCDManager();
- }
+ if (_audiocdManager == 0)
+ _audiocdManager = new SdlAudioCDManager();
-#if !defined(MACOSX) && !defined(__SYMBIAN32__)
// Setup a custom program icon.
- // Don't set icon on OS X, as we use a nicer external icon there.
- // Don't for Symbian: it uses the EScummVM.aif file for the icon.
setupIcon();
-#endif
-
- // Invoke parent implementation of this method
- OSystem::initBackend();
_inited = true;
}
-OSystem_SDL::OSystem_SDL()
- :
- _inited(false) {
- #if defined(__amigaos4__)
- _fsFactory = new AmigaOSFilesystemFactory();
- #elif defined(UNIX)
- _fsFactory = new POSIXFilesystemFactory();
- #elif defined(WIN32)
- _fsFactory = new WindowsFilesystemFactory();
- #elif defined(__SYMBIAN32__)
- // Do nothing since its handled by the Symbian SDL inheritance
- #else
- #error Unknown and unsupported FS backend
- #endif
-}
+void OSystem_SDL::initSDL() {
+ // Check if SDL has not been initialized
+ if (!_initedSDL) {
+ uint32 sdlFlags = 0;
+ if (ConfMan.hasKey("disable_sdl_parachute"))
+ sdlFlags |= SDL_INIT_NOPARACHUTE;
-OSystem_SDL::~OSystem_SDL() {
- deinit();
+ // Initialize SDL (SDL Subsystems are initiliazed in the corresponding sdl managers)
+ if (SDL_Init(sdlFlags) == -1)
+ error("Could not initialize SDL: %s", SDL_GetError());
+
+ // Enable unicode support if possible
+ SDL_EnableUNICODE(1);
+
+ _initedSDL = true;
+ }
}
void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
@@ -185,86 +119,11 @@ void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority)
}
#endif
-#ifdef MACOSX
- // Get URL of the Resource directory of the .app bundle
- CFURLRef fileUrl = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
- if (fileUrl) {
- // Try to convert the URL to an absolute path
- UInt8 buf[MAXPATHLEN];
- if (CFURLGetFileSystemRepresentation(fileUrl, true, buf, sizeof(buf))) {
- // Success: Add it to the search path
- Common::String bundlePath((const char *)buf);
- s.add("__OSX_BUNDLE__", new Common::FSDirectory(bundlePath), priority);
- }
- CFRelease(fileUrl);
- }
-
-#endif
-
}
Common::String OSystem_SDL::getDefaultConfigFileName() {
char configFile[MAXPATHLEN];
-#if defined (WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
- OSVERSIONINFO win32OsVersion;
- ZeroMemory(&win32OsVersion, sizeof(OSVERSIONINFO));
- win32OsVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx(&win32OsVersion);
- // Check for non-9X version of Windows.
- if (win32OsVersion.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) {
- // Use the Application Data directory of the user profile.
- if (win32OsVersion.dwMajorVersion >= 5) {
- if (!GetEnvironmentVariable("APPDATA", configFile, sizeof(configFile)))
- error("Unable to access application data directory");
- } else {
- if (!GetEnvironmentVariable("USERPROFILE", configFile, sizeof(configFile)))
- error("Unable to access user profile directory");
-
- strcat(configFile, "\\Application Data");
- CreateDirectory(configFile, NULL);
- }
-
- strcat(configFile, "\\ScummVM");
- CreateDirectory(configFile, NULL);
- strcat(configFile, "\\" DEFAULT_CONFIG_FILE);
-
- FILE *tmp = NULL;
- if ((tmp = fopen(configFile, "r")) == NULL) {
- // Check windows directory
- char oldConfigFile[MAXPATHLEN];
- GetWindowsDirectory(oldConfigFile, MAXPATHLEN);
- strcat(oldConfigFile, "\\" DEFAULT_CONFIG_FILE);
- if ((tmp = fopen(oldConfigFile, "r"))) {
- strcpy(configFile, oldConfigFile);
-
- fclose(tmp);
- }
- } else {
- fclose(tmp);
- }
- } else {
- // Check windows directory
- GetWindowsDirectory(configFile, MAXPATHLEN);
- strcat(configFile, "\\" DEFAULT_CONFIG_FILE);
- }
-#elif defined(UNIX)
- // On UNIX type systems, by default we store the config file inside
- // to the HOME directory of the user.
- //
- // GP2X is Linux based but Home dir can be read only so do not use
- // it and put the config in the executable dir.
- //
- // On the iPhone, the home dir of the user when you launch the app
- // from the Springboard, is /. Which we don't want.
- const char *home = getenv("HOME");
- if (home != NULL && strlen(home) < MAXPATHLEN)
- snprintf(configFile, MAXPATHLEN, "%s/%s", home, DEFAULT_CONFIG_FILE);
- else
- strcpy(configFile, DEFAULT_CONFIG_FILE);
-#else
strcpy(configFile, DEFAULT_CONFIG_FILE);
-#endif
-
return configFile;
}
@@ -319,7 +178,6 @@ void OSystem_SDL::deinit() {
void OSystem_SDL::quit() {
deinit();
-
exit(0);
}
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index f5289edbe8..40fbcd9d37 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -42,12 +42,9 @@ public:
virtual void initBackend();
- // Define all hardware keys for keymapper
virtual Common::HardwareKeySet *getHardwareKeySet();
- // Quit
- virtual void quit(); // overloaded by CE backend
-
+ virtual void quit();
virtual void deinit();
virtual void setWindowCaption(const char *caption);
@@ -56,7 +53,7 @@ public:
virtual Common::SeekableReadStream *createConfigReadStream();
virtual Common::WriteStream *createConfigWriteStream();
- SdlGraphicsManager *getGraphicsManager();
+ virtual SdlGraphicsManager *getGraphicsManager();
virtual bool pollEvent(Common::Event &event);
@@ -66,8 +63,11 @@ public:
protected:
bool _inited;
+ bool _initedSDL;
+
+ virtual void initSDL();
- void setupIcon();
+ virtual void setupIcon();
virtual Common::String getDefaultConfigFileName();
};
diff --git a/backends/platform/win32/win32.cpp b/backends/platform/win32/win32.cpp
index 59b960439a..2e039a6059 100644
--- a/backends/platform/win32/win32.cpp
+++ b/backends/platform/win32/win32.cpp
@@ -45,77 +45,10 @@
#define DEFAULT_CONFIG_FILE "scummvm.ini"
OSystem_Win32::OSystem_Win32() {
+ // Initialze File System Factory
_fsFactory = new WindowsFilesystemFactory();
}
-void OSystem_Win32::initBackend() {
- assert(!_inited);
-
- uint32 sdlFlags = 0;
-
- if (ConfMan.hasKey("disable_sdl_parachute"))
- sdlFlags |= SDL_INIT_NOPARACHUTE;
-
- if (SDL_Init(sdlFlags) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
-
- // Enable unicode support if possible
- SDL_EnableUNICODE(1);
-
- // Create and hook up the mutex manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_mutexManager == 0) {
- _mutexManager = new SdlMutexManager();
- }
-
- // Create and hook up the event manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_eventManager == 0) {
- _eventManager = new SdlEventManager(this);
- }
-
- // Create the savefile manager, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_savefileManager == 0) {
- _savefileManager = new DefaultSaveFileManager();
- }
-
- // Create and hook up the mixer, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_mixer == 0) {
- if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
-
- _mixer = new SdlMixerImpl(this);
- }
-
- // Create and hook up the timer manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_timerManager == 0) {
- _timerManager = new SdlTimerManager();
- }
-
- // Create and hook up the graphics manager, if none exists yet (we check for
- // this to allow subclasses to provide their own).
- if (_graphicsManager == 0) {
- _graphicsManager = new SdlGraphicsManager();
- }
-
- if (_audiocdManager == 0) {
- _audiocdManager = (AudioCDManager *)new SdlAudioCDManager();
- }
-
- // Setup a custom program icon.
- setupIcon();
-
- // Invoke parent implementation of this method
- OSystem::initBackend();
-
- _inited = true;
-}
-
Common::String OSystem_Win32::getDefaultConfigFileName() {
char configFile[MAXPATHLEN];
diff --git a/backends/platform/win32/win32.h b/backends/platform/win32/win32.h
index 95d41778f2..2bcb0c59b3 100644
--- a/backends/platform/win32/win32.h
+++ b/backends/platform/win32/win32.h
@@ -33,8 +33,6 @@ public:
OSystem_Win32();
~OSystem_Win32() {}
- void initBackend();
-
protected:
Common::String getDefaultConfigFileName();
};