diff options
author | John Willis | 2009-06-06 16:52:45 +0000 |
---|---|---|
committer | John Willis | 2009-06-06 16:52:45 +0000 |
commit | c2a6ae1db3dae0b8d67bda36af71aab41c47f693 (patch) | |
tree | 9ab77eee877fd6e6faa9ee3b2230d429664b0140 /backends/platform/gp2x | |
parent | ba134a51582e4c7d7ec33cd65027245e056822b0 (diff) | |
download | scummvm-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
Diffstat (limited to 'backends/platform/gp2x')
-rwxr-xr-x | backends/platform/gp2x/build/bundle.sh | 1 | ||||
-rwxr-xr-x | backends/platform/gp2x/build/config-alleng.sh | 23 | ||||
-rwxr-xr-x | backends/platform/gp2x/build/config.sh | 4 | ||||
-rw-r--r-- | backends/platform/gp2x/events.cpp | 184 | ||||
-rw-r--r-- | backends/platform/gp2x/gp2x-hw.h | 23 | ||||
-rw-r--r-- | backends/platform/gp2x/gp2x.cpp | 109 |
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); } |