aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/platform/iphone/osys_iphone.cpp45
-rw-r--r--backends/platform/iphone/osys_iphone.h15
-rw-r--r--base/commandLine.cpp10
-rw-r--r--common/config-manager.cpp6
4 files changed, 68 insertions, 8 deletions
diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp
index 5bbb1b4ca9..3365c2da9d 100644
--- a/backends/platform/iphone/osys_iphone.cpp
+++ b/backends/platform/iphone/osys_iphone.cpp
@@ -27,15 +27,14 @@
#include <CoreGraphics/CGDirectDisplay.h>
#include <CoreSurface/CoreSurface.h>
-#include <AudioToolbox/AudioQueue.h>
#include <unistd.h>
#include <pthread.h>
-#include "common/system.h"
#include "common/scummsys.h"
#include "common/util.h"
#include "common/rect.h"
-#include "common/events.h"
+#include "common/file.h"
+#include "common/fs.h"
#include "base/main.h"
@@ -54,6 +53,7 @@ const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = {
AQCallbackStruct OSystem_IPHONE::s_AudioQueue;
SoundProc OSystem_IPHONE::s_soundCallback = NULL;
void *OSystem_IPHONE::s_soundParam = NULL;
+bool OSystem_IPHONE::s_is113OrHigher = false;
OSystem_IPHONE::OSystem_IPHONE() :
_savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL),
@@ -1172,8 +1172,47 @@ OSystem *OSystem_IPHONE_create() {
return new OSystem_IPHONE();
}
+const char* OSystem_IPHONE::getConfigPath() {
+ if (s_is113OrHigher)
+ return SCUMMVM_PREFS_PATH;
+ else
+ return SCUMMVM_OLD_PREFS_PATH;
+}
+
+const char* OSystem_IPHONE::getSavePath() {
+ if (s_is113OrHigher)
+ return SCUMMVM_SAVE_PATH;
+ else
+ return SCUMMVM_OLD_SAVE_PATH;
+}
+
+void OSystem_IPHONE::migrateApp() {
+ // Migrate to the new 1.1.3 directory structure, if needed.
+
+ FilesystemNode file("/var/mobile");
+ if (file.exists() && file.isDirectory()) {
+ // We have 1.1.3 or above.
+ s_is113OrHigher = true;
+ file = FilesystemNode(SCUMMVM_ROOT_PATH);
+ if (!file.exists()) {
+ system("mkdir " SCUMMVM_ROOT_PATH);
+ system("mkdir " SCUMMVM_SAVE_PATH);
+
+ // Copy over the prefs file
+ system("cp " SCUMMVM_OLD_PREFS_PATH " " SCUMMVM_PREFS_PATH);
+
+ file = FilesystemNode(SCUMMVM_OLD_SAVE_PATH);
+ // Copy over old savegames to the new directory.
+ if (file.exists() && file.isDirectory())
+ system("cp " SCUMMVM_OLD_SAVE_PATH "/* " SCUMMVM_SAVE_PATH "/");
+ }
+ }
+}
+
void iphone_main(int argc, char *argv[]) {
+ OSystem_IPHONE::migrateApp();
+
// Redirect stdout and stderr if we're launching from the Springboard.
if (argc == 2 && strcmp(argv[1], "--launchedFromSB") == 0) {
FILE *newfp = fopen("/tmp/scummvm.log", "a");
diff --git a/backends/platform/iphone/osys_iphone.h b/backends/platform/iphone/osys_iphone.h
index eeb8504680..71272b73fe 100644
--- a/backends/platform/iphone/osys_iphone.h
+++ b/backends/platform/iphone/osys_iphone.h
@@ -27,11 +27,21 @@
#include "graphics/surface.h"
#include "iphone_common.h"
+#include "common/system.h"
+#include "common/events.h"
+
+#include <AudioToolbox/AudioQueue.h>
#define AUDIO_BUFFERS 3
#define WAVE_BUFFER_SIZE 8192
#define AUDIO_SAMPLE_RATE 44100
+#define SCUMMVM_ROOT_PATH "/var/mobile/Library/ScummVM"
+#define SCUMMVM_SAVE_PATH SCUMMVM_ROOT_PATH "/Savegames"
+#define SCUMMVM_OLD_SAVE_PATH "/var/root/.scummvm"
+#define SCUMMVM_PREFS_PATH SCUMMVM_ROOT_PATH "/Preferences"
+#define SCUMMVM_OLD_PREFS_PATH "/var/root/.scummvmrc"
+
typedef void (*SoundProc)(void *param, byte *buf, int len);
typedef int (*TimerProc)(int interval);
@@ -49,6 +59,7 @@ protected:
static AQCallbackStruct s_AudioQueue;
static SoundProc s_soundCallback;
static void *s_soundParam;
+ static bool s_is113OrHigher;
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
@@ -154,6 +165,10 @@ public:
virtual Audio::Mixer *getMixer();
virtual Common::TimerManager *getTimerManager();
+ static void migrateApp();
+ static const char* getConfigPath();
+ static const char* getSavePath();
+
protected:
inline void addDirtyRect(int16 x1, int16 y1, int16 w, int16 h);
void internUpdateScreen();
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index da8356acff..856ac9e173 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -35,6 +35,10 @@
#include "sound/mididrv.h"
#include "sound/mixer.h"
+#ifdef IPHONE
+#include "backends/platform/iphone/osys_iphone.h"
+#endif
+
#ifdef UNIX
#ifdef MACOSX
#define DEFAULT_SAVE_PATH "Documents/ScummVM Savegames"
@@ -224,10 +228,8 @@ void registerDefaults() {
strcpy(savePath, Symbian::GetExecutablePath());
strcat(savePath, DEFAULT_SAVE_PATH);
ConfMan.registerDefault("savepath", savePath);
-#elif defined (IPHONE) // The iphone has / set as home dir when launching from the Springboard.
- strcpy(savePath, "/var/root/");
- strcat(savePath, DEFAULT_SAVE_PATH);
- ConfMan.registerDefault("savepath", savePath);
+#elif defined (IPHONE)
+ ConfMan.registerDefault("savepath", OSystem_IPHONE::getSavePath());
#endif
#endif // #ifdef DEFAULT_SAVE_PATH
diff --git a/common/config-manager.cpp b/common/config-manager.cpp
index ef2a01bba6..0f3bc51579 100644
--- a/common/config-manager.cpp
+++ b/common/config-manager.cpp
@@ -39,6 +39,10 @@ DECLARE_SINGLETON(Common::ConfigManager);
#include "backends/platform/ps2/systemps2.h"
#endif
+#ifdef IPHONE
+#include "backends/platform/iphone/osys_iphone.h"
+#endif
+
#if defined(UNIX)
#ifdef MACOSX
#define DEFAULT_CONFIG_FILE "Library/Preferences/ScummVM Preferences"
@@ -138,7 +142,7 @@ void ConfigManager::loadDefaultConfigFile() {
#elif defined(PALMOS_MODE)
strcpy(configFile,"/PALM/Programs/ScummVM/" DEFAULT_CONFIG_FILE);
#elif defined(IPHONE)
- strcpy(configFile,"/var/root/" DEFAULT_CONFIG_FILE);
+ strcpy(configFile, OSystem_IPHONE::getConfigPath());
#elif defined(__PLAYSTATION2__)
((OSystem_PS2*)g_system)->makeConfigPath(configFile);
#elif defined(__PSP__)