aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Willis2009-06-06 16:52:45 +0000
committerJohn Willis2009-06-06 16:52:45 +0000
commitc2a6ae1db3dae0b8d67bda36af71aab41c47f693 (patch)
tree9ab77eee877fd6e6faa9ee3b2230d429664b0140
parentba134a51582e4c7d7ec33cd65027245e056822b0 (diff)
downloadscummvm-rg350-c2a6ae1db3dae0b8d67bda36af71aab41c47f693.tar.gz
scummvm-rg350-c2a6ae1db3dae0b8d67bda36af71aab41c47f693.tar.bz2
scummvm-rg350-c2a6ae1db3dae0b8d67bda36af71aab41c47f693.zip
GP2X: Small cleanup of control code and start to work on virtual keyboard support for the backend.
svn-id: r41230
-rwxr-xr-xbackends/platform/gp2x/build/bundle.sh1
-rwxr-xr-xbackends/platform/gp2x/build/config-alleng.sh23
-rwxr-xr-xbackends/platform/gp2x/build/config.sh4
-rw-r--r--backends/platform/gp2x/events.cpp184
-rw-r--r--backends/platform/gp2x/gp2x-hw.h23
-rw-r--r--backends/platform/gp2x/gp2x.cpp109
6 files changed, 163 insertions, 181 deletions
diff --git a/backends/platform/gp2x/build/bundle.sh b/backends/platform/gp2x/build/bundle.sh
index 8d48dcfb06..776e5bb649 100755
--- a/backends/platform/gp2x/build/bundle.sh
+++ b/backends/platform/gp2x/build/bundle.sh
@@ -28,6 +28,7 @@ cp ../../../../COPYING ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../COPYRIGHT ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../NEWS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../gui/themes/scummmodern.zip ./scummvm-gp2x-`date '+%Y-%m-%d'`/
+cp ../../../../backends/vkeybd/vkeybd.zip ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../dists/pred.dic ./scummvm-gp2x-`date '+%Y-%m-%d'`/
cp ../../../../dists/engine-data/* ./scummvm-gp2x-`date '+%Y-%m-%d'`/engine-data
diff --git a/backends/platform/gp2x/build/config-alleng.sh b/backends/platform/gp2x/build/config-alleng.sh
new file mode 100755
index 0000000000..5724f39dc5
--- /dev/null
+++ b/backends/platform/gp2x/build/config-alleng.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+echo Quick script to make running configure all the time less painful
+echo and let all the build work be done from the backend/build folder.
+
+# Set the paths up here to generate the config.
+
+PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/bin:$PATH
+PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin:$PATH
+
+# Export the tool names for cross-compiling
+export CXX=arm-open2x-linux-g++
+export CXXFLAGS=-march=armv4t
+export CPPFLAGS=-I/opt/open2x/gcc-4.1.1-glibc-2.3.6/include
+export LDFLAGS=-L/opt/open2x/gcc-4.1.1-glibc-2.3.6/lib
+export DEFINES=-DNDEBUG
+
+# Edit the configure line to suit.
+cd ../../../..
+./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-all-engines --enable-vkeybd
+# --enable-plugins --default-dynamic
+
+echo Generating config for GP2X complete. Check for errors.
diff --git a/backends/platform/gp2x/build/config.sh b/backends/platform/gp2x/build/config.sh
index 17083d1ea4..55954d6231 100755
--- a/backends/platform/gp2x/build/config.sh
+++ b/backends/platform/gp2x/build/config.sh
@@ -17,7 +17,7 @@ export DEFINES=-DNDEBUG
# Edit the configure line to suit.
cd ../../../..
-./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-made --enable-m4
-#--enable-plugins --default-dynamic
+./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-vkeybd
+# --enable-plugins --default-dynamic
echo Generating config for GP2X complete. Check for errors.
diff --git a/backends/platform/gp2x/events.cpp b/backends/platform/gp2x/events.cpp
index 1c0fb398db..9a9a59765d 100644
--- a/backends/platform/gp2x/events.cpp
+++ b/backends/platform/gp2x/events.cpp
@@ -38,33 +38,33 @@
// we should really allow users to map any key to a joystick button
#define JOY_DEADZONE 2200
-// #define JOY_INVERT_Y
#define JOY_XAXIS 0
#define JOY_YAXIS 1
-// GP2X Stick Buttons (Note: The Stick is read as a set of buttons not a HAT type of setup).
-#define JOY_BUT_LMOUSE 0x0D
-#define JOY_BUT_RMOUSE 0x0E
-
-#define JOY_BUT_RETURN 0x08
-#define JOY_BUT_ESCAPE 0x09
-#define JOY_BUT_F5 0x0B
-#define JOY_BUT_SPACE 0x0F
-#define JOY_BUT_TALKUP 0x10
-#define JOY_BUT_TALKDN 0x11
-#define JOY_BUT_ZERO 0x12
-
-#define JOY_BUT_COMB 0x0A
-#define JOY_BUT_EXIT 0x12
-#define JOY_BUT_PERIOD 0x0C
-
-
-//TODO: Quick hack 101 ;-) Clean this up,
-#define TRUE 1
-#define FALSE 0
-
-static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
-{
+/* GP2X Wiz: Main Joystick Mappings */
+enum {
+ GP2X_BUTTON_UP = 0,
+ GP2X_BUTTON_UPLEFT = 1,
+ GP2X_BUTTON_LEFT = 2,
+ GP2X_BUTTON_DOWNLEFT = 3,
+ GP2X_BUTTON_DOWN = 4,
+ GP2X_BUTTON_DOWNRIGHT = 5,
+ GP2X_BUTTON_RIGHT = 6,
+ GP2X_BUTTON_UPRIGHT = 7,
+ GP2X_BUTTON_START = 8,
+ GP2X_BUTTON_SELECT = 9,
+ GP2X_BUTTON_L = 10,
+ GP2X_BUTTON_R = 11,
+ GP2X_BUTTON_A = 12,
+ GP2X_BUTTON_B = 13,
+ GP2X_BUTTON_X = 14,
+ GP2X_BUTTON_Y = 15,
+ GP2X_BUTTON_VOLUP = 16,
+ GP2X_BUTTON_VOLDOWN = 17,
+ GP2X_BUTTON_CLICK = 18
+};
+
+static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
if (key >= SDLK_F1 && key <= SDLK_F9) {
return key - SDLK_F1 + Common::ASCII_F1;
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
@@ -197,10 +197,9 @@ void OSystem_GP2X::moveStick() {
if (_km.x_down_count!=2){
_km.x_vel = 1;
_km.x_down_count = 1;
- }else
+ } else
_km.x_vel = 4;
- }
- else{
+ } else {
_km.x_vel = 0;
_km.x_down_count = 0;
}
@@ -216,36 +215,16 @@ void OSystem_GP2X::moveStick() {
if (_km.y_down_count!=2){
_km.y_vel = 1;
_km.y_down_count = 1;
- }else
+ } else
_km.y_vel = 4;
- }
- else{
+ } else {
_km.y_vel = 0;
_km.y_down_count = 0;
}
}
- //Quick default button states for modifier.
-
- //int GP2X_BUTTON_STATE_UP = FALSE;
- //int GP2X_BUTTON_STATE_DOWN = FALSE;
- //int GP2X_BUTTON_STATE_LEFT = FALSE;
- //int GP2X_BUTTON_STATE_RIGHT = FALSE;
- //int GP2X_BUTTON_STATE_UPLEFT = FALSE;
- //int GP2X_BUTTON_STATE_UPRIGHT = FALSE;
- //int GP2X_BUTTON_STATE_DOWNLEFT = FALSE;
- //int GP2X_BUTTON_STATE_DOWNRIGHT = FALSE;
- //int GP2X_BUTTON_STATE_CLICK = FALSE;
- //int GP2X_BUTTON_STATE_A = FALSE;
- //int GP2X_BUTTON_STATE_B = FALSE;
- //int GP2X_BUTTON_STATE_Y = FALSE;
- //int GP2X_BUTTON_STATE_X = FALSE;
- int GP2X_BUTTON_STATE_L = FALSE;
- //int GP2X_BUTTON_STATE_R = FALSE;
- //int GP2X_BUTTON_STATE_START = FALSE;
- //int GP2X_BUTTON_STATE_SELECT = FALSE;
- //int GP2X_BUTTON_STATE_VOLUP = FALSE;
- //int GP2X_BUTTON_STATE_VOLDOWN = FALSE;
+/* Quick default button states for modifiers. */
+int GP2X_BUTTON_STATE_L = false;
bool OSystem_GP2X::pollEvent(Common::Event &event) {
SDL_Event ev;
@@ -273,8 +252,6 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
GP2X_BUTTON_LEFT Cursor Left
GP2X_BUTTON_RIGHT Cursor Right
- TODO: Add extra directions to cursor mappings.
-
GP2X_BUTTON_UPLEFT Cursor Up Left
GP2X_BUTTON_UPRIGHT Cursor Up Right
GP2X_BUTTON_DOWNLEFT Cursor Down Left
@@ -288,8 +265,8 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
GP2X_BUTTON_Y Space Bar
GP2X_BUTTON_X Right Mouse Click
GP2X_BUTTON_L Combo Modifier (Left Trigger)
- GP2X_BUTTON_R F5 (Right Trigger)
- GP2X_BUTTON_START Return
+ GP2X_BUTTON_R Return (Right Trigger)
+ GP2X_BUTTON_START F5 (Game Menu)
GP2X_BUTTON_SELECT Escape
GP2X_BUTTON_VOLUP /dev/mixer Global Volume Up
GP2X_BUTTON_VOLDOWN /dev/mixer Global Volume Down
@@ -299,6 +276,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
GP2X_BUTTON_VOLUP & GP2X_BUTTON_VOLDOWN 0 (For Monkey 2 CP)
GP2X_BUTTON_L & GP2X_BUTTON_SELECT Common::EVENT_QUIT (Calls Sync() to make sure SD is flushed)
GP2X_BUTTON_L & GP2X_BUTTON_Y Toggles setZoomOnMouse() for larger then 320*240 games to scale to the point + raduis.
+ GP2X_BUTTON_L & GP2X_BUTTON_START Common::EVENT_MAINMENU (ScummVM Global Main Menu)
GP2X_BUTTON_L & GP2X_BUTTON_A Common::EVENT_PREDICTIVE_DIALOG for predictive text entry box (AGI games)
*/
@@ -357,6 +335,10 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
else if (ev.button.button == SDL_BUTTON_WHEELDOWN)
event.type = Common::EVENT_WHEELDOWN;
#endif
+#if defined(SDL_BUTTON_MIDDLE)
+ else if (ev.button.button == SDL_BUTTON_MIDDLE)
+ event.type = Common::EVENT_MBUTTONDOWN;
+#endif
else
break;
@@ -369,6 +351,10 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
else if (ev.button.button == SDL_BUTTON_RIGHT)
event.type = Common::EVENT_RBUTTONUP;
+#if defined(SDL_BUTTON_MIDDLE)
+ else if (ev.button.button == SDL_BUTTON_MIDDLE)
+ event.type = Common::EVENT_MBUTTONUP;
+#endif
else
break;
fillMouseEvent(event, ev.button.x, ev.button.y);
@@ -379,16 +365,16 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
case SDL_JOYBUTTONDOWN:
_stickBtn[ev.jbutton.button] = 1;
- if (ev.jbutton.button == JOY_BUT_LMOUSE) {
+ if (ev.jbutton.button == GP2X_BUTTON_B) {
event.type = Common::EVENT_LBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button == GP2X_BUTTON_CLICK) {
event.type = Common::EVENT_LBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
- } else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
+ } else if (ev.jbutton.button == GP2X_BUTTON_X) {
event.type = Common::EVENT_RBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
- } else if (_stickBtn[JOY_BUT_COMB] && (ev.jbutton.button == JOY_BUT_EXIT)) {
+ } else if (_stickBtn[GP2X_BUTTON_L] && (ev.jbutton.button == GP2X_BUTTON_SELECT)) {
event.type = Common::EVENT_QUIT;
} else if (ev.jbutton.button < 8) {
moveStick();
@@ -399,19 +385,24 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
event.kbd.flags = 0;
switch (ev.jbutton.button) {
case GP2X_BUTTON_L:
- GP2X_BUTTON_STATE_L = TRUE;
+ GP2X_BUTTON_STATE_L = true;
break;
case GP2X_BUTTON_R:
- if (GP2X_BUTTON_STATE_L == TRUE) {
+ if (GP2X_BUTTON_STATE_L == true) {
+#ifdef ENABLE_VKEYBD
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0);
+#else
event.kbd.keycode = Common::KEYCODE_0;
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
+#endif
} else {
- event.kbd.keycode = Common::KEYCODE_F5;
- event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ event.kbd.keycode = Common::KEYCODE_RETURN;
+ event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
}
break;
case GP2X_BUTTON_SELECT:
- if (GP2X_BUTTON_STATE_L == TRUE) {
+ if (GP2X_BUTTON_STATE_L == true) {
event.type = Common::EVENT_QUIT;
} else {
event.kbd.keycode = Common::KEYCODE_ESCAPE;
@@ -419,7 +410,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
}
break;
case GP2X_BUTTON_A:
- if (GP2X_BUTTON_STATE_L == TRUE) {
+ if (GP2X_BUTTON_STATE_L == true) {
event.type = Common::EVENT_PREDICTIVE_DIALOG;
} else {
event.kbd.keycode = Common::KEYCODE_PERIOD;
@@ -427,39 +418,21 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
}
break;
case GP2X_BUTTON_Y:
- if (GP2X_BUTTON_STATE_L == TRUE) {
+ if (GP2X_BUTTON_STATE_L == true) {
setZoomOnMouse();
} else {
event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
}
break;
- case JOY_BUT_RETURN:
- event.kbd.keycode = Common::KEYCODE_RETURN;
- event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
- break;
- case JOY_BUT_ZERO:
- event.kbd.keycode = Common::KEYCODE_0;
- event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
+ case GP2X_BUTTON_START:
+ if (GP2X_BUTTON_STATE_L == true) {
+ event.type = Common::EVENT_MAINMENU;
+ } else {
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ }
break;
-
- //case GP2X_BUTTON_R:
- // if ((ev.jbutton.button == GP2X_BUTTON_L) && (ev.jbutton.button == GP2X_BUTTON_R)) {
- // displayMessageOnOSD("Exiting ScummVM");
- // //Sync();
- // event.type = Common::EVENT_QUIT;
- // break;
- // } else if ((ev.jbutton.button == GP2X_BUTTON_L) && (ev.jbutton.button != GP2X_BUTTON_R)) {
- // displayMessageOnOSD("Left Trigger Pressed");
- // break;
- // } else if ((ev.jbutton.button == GP2X_BUTTON_R) && (ev.jbutton.button != GP2X_BUTTON_L)) {
- // event.kbd.keycode = Common::KEYCODE_F5;
- // event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
- // break;
- // } else {
- // break;
- // }
- // break;
case GP2X_BUTTON_VOLUP:
//if (GP2X_BUTTON_STATE_L == TRUE) {
// displayMessageOnOSD("Setting CPU Speed at 230MHz");
@@ -490,10 +463,13 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
case SDL_JOYBUTTONUP:
_stickBtn[ev.jbutton.button] = 0;
- if (ev.jbutton.button == JOY_BUT_LMOUSE) {
+ if (ev.jbutton.button == GP2X_BUTTON_B) {
event.type = Common::EVENT_LBUTTONUP;
fillMouseEvent(event, _km.x, _km.y);
- } else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
+ } else if (ev.jbutton.button == GP2X_BUTTON_CLICK) {
+ event.type = Common::EVENT_LBUTTONUP;
+ fillMouseEvent(event, _km.x, _km.y);
+ } else if (ev.jbutton.button == GP2X_BUTTON_X) {
event.type = Common::EVENT_RBUTTONUP;
fillMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button < 8) {
@@ -517,15 +493,29 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
break;
case GP2X_BUTTON_START:
- event.kbd.keycode = Common::KEYCODE_RETURN;
- event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
+ if (GP2X_BUTTON_STATE_L == true) {
+ event.type = Common::EVENT_MAINMENU;
+ } else {
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ }
break;
case GP2X_BUTTON_L:
- GP2X_BUTTON_STATE_L = FALSE;
+ GP2X_BUTTON_STATE_L = false;
break;
case GP2X_BUTTON_R:
- event.kbd.keycode = Common::KEYCODE_F5;
- event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ if (GP2X_BUTTON_STATE_L == true) {
+#ifdef ENABLE_VKEYBD
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0);
+#else
+ event.kbd.keycode = Common::KEYCODE_0;
+ event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
+#endif
+ } else {
+ event.kbd.keycode = Common::KEYCODE_RETURN;
+ event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
+ }
break;
case GP2X_BUTTON_VOLUP:
break;
diff --git a/backends/platform/gp2x/gp2x-hw.h b/backends/platform/gp2x/gp2x-hw.h
index 0427698bc4..89ad1093e4 100644
--- a/backends/platform/gp2x/gp2x-hw.h
+++ b/backends/platform/gp2x/gp2x-hw.h
@@ -31,29 +31,6 @@
#ifndef GP2X_HW_H
#define GP2X_HW_H
-//GP2X Main Joystick Mappings
-//TODO: Use these more standard mappings over the custom ones.
-
-#define GP2X_BUTTON_UP (0)
-#define GP2X_BUTTON_UPLEFT (1)
-#define GP2X_BUTTON_LEFT (2)
-#define GP2X_BUTTON_DOWNLEFT (3)
-#define GP2X_BUTTON_DOWN (4)
-#define GP2X_BUTTON_DOWNRIGHT (5)
-#define GP2X_BUTTON_RIGHT (6)
-#define GP2X_BUTTON_UPRIGHT (7)
-#define GP2X_BUTTON_START (8)
-#define GP2X_BUTTON_SELECT (9)
-#define GP2X_BUTTON_L (10)
-#define GP2X_BUTTON_R (11)
-#define GP2X_BUTTON_A (12)
-#define GP2X_BUTTON_B (13)
-#define GP2X_BUTTON_X (14)
-#define GP2X_BUTTON_Y (15)
-#define GP2X_BUTTON_VOLUP (16)
-#define GP2X_BUTTON_VOLDOWN (17)
-#define GP2X_BUTTON_CLICK (18)
-
#define GP2X_MAXVOL 100 // Highest level permitted by GP2X's mixer
#define SYS_CLK_FREQ 7372800 // Clock Frequency
diff --git a/backends/platform/gp2x/gp2x.cpp b/backends/platform/gp2x/gp2x.cpp
index 62c65e8f5e..15b5e19e5d 100644
--- a/backends/platform/gp2x/gp2x.cpp
+++ b/backends/platform/gp2x/gp2x.cpp
@@ -33,15 +33,14 @@
#include "backends/platform/gp2x/gp2x-mem.h"
#include "common/archive.h"
#include "common/config-manager.h"
-
+#include "common/debug.h"
#include "common/events.h"
#include "common/util.h"
-#include "common/debug.h"
#include "common/file.h"
#include "base/main.h"
-#include "backends/saves/posix/posix-saves.h"
+#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "backends/plugins/posix/posix-provider.h"
@@ -72,15 +71,12 @@ static Uint32 timer_handler(Uint32 interval, void *param) {
}
int main(int argc, char *argv[]) {
- //extern OSystem *OSystem_GP2X_create();
- //g_system = OSystem_GP2X_create();
g_system = new OSystem_GP2X();
assert(g_system);
- // Check if Plugins are enabled (Using the hacked up GP2X provider)
- #ifdef DYNAMIC_MODULES
- PluginManager::instance().addPluginProvider(new GP2XPluginProvider());
- #endif
+#ifdef DYNAMIC_MODULES
+ PluginManager::instance().addPluginProvider(new POSIXPluginProvider());
+#endif
// Invoke the actual ScummVM main entry point:
int res = scummvm_main(argc, argv);
@@ -115,7 +111,8 @@ void OSystem_GP2X::initBackend() {
#endif
char savePath[PATH_MAX+1];
- char workDirName[PATH_MAX+1]; /* To be passed to getcwd system call. */
+ char workDirName[PATH_MAX+1];
+
if (getcwd(workDirName, PATH_MAX) == NULL) {
error("Could not obtain current working directory.");
} else {
@@ -133,25 +130,9 @@ void OSystem_GP2X::initBackend() {
ConfMan.registerDefault("savepath", savePath);
- // Setup default extra data path for engine data files to be workingdir/engine-data
-
- char enginedataPath[PATH_MAX+1];
-
- strcpy(enginedataPath, workDirName);
- strcat(enginedataPath, "/engine-data");
- printf("Current engine-data directory: %s\n", enginedataPath);
- //struct stat sb;
- if (stat(enginedataPath, &sb) == -1)
- if (errno == ENOENT) // Create the dir if it does not exist
- if (mkdir(enginedataPath, 0755) != 0)
- warning("mkdir for '%s' failed", enginedataPath);
-
- //FIXME: Do not use File::addDefaultDirectory, rather implement OSystem::addSysArchivesToSearchSet() !
- Common::File::addDefaultDirectory(enginedataPath);
-
- // Note: Review and clean this, it's OTT at the moment.
+ _savefile = new DefaultSaveFileManager(savePath);
- #if defined(DUMP_STDOUT)
+ #ifdef DUMP_STDOUT
// The GP2X has a serial console but most users do not use this so we
// output all our STDOUT and STDERR to files for debug purposes.
char STDOUT_FILE[PATH_MAX+1];
@@ -168,7 +149,7 @@ void OSystem_GP2X::initBackend() {
/* Redirect standard input and standard output */
FILE *newfp = freopen(STDOUT_FILE, "w", stdout);
- if (newfp == NULL) { /* This happens on NT */
+ if (newfp == NULL) {
#if !defined(stdout)
stdout = fopen(STDOUT_FILE, "w");
#else
@@ -178,8 +159,9 @@ void OSystem_GP2X::initBackend() {
}
#endif
}
+
newfp = freopen(STDERR_FILE, "w", stderr);
- if (newfp == NULL) { /* This happens on NT */
+ if (newfp == NULL) {
#if !defined(stderr)
stderr = fopen(STDERR_FILE, "w");
#else
@@ -189,8 +171,10 @@ void OSystem_GP2X::initBackend() {
}
#endif
}
- setbuf(stderr, NULL); /* No buffering */
- #endif // DUMP_STDOUT
+
+ setbuf(stderr, NULL);
+ printf("%s\n", "Debug: STDOUT and STDERR redirected to text files.");
+ #endif /* DUMP_STDOUT */
_graphicsMutex = createMutex();
@@ -199,7 +183,9 @@ void OSystem_GP2X::initBackend() {
// Setup other defaults.
ConfMan.registerDefault("aspect_ratio", true);
- ConfMan.registerDefault("music_volume", 220); // Up default volume as we use a seperate volume system anyway.
+
+ /* Up default volume values as we use a seperate system level volume anyway. */
+ ConfMan.registerDefault("music_volume", 220);
ConfMan.registerDefault("sfx_volume", 220);
ConfMan.registerDefault("speech_volume", 220);
ConfMan.registerDefault("autosave_period", 3 * 60); // Trigger autosave every 3 minutes - On low batts 4 mins is about your warning time.
@@ -223,12 +209,6 @@ void OSystem_GP2X::initBackend() {
_joystick = SDL_JoystickOpen(joystick_num);
}
- // Create the savefile manager, if none exists yet (we check for this to
- // allow subclasses to provide their own).
- if (_savefile == 0) {
- _savefile = 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) {
@@ -367,32 +347,37 @@ FilesystemFactory *OSystem_GP2X::getFilesystemFactory() {
}
void OSystem_GP2X::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
+ /* Setup default extra data paths for engine data files and plugins */
+ char workDirName[PATH_MAX+1];
-#ifdef DATA_PATH
- // Add the global DATA_PATH to the directory search list
- // FIXME: We use depth = 4 for now, to match the old code. May want to change that
- Common::FSNode dataNode(DATA_PATH);
- if (dataNode.exists() && dataNode.isDirectory()) {
- s.add(DATA_PATH, new Common::FSDirectory(dataNode, 4), priority);
+ if (getcwd(workDirName, PATH_MAX) == NULL) {
+ error("Error: Could not obtain current working directory.");
}
-#endif
-#if defined(MACOSX) || defined(IPHONE)
- // 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);
+ Common::FSNode workdirNode(workDirName);
+ if (workdirNode.exists() && workdirNode.isDirectory()) {
+ s.add("__GP2X_WORKDIR__", new Common::FSDirectory(workDirName), priority);
}
-#endif
+ char enginedataPath[PATH_MAX+1];
+
+ strcpy(enginedataPath, workDirName);
+ strcat(enginedataPath, "/engine-data");
+
+ Common::FSNode engineNode(enginedataPath);
+ if (engineNode.exists() && engineNode.isDirectory()) {
+ s.add("__GP2X_ENGDATA__", new Common::FSDirectory(enginedataPath), priority);
+ }
+
+ char pluginsPath[PATH_MAX+1];
+
+ strcpy(pluginsPath, workDirName);
+ strcat(pluginsPath, "/plugins");
+ Common::FSNode pluginsNode(pluginsPath);
+ if (pluginsNode.exists() && pluginsNode.isDirectory()) {
+ s.add("__GP2X_PLUGINS__", new Common::FSDirectory(pluginsPath), priority);
+ }
}
static Common::String getDefaultConfigFileName() {
@@ -479,6 +464,12 @@ void OSystem_GP2X::quit() {
delete getEventManager();
+ #ifdef DUMP_STDOUT
+ printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
+ fclose(stdout);
+ fclose(stderr);
+ #endif /* DUMP_STDOUT */
+
exit(0);
}