aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/android/android.cpp1
-rw-r--r--backends/platform/android/android.h1
-rw-r--r--backends/platform/android/android.mk1
-rw-r--r--backends/platform/android/asset-archive.h1
-rw-r--r--backends/platform/android/events.cpp1
-rw-r--r--backends/platform/android/gfx.cpp1
-rw-r--r--backends/platform/android/jni.cpp1
-rw-r--r--backends/platform/android/jni.h1
-rw-r--r--backends/platform/android/module.mk1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVM.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/Unpacker.java1
-rw-r--r--backends/platform/android/texture.cpp1
-rw-r--r--backends/platform/android/texture.h1
-rw-r--r--backends/platform/bada/README.TXT85
-rw-r--r--backends/platform/bada/application.cpp109
-rw-r--r--backends/platform/bada/application.h54
-rw-r--r--backends/platform/bada/audio.cpp260
-rw-r--r--backends/platform/bada/audio.h73
-rw-r--r--backends/platform/bada/bada.mk5
-rw-r--r--backends/platform/bada/form.cpp464
-rw-r--r--backends/platform/bada/form.h108
-rw-r--r--backends/platform/bada/fs.cpp436
-rw-r--r--backends/platform/bada/fs.h82
-rw-r--r--backends/platform/bada/graphics.cpp315
-rw-r--r--backends/platform/bada/graphics.h73
-rw-r--r--backends/platform/bada/main.cpp67
-rw-r--r--backends/platform/bada/missing.cpp113
-rw-r--r--backends/platform/bada/portdefs.h84
-rw-r--r--backends/platform/bada/sscanf.cpp182
-rw-r--r--backends/platform/bada/system.cpp499
-rw-r--r--backends/platform/bada/system.h101
-rw-r--r--backends/platform/dc/DCLauncherDialog.h1
-rw-r--r--backends/platform/dc/README1
-rw-r--r--backends/platform/dc/audio.cpp2
-rw-r--r--backends/platform/dc/cache.S1
-rw-r--r--backends/platform/dc/dc-fs.cpp3
-rw-r--r--backends/platform/dc/dc.h1
-rw-r--r--backends/platform/dc/dcmain.cpp1
-rw-r--r--backends/platform/dc/display.cpp1
-rw-r--r--backends/platform/dc/input.cpp1
-rw-r--r--backends/platform/dc/label.cpp1
-rw-r--r--backends/platform/dc/plugin_head.S1
-rw-r--r--backends/platform/dc/selector.cpp27
-rw-r--r--backends/platform/dingux/README.DINGUX1
-rw-r--r--backends/platform/dingux/scummvm.gpe1
-rw-r--r--backends/platform/ds/arm7/source/libcartreset/cartreset.c3
-rw-r--r--backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h1
-rw-r--r--backends/platform/ds/arm7/source/main.cpp1
-rw-r--r--backends/platform/ds/arm9/dist/readme_ds.txt5
-rw-r--r--backends/platform/ds/arm9/source/dsoptions.cpp1
-rw-r--r--backends/platform/ds/arm9/source/fat/disc_io.h1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3_common.c1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3_common.h1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3sd_asm.s1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_njsd.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/io_scsd.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/io_scsd_asm.s11
-rw-r--r--backends/platform/ds/arm9/source/fat/io_sd_common.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/m3sd.s1
-rw-r--r--backends/platform/ds/arm9/source/keys.cpp1
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.cpp2
-rw-r--r--backends/platform/ds/arm9/source/scummhelp.cpp1
-rw-r--r--backends/platform/ds/ds.mk1
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/README (renamed from backends/platform/gph/devices/gp2x/mmuhack/readme.txt)8
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h1
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s1
-rw-r--r--backends/platform/iphone/iphone_main.m1
-rw-r--r--backends/platform/iphone/iphone_video.m1
-rw-r--r--backends/platform/n64/Makefile1
-rw-r--r--backends/platform/n64/README.N641
-rw-r--r--backends/platform/n64/framfs_save_manager.cpp1
-rw-r--r--backends/platform/n64/framfs_save_manager.h1
-rw-r--r--backends/platform/n64/n64.mk1
-rw-r--r--backends/platform/n64/nintendo64.cpp1
-rw-r--r--backends/platform/n64/osys_n64.h1
-rw-r--r--backends/platform/n64/osys_n64_base.cpp1
-rw-r--r--backends/platform/n64/osys_n64_events.cpp1
-rw-r--r--backends/platform/n64/osys_n64_utilities.cpp1
-rwxr-xr-xbackends/platform/n64/pad_rom.sh1
-rw-r--r--backends/platform/n64/pakfs_save_manager.cpp1
-rw-r--r--backends/platform/n64/pakfs_save_manager.h1
-rw-r--r--backends/platform/n64/portdefs.h1
-rwxr-xr-xbackends/platform/openpandora/build/PXML.xml83
-rw-r--r--backends/platform/openpandora/build/PXML_schema.xsd341
-rwxr-xr-xbackends/platform/openpandora/build/pnd_make.sh340
-rwxr-xr-xbackends/platform/openpandora/build/runscummvm.sh2
-rwxr-xr-xbackends/platform/openpandora/op-bundle.mk3
-rw-r--r--backends/platform/ps2/DmaPipe.h1
-rw-r--r--backends/platform/ps2/Gs2dScreen.cpp2
-rw-r--r--backends/platform/ps2/Makefile.gdb1
-rw-r--r--backends/platform/ps2/Makefile.ps21
-rw-r--r--backends/platform/ps2/asyncfio.cpp1
-rw-r--r--backends/platform/ps2/asyncfio.h1
-rw-r--r--backends/platform/ps2/eecodyvdfs.c2
-rw-r--r--backends/platform/ps2/eecodyvdfs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst2
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c2
-rw-r--r--backends/platform/ps2/iop/rpckbd/src/imports.lst1
-rw-r--r--backends/platform/ps2/irxboot.cpp1
-rw-r--r--backends/platform/ps2/irxboot.h1
-rw-r--r--backends/platform/ps2/ps2debug.cpp1
-rw-r--r--backends/platform/ps2/ps2debug.h1
-rw-r--r--backends/platform/ps2/ps2input.cpp2
-rw-r--r--backends/platform/ps2/ps2input.h1
-rw-r--r--backends/platform/ps2/ps2mutex.cpp1
-rw-r--r--backends/platform/ps2/ps2pad.cpp2
-rw-r--r--backends/platform/ps2/ps2pad.h1
-rw-r--r--backends/platform/ps2/rpckbd.c1
-rw-r--r--backends/platform/ps2/rpckbd.h1
-rw-r--r--backends/platform/ps2/sdlkeys.h2
-rw-r--r--backends/platform/psp/Makefile1
-rw-r--r--backends/platform/psp/README.PSP1
-rw-r--r--backends/platform/psp/README.PSP.in1
-rw-r--r--backends/platform/psp/display_manager.cpp1
-rw-r--r--backends/platform/psp/dummy.cpp2
-rw-r--r--backends/platform/psp/image_viewer.cpp4
-rw-r--r--backends/platform/psp/image_viewer.h2
-rw-r--r--backends/platform/psp/input.cpp2
-rw-r--r--backends/platform/psp/memory.h2
-rw-r--r--backends/platform/psp/mp3.cpp6
-rw-r--r--backends/platform/psp/mp3.h4
-rw-r--r--backends/platform/psp/png_loader.cpp10
-rw-r--r--backends/platform/psp/png_loader.h4
-rw-r--r--backends/platform/psp/portdefs.h2
-rw-r--r--backends/platform/psp/pspkeyboard.cpp2
-rw-r--r--backends/platform/psp/rtc.cpp1
-rw-r--r--backends/platform/psp/thread.cpp1
-rw-r--r--backends/platform/psp/thread.h2
-rw-r--r--backends/platform/psp/trace.cpp1
-rwxr-xr-xbackends/platform/sdl/macosx/appmenu_osx.h32
-rwxr-xr-xbackends/platform/sdl/macosx/appmenu_osx.mm110
-rw-r--r--backends/platform/sdl/macosx/macosx.cpp18
-rw-r--r--backends/platform/sdl/module.mk3
-rw-r--r--backends/platform/sdl/ps3/ps3.cpp2
-rw-r--r--backends/platform/sdl/sdl.cpp65
-rw-r--r--backends/platform/sdl/sdl.h6
-rw-r--r--backends/platform/sdl/win32/win32.cpp10
-rw-r--r--backends/platform/symbian/.placeholder2
-rw-r--r--backends/platform/symbian/BuildPackageUpload_AllVersions.pl2
-rw-r--r--backends/platform/symbian/README1
-rw-r--r--backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg2
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_Loc.rss1
-rw-r--r--backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss1
-rw-r--r--backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss1
-rw-r--r--backends/platform/symbian/S60v3/scummvm_reg.rss1
-rw-r--r--backends/platform/symbian/S80/ScummVM_S80.mmp.in1
-rw-r--r--backends/platform/symbian/S90/Scummvm_S90.mmp.in1
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM.rss1
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in1
-rw-r--r--backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM.rss1
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_A0000658.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_loc.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_reg.rss1
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in2
-rw-r--r--backends/platform/symbian/res/ScummVmAif.rss3
-rw-r--r--backends/platform/symbian/src/ScummApp.cpp2
-rw-r--r--backends/platform/symbian/src/ScummApp.h2
-rw-r--r--backends/platform/wii/gdb.txt1
-rw-r--r--backends/platform/wii/main.cpp1
-rw-r--r--backends/platform/wii/module.mk1
-rw-r--r--backends/platform/wii/options.cpp1
-rw-r--r--backends/platform/wii/options.h1
-rw-r--r--backends/platform/wii/osystem_events.cpp1
-rw-r--r--backends/platform/wii/osystem_gfx.cpp1
-rw-r--r--backends/platform/wii/osystem_sfx.cpp1
-rw-r--r--backends/platform/wii/wii.mk1
-rw-r--r--backends/platform/wince/CEActionsPocket.cpp11
-rw-r--r--backends/platform/wince/CEActionsSmartphone.cpp11
-rw-r--r--backends/platform/wince/CEScaler.cpp1
-rw-r--r--backends/platform/wince/CEgui/CEGUI.h1
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.cpp1
-rw-r--r--backends/platform/wince/CEkeys/CEKeys.h1
-rw-r--r--backends/platform/wince/CEkeys/EventsBuffer.cpp2
-rw-r--r--backends/platform/wince/README-WinCE.txt24
-rw-r--r--backends/platform/wince/missing/assert.h1
-rw-r--r--backends/platform/wince/missing/io.h1
-rw-r--r--backends/platform/wince/wince-sdl.cpp27
-rw-r--r--backends/platform/wince/wince-sdl.h1
191 files changed, 4140 insertions, 317 deletions
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp
index 17c7d4f9cb..a935bf145d 100644
--- a/backends/platform/android/android.cpp
+++ b/backends/platform/android/android.cpp
@@ -602,4 +602,3 @@ void AndroidPluginProvider::addCustomDirectories(Common::FSList &dirs) const {
#endif
#endif
-
diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h
index c2ada2ab77..f39a8f1144 100644
--- a/backends/platform/android/android.h
+++ b/backends/platform/android/android.h
@@ -296,4 +296,3 @@ public:
#endif
#endif
-
diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk
index 77fdb139d8..63d194fdc1 100644
--- a/backends/platform/android/android.mk
+++ b/backends/platform/android/android.mk
@@ -189,4 +189,3 @@ androiddistdebug: all
done
.PHONY: androidrelease androidtest
-
diff --git a/backends/platform/android/asset-archive.h b/backends/platform/android/asset-archive.h
index 016e3e31a5..9216412e0a 100644
--- a/backends/platform/android/asset-archive.h
+++ b/backends/platform/android/asset-archive.h
@@ -52,4 +52,3 @@ private:
#endif
#endif
-
diff --git a/backends/platform/android/events.cpp b/backends/platform/android/events.cpp
index cf1d4b173c..2a16e69411 100644
--- a/backends/platform/android/events.cpp
+++ b/backends/platform/android/events.cpp
@@ -820,4 +820,3 @@ bool OSystem_Android::pollEvent(Common::Event &event) {
}
#endif
-
diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp
index b8a9e74437..8bc914f567 100644
--- a/backends/platform/android/gfx.cpp
+++ b/backends/platform/android/gfx.cpp
@@ -826,4 +826,3 @@ void OSystem_Android::disableCursorPalette() {
}
#endif
-
diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp
index e3b4ef7401..b44a585528 100644
--- a/backends/platform/android/jni.cpp
+++ b/backends/platform/android/jni.cpp
@@ -619,4 +619,3 @@ void JNI::setPause(JNIEnv *env, jobject self, jboolean value) {
}
#endif
-
diff --git a/backends/platform/android/jni.h b/backends/platform/android/jni.h
index 1abecf0a37..52698e0f35 100644
--- a/backends/platform/android/jni.h
+++ b/backends/platform/android/jni.h
@@ -145,4 +145,3 @@ inline int JNI::writeAudio(JNIEnv *env, jbyteArray &data, int offset, int size)
#endif
#endif
-
diff --git a/backends/platform/android/module.mk b/backends/platform/android/module.mk
index 2fe4b40585..de5fe98a53 100644
--- a/backends/platform/android/module.mk
+++ b/backends/platform/android/module.mk
@@ -12,4 +12,3 @@ MODULE_OBJS := \
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
index cede7eedd4..3aef14b851 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
@@ -59,4 +59,3 @@ public class EditableSurfaceView extends SurfaceView {
return new MyInputConnection();
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
index 3c91d9f5dc..d90b7b2c68 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
@@ -51,4 +51,3 @@ public class PluginProvider extends BroadcastReceiver {
setResultExtras(extras);
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
index ef9f4cc1e0..246a02c9be 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
@@ -449,4 +449,3 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable {
System.load(libpath.getPath());
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
index 1978b690d0..ce4e016322 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
@@ -222,4 +222,3 @@ public class ScummVMActivity extends Activity {
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
index f9eec72eac..8ab7d1a084 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
@@ -28,4 +28,3 @@ public class ScummVMApplication extends Application {
return _cache_dir;
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
index 2d5c100a1c..175ff0b677 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
@@ -229,4 +229,3 @@ public class ScummVMEvents implements
return true;
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
index c4b2ad7f5d..8811b1f3ae 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
@@ -370,4 +370,3 @@ public class Unpacker extends Activity {
}
}
}
-
diff --git a/backends/platform/android/texture.cpp b/backends/platform/android/texture.cpp
index e993ed6794..53b4d1cc59 100644
--- a/backends/platform/android/texture.cpp
+++ b/backends/platform/android/texture.cpp
@@ -488,4 +488,3 @@ GLESFakePalette5551Texture::~GLESFakePalette5551Texture() {
}
#endif
-
diff --git a/backends/platform/android/texture.h b/backends/platform/android/texture.h
index dd34ba9d88..4307b5a1bc 100644
--- a/backends/platform/android/texture.h
+++ b/backends/platform/android/texture.h
@@ -271,4 +271,3 @@ public:
#endif
#endif
-
diff --git a/backends/platform/bada/README.TXT b/backends/platform/bada/README.TXT
new file mode 100644
index 0000000000..ca6f8f245a
--- /dev/null
+++ b/backends/platform/bada/README.TXT
@@ -0,0 +1,85 @@
+Build instructions:
+
+1. Install BADA SDK (requires free registration):
+
+ http://developer.bada.com/apis/index.do
+
+2. Install Cygwin:
+
+ http://www.cygwin.com/
+
+ Add the following to your cygwin .bash_profile:
+
+ alias mmake=/cygdrive/c/MinGW/bin/mingw32-make.exe
+ export BADA_SDK=/cygdrive/c/bada/1.2.1
+ export ARM_BIN=c:/bada/1.2.1/Tools/Toolchains/ARM/bin
+ export CPPFLAGS="-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 \
+ -mfloat-abi=hard -mlittle-endian -mthumb-interwork -Wno-psabi \
+ -fno-strict-aliasing -fno-short-enums"
+ export LDFLAGS="-nostdlib -lc-newlib -lm-newlib -LC:/bada/1.2.1/Model/Wave_LP1/Target"
+ #export PATH=${BADA_SDK}/Tools/Toolchains/Win32/bin:${PATH}
+ export PATH=${BADA_SDK}/Tools/Toolchains/ARM/bin:~/utils:${PATH}
+ alias gcc=${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe
+ alias ar=${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe
+
+ The following were added to ~/utils for zlib:
+
+ ar:
+ #!/bin/sh
+ ${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe $*
+
+ gcc:
+ #!/bin/sh
+ ${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe $*
+
+3. Build dependencies
+
+ zlib, libogg, libvorbis, libmad, FLAC
+
+ see: "Building the libraries" under:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW#Building_the_libraries
+ for instructions on how to obtain these modules
+
+ 3.1 For Target-Release configure ogg and mad with:
+
+ ./configure --host=arm-samsung-nucleuseabi --disable-shared
+
+ when building vorbis and flac:
+
+ ./configure --host=arm-samsung-nucleuseabi --disable-shared --with-ogg=c:/cygwin/usr/local
+
+ 3.2 for each module, after a successful configure, add the following
+ to the generated config.h (gzguts.h for zlib)
+
+ #undef __MINGW32__
+ #undef _WIN32
+ #include "c:/src/scummvm/backends/platform/bada/portdefs.h"
+
+ 3.3 Additional post configure edits:
+
+ - removed -fforce-mem from the libMAD Makefile
+ - in libvorbis/lib/Makefile comment lines with vorbis_selftests
+ - edit libFLAC/Makefile ... CFLAGS = $(OGG_CFLAGS)
+
+ Note: you can ignore the ranlib errors when doing make install.
+
+4. Build the ScummVM base library:
+
+ ./configure --host=bada --enable-release
+
+ To target the Win32 simulator:
+
+ ./configure --host=bada --enable-debug
+
+5. Build the front end application using BADA-Ide:
+
+ Copy the scummvm/dists/bada folder into a clean directory
+ outside of the scummvm package. Start the BADA IDE then
+ choose this folder as the eclipse workspace. Click
+ Project / Build.
+
+Links:
+
+A short turorial on implementing OpenGL ES 1.1 in BADA:
+ http://forums.badadev.com/viewtopic.php?f=7&t=208
+
diff --git a/backends/platform/bada/application.cpp b/backends/platform/bada/application.cpp
new file mode 100644
index 0000000000..a287fa6352
--- /dev/null
+++ b/backends/platform/bada/application.cpp
@@ -0,0 +1,109 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "engines/engine.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/application.h"
+
+using namespace Osp::System;
+using namespace Osp::Ui::Controls;
+
+Application *BadaScummVM::createInstance() {
+ return new BadaScummVM();
+}
+
+BadaScummVM::BadaScummVM() : _appForm(0) {
+}
+
+BadaScummVM::~BadaScummVM() {
+ logEntered();
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ system->destroyBackend();
+ delete system;
+ g_system = 0;
+ }
+}
+
+bool BadaScummVM::OnAppInitializing(AppRegistry &appRegistry) {
+ _appForm = systemStart(this);
+ return (_appForm != NULL);
+}
+
+bool BadaScummVM::OnAppTerminating(AppRegistry &appRegistry,
+ bool forcedTermination) {
+ logEntered();
+ return true;
+}
+
+void BadaScummVM::OnUserEventReceivedN(RequestId requestId,
+ Osp::Base::Collection::IList *args) {
+ logEntered();
+
+ if (requestId == USER_MESSAGE_EXIT) {
+ // normal program termination
+ Terminate();
+ } else if (requestId == USER_MESSAGE_EXIT_ERR) {
+ // assertion failure termination
+ String *message = NULL;
+ if (args) {
+ message = (String*)args->GetAt(0);
+ }
+ if (!message) {
+ message = new String("Unknown error");
+ }
+
+ MessageBox messageBox;
+ messageBox.Construct(L"Oops...", *message, MSGBOX_STYLE_OK);
+ int modalResult;
+ messageBox.ShowAndWait(modalResult);
+ Terminate();
+ }
+}
+
+void BadaScummVM::OnForeground(void) {
+ logEntered();
+ pauseGame(false);
+}
+
+void BadaScummVM::OnBackground(void) {
+ logEntered();
+ pauseGame(true);
+}
+
+void BadaScummVM::OnBatteryLevelChanged(BatteryLevel batteryLevel) {
+}
+
+void BadaScummVM::OnLowMemory(void) {
+}
+
+void BadaScummVM::pauseGame(bool pause) {
+ if (pause && _appForm && g_engine && !g_engine->isPaused()) {
+ _appForm->pushKey(Common::KEYCODE_SPACE);
+ }
+
+ if (g_system) {
+ ((BadaSystem *)g_system)->setMute(pause);
+ }
+}
diff --git a/backends/platform/bada/application.h b/backends/platform/bada/application.h
new file mode 100644
index 0000000000..2b0d37f1ef
--- /dev/null
+++ b/backends/platform/bada/application.h
@@ -0,0 +1,54 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_APPLICATION_H
+#define BADA_APPLICATION_H
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+
+#include "backends/platform/bada/system.h"
+
+class BadaScummVM : public Osp::App::Application {
+public:
+ BadaScummVM();
+ ~BadaScummVM();
+
+ static Osp::App::Application *createInstance(void);
+
+ bool OnAppInitializing(Osp::App::AppRegistry &appRegistry);
+ bool OnAppTerminating(Osp::App::AppRegistry &appRegistry, bool forcedTermination = false);
+ void OnForeground(void);
+ void OnBackground(void);
+ void OnLowMemory(void);
+ void OnBatteryLevelChanged(Osp::System::BatteryLevel batteryLevel);
+ void OnUserEventReceivedN(RequestId requestId, Osp::Base::Collection::IList *pArgs);
+
+private:
+ void pauseGame(bool pause);
+ BadaAppForm *_appForm;
+};
+
+#endif
diff --git a/backends/platform/bada/audio.cpp b/backends/platform/bada/audio.cpp
new file mode 100644
index 0000000000..cfa6418e08
--- /dev/null
+++ b/backends/platform/bada/audio.cpp
@@ -0,0 +1,260 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FSysSettingInfo.h>
+#include <FAppAppRegistry.h>
+
+#include "backends/platform/bada/audio.h"
+#include "backends/platform/bada/system.h"
+
+#define TIMER_INCREMENT 10
+#define TIMER_INTERVAL 40
+#define MIN_TIMER_INTERVAL 10
+#define MAX_TIMER_INTERVAL 160
+#define INIT_LEVEL 3
+#define CONFIG_KEY L"audiovol"
+
+// sound level pre-sets
+const int levels[] = {0, 1, 10, 45, 70, 99};
+
+AudioThread::AudioThread() :
+ _mixer(0),
+ _timer(0),
+ _audioOut(0),
+ _head(0),
+ _tail(0),
+ _ready(0),
+ _interval(TIMER_INTERVAL),
+ _playing(-1),
+ _muted(true) {
+}
+
+Audio::MixerImpl *AudioThread::Construct(OSystem *system) {
+ logEntered();
+
+ if (IsFailed(Thread::Construct(THREAD_TYPE_EVENT_DRIVEN,
+ DEFAULT_STACK_SIZE,
+ THREAD_PRIORITY_HIGH))) {
+ AppLog("Failed to create AudioThread");
+ return NULL;
+ }
+
+ _mixer = new Audio::MixerImpl(system, 44100);
+ return _mixer;
+}
+
+AudioThread::~AudioThread() {
+ logEntered();
+}
+
+bool AudioThread::isSilentMode() {
+ bool silentMode;
+ String key(L"SilentMode");
+ Osp::System::SettingInfo::GetValue(key, silentMode);
+ return silentMode;
+}
+
+void AudioThread::setMute(bool on) {
+ if (_audioOut && !isSilentMode()) {
+ _muted = on;
+ if (on) {
+ _timer->Cancel();
+ } else {
+ _timer->Start(_interval);
+ }
+ }
+}
+
+int AudioThread::setVolume(bool up, bool minMax) {
+ int level = -1;
+ int numLevels = sizeof(levels) / sizeof(levels[0]);
+
+ if (_audioOut && !isSilentMode()) {
+ int volume = _audioOut->GetVolume();
+ if (minMax) {
+ level = up ? numLevels - 1 : 0;
+ volume = levels[level];
+ } else {
+ // adjust volume to be one of the preset values
+ for (int i = 0; i < numLevels && level == -1; i++) {
+ if (volume == levels[i]) {
+ level = i;
+ if (up) {
+ if (i + 1 < numLevels) {
+ level = i + 1;
+ }
+ } else if (i > 0) {
+ level = i - 1;
+ }
+ }
+ }
+
+ // default to INIT_LEVEL when current not preset value
+ if (level == -1) {
+ level = INIT_LEVEL;
+ }
+ volume = levels[level];
+ }
+
+ _audioOut->SetVolume(volume);
+
+ // remember the chosen setting
+ AppRegistry *registry = Application::GetInstance()->GetAppRegistry();
+ if (registry) {
+ registry->Set(CONFIG_KEY, volume);
+ }
+ }
+ return level;
+}
+
+bool AudioThread::OnStart(void) {
+ logEntered();
+
+ _audioOut = new Osp::Media::AudioOut();
+ if (!_audioOut ||
+ IsFailed(_audioOut->Construct(*this))) {
+ AppLog("Failed to create AudioOut");
+ return false;
+ }
+
+ int sampleRate = _mixer->getOutputRate();
+
+ // ideally we would update _mixer with GetOptimizedSampleRate here
+ if (_audioOut->GetOptimizedSampleRate() != sampleRate) {
+ AppLog("Non optimal sample rate %d", _audioOut->GetOptimizedSampleRate());
+ }
+
+ if (IsFailed(_audioOut->Prepare(AUDIO_TYPE_PCM_S16_LE,
+ AUDIO_CHANNEL_TYPE_STEREO,
+ sampleRate))) {
+ AppLog("Failed to prepare AudioOut %d", sampleRate);
+ return false;
+ }
+
+ int bufferSize = _audioOut->GetMinBufferSize();
+ for (int i = 0; i < NUM_AUDIO_BUFFERS; i++) {
+ if (IsFailed(_audioBuffer[i].Construct(bufferSize))) {
+ AppLog("Failed to create audio buffer");
+ return false;
+ }
+ }
+
+ _timer = new Timer();
+ if (!_timer || IsFailed(_timer->Construct(*this))) {
+ AppLog("Failed to create audio timer");
+ return false;
+ }
+
+ if (IsFailed(_timer->Start(_interval))) {
+ AppLog("failed to start audio timer");
+ return false;
+ }
+
+ // get the volume from the app-registry
+ int volume = levels[INIT_LEVEL];
+ AppRegistry *registry = Application::GetInstance()->GetAppRegistry();
+ if (registry) {
+ if (E_KEY_NOT_FOUND == registry->Get(CONFIG_KEY, volume)) {
+ registry->Add(CONFIG_KEY, volume);
+ volume = levels[INIT_LEVEL];
+ } else {
+ AppLog("Setting volume: %d", volume);
+ }
+ }
+
+ _muted = false;
+ _mixer->setReady(true);
+ _audioOut->SetVolume(isSilentMode() ? 0 : volume);
+ _audioOut->Start();
+ return true;
+}
+
+void AudioThread::OnStop(void) {
+ logEntered();
+
+ _mixer->setReady(false);
+
+ if (_timer) {
+ if (!_muted) {
+ _timer->Cancel();
+ }
+ delete _timer;
+ }
+
+ if (_audioOut) {
+ _audioOut->Reset();
+ delete _audioOut;
+ }
+}
+
+void AudioThread::OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r) {
+ logEntered();
+}
+
+void AudioThread::OnAudioOutInterrupted(Osp::Media::AudioOut &src) {
+ logEntered();
+}
+
+void AudioThread::OnAudioOutReleased(Osp::Media::AudioOut &src) {
+ logEntered();
+ _audioOut->Start();
+}
+
+void AudioThread::OnAudioOutBufferEndReached(Osp::Media::AudioOut &src) {
+ if (_ready > 0) {
+ _playing = _tail;
+ _audioOut->WriteBuffer(_audioBuffer[_tail]);
+ _tail = (_tail + 1) % NUM_AUDIO_BUFFERS;
+ _ready--;
+ } else {
+ // audio buffer empty: decrease timer inverval
+ _playing = -1;
+ _interval -= TIMER_INCREMENT;
+ if (_interval < MIN_TIMER_INTERVAL) {
+ _interval = MIN_TIMER_INTERVAL;
+ }
+ }
+}
+
+void AudioThread::OnTimerExpired(Timer &timer) {
+ if (_ready < NUM_AUDIO_BUFFERS) {
+ uint len = _audioBuffer[_head].GetCapacity();
+ int samples = _mixer->mixCallback((byte*)_audioBuffer[_head].GetPointer(), len);
+ if (samples) {
+ _head = (_head + 1) % NUM_AUDIO_BUFFERS;
+ _ready++;
+ }
+ } else {
+ // audio buffer full: increase timer inverval
+ _interval += TIMER_INCREMENT;
+ if (_interval > MAX_TIMER_INTERVAL) {
+ _interval = MAX_TIMER_INTERVAL;
+ }
+ }
+
+ if (_ready && _playing == -1) {
+ OnAudioOutBufferEndReached(*_audioOut);
+ }
+
+ _timer->Start(_interval);
+}
+
diff --git a/backends/platform/bada/audio.h b/backends/platform/bada/audio.h
new file mode 100644
index 0000000000..72c537a942
--- /dev/null
+++ b/backends/platform/bada/audio.h
@@ -0,0 +1,73 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_AUDIO_H
+#define BADA_AUDIO_H
+
+#include <FBase.h>
+#include <FMedia.h>
+#include <FIo.h>
+#include <FBaseByteBuffer.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "audio/mixer_intern.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Collection;
+using namespace Osp::Base::Runtime;
+using namespace Osp::Media;
+using namespace Osp::Io;
+
+#define NUM_AUDIO_BUFFERS 2
+
+class AudioThread: public Osp::Media::IAudioOutEventListener,
+ public Osp::Base::Runtime::ITimerEventListener,
+ public Osp::Base::Runtime::Thread {
+public:
+ AudioThread(void);
+ ~AudioThread(void);
+
+ Audio::MixerImpl *Construct(OSystem *system);
+ bool isSilentMode();
+ void setMute(bool on);
+ int setVolume(bool up, bool minMax);
+
+ bool OnStart(void);
+ void OnStop(void);
+ void OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r);
+ void OnAudioOutInterrupted(Osp::Media::AudioOut &src);
+ void OnAudioOutReleased(Osp::Media::AudioOut &src);
+ void OnAudioOutBufferEndReached(Osp::Media::AudioOut &src);
+ void OnTimerExpired(Timer &timer);
+
+private:
+ Audio::MixerImpl *_mixer;
+ Osp::Base::Runtime::Timer *_timer;
+ Osp::Media::AudioOut *_audioOut;
+ Osp::Base::ByteBuffer _audioBuffer[NUM_AUDIO_BUFFERS];
+ int _head, _tail, _ready, _interval, _playing;
+ bool _muted;
+};
+
+#endif
diff --git a/backends/platform/bada/bada.mk b/backends/platform/bada/bada.mk
new file mode 100644
index 0000000000..7c72d7752b
--- /dev/null
+++ b/backends/platform/bada/bada.mk
@@ -0,0 +1,5 @@
+# Bada specific modules are built under eclipse
+
+$(EXECUTABLE): $(OBJS)
+ rm -f $@
+ ar Tru $@ $(OBJS)
diff --git a/backends/platform/bada/form.cpp b/backends/platform/bada/form.cpp
new file mode 100644
index 0000000000..6163053c96
--- /dev/null
+++ b/backends/platform/bada/form.cpp
@@ -0,0 +1,464 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FAppApplication.h>
+
+#include "common/translation.h"
+#include "base/main.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+
+using namespace Osp::Base::Runtime;
+using namespace Osp::Ui;
+using namespace Osp::Ui::Controls;
+
+// number of volume levels
+#define LEVEL_RANGE 5
+
+// round down small Y touch values to 1 to allow the
+// cursor to be positioned at the top of the screen
+#define MIN_TOUCH_Y 10
+
+// block for up to 2.5 seconds during shutdown to
+// allow the game thread to exit gracefully.
+#define EXIT_SLEEP_STEP 10
+#define EXIT_SLEEP 250
+
+//
+// BadaAppForm
+//
+BadaAppForm::BadaAppForm() :
+ _gameThread(0),
+ _state(InitState),
+ _buttonState(LeftButton),
+ _shortcut(SetVolume) {
+ _eventQueueLock = new Mutex();
+ _eventQueueLock->Create();
+}
+
+result BadaAppForm::Construct() {
+ result r = Form::Construct(Controls::FORM_STYLE_NORMAL);
+ if (IsFailed(r)) {
+ return r;
+ }
+
+ BadaSystem *badaSystem = NULL;
+ _gameThread = NULL;
+
+ badaSystem = new BadaSystem(this);
+ r = badaSystem != NULL ? E_SUCCESS : E_OUT_OF_MEMORY;
+
+ if (!IsFailed(r)) {
+ r = badaSystem->Construct();
+ }
+
+ if (!IsFailed(r)) {
+ _gameThread = new Thread();
+ r = _gameThread != NULL ? E_SUCCESS : E_OUT_OF_MEMORY;
+ }
+
+ if (!IsFailed(r)) {
+ r = _gameThread->Construct(*this);
+ }
+
+ if (IsFailed(r)) {
+ if (badaSystem != NULL) {
+ delete badaSystem;
+ }
+ if (_gameThread != NULL) {
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+ } else {
+ g_system = badaSystem;
+ }
+
+ return r;
+}
+
+BadaAppForm::~BadaAppForm() {
+ logEntered();
+
+ if (_gameThread && _state != ErrorState) {
+ terminate();
+
+ _gameThread->Stop();
+ if (_state != ErrorState) {
+ _gameThread->Join();
+ }
+
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+
+ if (_eventQueueLock) {
+ delete _eventQueueLock;
+ _eventQueueLock = NULL;
+ }
+
+ logLeaving();
+}
+
+//
+// abort the game thread
+//
+void BadaAppForm::terminate() {
+ if (_state == ActiveState) {
+ ((BadaSystem *)g_system)->setMute(true);
+
+ _eventQueueLock->Acquire();
+
+ Common::Event e;
+ e.type = Common::EVENT_QUIT;
+ _eventQueue.push(e);
+ _state = ClosingState;
+
+ _eventQueueLock->Release();
+
+ // block while thread ends
+ AppLog("waiting for shutdown");
+ for (int i = 0; i < EXIT_SLEEP_STEP && _state == ClosingState; i++) {
+ Thread::Sleep(EXIT_SLEEP);
+ }
+
+ if (_state == ClosingState) {
+ // failed to terminate - Join() will freeze
+ _state = ErrorState;
+ }
+ }
+}
+
+void BadaAppForm::exitSystem() {
+ _state = ErrorState;
+
+ if (_gameThread) {
+ _gameThread->Stop();
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+}
+
+result BadaAppForm::OnInitializing(void) {
+ logEntered();
+
+ SetOrientation(ORIENTATION_LANDSCAPE);
+ AddOrientationEventListener(*this);
+ AddTouchEventListener(*this);
+ AddKeyEventListener(*this);
+
+ // set focus to enable receiving key events
+ SetFocusable(true);
+ SetFocus();
+
+ return E_SUCCESS;
+}
+
+result BadaAppForm::OnDraw(void) {
+ logEntered();
+
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics && graphics->isReady()) {
+ g_system->updateScreen();
+ }
+ }
+
+ return E_SUCCESS;
+}
+
+bool BadaAppForm::pollEvent(Common::Event &event) {
+ bool result = false;
+
+ _eventQueueLock->Acquire();
+ if (!_eventQueue.empty()) {
+ event = _eventQueue.pop();
+ result = true;
+ }
+ _eventQueueLock->Release();
+
+ return result;
+}
+
+void BadaAppForm::pushEvent(Common::EventType type,
+ const Point &currentPosition) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics) {
+ // graphics could be NULL at startup or when
+ // displaying the system error screen
+ Common::Event e;
+ e.type = type;
+ e.mouse.x = currentPosition.x;
+ e.mouse.y = currentPosition.y > MIN_TOUCH_Y ? currentPosition.y : 1;
+
+ bool moved = graphics->moveMouse(e.mouse.x, e.mouse.y);
+
+ _eventQueueLock->Acquire();
+
+ if (moved && type != Common::EVENT_MOUSEMOVE) {
+ Common::Event moveEvent;
+ moveEvent.type = Common::EVENT_MOUSEMOVE;
+ moveEvent.mouse = e.mouse;
+ _eventQueue.push(moveEvent);
+ }
+
+ _eventQueue.push(e);
+ _eventQueueLock->Release();
+ }
+}
+
+void BadaAppForm::pushKey(Common::KeyCode keycode) {
+ Common::Event e;
+ e.synthetic = false;
+ e.kbd.keycode = keycode;
+ e.kbd.ascii = keycode;
+ e.kbd.flags = 0;
+
+ _eventQueueLock->Acquire();
+
+ e.type = Common::EVENT_KEYDOWN;
+ _eventQueue.push(e);
+ e.type = Common::EVENT_KEYUP;
+ _eventQueue.push(e);
+
+ _eventQueueLock->Release();
+}
+
+void BadaAppForm::OnOrientationChanged(const Control &source,
+ OrientationStatus orientationStatus) {
+ logEntered();
+ if (_state == InitState) {
+ _state = ActiveState;
+ _gameThread->Start();
+ }
+}
+
+Object *BadaAppForm::Run(void) {
+ scummvm_main(0, 0);
+
+ if (_state == ActiveState) {
+ Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL);
+ }
+ _state = DoneState;
+ return NULL;
+}
+
+void BadaAppForm::setButtonShortcut() {
+ switch (_buttonState) {
+ case LeftButton:
+ g_system->displayMessageOnOSD(_("Right Click Once"));
+ _buttonState = RightButtonOnce;
+ break;
+ case RightButtonOnce:
+ g_system->displayMessageOnOSD(_("Right Click"));
+ _buttonState = RightButton;
+ break;
+ case RightButton:
+ g_system->displayMessageOnOSD(_("Move Only"));
+ _buttonState = MoveOnly;
+ break;
+ case MoveOnly:
+ g_system->displayMessageOnOSD(_("Left Click"));
+ _buttonState = LeftButton;
+ break;
+ }
+}
+
+void BadaAppForm::setShortcut() {
+ // cycle to the next shortcut
+ switch (_shortcut) {
+ case ControlMouse:
+ g_system->displayMessageOnOSD(_("Escape Key"));
+ _shortcut = EscapeKey;
+ break;
+
+ case EscapeKey:
+ g_system->displayMessageOnOSD(_("Game Menu"));
+ _shortcut = GameMenu;
+ break;
+
+ case GameMenu:
+ g_system->displayMessageOnOSD(_("Show Keypad"));
+ _shortcut = ShowKeypad;
+ break;
+
+ case SetVolume:
+ // fallthru
+
+ case ShowKeypad:
+ g_system->displayMessageOnOSD(_("Control Mouse"));
+ _shortcut = ControlMouse;
+ break;
+ }
+}
+
+void BadaAppForm::setVolume(bool up, bool minMax) {
+ int level = ((BadaSystem *)g_system)->setVolume(up, minMax);
+ if (level != -1) {
+ char message[32];
+ char ind[LEVEL_RANGE]; // 1..5 (0=off)
+ int j = LEVEL_RANGE - 1; // 0..4
+ for (int i = 1; i <= LEVEL_RANGE; i++) {
+ ind[j--] = level >= i ? '|' : ' ';
+ }
+ snprintf(message, sizeof(message), "Volume: [ %c%c%c%c%c ]",
+ ind[0], ind[1], ind[2], ind[3], ind[4]);
+ g_system->displayMessageOnOSD(message);
+ }
+}
+
+void BadaAppForm::showKeypad() {
+ // display the soft keyboard
+ _buttonState = LeftButton;
+ pushKey(Common::KEYCODE_F7);
+}
+
+void BadaAppForm::OnTouchDoublePressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != MoveOnly) {
+ pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ }
+}
+
+void BadaAppForm::OnTouchFocusIn(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+}
+
+void BadaAppForm::OnTouchFocusOut(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+}
+
+void BadaAppForm::OnTouchLongPressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != LeftButton) {
+ pushKey(Common::KEYCODE_RETURN);
+ }
+}
+
+void BadaAppForm::OnTouchMoved(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ pushEvent(Common::EVENT_MOUSEMOVE, currentPosition);
+}
+
+void BadaAppForm::OnTouchPressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != MoveOnly) {
+ pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ }
+}
+
+void BadaAppForm::OnTouchReleased(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != MoveOnly) {
+ pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP,
+ currentPosition);
+ if (_buttonState == RightButtonOnce) {
+ _buttonState = LeftButton;
+ }
+ // flick to skip dialog
+ if (touchInfo.IsFlicked()) {
+ pushKey(Common::KEYCODE_PERIOD);
+ }
+ }
+}
+
+void BadaAppForm::OnKeyLongPressed(const Control &source, KeyCode keyCode) {
+ logEntered();
+ switch (keyCode) {
+ case KEY_SIDE_UP:
+ _shortcut = SetVolume;
+ setVolume(true, true);
+ return;
+
+ case KEY_SIDE_DOWN:
+ _shortcut = SetVolume;
+ setVolume(false, true);
+ return;
+
+ case KEY_CAMERA:
+ _shortcut = ShowKeypad;
+ showKeypad();
+ return;
+
+ default:
+ break;
+ }
+}
+
+void BadaAppForm::OnKeyPressed(const Control &source, KeyCode keyCode) {
+ switch (keyCode) {
+ case KEY_SIDE_UP:
+ if (_shortcut != SetVolume) {
+ _shortcut = SetVolume;
+ } else {
+ setVolume(true, false);
+ }
+ return;
+
+ case KEY_SIDE_DOWN:
+ switch (_shortcut) {
+ case ControlMouse:
+ setButtonShortcut();
+ break;
+
+ case EscapeKey:
+ pushKey(Common::KEYCODE_ESCAPE);
+ break;
+
+ case GameMenu:
+ pushKey(Common::KEYCODE_F5);
+ break;
+
+ case ShowKeypad:
+ showKeypad();
+ break;
+
+ default:
+ setVolume(false, false);
+ break;
+ }
+ break;
+
+ case KEY_CAMERA:
+ setShortcut();
+ break;
+
+ default:
+ break;
+ }
+}
+
+void BadaAppForm::OnKeyReleased(const Control &source, KeyCode keyCode) {
+}
diff --git a/backends/platform/bada/form.h b/backends/platform/bada/form.h
new file mode 100644
index 0000000000..09ce941a7b
--- /dev/null
+++ b/backends/platform/bada/form.h
@@ -0,0 +1,108 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_FORM_H
+#define BADA_FORM_H
+
+#include <FApp.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+#include <FUiITouchEventListener.h>
+#include <FUiITextEventListener.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/events.h"
+#include "common/queue.h"
+#include "common/mutex.h"
+
+//
+// BadaAppForm
+//
+class BadaAppForm : public Osp::Ui::Controls::Form,
+ public Osp::Ui::IOrientationEventListener,
+ public Osp::Ui::ITouchEventListener,
+ public Osp::Ui::IKeyEventListener,
+ public Osp::Base::Runtime::IRunnable {
+public:
+ BadaAppForm();
+ ~BadaAppForm();
+
+ result Construct();
+ bool pollEvent(Common::Event &event);
+ bool isClosing() { return _state == ClosingState; }
+ void pushKey(Common::KeyCode keycode);
+ void exitSystem();
+
+private:
+ Object *Run();
+ result OnInitializing(void);
+ result OnDraw(void);
+ void OnOrientationChanged(const Osp::Ui::Control &source,
+ Osp::Ui::OrientationStatus orientationStatus);
+ void OnTouchDoublePressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchFocusIn(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchFocusOut(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchLongPressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchMoved(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchPressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchReleased(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnKeyLongPressed(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+ void OnKeyPressed(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+ void OnKeyReleased(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+
+ void pushEvent(Common::EventType type,
+ const Osp::Graphics::Point &currentPosition);
+ void terminate();
+ void setButtonShortcut();
+ void setShortcut();
+ void setVolume(bool up, bool minMax);
+ void showKeypad();
+
+ // event handling
+ Osp::Base::Runtime::Thread *_gameThread;
+ Osp::Base::Runtime::Mutex *_eventQueueLock;
+ Common::Queue<Common::Event> _eventQueue;
+ enum {InitState, ActiveState, ClosingState, DoneState, ErrorState} _state;
+ enum {LeftButton, RightButtonOnce, RightButton, MoveOnly} _buttonState;
+ enum {ControlMouse, EscapeKey, GameMenu, ShowKeypad, SetVolume} _shortcut;
+};
+
+#endif
diff --git a/backends/platform/bada/fs.cpp b/backends/platform/bada/fs.cpp
new file mode 100644
index 0000000000..8e3c4f0f7c
--- /dev/null
+++ b/backends/platform/bada/fs.cpp
@@ -0,0 +1,436 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/fs.h"
+
+#define BUFFER_SIZE 1024
+
+// internal BADA paths
+#define PATH_ROOT "/"
+#define PATH_HOME "/Home"
+#define PATH_HOME_SHARE "/Home/Share"
+#define PATH_HOME_SHARE2 "/Home/Share2"
+#define PATH_HOME_X "/Home/"
+#define PATH_HOME_EXT "/HomeExt"
+#define PATH_MEDIA "/Media"
+#define PATH_CARD "/Storagecard"
+#define PATH_CARD_MEDIA "/Storagecard/Media"
+
+//
+// BadaFileStream
+//
+class BadaFileStream : public Common::SeekableReadStream,
+ public Common::WriteStream,
+ public Common::NonCopyable {
+public:
+ static BadaFileStream *makeFromPath(const String &path, bool writeMode);
+
+ BadaFileStream(File *file, bool writeMode);
+ ~BadaFileStream();
+
+ bool err() const;
+ void clearErr();
+ bool eos() const;
+
+ uint32 write(const void *dataPtr, uint32 dataSize);
+ bool flush();
+
+ int32 pos() const;
+ int32 size() const;
+ bool seek(int32 offs, int whence = SEEK_SET);
+ uint32 read(void *dataPtr, uint32 dataSize);
+
+private:
+ byte buffer[BUFFER_SIZE];
+ uint32 bufferIndex;
+ uint32 bufferLength;
+ bool writeMode;
+ File *file;
+};
+
+BadaFileStream::BadaFileStream(File *ioFile, bool writeMode) :
+ bufferIndex(0),
+ bufferLength(0),
+ writeMode(writeMode),
+ file(ioFile) {
+ AppAssert(ioFile != 0);
+}
+
+BadaFileStream::~BadaFileStream() {
+ if (file) {
+ if (writeMode) {
+ flush();
+ }
+ delete file;
+ }
+}
+
+bool BadaFileStream::err() const {
+ result r = GetLastResult();
+ return (r != E_SUCCESS && r != E_END_OF_FILE);
+}
+
+void BadaFileStream::clearErr() {
+ SetLastResult(E_SUCCESS);
+}
+
+bool BadaFileStream::eos() const {
+ return (bufferLength - bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE);
+}
+
+int32 BadaFileStream::pos() const {
+ return file->Tell() - (bufferLength - bufferIndex);
+}
+
+int32 BadaFileStream::size() const {
+ int32 oldPos = file->Tell();
+ file->Seek(FILESEEKPOSITION_END, 0);
+
+ int32 length = file->Tell();
+ SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, oldPos));
+
+ return length;
+}
+
+bool BadaFileStream::seek(int32 offs, int whence) {
+ bool result = false;
+ switch (whence) {
+ case SEEK_SET:
+ // set from start of file
+ SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, offs));
+ result = (E_SUCCESS == GetLastResult());
+ break;
+
+ case SEEK_CUR:
+ // set relative to offs
+ if (bufferIndex < bufferLength && bufferIndex > (uint32)-offs) {
+ // re-position within the buffer
+ SetLastResult(E_SUCCESS);
+ bufferIndex += offs;
+ return true;
+ } else {
+ offs -= (bufferLength - bufferIndex);
+ if (offs < 0 && file->Tell() + offs < 0) {
+ // avoid negative positioning
+ offs = 0;
+ }
+ if (offs != 0) {
+ SetLastResult(file->Seek(FILESEEKPOSITION_CURRENT, offs));
+ result = (E_SUCCESS == GetLastResult());
+ } else {
+ result = true;
+ }
+ }
+ break;
+
+ case SEEK_END:
+ // set relative to end - positive will increase the file size
+ SetLastResult(file->Seek(FILESEEKPOSITION_END, offs));
+ result = (E_SUCCESS == GetLastResult());
+ break;
+
+ default:
+ AppLog("Invalid whence %d", whence);
+ return false;
+ }
+
+ if (!result) {
+ AppLog("seek failed");
+ }
+
+ bufferIndex = bufferLength = 0;
+ return result;
+}
+
+uint32 BadaFileStream::read(void *ptr, uint32 len) {
+ uint32 result = 0;
+ if (!eos()) {
+ if (bufferIndex < bufferLength) {
+ // use existing buffer
+ uint32 available = bufferLength - bufferIndex;
+ if (len <= available) {
+ // use allocation
+ memcpy((byte*)ptr, &buffer[bufferIndex], len);
+ bufferIndex += len;
+ result = len;
+ } else {
+ // use remaining allocation
+ memcpy((byte*)ptr, &buffer[bufferIndex], available);
+ uint32 remaining = len - available;
+ result = available;
+
+ if (remaining) {
+ result += file->Read(((byte*)ptr) + available, remaining);
+ }
+ bufferIndex = bufferLength = 0;
+ }
+ } else if (len < BUFFER_SIZE) {
+ // allocate and use buffer
+ bufferIndex = 0;
+ bufferLength = file->Read(buffer, BUFFER_SIZE);
+ if (bufferLength) {
+ if (bufferLength < len) {
+ len = bufferLength;
+ }
+ memcpy((byte*)ptr, buffer, len);
+ result = bufferIndex = len;
+ }
+ } else {
+ result = file->Read((byte*)ptr, len);
+ bufferIndex = bufferLength = 0;
+ }
+ } else {
+ AppLog("Attempted to read past EOS");
+ }
+ return result;
+}
+
+uint32 BadaFileStream::write(const void *ptr, uint32 len) {
+ result r = file->Write(ptr, len);
+ SetLastResult(r);
+ return (r == E_SUCCESS ? len : 0);
+}
+
+bool BadaFileStream::flush() {
+ logEntered();
+ SetLastResult(file->Flush());
+ return (E_SUCCESS == GetLastResult());
+}
+
+BadaFileStream *BadaFileStream::makeFromPath(const String &path, bool writeMode) {
+ File *ioFile = new File();
+
+ String filePath = path;
+ if (writeMode && (path[0] != '.' && path[0] != '/')) {
+ filePath.Insert(PATH_HOME_X, 0);
+ }
+
+ AppLog("Open file %S", filePath.GetPointer());
+
+ result r = ioFile->Construct(filePath, writeMode ? L"w" : L"r", writeMode);
+ if (r == E_SUCCESS) {
+ return new BadaFileStream(ioFile, writeMode);
+ }
+
+ AppLog("Failed to open file");
+ delete ioFile;
+ return 0;
+}
+
+//
+// converts a bada (wchar) String into a scummVM (char) string
+//
+Common::String fromString(const Osp::Base::String &in) {
+ ByteBuffer *buf = StringUtil::StringToUtf8N(in);
+ Common::String result((const char*)buf->GetPointer());
+ delete buf;
+
+ return result;
+}
+
+//
+// BadaFilesystemNode
+//
+BadaFilesystemNode::BadaFilesystemNode(const Common::String &nodePath) {
+ AppAssert(nodePath.size() > 0);
+ init(nodePath);
+}
+
+BadaFilesystemNode::BadaFilesystemNode(const Common::String &root,
+ const Common::String &nodePath) {
+ // Make sure the string contains no slashes
+ AppAssert(!nodePath.contains('/'));
+
+ // We assume here that path is already normalized (hence don't bother to
+ // call Common::normalizePath on the final path).
+ Common::String newPath(root);
+ if (root.lastChar() != '/') {
+ newPath += '/';
+ }
+ newPath += nodePath;
+
+ init(newPath);
+}
+
+void BadaFilesystemNode::init(const Common::String &nodePath) {
+ // Normalize the path (that is, remove unneeded slashes etc.)
+ _path = Common::normalizePath(nodePath, '/');
+ _displayName = Common::lastPathComponent(_path, '/');
+
+ StringUtil::Utf8ToString(_path.c_str(), _unicodePath);
+ _isVirtualDir = (_path == PATH_ROOT ||
+ _path == PATH_HOME ||
+ _path == PATH_HOME_SHARE ||
+ _path == PATH_HOME_SHARE2 ||
+ _path == PATH_CARD);
+ _isValid = _isVirtualDir || !IsFailed(File::GetAttributes(_unicodePath, _attr));
+}
+
+bool BadaFilesystemNode::exists() const {
+ return _isValid;
+}
+
+bool BadaFilesystemNode::isReadable() const {
+ return _isVirtualDir || _isValid;
+}
+
+bool BadaFilesystemNode::isDirectory() const {
+ return _isVirtualDir || (_isValid && _attr.IsDirectory());
+}
+
+bool BadaFilesystemNode::isWritable() const {
+ bool result = (_isValid && !_isVirtualDir && !_attr.IsDirectory() && !_attr.IsReadOnly());
+ if (_path == PATH_HOME ||
+ _path == PATH_HOME_EXT ||
+ _path == PATH_HOME_SHARE ||
+ _path == PATH_HOME_SHARE2) {
+ result = true;
+ }
+ return result;
+}
+
+AbstractFSNode *BadaFilesystemNode::getChild(const Common::String &n) const {
+ AppAssert(!_path.empty());
+ AppAssert(isDirectory());
+ return new BadaFilesystemNode(_path, n);
+}
+
+bool BadaFilesystemNode::getChildren(AbstractFSList &myList,
+ ListMode mode, bool hidden) const {
+ AppAssert(isDirectory());
+
+ bool result = false;
+
+ if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly) {
+ // present well known BADA file system areas
+ if (_path == PATH_ROOT) {
+ myList.push_back(new BadaFilesystemNode(PATH_HOME));
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_EXT));
+ myList.push_back(new BadaFilesystemNode(PATH_MEDIA));
+ myList.push_back(new BadaFilesystemNode(PATH_CARD));
+ result = true; // no more entries
+ } else if (_path == PATH_CARD) {
+ myList.push_back(new BadaFilesystemNode(PATH_CARD_MEDIA));
+ result = true; // no more entries
+ } else if (_path == PATH_HOME) {
+ // ensure share path is always included
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE));
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE2));
+ }
+ }
+
+ if (!result) {
+ DirEnumerator *pDirEnum = 0;
+ Directory *pDir = new Directory();
+
+ // open directory
+ if (IsFailed(pDir->Construct(_unicodePath))) {
+ AppLog("Failed to open directory");
+ } else {
+ // read all directory entries
+ pDirEnum = pDir->ReadN();
+ if (pDirEnum) {
+ result = true;
+ }
+
+ // loop through all directory entries
+ while (pDirEnum && pDirEnum->MoveNext() == E_SUCCESS) {
+ DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();
+
+ // skip 'invisible' files if necessary
+ Osp::Base::String fileName = dirEntry.GetName();
+
+ if (fileName[0] == '.' && !hidden) {
+ continue;
+ }
+
+ // skip '.' and '..' to avoid cycles
+ if ((fileName[0] == '.' && fileName[1] == 0) ||
+ (fileName[0] == '.' && fileName[1] == '.')) {
+ continue;
+ }
+
+ // Honor the chosen mode
+ if ((mode == Common::FSNode::kListFilesOnly && dirEntry.IsDirectory()) ||
+ (mode == Common::FSNode::kListDirectoriesOnly && !dirEntry.IsDirectory())) {
+ continue;
+ }
+ myList.push_back(new BadaFilesystemNode(_path, fromString(fileName)));
+ }
+ }
+
+ // cleanup
+ if (pDirEnum) {
+ delete pDirEnum;
+ }
+
+ // close the opened directory
+ if (pDir) {
+ delete pDir;
+ }
+ }
+
+ return result;
+}
+
+AbstractFSNode *BadaFilesystemNode::getParent() const {
+ logEntered();
+ if (_path == PATH_ROOT) {
+ return 0; // The filesystem root has no parent
+ }
+
+ const char *start = _path.c_str();
+ const char *end = start + _path.size();
+
+ // Strip of the last component. We make use of the fact that at this
+ // point, path is guaranteed to be normalized
+ while (end > start && *(end-1) != '/') {
+ end--;
+ }
+
+ if (end == start) {
+ // This only happens if we were called with a relative path, for which
+ // there simply is no parent.
+ // TODO: We could also resolve this by assuming that the parent is the
+ // current working directory, and returning a node referring to that.
+ return 0;
+ }
+
+ return new BadaFilesystemNode(Common::String(start, end));
+}
+
+Common::SeekableReadStream *BadaFilesystemNode::createReadStream() {
+ Common::SeekableReadStream *result = BadaFileStream::makeFromPath(_unicodePath, false);
+ if (result != NULL) {
+ _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
+ }
+ return result;
+}
+
+Common::WriteStream *BadaFilesystemNode::createWriteStream() {
+ Common::WriteStream *result = BadaFileStream::makeFromPath(_unicodePath, true);
+ if (result != NULL) {
+ _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
+ }
+ return result;
+}
diff --git a/backends/platform/bada/fs.h b/backends/platform/bada/fs.h
new file mode 100644
index 0000000000..d7d368ac20
--- /dev/null
+++ b/backends/platform/bada/fs.h
@@ -0,0 +1,82 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef BADA_FILESYSTEM_H
+#define BADA_FILESYSTEM_H
+
+#include <FBaseString.h>
+#include <FBaseUtilStringUtil.h>
+#include <FIoDirectory.h>
+#include <FIoFile.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/stream.h"
+#include "backends/fs/abstract-fs.h"
+
+using namespace Osp::Io;
+using namespace Osp::Base;
+using namespace Osp::Base::Utility;
+
+/**
+ * Implementation of the ScummVM file system API based on BADA.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFSNode.
+ */
+class BadaFilesystemNode : public AbstractFSNode {
+public:
+ /**
+ * Creates a BadaFilesystemNode for a given path.
+ *
+ * @param path the path the new node should point to.
+ */
+ BadaFilesystemNode(const Common::String &path);
+
+ Common::String getDisplayName() const { return _displayName; }
+ Common::String getName() const { return _displayName; }
+ Common::String getPath() const { return _path; }
+
+ bool exists() const;
+ bool isDirectory() const;
+ bool isReadable() const;
+ bool isWritable() const;
+
+ AbstractFSNode *getChild(const Common::String &n) const;
+ bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
+ AbstractFSNode *getParent() const;
+
+ Common::SeekableReadStream *createReadStream();
+ Common::WriteStream *createWriteStream();
+
+protected:
+ BadaFilesystemNode(const Common::String &root,
+ const Common::String &p);
+ void init(const Common::String &nodePath);
+
+ Common::String _displayName;
+ Common::String _path;
+ String _unicodePath;
+ bool _isValid;
+ bool _isVirtualDir;
+ FileAttributes _attr;
+};
+
+#endif
diff --git a/backends/platform/bada/graphics.cpp b/backends/platform/bada/graphics.cpp
new file mode 100644
index 0000000000..4ab90a633f
--- /dev/null
+++ b/backends/platform/bada/graphics.cpp
@@ -0,0 +1,315 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/fontman.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/graphics.h"
+
+//
+// BadaGraphicsManager
+//
+BadaGraphicsManager::BadaGraphicsManager(BadaAppForm *appForm) :
+ _appForm(appForm),
+ _eglDisplay(EGL_DEFAULT_DISPLAY),
+ _eglSurface(EGL_NO_SURFACE),
+ _eglConfig(0),
+ _eglContext(EGL_NO_CONTEXT),
+ _initState(true) {
+ assert(appForm != NULL);
+ _videoMode.fullscreen = true;
+ _videoMode.antialiasing = true;
+}
+
+const Graphics::Font *BadaGraphicsManager::getFontOSD() {
+ return FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);
+}
+
+bool BadaGraphicsManager::moveMouse(int16 &x, int16 &y) {
+ int16 currentX = _cursorState.x;
+ int16 currentY = _cursorState.y;
+
+ // save the current hardware coordinates
+ _cursorState.x = x;
+ _cursorState.y = y;
+
+ // return x/y as game coordinates
+ adjustMousePosition(x, y);
+
+ // convert current x/y to game coordinates
+ adjustMousePosition(currentX, currentY);
+
+ // return whether game coordinates have changed
+ return (currentX != x || currentY != y);
+}
+
+Common::List<Graphics::PixelFormat> BadaGraphicsManager::getSupportedFormats() const {
+ logEntered();
+
+ Common::List<Graphics::PixelFormat> res;
+ res.push_back(Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0));
+ res.push_back(Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
+ res.push_back(Graphics::PixelFormat(2, 5, 5, 5, 1, 11, 6, 1, 0));
+ res.push_back(Graphics::PixelFormat::createFormatCLUT8());
+ return res;
+}
+
+bool BadaGraphicsManager::hasFeature(OSystem::Feature f) {
+ bool result = (f == OSystem::kFeatureFullscreenMode ||
+ f == OSystem::kFeatureVirtualKeyboard ||
+ OpenGLGraphicsManager::hasFeature(f));
+ return result;
+}
+
+void BadaGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
+ OpenGLGraphicsManager::setFeatureState(f, enable);
+}
+
+void BadaGraphicsManager::setReady() {
+ _initState = false;
+}
+
+void BadaGraphicsManager::updateScreen() {
+ if (_transactionMode == kTransactionNone) {
+ internUpdateScreen();
+ }
+}
+
+bool BadaGraphicsManager::loadEgl() {
+ logEntered();
+
+ EGLint numConfigs = 1;
+ EGLint eglConfigList[] = {
+ EGL_RED_SIZE, 5,
+ EGL_GREEN_SIZE, 6,
+ EGL_BLUE_SIZE, 5,
+ EGL_ALPHA_SIZE, 0,
+ EGL_DEPTH_SIZE, 8,
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT,
+ EGL_NONE
+ };
+
+ EGLint eglContextList[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 1,
+ EGL_NONE
+ };
+
+ eglBindAPI(EGL_OPENGL_ES_API);
+
+ if (_eglDisplay) {
+ unloadGFXMode();
+ }
+
+ _eglDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY);
+ if (EGL_NO_DISPLAY == _eglDisplay) {
+ systemError("eglGetDisplay() failed");
+ return false;
+ }
+
+ if (EGL_FALSE == eglInitialize(_eglDisplay, NULL, NULL) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglInitialize() failed");
+ return false;
+ }
+
+ if (EGL_FALSE == eglChooseConfig(_eglDisplay, eglConfigList,
+ &_eglConfig, 1, &numConfigs) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglChooseConfig() failed");
+ return false;
+ }
+
+ if (!numConfigs) {
+ systemError("eglChooseConfig() failed. Matching config does not exist \n");
+ return false;
+ }
+
+ _eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig,
+ (EGLNativeWindowType)_appForm, NULL);
+ if (EGL_NO_SURFACE == _eglSurface || EGL_SUCCESS != eglGetError()) {
+ systemError("eglCreateWindowSurface() failed. EGL_NO_SURFACE");
+ return false;
+ }
+
+ _eglContext = eglCreateContext(_eglDisplay, _eglConfig,
+ EGL_NO_CONTEXT, eglContextList);
+ if (EGL_NO_CONTEXT == _eglContext ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglCreateContext() failed");
+ return false;
+ }
+
+ if (false == eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglMakeCurrent() failed");
+ return false;
+ }
+
+ logLeaving();
+ return true;
+}
+
+bool BadaGraphicsManager::loadGFXMode() {
+ logEntered();
+
+ if (!loadEgl()) {
+ unloadGFXMode();
+ return false;
+ }
+
+ int x, y, width, height;
+ _appForm->GetBounds(x, y, width, height);
+ _videoMode.overlayWidth = _videoMode.hardwareWidth = width;
+ _videoMode.overlayHeight = _videoMode.hardwareHeight = height;
+ _videoMode.scaleFactor = 3; // for proportional sized cursor in the launcher
+
+ AppLog("screen size: %dx%d", _videoMode.hardwareWidth, _videoMode.hardwareHeight);
+ return OpenGLGraphicsManager::loadGFXMode();
+}
+
+void BadaGraphicsManager::loadTextures() {
+ logEntered();
+
+ OpenGLGraphicsManager::loadTextures();
+
+ // prevent image skew in some games, see:
+ // http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall
+ // note: this did not solve the pixel border problem in refreshGameScreen()
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+}
+
+void BadaGraphicsManager::internUpdateScreen() {
+ if (!_initState) {
+ OpenGLGraphicsManager::internUpdateScreen();
+ eglSwapBuffers(_eglDisplay, _eglSurface);
+ } else {
+ showSplash();
+ }
+}
+
+void BadaGraphicsManager::unloadGFXMode() {
+ logEntered();
+
+ if (EGL_NO_DISPLAY != _eglDisplay) {
+ eglMakeCurrent(_eglDisplay, NULL, NULL, NULL);
+
+ if (_eglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(_eglDisplay, _eglContext);
+ _eglContext = EGL_NO_CONTEXT;
+ }
+
+ if (_eglSurface != EGL_NO_SURFACE) {
+ eglDestroySurface(_eglDisplay, _eglSurface);
+ _eglSurface = EGL_NO_SURFACE;
+ }
+
+ eglTerminate(_eglDisplay);
+ _eglDisplay = EGL_NO_DISPLAY;
+ }
+
+ _eglConfig = NULL;
+
+ OpenGLGraphicsManager::unloadGFXMode();
+ logLeaving();
+}
+
+void BadaGraphicsManager::refreshGameScreen() {
+ if (_screenNeedsRedraw)
+ _screenDirtyRect = Common::Rect(0, 0, _screenData.w, _screenData.h);
+
+ int x = _screenDirtyRect.left;
+ int y = _screenDirtyRect.top;
+ int w = _screenDirtyRect.width();
+ int h = _screenDirtyRect.height();
+
+ if (_screenData.format.bytesPerPixel == 1) {
+ // Create a temporary RGB888 surface
+ int sw = w;
+ int sh = h;
+
+ if (_videoMode.screenWidth == w && _videoMode.screenHeight == h) {
+ // The extra border prevents random pixels from appearing in the right and bottom
+ // screen column/row. Not sure whether this should be applied to opengl-graphics.cpp
+ sw = w + 1;
+ sh = h + 1;
+ }
+
+ byte *surface = new byte[sw * sh * 3];
+
+ // Convert the paletted buffer to RGB888
+ const byte *src = (byte *)_screenData.pixels + y * _screenData.pitch;
+ src += x * _screenData.format.bytesPerPixel;
+ byte *dst = surface;
+ for (int i = 0; i < h; i++) {
+ for (int j = 0; j < w; j++) {
+ dst[0] = _gamePalette[src[j] * 3];
+ dst[1] = _gamePalette[src[j] * 3 + 1];
+ dst[2] = _gamePalette[src[j] * 3 + 2];
+ dst += 3;
+ }
+ src += _screenData.pitch;
+ }
+
+ // Update the texture
+ _gameTexture->updateBuffer(surface, w * 3, x, y, sw, sh);
+
+ // Free the temp surface
+ delete[] surface;
+ } else {
+ // Update the texture
+ _gameTexture->updateBuffer((byte *)_screenData.pixels + y * _screenData.pitch +
+ x * _screenData.format.bytesPerPixel, _screenData.pitch, x, y, w, h);
+ }
+
+ _screenNeedsRedraw = false;
+ _screenDirtyRect = Common::Rect();
+}
+
+// display a simple splash screen until launcher is ready
+void BadaGraphicsManager::showSplash() {
+ Canvas canvas;
+ canvas.Construct();
+ canvas.SetBackgroundColor(Color::COLOR_BLACK);
+ canvas.Clear();
+
+ int x = _videoMode.hardwareWidth / 3;
+ int y = _videoMode.hardwareHeight / 3;
+
+ Font *pFont = new Font();
+ pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 55);
+ canvas.SetFont(*pFont);
+ canvas.SetForegroundColor(Color::COLOR_GREEN);
+ canvas.DrawText(Point(x, y), L"ScummVM");
+ delete pFont;
+
+ pFont = new Font();
+ pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 35);
+ canvas.SetFont(*pFont);
+ canvas.SetForegroundColor(Color::COLOR_WHITE);
+ canvas.DrawText(Point(x + 70, y + 50), L"Loading ...");
+ delete pFont;
+
+ canvas.Show();
+
+}
diff --git a/backends/platform/bada/graphics.h b/backends/platform/bada/graphics.h
new file mode 100644
index 0000000000..5e49419979
--- /dev/null
+++ b/backends/platform/bada/graphics.h
@@ -0,0 +1,73 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_GRAPHICS_H
+#define BADA_GRAPHICS_H
+
+#include <FBase.h>
+#include <FGraphics.h>
+#include <FApp.h>
+#include <FGraphicsOpengl.h>
+#include <FSystem.h>
+#include <FUi.h>
+
+#include "config.h"
+#include "backends/graphics/opengl/opengl-graphics.h"
+#include "graphics/font.h"
+#include "backends/platform/bada/form.h"
+
+using namespace Osp::Graphics;
+using namespace Osp::Graphics::Opengl;
+using namespace Osp::App;
+
+class BadaGraphicsManager : public OpenGLGraphicsManager {
+public:
+ BadaGraphicsManager(BadaAppForm *appForm);
+
+ Common::List<Graphics::PixelFormat> getSupportedFormats() const;
+ bool hasFeature(OSystem::Feature f);
+ void updateScreen();
+ void setFeatureState(OSystem::Feature f, bool enable);
+ void setReady();
+ bool isReady() { return !_initState; }
+ const Graphics::Font *getFontOSD();
+ bool moveMouse(int16 &x, int16 &y);
+
+private:
+ void internUpdateScreen();
+ bool loadGFXMode();
+ void loadTextures();
+ void unloadGFXMode();
+ void refreshGameScreen();
+ void setInternalMousePosition(int x, int y) {}
+ void showSplash();
+
+ bool loadEgl();
+ BadaAppForm *_appForm;
+ EGLDisplay _eglDisplay;
+ EGLSurface _eglSurface;
+ EGLConfig _eglConfig;
+ EGLContext _eglContext;
+ bool _initState;
+};
+
+#endif
diff --git a/backends/platform/bada/main.cpp b/backends/platform/bada/main.cpp
new file mode 100644
index 0000000000..8c40f24dd1
--- /dev/null
+++ b/backends/platform/bada/main.cpp
@@ -0,0 +1,67 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FSystem.h>
+
+#include "backends/platform/bada/portdefs.h"
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/application.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Collection;
+
+C_LINKAGE_BEGIN
+
+_EXPORT_ int OspMain(int argc, char *pArgv[]);
+
+/**
+ * The entry function of bada application called by the operating system.
+ */
+int OspMain(int argc, char *pArgv[]) {
+ result r = E_SUCCESS;
+
+ AppLog("Application started.");
+ ArrayList *pArgs = new ArrayList();
+ pArgs->Construct();
+
+ for (int i = 0; i < argc; i++) {
+ pArgs->Add(*(new String(pArgv[i])));
+ }
+
+ r = Osp::App::Application::Execute(BadaScummVM::createInstance, pArgs);
+ if (IsFailed(r)) {
+ r &= 0x0000FFFF;
+ }
+
+ pArgs->RemoveAll(true);
+ delete pArgs;
+ AppLog("Application finished.");
+
+ return static_cast<int>(r);
+}
+
+C_LINKAGE_END
+
+
diff --git a/backends/platform/bada/missing.cpp b/backends/platform/bada/missing.cpp
new file mode 100644
index 0000000000..a5433ec61a
--- /dev/null
+++ b/backends/platform/bada/missing.cpp
@@ -0,0 +1,113 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+
+#include "backends/platform/bada/portdefs.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+
+#define BUF_SIZE 255
+
+void systemError(const char *message);
+
+C_LINKAGE_BEGIN
+
+int __errno; // for overridden method in saves/default/default-saves.cpp
+
+void __assert_func(const char *file, int line,
+ const char *func, const char *err) {
+ char buffer[BUF_SIZE];
+ snprintf(buffer, sizeof(buffer), "%s %d %s %s", file, line, func, err);
+ systemError(buffer);
+}
+
+void stderr_fprintf(void*, const char *format, ...) {
+ va_list ap;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ AppLog(buffer);
+}
+
+void stderr_vfprintf(void*, const char *format, va_list ap) {
+ char buffer[BUF_SIZE];
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+ AppLog(buffer);
+}
+
+int printf(const char *format, ...) {
+ int result = 0;
+ va_list ap;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ AppLog(buffer);
+
+ return result;
+}
+
+int sprintf(char *str, const char *format, ...) {
+ va_list ap;
+ int result;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ strcpy(str, buffer);
+
+ return result;
+}
+
+char *strdup(const char *strSource) {
+ char *buffer;
+ int len = strlen(strSource) + 1;
+ buffer = (char*)malloc(len);
+ if (buffer) {
+ memcpy(buffer, strSource, len);
+ }
+ return buffer;
+}
+
+int vsprintf(char *str, const char *format, va_list ap) {
+ char buffer[BUF_SIZE];
+ int result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ strcpy(str, buffer);
+ return result;
+}
+
+C_LINKAGE_END
diff --git a/backends/platform/bada/portdefs.h b/backends/platform/bada/portdefs.h
new file mode 100644
index 0000000000..e85d578678
--- /dev/null
+++ b/backends/platform/bada/portdefs.h
@@ -0,0 +1,84 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef PORT_DEFS_H
+#define PORT_DEFS_H
+
+#include <assert.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#define M_PI 3.14159265358979323846
+
+#ifdef __cplusplus
+ #include <ctype.h> // causes a link error when building c programs
+ #define C_LINKAGE_BEGIN extern "C" {
+ #define C_LINKAGE_END }
+#else
+ #define C_LINKAGE_BEGIN
+ #define C_LINKAGE_END
+#endif
+
+C_LINKAGE_BEGIN
+
+// for libFLAC
+#undef fseeko
+#undef ftello
+#define fseeko fseek
+#define ftello ftell
+
+// overcome use of fprintf since bada/newlib (1.2) does not
+// support stderr/stdout (undefined reference to `_impure_ptr').
+
+void stderr_fprintf(void*, const char *format, ...);
+void stderr_vfprintf(void*, const char *format, va_list ap);
+
+#undef fprintf
+#undef vfprintf
+#undef stderr
+#undef stdout
+#undef stdin
+#undef fputs
+#undef fflush
+
+#define stderr (void*)0
+#define stdout (void*)1
+#define stdin (void*)2
+#define fputs(str, file)
+#define fflush(file)
+#define sscanf simple_sscanf
+#define fprintf stderr_fprintf
+#define vfprintf stderr_vfprintf
+
+int printf(const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+int simple_sscanf(const char *buffer, const char *format, ...);
+char *strdup(const char *s1);
+int vsprintf(char *str, const char *format, va_list ap);
+
+C_LINKAGE_END
+
+#endif
diff --git a/backends/platform/bada/sscanf.cpp b/backends/platform/bada/sscanf.cpp
new file mode 100644
index 0000000000..4ef964b47e
--- /dev/null
+++ b/backends/platform/bada/sscanf.cpp
@@ -0,0 +1,182 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+//
+// simple sscanf replacement to match scummvm usage patterns
+//
+
+bool scanInt(const char **in, va_list *ap, int max) {
+ while (**in && (**in == ' ' || **in == '0')) {
+ (*in)++;
+ }
+
+ int *arg = va_arg(*ap, int*);
+ char *end;
+ long n = strtol(*in, &end, 0);
+
+ bool err = false;
+ if (end == *in || (max > 0 && (end - *in) > max)) {
+ err = true;
+ } else {
+ *arg = (int)n;
+ *in = end;
+ }
+ return err;
+}
+
+bool scanHex(const char **in, va_list *ap) {
+ unsigned *arg = va_arg(*ap, unsigned*);
+ char *end;
+ long n = strtol(*in, &end, 16);
+ if (end == *in) {
+ return true;
+ }
+
+ *in = end;
+ *arg = (unsigned) n;
+ return false;
+}
+
+bool scanString(const char **in, va_list *ap) {
+ char *arg = va_arg(*ap, char*);
+ while (**in && **in != ' ' && **in != '\n' && **in != '\t') {
+ *arg = **in;
+ arg++;
+ (*in)++;
+ }
+ *arg = '\0';
+ (*in)++;
+ return false;
+}
+
+bool scanStringUntil(const char **in, va_list *ap, char c_end) {
+ char *arg = va_arg(*ap, char*);
+ while (**in && **in != c_end) {
+ *arg = **in;
+ *arg++;
+ (*in)++;
+ }
+ *arg = 0;
+ (*in)++;
+ return false;
+}
+
+bool scanChar(const char **in, va_list *ap) {
+ char *arg = va_arg(*ap, char*);
+ if (**in) {
+ *arg = **in;
+ (*in)++;
+ }
+ return false;
+}
+
+extern "C" int simple_sscanf(const char *input, const char *format, ...) {
+ va_list ap;
+ int result = 0;
+ const char *next = input;
+
+ va_start(ap, format);
+
+ while (*format) {
+ if (*format == '%') {
+ format++;
+ int max = 0;
+ while (isdigit(*format)) {
+ max = (max * 10) + (*format - '0');
+ format++;
+ }
+
+ bool err = false;
+ switch (*format++) {
+ case 'c':
+ err = scanChar(&next, &ap);
+ break;
+ case 'd':
+ case 'u':
+ err = scanInt(&next, &ap, max);
+ break;
+ case 'x':
+ err = scanHex(&next, &ap);
+ break;
+ case 's':
+ err = scanString(&next, &ap);
+ break;
+ case '[':
+ // assume %[^c]
+ if ('^' != *format) {
+ err = true;
+ } else {
+ format++;
+ if (*format && *(format+1) == ']') {
+ err = scanStringUntil(&next, &ap, *format);
+ format += 2;
+ } else {
+ err = true;
+ }
+ }
+ break;
+ default:
+ err = true;
+ break;
+ }
+
+ if (err) {
+ break;
+ } else {
+ result++;
+ }
+ } else if (*format++ != *next++) {
+ // match input
+ break;
+ }
+ }
+
+ va_end(ap);
+ return result;
+}
+
+#if defined(TEST)
+int main(int argc, char *pArgv[]) {
+ int x,y,h;
+ char buffer[100];
+ unsigned u;
+ char c;
+ strcpy(buffer, "hello");
+ char *b = buffer;
+
+ // strcpy(buffer, "in the buffer something");
+ if (simple_sscanf("CAT 123x-10 0x100 FONT large 1 enough\n 123456.AUD $",
+ "CAT %dx%d %x FONT %[^\n] %06u.AUD %c",
+ &x, &y, &h, b, &u, &c) != 6) {
+ printf("Failed\n");
+ } else {
+ printf("Success %d %d %d %s %d '%c'\n", x, y, h, buffer, u, c);
+ }
+ return 0;
+}
+#endif
diff --git a/backends/platform/bada/system.cpp b/backends/platform/bada/system.cpp
new file mode 100644
index 0000000000..37d7028687
--- /dev/null
+++ b/backends/platform/bada/system.cpp
@@ -0,0 +1,499 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FUiCtrlMessageBox.h>
+
+#include "common/config-manager.h"
+#include "common/file.h"
+#include "engines/engine.h"
+#include "graphics/font.h"
+#include "graphics/fontman.h"
+#include "graphics/fonts/bdf.h"
+#include "backends/saves/default/default-saves.h"
+#include "backends/events/default/default-events.h"
+#include "backends/audiocd/default/default-audiocd.h"
+#include "backends/mutex/mutex.h"
+#include "backends/fs/fs-factory.h"
+#include "backends/timer/bada/timer.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/graphics.h"
+#include "backends/platform/bada/audio.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Runtime;
+using namespace Osp::Ui::Controls;
+
+#define DEFAULT_CONFIG_FILE "/Home/scummvm.ini"
+#define MUTEX_BUFFER_SIZE 5
+
+//
+// BadaFilesystemFactory
+//
+class BadaFilesystemFactory : public FilesystemFactory {
+ AbstractFSNode *makeRootFileNode() const;
+ AbstractFSNode *makeCurrentDirectoryFileNode() const;
+ AbstractFSNode *makeFileNodePath(const Common::String &path) const;
+};
+
+AbstractFSNode *BadaFilesystemFactory::makeRootFileNode() const {
+ return new BadaFilesystemNode("/");
+}
+
+AbstractFSNode *BadaFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new BadaFilesystemNode("/Home");
+}
+
+AbstractFSNode *BadaFilesystemFactory::makeFileNodePath(const Common::String &path) const {
+ AppAssert(!path.empty());
+ return new BadaFilesystemNode(path);
+}
+
+//
+// BadaSaveFileManager
+//
+struct BadaSaveFileManager : public DefaultSaveFileManager {
+ bool removeSavefile(const Common::String &filename);
+};
+
+bool BadaSaveFileManager::removeSavefile(const Common::String &filename) {
+ Common::String savePathName = getSavePath();
+
+ checkPath(Common::FSNode(savePathName));
+ if (getError().getCode() != Common::kNoError) {
+ return false;
+ }
+
+ // recreate FSNode since checkPath may have changed/created the directory
+ Common::FSNode savePath(savePathName);
+ Common::FSNode file = savePath.getChild(filename);
+
+ String unicodeFileName;
+ StringUtil::Utf8ToString(file.getPath().c_str(), unicodeFileName);
+
+ switch (Osp::Io::File::Remove(unicodeFileName)) {
+ case E_SUCCESS:
+ return true;
+
+ case E_ILLEGAL_ACCESS:
+ setError(Common::kWritePermissionDenied, "Search or write permission denied: " +
+ file.getName());
+ break;
+
+ default:
+ setError(Common::kPathDoesNotExist, "removeSavefile: '" + file.getName() +
+ "' does not exist or path is invalid");
+ break;
+ }
+
+ return false;
+}
+
+//
+// BadaMutexManager
+//
+struct BadaMutexManager : public MutexManager {
+ BadaMutexManager();
+ ~BadaMutexManager();
+ OSystem::MutexRef createMutex();
+ void lockMutex(OSystem::MutexRef mutex);
+ void unlockMutex(OSystem::MutexRef mutex);
+ void deleteMutex(OSystem::MutexRef mutex);
+private:
+ Mutex *buffer[MUTEX_BUFFER_SIZE];
+};
+
+BadaMutexManager::BadaMutexManager() {
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ buffer[i] = NULL;
+ }
+}
+
+BadaMutexManager::~BadaMutexManager() {
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] != NULL) {
+ delete buffer[i];
+ }
+ }
+}
+
+OSystem::MutexRef BadaMutexManager::createMutex() {
+ Mutex *mutex = new Mutex();
+ mutex->Create();
+
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] == NULL) {
+ buffer[i] = mutex;
+ break;
+ }
+ }
+
+ return (OSystem::MutexRef) mutex;
+}
+
+void BadaMutexManager::lockMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex*)mutex;
+ m->Acquire();
+}
+
+void BadaMutexManager::unlockMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex*)mutex;
+ m->Release();
+}
+
+void BadaMutexManager::deleteMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex*)mutex;
+
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] == m) {
+ buffer[i] = NULL;
+ }
+ }
+
+ delete m;
+}
+
+//
+// BadaEventManager
+//
+struct BadaEventManager : public DefaultEventManager {
+ BadaEventManager(Common::EventSource *boss);
+ void init();
+ int shouldQuit() const;
+};
+
+BadaEventManager::BadaEventManager(Common::EventSource *boss) :
+ DefaultEventManager(boss) {
+}
+
+void BadaEventManager::init() {
+ DefaultEventManager::init();
+
+ // theme and vkbd should have now loaded - clear the splash screen
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics) {
+ graphics->setReady();
+ graphics->updateScreen();
+ }
+}
+
+int BadaEventManager::shouldQuit() const {
+ BadaSystem *system = (BadaSystem *)g_system;
+ return DefaultEventManager::shouldQuit() || system->isClosing();
+}
+
+//
+// BadaSystem
+//
+BadaSystem::BadaSystem(BadaAppForm *appForm) :
+ _appForm(appForm),
+ _audioThread(0),
+ _epoch(0) {
+}
+
+result BadaSystem::Construct(void) {
+ logEntered();
+
+ _fsFactory = new BadaFilesystemFactory();
+ if (!_fsFactory) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ return E_SUCCESS;
+}
+
+BadaSystem::~BadaSystem() {
+ logEntered();
+}
+
+result BadaSystem::initModules() {
+ logEntered();
+
+ _mutexManager = new BadaMutexManager();
+ if (!_mutexManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _timerManager = new BadaTimerManager();
+ if (!_timerManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _savefileManager = new BadaSaveFileManager();
+ if (!_savefileManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _graphicsManager = (GraphicsManager*) new BadaGraphicsManager(_appForm);
+ if (!_graphicsManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ // depends on _graphicsManager when ENABLE_VKEYBD enabled
+ _eventManager = new BadaEventManager(this);
+ if (!_eventManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _audioThread = new AudioThread();
+ if (!_audioThread) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _mixer = _audioThread->Construct(this);
+ if (!_mixer) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _audiocdManager = (AudioCDManager*) new DefaultAudioCDManager();
+ if (!_audiocdManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ if (IsFailed(_audioThread->Start())) {
+ AppLog("Failed to start audio thread");
+ return E_OUT_OF_MEMORY;
+ }
+
+ logLeaving();
+ return E_SUCCESS;
+}
+
+void BadaSystem::initBackend() {
+ logEntered();
+
+ // allow translations and game .DAT files to be found
+ ConfMan.set("extrapath", "/Res");
+
+ // use the mobile device theme
+ ConfMan.set("gui_theme", "/Res/scummmobile");
+
+ // allow bada virtual keypad pack to be found
+ ConfMan.set("vkeybdpath", "/Res/vkeybd_bada");
+ ConfMan.set("vkeybd_pack_name", "vkeybd_bada");
+
+ // set default save path to writable area
+ if (!ConfMan.hasKey("savepath")) {
+ ConfMan.set("savepath", "/Home/Share");
+ }
+
+ // default to no auto-save
+ if (!ConfMan.hasKey("autosave_period")) {
+ ConfMan.setInt("autosave_period", 0);
+ }
+
+ ConfMan.registerDefault("fullscreen", true);
+ ConfMan.registerDefault("aspect_ratio", true);
+ ConfMan.setBool("confirm_exit", false);
+
+ Osp::System::SystemTime::GetTicks(_epoch);
+
+ if (E_SUCCESS != initModules()) {
+ AppLog("initModules failed");
+ } else {
+ OSystem::initBackend();
+ }
+
+ // replace kBigGUIFont using the large font from the scummmobile theme
+ Common::File fontFile;
+ Common::String fileName = "/Res/scummmobile/helvB14-ASCII.fcc";
+ BadaFilesystemNode file(fileName);
+ if (file.exists()) {
+ Common::SeekableReadStream *stream = file.createReadStream();
+ if (stream) {
+ if (fontFile.open(stream, fileName)) {
+ Graphics::BdfFont *font = Graphics::BdfFont::loadFromCache(fontFile);
+ if (font) {
+ // use this font for the vkbd and on-screen messages
+ FontMan.setFont(Graphics::FontManager::kBigGUIFont, font);
+ }
+ }
+ }
+ }
+
+ logLeaving();
+}
+
+void BadaSystem::destroyBackend() {
+ closeAudio();
+
+ delete _graphicsManager;
+ _graphicsManager = 0;
+
+ delete _savefileManager;
+ _savefileManager = 0;
+
+ delete _fsFactory;
+ _fsFactory = 0;
+
+ delete _mixer;
+ _mixer = 0;
+
+ delete _audiocdManager;
+ _audiocdManager = 0;
+
+ delete _timerManager;
+ _timerManager = 0;
+
+ delete _eventManager;
+ _eventManager = 0;
+
+ delete _mutexManager;
+ _mutexManager = 0;
+}
+
+bool BadaSystem::pollEvent(Common::Event &event) {
+ return _appForm->pollEvent(event);
+}
+
+uint32 BadaSystem::getMillis() {
+ long long result, ticks = 0;
+ Osp::System::SystemTime::GetTicks(ticks);
+ result = ticks - _epoch;
+ return result;
+}
+
+void BadaSystem::delayMillis(uint msecs) {
+ if (!_appForm->isClosing()) {
+ Thread::Sleep(msecs);
+ }
+}
+
+void BadaSystem::updateScreen() {
+ if (_graphicsManager != NULL) {
+ _graphicsManager->updateScreen();
+ }
+}
+
+void BadaSystem::getTimeAndDate(TimeDate &td) const {
+ DateTime currentTime;
+
+ if (E_SUCCESS == Osp::System::SystemTime::GetCurrentTime(currentTime)) {
+ td.tm_sec = currentTime.GetSecond();
+ td.tm_min = currentTime.GetMinute();
+ td.tm_hour = currentTime.GetHour();
+ td.tm_mday = currentTime.GetDay();
+ td.tm_mon = currentTime.GetMonth();
+ td.tm_year = currentTime.GetYear();
+ }
+}
+
+void BadaSystem::fatalError() {
+ systemError("ScummVM: Fatal internal error.");
+}
+
+void BadaSystem::exitSystem() {
+ if (_appForm) {
+ closeAudio();
+ closeGraphics();
+ _appForm->exitSystem();
+ }
+}
+
+void BadaSystem::logMessage(LogMessageType::Type type, const char *message) {
+ if (type == LogMessageType::kError) {
+ systemError(message);
+ } else {
+ AppLog(message);
+ }
+}
+
+Common::SeekableReadStream *BadaSystem::createConfigReadStream() {
+ BadaFilesystemNode file(DEFAULT_CONFIG_FILE);
+ return file.createReadStream();
+}
+
+Common::WriteStream *BadaSystem::createConfigWriteStream() {
+ BadaFilesystemNode file(DEFAULT_CONFIG_FILE);
+ return file.createWriteStream();
+}
+
+void BadaSystem::closeAudio() {
+ if (_audioThread) {
+ _audioThread->Stop();
+ _audioThread->Join();
+ delete _audioThread;
+ _audioThread = 0;
+ }
+}
+
+void BadaSystem::closeGraphics() {
+ if (_graphicsManager) {
+ delete _graphicsManager;
+ _graphicsManager = 0;
+ }
+}
+
+void BadaSystem::setMute(bool on) {
+ if (_audioThread) {
+ _audioThread->setMute(on);
+ }
+}
+
+int BadaSystem::setVolume(bool up, bool minMax) {
+ int level = -1;
+ if (_audioThread) {
+ level = _audioThread->setVolume(up, minMax);
+ }
+ return level;
+}
+
+//
+// create the ScummVM system
+//
+BadaAppForm *systemStart(Osp::App::Application *app) {
+ logEntered();
+
+ BadaAppForm *appForm = new BadaAppForm();
+ if (!appForm) {
+ AppLog("Failed to create appForm");
+ return NULL;
+ }
+
+ if (E_SUCCESS != appForm->Construct() ||
+ E_SUCCESS != app->GetAppFrame()->GetFrame()->AddControl(*appForm)) {
+ delete appForm;
+ AppLog("Failed to construct appForm");
+ return NULL;
+ }
+
+ return appForm;
+}
+
+//
+// display a fatal error notification
+//
+void systemError(const char *message) {
+ AppLog("Fatal system error: %s", message);
+
+ ArrayList *args = new ArrayList();
+ args->Construct();
+ args->Add(*(new String(message)));
+ Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR, args);
+
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ system->exitSystem();
+ }
+}
diff --git a/backends/platform/bada/system.h b/backends/platform/bada/system.h
new file mode 100644
index 0000000000..a091f952e5
--- /dev/null
+++ b/backends/platform/bada/system.h
@@ -0,0 +1,101 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_SYSTEM_H
+#define BADA_SYSTEM_H
+
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+#include <FIoFile.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "backends/modular-backend.h"
+
+#include "backends/platform/bada/fs.h"
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/audio.h"
+#include "backends/platform/bada/graphics.h"
+
+#if defined(_DEBUG)
+#define logEntered() AppLog("%s entered (%s %d)", \
+ __FUNCTION__, __FILE__, __LINE__);
+#define logLeaving() AppLog("%s leaving (%s %d)", \
+ __FUNCTION__, __FILE__, __LINE__);
+#else
+#define logEntered()
+#define logLeaving()
+#endif
+
+BadaAppForm *systemStart(Osp::App::Application *app);
+void systemError(const char *message);
+
+#define USER_MESSAGE_EXIT 1000
+#define USER_MESSAGE_EXIT_ERR 1001
+
+//
+// BadaSystem
+//
+class BadaSystem : public ModularBackend,
+ Common::EventSource {
+public:
+ BadaSystem(BadaAppForm *appForm);
+ ~BadaSystem();
+
+ result Construct();
+ void closeAudio();
+ void closeGraphics();
+ void destroyBackend();
+ void setMute(bool on);
+ int setVolume(bool up, bool minMax);
+ void exitSystem();
+ bool isClosing() { return _appForm->isClosing(); }
+
+ BadaGraphicsManager *getGraphics() {
+ return (BadaGraphicsManager*)_graphicsManager;
+ }
+
+private:
+ void initBackend();
+ result initModules();
+
+ void updateScreen();
+ bool pollEvent(Common::Event &event);
+ uint32 getMillis();
+ void delayMillis(uint msecs);
+ void getTimeAndDate(TimeDate &t) const;
+ void fatalError();
+ void logMessage(LogMessageType::Type type, const char *message);
+
+ Common::EventSource *getDefaultEventSource() {return this;}
+ Common::SeekableReadStream *createConfigReadStream();
+ Common::WriteStream *createConfigWriteStream();
+
+ BadaAppForm *_appForm;
+ AudioThread *_audioThread;
+ long long _epoch;
+};
+
+#endif
diff --git a/backends/platform/dc/DCLauncherDialog.h b/backends/platform/dc/DCLauncherDialog.h
index 72df3e15cc..519524222f 100644
--- a/backends/platform/dc/DCLauncherDialog.h
+++ b/backends/platform/dc/DCLauncherDialog.h
@@ -25,4 +25,3 @@ class DCLauncherDialog {
DCLauncherDialog() {}
int runModal();
};
-
diff --git a/backends/platform/dc/README b/backends/platform/dc/README
index e4ebda840e..e26df500e8 100644
--- a/backends/platform/dc/README
+++ b/backends/platform/dc/README
@@ -23,4 +23,3 @@ should get a scrambled binary SCUMMVM.BIN and some plugins *.PLG.
For serial/IP upload, remove the "DYNAMIC_MODULES" line and just run `make',
to get a static binary with the name `scummvm.elf'.
-
diff --git a/backends/platform/dc/audio.cpp b/backends/platform/dc/audio.cpp
index 1fee970a90..35cb51f349 100644
--- a/backends/platform/dc/audio.cpp
+++ b/backends/platform/dc/audio.cpp
@@ -74,5 +74,3 @@ void OSystem_Dreamcast::checkSound()
if ((fillpos += n) >= curr_ring_buffer_samples)
fillpos = 0;
}
-
-
diff --git a/backends/platform/dc/cache.S b/backends/platform/dc/cache.S
index 1a1595a9a1..4beeedcea7 100644
--- a/backends/platform/dc/cache.S
+++ b/backends/platform/dc/cache.S
@@ -35,4 +35,3 @@ ccr_addr:
.long 0xff00001c
ccr_data:
.word 0x0905
-
diff --git a/backends/platform/dc/dc-fs.cpp b/backends/platform/dc/dc-fs.cpp
index ac709f62b9..f30c9c56d1 100644
--- a/backends/platform/dc/dc-fs.cpp
+++ b/backends/platform/dc/dc-fs.cpp
@@ -124,7 +124,7 @@ bool RoninCDDirectoryNode::getChildren(AbstractFSList &myList, ListMode mode, bo
if (mode == Common::FSNode::kListFilesOnly)
continue;
- myList.push_back(new RoninCDDirectoryNode(newPath+"/"));
+ myList.push_back(new RoninCDDirectoryNode(newPath));
} else {
// Honor the chosen mode
if (mode == Common::FSNode::kListDirectoriesOnly)
@@ -165,4 +165,3 @@ AbstractFSNode *OSystem_Dreamcast::makeFileNodePath(const Common::String &path)
AbstractFSNode *node = RoninCDFileNode::makeFileNodePath(path);
return (node? node : new RoninCDNonexistingNode(path));
}
-
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index bde50daa2d..2e32ff3eb4 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -259,4 +259,3 @@ extern int handleInput(struct mapledev *pad,
int &mouse_x, int &mouse_y,
byte &shiftFlags, Interactive *inter = NULL);
extern bool selectGame(char *&, char *&, Common::Language &, Common::Platform &, class Icon &);
-
diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp
index 06738a687d..3e3279f9c3 100644
--- a/backends/platform/dc/dcmain.cpp
+++ b/backends/platform/dc/dcmain.cpp
@@ -377,4 +377,3 @@ int DCLauncherDialog::runModal()
return 0;
}
-
diff --git a/backends/platform/dc/display.cpp b/backends/platform/dc/display.cpp
index a11e329df3..76658c6590 100644
--- a/backends/platform/dc/display.cpp
+++ b/backends/platform/dc/display.cpp
@@ -732,4 +732,3 @@ int16 OSystem_Dreamcast::getOverlayWidth()
{
return OVL_W;
}
-
diff --git a/backends/platform/dc/input.cpp b/backends/platform/dc/input.cpp
index 3759eec6df..7b21c76efa 100644
--- a/backends/platform/dc/input.cpp
+++ b/backends/platform/dc/input.cpp
@@ -249,4 +249,3 @@ bool OSystem_Dreamcast::pollEvent(Common::Event &event)
return false;
}
}
-
diff --git a/backends/platform/dc/label.cpp b/backends/platform/dc/label.cpp
index 1094dd3fb4..5db031958f 100644
--- a/backends/platform/dc/label.cpp
+++ b/backends/platform/dc/label.cpp
@@ -134,4 +134,3 @@ void Label::draw(float x, float y, unsigned int argb, float scale)
myvertex.cmd |= TA_CMD_VERTEX_EOS;
ta_commit_list(&myvertex);
}
-
diff --git a/backends/platform/dc/plugin_head.S b/backends/platform/dc/plugin_head.S
index 6cbe9eec85..a056f1c0f0 100644
--- a/backends/platform/dc/plugin_head.S
+++ b/backends/platform/dc/plugin_head.S
@@ -3,4 +3,3 @@
.section .dtors,"aw",@progbits
.end
-
diff --git a/backends/platform/dc/selector.cpp b/backends/platform/dc/selector.cpp
index 859f2a40ed..339e5df62d 100644
--- a/backends/platform/dc/selector.cpp
+++ b/backends/platform/dc/selector.cpp
@@ -185,12 +185,24 @@ static void makeDefIcon(Icon &icon)
icon.load(scummvm_icon, sizeof(scummvm_icon));
}
+static bool sameOrSubdir(const char *dir1, const char *dir2)
+{
+ int l1 = strlen(dir1), l2 = strlen(dir2);
+ if (l1<=l2)
+ return !strcmp(dir1, dir2);
+ else
+ return !memcmp(dir1, dir2, l2);
+}
+
static bool uniqueGame(const char *base, const char *dir,
Common::Language lang, Common::Platform plf,
Game *games, int cnt)
{
while (cnt--)
- if (!strcmp(dir, games->dir) &&
+ if (/*Don't detect the same game in a subdir,
+ this is a workaround for the detector bug in toon... */
+ sameOrSubdir(dir, games->dir) &&
+ /*!strcmp(dir, games->dir) &&*/
!stricmp(base, games->filename_base) &&
lang == games->language &&
plf == games->platform)
@@ -237,19 +249,24 @@ static int findGames(Game *games, int max, bool use_ini)
}
while ((curr_game < max || use_ini) && curr_dir < num_dirs) {
- strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 252);
- dirs[curr_dir].name[251] = '\0';
+ strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 251);
+ dirs[curr_dir].name[250] = '\0';
+ if (!dirs[curr_dir].name[0] ||
+ dirs[curr_dir].name[strlen(dirs[curr_dir].name)-1] != '/')
+ strcat(dirs[curr_dir].name, "/");
dirs[curr_dir].deficon[0] = '\0';
Common::FSList files, fslist;
dirs[curr_dir++].node.getChildren(fslist, Common::FSNode::kListAll);
for (Common::FSList::const_iterator entry = fslist.begin(); entry != fslist.end();
++entry) {
if (entry->isDirectory()) {
- if (!use_ini && num_dirs < MAX_DIR &&
- strcasecmp(entry->getDisplayName().c_str(), "install")) {
+ if (!use_ini && num_dirs < MAX_DIR) {
dirs[num_dirs].node = *entry;
num_dirs++;
}
+ /* Toonstruck detector needs directories to be present too */
+ if(!use_ini)
+ files.push_back(*entry);
} else
if (isIcon(*entry))
strcpy(dirs[curr_dir-1].deficon, entry->getDisplayName().c_str());
diff --git a/backends/platform/dingux/README.DINGUX b/backends/platform/dingux/README.DINGUX
index d867e02f03..04f0d30844 100644
--- a/backends/platform/dingux/README.DINGUX
+++ b/backends/platform/dingux/README.DINGUX
@@ -65,4 +65,3 @@ I still raccomand the use of opendingux kernel + rootfs, but if you don't, this
image plus another kernel (eg. SiENcE's one) should be do the job.
Enjoy
-
diff --git a/backends/platform/dingux/scummvm.gpe b/backends/platform/dingux/scummvm.gpe
index 84ab0c6b95..ce5d174a5c 100644
--- a/backends/platform/dingux/scummvm.gpe
+++ b/backends/platform/dingux/scummvm.gpe
@@ -2,4 +2,3 @@
HOME=`pwd`
$HOME/scummvm.elf
-
diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset.c b/backends/platform/ds/arm7/source/libcartreset/cartreset.c
index db2f3cfddc..85be823b71 100644
--- a/backends/platform/ds/arm7/source/libcartreset/cartreset.c
+++ b/backends/platform/ds/arm7/source/libcartreset/cartreset.c
@@ -104,6 +104,3 @@ void cartExecute()
}
#endif
-
-
-
diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
index f1faebea37..98808f79c5 100644
--- a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
+++ b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
@@ -54,4 +54,3 @@ void cartExecute();
#endif
#endif
-
diff --git a/backends/platform/ds/arm7/source/main.cpp b/backends/platform/ds/arm7/source/main.cpp
index 6b5a0ec321..2e9cacc669 100644
--- a/backends/platform/ds/arm7/source/main.cpp
+++ b/backends/platform/ds/arm7/source/main.cpp
@@ -650,4 +650,3 @@ int main(int argc, char ** argv) {
//////////////////////////////////////////////////////////////////////
-
diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt
index 24c85ad556..dc37fecce5 100644
--- a/backends/platform/ds/arm9/dist/readme_ds.txt
+++ b/backends/platform/ds/arm9/dist/readme_ds.txt
@@ -861,8 +861,3 @@ For other builds, substitute the letters b - g in the above line.
To build everything, type:
make allbuildssafe
-
-
-
-
-
diff --git a/backends/platform/ds/arm9/source/dsoptions.cpp b/backends/platform/ds/arm9/source/dsoptions.cpp
index 263ca58705..7154d4ae3f 100644
--- a/backends/platform/ds/arm9/source/dsoptions.cpp
+++ b/backends/platform/ds/arm9/source/dsoptions.cpp
@@ -433,4 +433,3 @@ void setOptions() {
}
} // End of namespace DS
-
diff --git a/backends/platform/ds/arm9/source/fat/disc_io.h b/backends/platform/ds/arm9/source/fat/disc_io.h
index 0fc83a7493..cd930ba454 100644
--- a/backends/platform/ds/arm9/source/fat/disc_io.h
+++ b/backends/platform/ds/arm9/source/fat/disc_io.h
@@ -218,4 +218,3 @@ typedef struct {
#endif
#endif // define DISC_IO_H
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.c b/backends/platform/ds/arm9/source/fat/io_m3_common.c
index 9c8280c808..e3232a4df6 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3_common.c
+++ b/backends/platform/ds/arm9/source/fat/io_m3_common.c
@@ -57,4 +57,3 @@ void _M3_changeMode (u32 mode) {
_M3_readHalfword (0x08000188);
}
}
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.h b/backends/platform/ds/arm9/source/fat/io_m3_common.h
index 6d0c669783..6a0cc03c2e 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3_common.h
+++ b/backends/platform/ds/arm9/source/fat/io_m3_common.h
@@ -45,4 +45,3 @@
extern void _M3_changeMode (u32 mode);
#endif // IO_M3_COMMON_H
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
index a6bb8dc187..f2bcce7da9 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
+++ b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
@@ -193,4 +193,3 @@ sd_data_write_busy2:
ldmfd r13!,{r4-r5,r15}
@-----------------end-------------------
-
diff --git a/backends/platform/ds/arm9/source/fat/io_njsd.c b/backends/platform/ds/arm9/source/fat/io_njsd.c
index b9cb52aa00..12388da8e9 100644
--- a/backends/platform/ds/arm9/source/fat/io_njsd.c
+++ b/backends/platform/ds/arm9/source/fat/io_njsd.c
@@ -678,4 +678,4 @@ LPIO_INTERFACE NJSD_GetInterface(void) {
} ;
#endif // defined NDS
-#endif \ No newline at end of file
+#endif
diff --git a/backends/platform/ds/arm9/source/fat/io_scsd.c b/backends/platform/ds/arm9/source/fat/io_scsd.c
index 0a6ab5a528..270691436d 100644
--- a/backends/platform/ds/arm9/source/fat/io_scsd.c
+++ b/backends/platform/ds/arm9/source/fat/io_scsd.c
@@ -103,4 +103,4 @@ LPIO_INTERFACE SCSD_GetInterface(void) {
return &io_scsd ;
} ;
-#endif \ No newline at end of file
+#endif
diff --git a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
index 390d36afeb..a33fa6af35 100644
--- a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
+++ b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
@@ -508,14 +508,3 @@ MemoryCard_IsInserted:
@----------------end MemoryCard_IsInserted---------------
.END
-
-
-
-
-
-
-
-
-
-
-
diff --git a/backends/platform/ds/arm9/source/fat/io_sd_common.c b/backends/platform/ds/arm9/source/fat/io_sd_common.c
index ade9df0d80..e7ab472e1b 100644
--- a/backends/platform/ds/arm9/source/fat/io_sd_common.c
+++ b/backends/platform/ds/arm9/source/fat/io_sd_common.c
@@ -199,5 +199,3 @@ bool _SD_InitCard (_SD_FN_CMD_6BYTE_RESPONSE cmd_6byte_response,
return true;
}
-
-
diff --git a/backends/platform/ds/arm9/source/fat/m3sd.s b/backends/platform/ds/arm9/source/fat/m3sd.s
index f6fab1a9e2..899cbc7927 100644
--- a/backends/platform/ds/arm9/source/fat/m3sd.s
+++ b/backends/platform/ds/arm9/source/fat/m3sd.s
@@ -197,4 +197,3 @@ DC_FlushRangeLoop:
bx lr
@---------------------------------------
.end
-
diff --git a/backends/platform/ds/arm9/source/keys.cpp b/backends/platform/ds/arm9/source/keys.cpp
index 2f8497ab19..aec7d57bda 100644
--- a/backends/platform/ds/arm9/source/keys.cpp
+++ b/backends/platform/ds/arm9/source/keys.cpp
@@ -134,4 +134,3 @@ uint32 keysUp(void) {
} // End of namespace DS
-
diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp
index b157a3a87a..fdd310ec17 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.cpp
+++ b/backends/platform/ds/arm9/source/osystem_ds.cpp
@@ -901,5 +901,3 @@ void OSystem_DS::engineDone() {
#endif
}
-
-
diff --git a/backends/platform/ds/arm9/source/scummhelp.cpp b/backends/platform/ds/arm9/source/scummhelp.cpp
index 670b46a3b9..112ba49d76 100644
--- a/backends/platform/ds/arm9/source/scummhelp.cpp
+++ b/backends/platform/ds/arm9/source/scummhelp.cpp
@@ -98,4 +98,3 @@ void updateStrings(byte gameId, byte version, Common::Platform platform,
#undef ADD_BIND
#undef ADD_TEXT
#undef ADD_LINE
-
diff --git a/backends/platform/ds/ds.mk b/backends/platform/ds/ds.mk
index 654475e1f3..78216cb9a2 100644
--- a/backends/platform/ds/ds.mk
+++ b/backends/platform/ds/ds.mk
@@ -236,4 +236,3 @@ $(ndsdir)/arm7/arm7.bin: $(ndsdir)/arm7/arm7.elf
#
# Fingolfin used
# CXX=arm-eabi-g++ CC=arm-eabi-gcc ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' --disable-shared --disable-debugging LDFLAGS=$DEVKITPRO/libnds/lib/libnds9.a
-
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt b/backends/platform/gph/devices/gp2x/mmuhack/README
index bea49d7d6d..6db7d81845 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt
+++ b/backends/platform/gph/devices/gp2x/mmuhack/README
@@ -1,3 +1,10 @@
+PLEASE NOTE:
+
+The binary object 'mmuhack.o' is stored in the source tree as it is very awkward to
+build it manually each time and would require the use of 2 toolchains to do so.
+
+Notes on how to rebuild from the included source can be found below.
+
About
-----
@@ -107,4 +114,3 @@ Credits
Original idea/implementation: Squidge (this whole thing is also known as squidgehack)
Kernel module: NK
Documentation: notaz
-
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
index 520841ace7..d01548e474 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
+++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
@@ -8,4 +8,3 @@ void flush_uppermem_cache(void *start_address, void *end_address, int flags);
#ifdef __cplusplus
}
#endif
-
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
index 17628c156a..265908e1fd 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
+++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
@@ -3,4 +3,3 @@
flush_uppermem_cache:
swi #0x9f0002
bx lr
-
diff --git a/backends/platform/iphone/iphone_main.m b/backends/platform/iphone/iphone_main.m
index 7bb5f0c317..c2ec328bf5 100644
--- a/backends/platform/iphone/iphone_main.m
+++ b/backends/platform/iphone/iphone_main.m
@@ -137,4 +137,3 @@ int main(int argc, char** argv) {
}
@end
-
diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m
index 04d25cebf8..eb16676428 100644
--- a/backends/platform/iphone/iphone_video.m
+++ b/backends/platform/iphone/iphone_video.m
@@ -754,4 +754,3 @@ bool getLocalMouseCoords(CGPoint *point) {
}
@end
-
diff --git a/backends/platform/n64/Makefile b/backends/platform/n64/Makefile
index cffe277312..4f3744f7e8 100644
--- a/backends/platform/n64/Makefile
+++ b/backends/platform/n64/Makefile
@@ -90,4 +90,3 @@ spotless : distclean
send: $(TARGET).v64
sudo ucon64 --xv64 $(TARGET).v64
-
diff --git a/backends/platform/n64/README.N64 b/backends/platform/n64/README.N64
index b47b239658..42f78f4754 100644
--- a/backends/platform/n64/README.N64
+++ b/backends/platform/n64/README.N64
@@ -113,4 +113,3 @@ Notes
==========
Write the rest of this README.
-
diff --git a/backends/platform/n64/framfs_save_manager.cpp b/backends/platform/n64/framfs_save_manager.cpp
index 983b9aba8d..78f5333f2e 100644
--- a/backends/platform/n64/framfs_save_manager.cpp
+++ b/backends/platform/n64/framfs_save_manager.cpp
@@ -69,4 +69,3 @@ Common::StringArray FRAMSaveManager::listSavefiles(const Common::String &pattern
return list;
}
-
diff --git a/backends/platform/n64/framfs_save_manager.h b/backends/platform/n64/framfs_save_manager.h
index d50c17d85b..da553e423a 100644
--- a/backends/platform/n64/framfs_save_manager.h
+++ b/backends/platform/n64/framfs_save_manager.h
@@ -129,4 +129,3 @@ public:
#endif
-
diff --git a/backends/platform/n64/n64.mk b/backends/platform/n64/n64.mk
index 2e383e670d..83ad405503 100644
--- a/backends/platform/n64/n64.mk
+++ b/backends/platform/n64/n64.mk
@@ -26,4 +26,3 @@ endif
$(srcdir)/backends/platform/n64/pad_rom.sh scummvm.v64
rm scummvm.bak
mv scummvm.v64 $(bundle_name)/scummvm.v64
-
diff --git a/backends/platform/n64/nintendo64.cpp b/backends/platform/n64/nintendo64.cpp
index 3e811e73d2..bc416157e6 100644
--- a/backends/platform/n64/nintendo64.cpp
+++ b/backends/platform/n64/nintendo64.cpp
@@ -31,4 +31,3 @@ int main(void) {
g_system->quit(); // TODO: Consider removing / replacing this!
return res;
}
-
diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h
index 354f25a1cf..4788beb1ca 100644
--- a/backends/platform/n64/osys_n64.h
+++ b/backends/platform/n64/osys_n64.h
@@ -212,4 +212,3 @@ public:
};
#endif /* __OSYS_N64_H__ */
-
diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp
index 4bc3780fe2..c3adb9691c 100644
--- a/backends/platform/n64/osys_n64_base.cpp
+++ b/backends/platform/n64/osys_n64_base.cpp
@@ -922,4 +922,3 @@ void OSystem_N64::detectControllers(void) {
inline uint16 colRGB888toBGR555(byte r, byte g, byte b) {
return ((r >> 3) << 1) | ((g >> 3) << 6) | ((b >> 3) << 11);
}
-
diff --git a/backends/platform/n64/osys_n64_events.cpp b/backends/platform/n64/osys_n64_events.cpp
index 62f11aef64..c83eb194ac 100644
--- a/backends/platform/n64/osys_n64_events.cpp
+++ b/backends/platform/n64/osys_n64_events.cpp
@@ -439,4 +439,3 @@ bool OSystem_N64::pollEvent(Common::Event &event) {
return false;
}
-
diff --git a/backends/platform/n64/osys_n64_utilities.cpp b/backends/platform/n64/osys_n64_utilities.cpp
index 0622e6423d..94d727e421 100644
--- a/backends/platform/n64/osys_n64_utilities.cpp
+++ b/backends/platform/n64/osys_n64_utilities.cpp
@@ -115,4 +115,3 @@ int timer_handler(int t) {
tm->handler();
return t;
}
-
diff --git a/backends/platform/n64/pad_rom.sh b/backends/platform/n64/pad_rom.sh
index 085203306f..463eeb4e28 100755
--- a/backends/platform/n64/pad_rom.sh
+++ b/backends/platform/n64/pad_rom.sh
@@ -10,4 +10,3 @@ REMAINDER=`echo $BASESIZE - $REMAINDER | bc`
CARTSIZE=`echo $CARTSIZE + $REMAINDER | bc`
ucon64 -q --n64 --v64 --chk --padn=$CARTSIZE $1
-
diff --git a/backends/platform/n64/pakfs_save_manager.cpp b/backends/platform/n64/pakfs_save_manager.cpp
index df9baa4d21..bf2fe8b1bc 100644
--- a/backends/platform/n64/pakfs_save_manager.cpp
+++ b/backends/platform/n64/pakfs_save_manager.cpp
@@ -70,4 +70,3 @@ Common::StringArray PAKSaveManager::listSavefiles(const Common::String &pattern)
return list;
}
-
diff --git a/backends/platform/n64/pakfs_save_manager.h b/backends/platform/n64/pakfs_save_manager.h
index 6987801294..e0fcbc1e2d 100644
--- a/backends/platform/n64/pakfs_save_manager.h
+++ b/backends/platform/n64/pakfs_save_manager.h
@@ -130,4 +130,3 @@ public:
#endif
-
diff --git a/backends/platform/n64/portdefs.h b/backends/platform/n64/portdefs.h
index 35ef3c71db..677ad48477 100644
--- a/backends/platform/n64/portdefs.h
+++ b/backends/platform/n64/portdefs.h
@@ -49,4 +49,3 @@ typedef signed int int32;
#define SCUMMVM_DONT_DEFINE_TYPES
#endif
-
diff --git a/backends/platform/openpandora/build/PXML.xml b/backends/platform/openpandora/build/PXML.xml
index f4d2e2a595..a87c49e2b8 100755
--- a/backends/platform/openpandora/build/PXML.xml
+++ b/backends/platform/openpandora/build/PXML.xml
@@ -1,34 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<PXML xmlns="http://openpandora.org/namespaces/PXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PXML_schema.xsd">
-
- <application id="scummvm.djwillis.0001" appdata="scummvm">
-
- <title lang="en_US">ScummVM</title>
-
- <exec command="./runscummvm.sh"/>
- <icon src="icon/scummvm.png"/>
-
- <previewpics>
- <pic src="icon/preview-pic.png"/>
- </previewpics>
-
- <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/>
-
- <description lang="en_US">Point & click game interpreter.</description>
-
- <author name="DJWillis" website="http://www.scummvm.org/"/>
-
- <version major="1" minor="1" release="1" build="1"/><!--This programs version-->
- <osversion major="1" minor="0" release="0" build="0"/><!--The minimum OS version required-->
-
- <categories>
- <category name="Game"><!--category like "Games", "Graphics", "Internet" etc-->
- <subcategory name="Adventure Games"/><!--subcategory, like "Board Games", "Strategy", "First Person Shooters"-->
- </category>
- </categories>
-
- <clockspeed frequency="500"/><!--Frequency in Hz-->
-
- </application>
-
+ <!-- This is the package, in our case ScummVM -->
+ <package id="scummvm.djwillis.0001">
+ <author name="DJWillis" website="http://www.scummvm.org/"/>
+ <!-- version type can be alpha, beta or release, set to release in branch -->
+ <version major="1" minor="4" release="0" build="1" type="alpha"/>
+ <!-- Both title and titles are needed -->
+ <title lang="en_US">ScummVM</title>
+ <titles>
+ <title lang="en_US">ScummVM</title>
+ </titles>
+ <descriptions>
+ <description lang="en_US">
+ ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed!
+
+ ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam &amp; Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more.
+ </description>
+ </descriptions>
+ <icon src="icon/scummvm.png"/>
+ </package>
+
+ <!-- This is the application, the ScummVM binary -->
+ <application id="scummvm.djwillis.0001" appdata="scummvm">
+ <exec command="./runscummvm.sh"/>
+ <author name="DJWillis" website="http://www.scummvm.org/"/>
+ <!-- version type can be alpha, beta or release, set to release in branch -->
+ <version major="1" minor="4" release="0" build="1" type="alpha"/>
+ <!-- Both title and titles are needed -->
+ <title lang="en_US">ScummVM</title>
+ <titles>
+ <title lang="en_US">ScummVM</title>
+ </titles>
+ <descriptions>
+ <description lang="en_US">
+ ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed!
+
+ ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam &amp; Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more.
+ </description>
+ </descriptions>
+ <licenses>
+ <license name="GPLv2" url="http://www.gnu.org/licenses/gpl-2.0.html" sourcecodeurl="http://www.scummvm.org"/>
+ </licenses>
+ <icon src="icon/scummvm.png"/>
+ <previewpics>
+ <pic src="icon/preview-pic.png"/>
+ </previewpics>
+ <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/>
+ <categories>
+ <category name="Game">
+ <subcategory name="AdventureGame"/>
+ </category>
+ </categories>
+ </application>
</PXML>
diff --git a/backends/platform/openpandora/build/PXML_schema.xsd b/backends/platform/openpandora/build/PXML_schema.xsd
new file mode 100644
index 0000000000..7c0d635016
--- /dev/null
+++ b/backends/platform/openpandora/build/PXML_schema.xsd
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema targetNamespace="http://openpandora.org/namespaces/PXML" xmlns="http://openpandora.org/namespaces/PXML" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
+
+
+ <!-- declare some simpleTypes for later usage -->
+
+ <!-- Specify params allows with the 'x11' entry in exec -->
+ <xs:simpleType name="x11Param">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="req" />
+ <xs:enumeration value="stop" />
+ <xs:enumeration value="ignore" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify the valid documentation formats in the <info> block -->
+ <xs:simpleType name="docType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="text/html" />
+ <xs:enumeration value="text/plain" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Make sure that version numbers only consist of letters, numbers and + as well as - -->
+ <xs:simpleType name="versionNumber">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:pattern value="[a-zA-Z0-9+-]*" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify what is valid as release type -->
+ <xs:simpleType name="releaseType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="alpha" />
+ <xs:enumeration value="beta" />
+ <xs:enumeration value="release" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify what makes an email address "valid" -->
+ <xs:simpleType name="emailAddress">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^@]+@[^\.]+\..+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- some restrictions regarding file names that are eg not allowed/possible when using sd cards formated as fat32 -->
+ <xs:simpleType name="dumbPath">
+ <xs:restriction base="xs:normalizedString">
+ <xs:pattern value="[^?>:]+" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="dumbFolderName">
+ <xs:restriction base="xs:normalizedString">
+ <xs:pattern value="[^?>:/]+" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify lang codes -->
+ <xs:simpleType name="isoLangcode">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="2"/>
+ <xs:pattern value="[a-zA-Z]{2,3}(_[a-zA-Z0-9]{2,3})*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="isoLangcode_en_US">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="en_US" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Definition of all allowed categories following the FDO specs -->
+ <xs:simpleType name="fdoCategory">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="AudioVideo|Audio|Video|Development|Education|Game|Graphics|Network|Office|Settings|System|Utility"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <!-- Definition of all allowed subcategories following the FDO specs (should be based upon the given main categories, but would significantly increase complexity of the schema) -->
+ <xs:simpleType name="fdoSubCategory">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="Building|Debugger|IDE|GUIDesigner|Profiling|RevisionControl|Translation|Calendar|ContactManagement|Database|Dictionary|Chart|Email|Finance|FlowChart|PDA|ProjectManagement|Presentation|Spreadsheet|WordProcessor|2DGraphics|VectorGraphics|RasterGraphics|3DGraphics|Scanning|OCR|Photography|Publishing|Viewer|TextTools|DesktopSettings|HardwareSettings|Printing|PackageManager|Dialup|InstantMessaging|Chat|IRCClient|FileTransfer|HamRadio|News|P2P|RemoteAccess|Telephony|TelephonyTools|VideoConference|WebBrowser|WebDevelopment|Midi|Mixer|Sequencer|Tuner|TV|AudioVideoEditing|Player|Recorder|DiscBurning|ActionGame|AdventureGame|ArcadeGame|BoardGame|BlocksGame|CardGame|KidsGame|LogicGame|RolePlaying|Simulation|SportsGame|StrategyGame|Art|Construction|Music|Languages|Science|ArtificialIntelligence|Astronomy|Biology|Chemistry|ComputerScience|DataVisualization|Economy|Electricity|Geography|Geology|Geoscience|History|ImageProcessing|Literature|Math|NumericalAnalysis|MedicalSoftware|Physics|Robotics|Sports|ParallelComputing|Amusement|Archiving|Compression|Electronics|Emulator|Engineering|FileTools|FileManager|TerminalEmulator|Filesystem|Monitor|Security|Accessibility|Calculator|Clock|TextEditor|Documentation|Core|KDE|GNOME|GTK|Qt|Motif|Java|ConsoleOnly"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Create some way to enforce entries to be nonempty -->
+ <xs:simpleType name="nonempty_token">
+ <xs:restriction base="xs:token">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="nonempty_string">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="nonempty_normalizedString">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+
+
+ <!-- declare some complexTypes for later usage -->
+
+ <!-- type used for file associations -->
+ <xs:complexType name="association_data">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="filetype" use="required" type="nonempty_token" />
+ <xs:attribute name="exec" use="required" type="nonempty_token" />
+ </xs:complexType>
+
+ <!-- type used for author info -->
+ <xs:complexType name="author_data">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="website" use="optional" type="xs:anyURI" />
+ <xs:attribute name="email" use="optional" type="emailAddress" />
+ </xs:complexType>
+
+ <!-- type used for version informations (full entry as well as os version) -->
+ <xs:complexType name="app_version_info">
+ <xs:attribute name="major" use="required" type="versionNumber" />
+ <xs:attribute name="minor" use="required" type="versionNumber" />
+ <xs:attribute name="release" use="required" type="versionNumber" />
+ <xs:attribute name="build" use="required" type="versionNumber" />
+ <xs:attribute name="type" use="optional" type="releaseType" />
+ </xs:complexType>
+ <xs:complexType name="os_version_info">
+ <xs:attribute name="major" use="required" type="versionNumber" />
+ <xs:attribute name="minor" use="required" type="versionNumber" />
+ <xs:attribute name="release" use="required" type="versionNumber" />
+ <xs:attribute name="build" use="required" type="versionNumber" />
+ </xs:complexType>
+
+ <!-- type used for exec entries -->
+ <xs:complexType name="exec_params">
+ <xs:attribute name="command" use="required" type="nonempty_token" />
+ <xs:attribute name="arguments" use="optional" type="nonempty_token" />
+ <xs:attribute name="background" use="optional" type="xs:boolean" />
+ <xs:attribute name="startdir" use="optional" type="dumbPath" />
+ <xs:attribute name="standalone" use="optional" type="xs:boolean" />
+ <xs:attribute name="x11" use="optional" type="x11Param" />
+ </xs:complexType>
+
+ <!-- type used for tiles or descriptions, once in 'normal' version, once enforcing usage of en_US -->
+ <xs:complexType name="title_or_description">
+ <xs:simpleContent>
+ <xs:extension base="nonempty_string">
+ <xs:attribute name="lang" use="required" type="isoLangcode" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:complexType name="title_or_description_enUS">
+ <xs:simpleContent>
+ <xs:extension base="nonempty_string">
+ <xs:attribute name="lang" use="required" type="isoLangcode_en_US" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- type used for referencing images -->
+ <xs:complexType name="image_entry">
+ <xs:attribute name="src" use="required" type="dumbPath" />
+ </xs:complexType>
+
+ <!-- type for referencing manuals/readme docs -->
+ <xs:complexType name="information_entry">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="type" use="required" type="docType" />
+ <xs:attribute name="src" use="required" type="dumbPath" />
+ </xs:complexType>
+
+ <!-- type used for the license information -->
+ <xs:complexType name="license_info">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="url" use="optional" type="xs:anyURI" />
+ <xs:attribute name="sourcecodeurl" use="optional" type="xs:anyURI" />
+ </xs:complexType>
+
+
+
+ <!-- Combine the symple and complex types into the "real" PXML specification -->
+
+ <xs:element name="PXML">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- specify the <package> tag with info about the complete package, information providable:
+ author
+ version
+ title(s)
+ description(s)
+ icon
+ -->
+ <xs:element name="package" minOccurs="1" maxOccurs="1">
+ <xs:complexType>
+ <xs:all>
+ <!--Author info-->
+ <xs:element name="author" type="author_data" minOccurs="1" />
+ <!--App version info-->
+ <xs:element name="version" type="app_version_info" minOccurs="1" />
+ <!--Title-->
+ <xs:element name="titles" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Description-->
+ <xs:element name="descriptions" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="0" maxOccurs="1" />
+ <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Icon-->
+ <xs:element name="icon" type="image_entry" minOccurs="0" />
+ </xs:all>
+ <!--Package ID-->
+ <xs:attribute name="id" use="required" type="dumbFolderName" />
+ </xs:complexType>
+ </xs:element>
+ <!-- specify the <application> tag with info about a single program
+ executable call
+ author
+ version (of the application)
+ osversion (min OS version supported)
+ title(s) (allowing compatibility to <HF6, too!)
+ description(s) (allowing compatibility to <HF6, too!)
+ icon
+ license
+ preview pictures
+ info/manual/readme entry
+ categories
+ associations to file types
+ clockspeed
+ -->
+ <xs:element name="application" minOccurs="1" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:all>
+ <!--Execution params -->
+ <xs:element name="exec" type="exec_params" minOccurs="1" />
+ <!--Author info-->
+ <xs:element name="author" type="author_data" minOccurs="1" />
+ <!--App version info-->
+ <xs:element name="version" type="app_version_info" minOccurs="1" />
+ <!--OS Version info-->
+ <xs:element name="osversion" type="os_version_info" minOccurs="0" />
+ <!--Title-->
+ <!-- via <titles> element, used for HF6+ -->
+ <xs:element name="titles" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Title-->
+ <!-- via <title> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 -->
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="0" />
+ <!--Description-->
+ <!-- via <descriptions> element, used for HF6+ -->
+ <xs:element name="descriptions" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="description" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Description-->
+ <!-- via <description> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 -->
+ <xs:element name="description" type="title_or_description_enUS" minOccurs="0" />
+ <!--Icon-->
+ <xs:element name="icon" type="image_entry" minOccurs="0" />
+ <!--License-->
+ <xs:element name="licenses" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="license" type="license_info" minOccurs="1" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Preview pics-->
+ <xs:element name="previewpics" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="pic" type="image_entry" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Info (aka manual or readme entry)-->
+ <xs:element name="info" type="information_entry" minOccurs="0" />
+ <!--Categories-->
+ <xs:element name="categories" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="category" minOccurs="1" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="subcategory" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="name" type="fdoSubCategory" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="name" use="required" type="fdoCategory" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Associations-->
+ <xs:element name="associations" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="association" type="association_data" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Clockspeed-->
+ <xs:element name="clockspeed" minOccurs="0">
+ <xs:complexType>
+ <xs:attribute name="frequency" use="required" type="xs:positiveInteger" />
+ </xs:complexType>
+ </xs:element>
+ </xs:all>
+ <!--AppID-->
+ <xs:attribute name="id" use="required" type="dumbFolderName" />
+ <xs:attribute name="appdata" use="optional" type="dumbFolderName" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/backends/platform/openpandora/build/pnd_make.sh b/backends/platform/openpandora/build/pnd_make.sh
index b19de87bb4..0c03e8154d 100755
--- a/backends/platform/openpandora/build/pnd_make.sh
+++ b/backends/platform/openpandora/build/pnd_make.sh
@@ -1,65 +1,321 @@
-#!/bin/sh
+#!/bin/bash
+#
+# pnd_make.sh
+#
+# This script is meant to ease generation of a pnd file. Please consult the output
+# when running --help for a list of available parameters and an explaination of
+# those.
+#
+# Required tools when running the script:
+# bash
+# echo, cat, mv, rm
+# mkisofs or mksquashfs (the latter when using the -c param!)
+# xmllint (optional, only for validation of the PXML against the schema)
-######adjust path of genpxml.sh if you want to use that "feture"#####
-TEMP=`getopt -o p:d:x:i:c -- "$@"`
+PXML_schema=$(dirname ${0})/PXML_schema.xsd
+GENPXML_PATH=$(dirname ${0})/genpxml.sh
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+# useful functions ...
+black='\E[30m'
+red='\E[31m'
+green='\E[32m'
+yellow='\E[33m'
+blue='\E[34m'
+magenta='\E[35m'
+cyan='\E[36m'
+white='\E[37m'
-eval set -- "$TEMP"
-while true ; do
- case "$1" in
- -p) echo "PNDNAME set to $2" ;PNDNAME=$2;shift 2;;
- -d) echo "FOLDER set to $2" ;FOLDER=$2;shift 2 ;;
- -x) echo "PXML set to $2" ;PXML=$2;shift 2 ;;
- -i) echo "ICON set to $2" ;ICON=$2;shift 2 ;;
- -c) echo "-c set, will create compressed squasfs image instead of iso $2" ;SQUASH=1;shift 1 ;;
- --) shift ; break ;;
- *) echo "Error while parsing arguments! $2" ; exit 1 ;;
- esac
+check_for_tool()
+{
+ which $1 &> /dev/null
+ if [ "$?" -ne "0" ];
+ then
+ cecho "ERROR: Could not find the program '$1'. Please make sure
+that it is available in your PATH since it is required to complete your request." $red
+ exit 1
+ fi
+}
+
+cecho () # Color-echo. Argument $1 = message, Argument $2 = color
+{
+ local default_msg="No message passed." # Doesn't really need to be a local variable.
+ message=${1:-$default_msg} # Defaults to default message.
+ color=${2:-$black} # Defaults to black, if not specified.
+ echo -e "$color$message"
+ tput sgr0 # Reset to normal.
+ return
+}
+
+
+print_help()
+{
+ cat << EOSTREAM
+pnd_make.sh - A script to package "something" into a PND.
+
+Usage:
+ $(basename ${0}) {--directory|-d} <folder> {--pndname|-p} <file> [{--compress-squashfs|-c}]
+ [{--genpxml} <file>] [{--icon|-i} <file>] [{--pxml|-x} <file>]
+ [{--schema|-s} <file>] [{--help|-h}]
+
+
+Switches:
+ --compress-squashfs / -c Define whether or not the pnd should be compressed using
+ squashfs. If this parameter is selected, a compressed pnd
+ will be created.
+
+ --directory / -d Sets the folder that is to be used for the resulting pnd
+ to <folder>. This option is mandatory for the script to
+ function correctly.
+
+ --genpxml Sets the script used for generating a PXML file (if none
+ is available already) to <file>. Please make sure to either
+ provide a full path or prefix a script in the current folder
+ with './' so that the script can actually be executed. If
+ this variable is not specified, $GENPXML_PATH
+ will be used.
+
+ --help / -h Displays this help text.
+
+ --icon / -i Sets the icon that will be appended in the pnd to <file>.
+
+ --pndname / -p Sets the output filename of the resulting pnd to <file>.
+ This option is mandatory for the script to function
+ correctly.
+
+ --pxml / -x Sets the PXML file that is to be used to <file>. If you
+ neither provide a PXML file or set this entry to 'guess',
+ an existing 'PXML.xml' in your selected '--directory'
+ will be used, or the script $GENPXML_PATH
+ will be called to try to generate a basic PXML file for you.
+
+ --schema / -s Sets the schema file, that is to be used for validation,
+ to <file. If this is not defined, the script will try to
+ use the file '$PXML_schema'. If this fails,
+ a warning is issued.
+
+If you select the option to create a compressed squashfs, a version >=4.0 of squashfs
+is required to be available in your PATH.
+EOSTREAM
+}
+
+
+# Parse command line parameters
+while [ "${1}" != "" ]; do
+ if [ "${1}" = "--compress-squashfs" ] || [ "${1}" = "-c" ];
+ then
+ SQUASH=1
+ shift 1
+ elif [ "${1}" = "--directory" ] || [ "${1}" = "-d" ];
+ then
+ FOLDER=$2
+ shift 2
+ elif [ "${1}" = "--genpxml" ];
+ then
+ GENPXML_PATH=$2
+ shift 2
+ elif [ "${1}" = "--help" ] || [ "${1}" = "-h" ];
+ then
+ print_help
+ exit 0
+ elif [ "${1}" = "--icon" ] || [ "${1}" = "-i" ];
+ then
+ ICON=$2
+ shift 2
+ elif [ "${1}" = "--pndname" ] || [ "${1}" = "-p" ];
+ then
+ PNDNAME=$2
+ shift 2
+ elif [ "${1}" = "--pxml" ] || [ "${1}" = "-x" ];
+ then
+ PXML=$2
+ shift 2
+ elif [ "${1}" = "--schema" ] || [ "${1}" = "-f" ]
+ then
+ PXML_schema=$2
+ shift 2
+ else
+ cecho "ERROR: '$1' is not a known argument. Printing --help and aborting." $red
+ print_help
+ exit 1
+ fi
done
-rnd=$RANDOM; # random number for genpxml and index$rnd.xml
-#generate pxml if guess or empty
-if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ]; then
- PXMLtxt=$(/home/user/libpnd/pandora-libraries/testdata/scripts/genpxml.sh $FOLDER $ICON)
- PXML=$FOLDER/PXML.xml
- echo "$PXMLtxt" > $FOLDER/PXML.xml
+# Generate a PXML if the param is set to Guess or it is empty.
+if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ];
+then
+ if [ -f $FOLDER/PXML.xml ]; # use the already existing PXML.xml file if there is one...
+ then
+ PXML=$FOLDER/PXML.xml
+ PXML_ALREADY_EXISTING="true"
+ else
+ if [ -f $GENPXML_PATH ];
+ then
+ $GENPXML_PATH --src $FOLDER --dest $FOLDER --author $USER
+ if [ -f $FOLDER/PXML.xml ];
+ then
+ PXML_GENERATED="true"
+ else
+ cecho "ERROR: Generating a PXML file using '$GENPXML_PATH' failed.
+Please generate a PXML file manually." $red
+ exit 1
+ fi
+ else
+ cecho "ERROR: Could not find '$GENPXML_PATH' for generating a PXML file." $red
+ exit 1
+ fi
+ fi
fi
-#check arguments
-if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ]; then
- echo " Usage: pnd_make.sh -p your.pnd -d folder/containing/your/app/ -x
- your.pxml (or \"guess\" to try to generate it from the folder) -i icon.png"
+
+# Probe if required variables were set
+echo -e
+cecho "Checking if all required variables were set." $green
+if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ];
+then
+ echo -e
+ cecho "ERROR: Not all required options were set! Please see the --help information below." $red
+ echo -e
+ print_help
exit 1
+else
+ echo "PNDNAME set to '$PNDNAME'."
+fi
+# Check if the selected folder actually exists
+if [ ! -d $FOLDER ];
+then
+ echo -e
+ cecho "ERROR: '$FOLDER' doesn't exist or is not a folder." $red
+ exit 1
+else
+ echo "FOLDER set to '$FOLDER'."
+fi
+# Check if the selected PXML file actually exists
+if [ ! -f $PXML ];
+then
+ echo -e
+ cecho "ERROR: '$PXML' doesn't exist or is not a file." $red
+ exit 1
+else
+ if [ $PXML_ALREADY_EXISTING ];
+ then
+ echo "You have not explicitly specified a PXML to use, but an existing file was
+found. Will be using this one."
+ elif [ $PXML_GENERATED ];
+ then
+ echo "A PXML file was generated for you using '$GENPXML_PATH'. This file will
+not be removed at the end of this script because you might want to review it, adjust
+single entries and rerun the script to generate a pnd with a PXML file with all the
+information you want to have listed."
+ fi
+ echo "PXML set to '$PXML'."
fi
-if [ ! -d $FOLDER ]; then echo "$FOLDER doesnt exist"; exit 1; fi #check if folder actually exists
-if [ ! -f $PXML ]; then echo "$PXML doesnt exist"; exit 1; fi #check if pxml actually exists
-#make iso from folder
-if [ ! $SQUASH ]; then
- mkisofs -o $PNDNAME.iso -R $FOLDER
+# Print the other variables:
+if [ $ICON ];
+then
+ if [ ! -f $ICON ]
+ then
+ cecho "WARNING: '$ICON' doesn't exist, will not append the selected icon to the pnd." $red
+ else
+ echo "ICON set to '$ICON'."
+ USE_ICON="true"
+ fi
+fi
+if [ $SQUASH ];
+then
+ echo "Will use a squashfs for '$PNDNAME'."
+fi
+
+
+# Validate the PXML file (if xmllint is available)
+# Errors and problems in this section will be shown but are not fatal.
+echo -e
+cecho "Trying to validate '$PXML' now. Will be using '$PXML_schema' to do so." $green
+which xmllint &> /dev/null
+if [ "$?" -ne "0" ];
+then
+ VALIDATED=false
+ cecho "WARNING: Could not find 'xmllint'. Validity check of '$PXML' is not possible!" $red
else
- if [ $(mksquashfs -version | awk '{if ($3 >= 4) print 1}') = 1 ]; then
- echo "your squashfs version is older then version 4, please upgrade to 4.0 or later"
+ if [ ! -f "$PXML_schema" ];
+ then
+ VALIDATED=false
+ cecho "WARNING: Could not find '$PXML_schema'. If you want to validate your
+PXML file please make sure to provide a schema using the --schema option." $red
+ else
+ xmllint --noout --schema $PXML_schema $PXML
+ if [ "$?" -ne "0" ]; then VALIDATED=false; else VALIDATED=true; fi
+ fi
+fi
+# Print some message at the end about the validation in case the user missed the output above
+if [ $VALIDATED = "false" ]
+then
+ cecho "WARNING: Could not successfully validate '$PXML'. Please check the output
+above. This does not mean that your pnd will be broken. Either you are not following the strict
+syntax required for validation or you don't have all files/programs required for validating." $red
+else
+ cecho "Your file '$PXML' was validated successfully. The resulting pnd should
+work nicely with libpnd." $green
+fi
+
+
+# Make iso from folder
+echo -e
+cecho "Creating an iso file based on '$FOLDER'." $green
+if [ $SQUASH ];
+then
+ check_for_tool mksquashfs
+ if [ $(mksquashfs -version | awk 'BEGIN{r=0} $3>=4{r=1} END{print r}') -eq 0 ];
+ then
+ cecho "ERROR: Your squashfs version is older then version 4, please upgrade to 4.0 or later" $red
exit 1
fi
- mksquashfs -no-recovery -nopad $FOLDER $PNDNAME.iso
+ mksquashfs $FOLDER $PNDNAME.iso -nopad -no-recovery
+else
+ check_for_tool mkisofs
+ mkisofs -o $PNDNAME.iso -R $FOLDER
+fi
+
+# Check that the iso file was actually created before continuing
+if [ ! -f $PNDNAME.iso ];
+then
+ cecho "ERROR: The temporary file '$PNDNAME.iso' could not be created.
+Please check the output above for any errors and retry after fixing them. Aborting." $red
+ exit 1
fi
-#append pxml to iso
-cat $PNDNAME.iso $PXML > $PNDNAME
+
+
+# Append pxml to iso
+echo -e
+cecho "Appending '$PXML' to the created iso file." $green
+cat $PNDNAME.iso $PXML > $PNDNAME
rm $PNDNAME.iso #cleanup
-#append icon if specified
-if [ $ICON ]; then # check if we want to add an icon
- if [ ! -f $ICON ]; then #does the icon actually exist?
- echo "$ICON doesnt exist"
- else # yes
+
+# Append icon if specified and available
+if [ $USE_ICON ];
+then
+ echo -e
+ cecho "Appending the icon '$ICON' to the pnd." $green
mv $PNDNAME $PNDNAME.tmp
cat $PNDNAME.tmp $ICON > $PNDNAME # append icon
rm $PNDNAME.tmp #cleanup
- fi
fi
-if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup
+
+# Final message
+echo -e
+if [ -f $PNDNAME ];
+then
+ cecho "Successfully finished creating the pnd '$PNDNAME'." $green
+else
+ cecho "There seems to have been a problem and '$PNDNAME' was not created. Please check
+the output above for any error messages. A possible cause for this is that there was
+not enough space available." $red
+ exit 1
+fi
+
+
+#if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup
diff --git a/backends/platform/openpandora/build/runscummvm.sh b/backends/platform/openpandora/build/runscummvm.sh
index 48d24a2b81..9c9d8362cb 100755
--- a/backends/platform/openpandora/build/runscummvm.sh
+++ b/backends/platform/openpandora/build/runscummvm.sh
@@ -11,4 +11,4 @@ mkdir saves
mkdir runtime
cd runtime
-../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config
+../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config --themepath=../data
diff --git a/backends/platform/openpandora/op-bundle.mk b/backends/platform/openpandora/op-bundle.mk
index 163f4711ce..089430f43c 100755
--- a/backends/platform/openpandora/op-bundle.mk
+++ b/backends/platform/openpandora/op-bundle.mk
@@ -75,11 +75,10 @@ endif
$(CP) $(libloc)/../arm-angstrom-linux-gnueabi/usr/lib/libFLAC.so.8.2.0 $(bundle_name)/scummvm/lib/libFLAC.so.8
- $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png
+ $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -c -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png
$(CP) $(srcdir)/backends/platform/openpandora/build/README-PND.txt $(bundle_name)
tar -cvjf $(bundle_name)-pnd.tar.bz2 $(bundle_name).pnd $(bundle_name)/README-PND.txt
rm -R ./$(bundle_name)
-# rm $(bundle_name).pnd
.PHONY: op-bundle op-pnd
diff --git a/backends/platform/ps2/DmaPipe.h b/backends/platform/ps2/DmaPipe.h
index fd8f55c154..c99da1c395 100644
--- a/backends/platform/ps2/DmaPipe.h
+++ b/backends/platform/ps2/DmaPipe.h
@@ -64,4 +64,3 @@ private:
};
#endif //__DMAPIPE_H__
-
diff --git a/backends/platform/ps2/Gs2dScreen.cpp b/backends/platform/ps2/Gs2dScreen.cpp
index 332b2a3c03..ddc1bdf668 100644
--- a/backends/platform/ps2/Gs2dScreen.cpp
+++ b/backends/platform/ps2/Gs2dScreen.cpp
@@ -816,5 +816,3 @@ const uint32 Gs2dScreen::_binaryClut[16] __attribute__((aligned(64))) = {
GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80),
GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80)
};
-
-
diff --git a/backends/platform/ps2/Makefile.gdb b/backends/platform/ps2/Makefile.gdb
index 1e2510d3f4..8ca47cd9f1 100644
--- a/backends/platform/ps2/Makefile.gdb
+++ b/backends/platform/ps2/Makefile.gdb
@@ -102,4 +102,3 @@ all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $^ $(LDFLAGS) -o $@
-
diff --git a/backends/platform/ps2/Makefile.ps2 b/backends/platform/ps2/Makefile.ps2
index 77cc735c5f..d6ce08ae84 100644
--- a/backends/platform/ps2/Makefile.ps2
+++ b/backends/platform/ps2/Makefile.ps2
@@ -105,4 +105,3 @@ all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $^ $(LDFLAGS) -o $@
-
diff --git a/backends/platform/ps2/asyncfio.cpp b/backends/platform/ps2/asyncfio.cpp
index d3d8eb65c7..3f20349107 100644
--- a/backends/platform/ps2/asyncfio.cpp
+++ b/backends/platform/ps2/asyncfio.cpp
@@ -237,4 +237,3 @@ bool AsyncFio::fioAvail(void) {
}
return retVal;
}
-
diff --git a/backends/platform/ps2/asyncfio.h b/backends/platform/ps2/asyncfio.h
index 26ee3f63dd..31684d4349 100644
--- a/backends/platform/ps2/asyncfio.h
+++ b/backends/platform/ps2/asyncfio.h
@@ -50,4 +50,3 @@ private:
volatile int * volatile _runningOp;
volatile int _ioSlots[MAX_HANDLES];
};
-
diff --git a/backends/platform/ps2/eecodyvdfs.c b/backends/platform/ps2/eecodyvdfs.c
index e9d4bc6a5c..f410b0c8ec 100644
--- a/backends/platform/ps2/eecodyvdfs.c
+++ b/backends/platform/ps2/eecodyvdfs.c
@@ -63,5 +63,3 @@ int driveStandby(void) {
driveStopped = 0;
return *(int *)sbuff;
}
-
-
diff --git a/backends/platform/ps2/eecodyvdfs.h b/backends/platform/ps2/eecodyvdfs.h
index 4b383795c7..1d43fb662f 100644
--- a/backends/platform/ps2/eecodyvdfs.h
+++ b/backends/platform/ps2/eecodyvdfs.h
@@ -49,4 +49,3 @@ extern "C" {
#endif
#endif
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
index ebf57328dd..ad86631cfd 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
@@ -131,4 +131,3 @@ typedef struct {
} ISOPvd __attribute__ ((packed)); // 0x800
#endif // __CDTYPES_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
index 77a5b93720..e55e62853b 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
@@ -344,4 +344,3 @@ int strnicmp(const char *s1, const char *s2, int n) {
}
return 0;
}
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
index 902065f385..b9f1edc194 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
@@ -81,4 +81,3 @@ int checkDiscReady(int retries);
int strnicmp(const char *s1, const char *s2, int n);
#endif // __MYCDVDFS_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
index 8aecece3d9..f0a06f927b 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
@@ -262,4 +262,3 @@ int cd_dclose(iop_file_t *handle) {
hd->size = hd->lba = 0;
return 0;
}
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
index d0aa9533f2..db942b0b7e 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
@@ -34,4 +34,3 @@ int cd_dread(iop_file_t *handle, fio_dirent_t *buf);
int cd_dclose(iop_file_t *handle);
#endif // __FIOFS_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
index eb85e04462..4950bf8ced 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
@@ -61,5 +61,3 @@ I_StartThread
I_GetThreadId
I_DelayThread
thbase_IMPORTS_end
-
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
index 3e45a5ff3d..5b760faa06 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
@@ -111,5 +111,3 @@ void *rpcServer(int func, void *data, int size) {
}
return NULL;
}
-
-
diff --git a/backends/platform/ps2/iop/rpckbd/src/imports.lst b/backends/platform/ps2/iop/rpckbd/src/imports.lst
index 41e13e6e73..e9ba01e020 100644
--- a/backends/platform/ps2/iop/rpckbd/src/imports.lst
+++ b/backends/platform/ps2/iop/rpckbd/src/imports.lst
@@ -55,4 +55,3 @@ I_UsbSetDevicePrivateData
I_UsbTransfer
I_UsbRegisterDriver
usbd_IMPORTS_end
-
diff --git a/backends/platform/ps2/irxboot.cpp b/backends/platform/ps2/irxboot.cpp
index 5072e8a52c..aa904d4f5b 100644
--- a/backends/platform/ps2/irxboot.cpp
+++ b/backends/platform/ps2/irxboot.cpp
@@ -210,4 +210,3 @@ int loadIrxModules(int device, const char *irxPath, IrxReference **modules) {
sioprintf("%s\n", resModules[i].path);
return curModule - resModules;
}
-
diff --git a/backends/platform/ps2/irxboot.h b/backends/platform/ps2/irxboot.h
index ef1bfb1256..81b47a37c6 100644
--- a/backends/platform/ps2/irxboot.h
+++ b/backends/platform/ps2/irxboot.h
@@ -84,4 +84,3 @@ struct IrxReference {
int loadIrxModules(int device, const char *irxPath, IrxReference **modules);
#endif // __IRXBOOT_H__
-
diff --git a/backends/platform/ps2/ps2debug.cpp b/backends/platform/ps2/ps2debug.cpp
index 1fc3d50170..300e18316f 100644
--- a/backends/platform/ps2/ps2debug.cpp
+++ b/backends/platform/ps2/ps2debug.cpp
@@ -44,4 +44,3 @@ void sioprintf(const char *zFormat, ...) {
pos++;
}
}
-
diff --git a/backends/platform/ps2/ps2debug.h b/backends/platform/ps2/ps2debug.h
index 127032ae80..02831e0623 100644
--- a/backends/platform/ps2/ps2debug.h
+++ b/backends/platform/ps2/ps2debug.h
@@ -28,4 +28,3 @@
void sioprintf(const char *zFormat, ...);
#endif // __PS2DEBUG_H__
-
diff --git a/backends/platform/ps2/ps2input.cpp b/backends/platform/ps2/ps2input.cpp
index 07104a6d97..6f36c5ff90 100644
--- a/backends/platform/ps2/ps2input.cpp
+++ b/backends/platform/ps2/ps2input.cpp
@@ -545,5 +545,3 @@ const Common::KeyCode Ps2Input::_padFlags[16] = {
Common::KEYCODE_INVALID, // Cross
Common::KEYCODE_INVALID // Square
};
-
-
diff --git a/backends/platform/ps2/ps2input.h b/backends/platform/ps2/ps2input.h
index c5d2f5b840..b97daac042 100644
--- a/backends/platform/ps2/ps2input.h
+++ b/backends/platform/ps2/ps2input.h
@@ -61,4 +61,3 @@ private:
};
#endif // __PS2INPUT_H__
-
diff --git a/backends/platform/ps2/ps2mutex.cpp b/backends/platform/ps2/ps2mutex.cpp
index 75b3a15482..5b30fa7862 100644
--- a/backends/platform/ps2/ps2mutex.cpp
+++ b/backends/platform/ps2/ps2mutex.cpp
@@ -97,4 +97,3 @@ void OSystem_PS2::deleteMutex(MutexRef mutex) {
sysMutex->sema = -1;
SignalSema(_mutexSema);
}
-
diff --git a/backends/platform/ps2/ps2pad.cpp b/backends/platform/ps2/ps2pad.cpp
index 00512c40c3..eeb9dfbd93 100644
--- a/backends/platform/ps2/ps2pad.cpp
+++ b/backends/platform/ps2/ps2pad.cpp
@@ -148,5 +148,3 @@ void Ps2Pad::readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv) {
*pbuttons = 0;
}
}
-
-
diff --git a/backends/platform/ps2/ps2pad.h b/backends/platform/ps2/ps2pad.h
index 16c7c796d3..aebb3c6339 100644
--- a/backends/platform/ps2/ps2pad.h
+++ b/backends/platform/ps2/ps2pad.h
@@ -63,4 +63,3 @@ private:
};
#endif //__PS2PAD_H__
-
diff --git a/backends/platform/ps2/rpckbd.c b/backends/platform/ps2/rpckbd.c
index 0d37e4cfcb..0bb45208f5 100644
--- a/backends/platform/ps2/rpckbd.c
+++ b/backends/platform/ps2/rpckbd.c
@@ -175,4 +175,3 @@ int PS2KbdResetKeymap(void)
} else
return -1;
}
-
diff --git a/backends/platform/ps2/rpckbd.h b/backends/platform/ps2/rpckbd.h
index bc94cddf1b..bffd8e5be5 100644
--- a/backends/platform/ps2/rpckbd.h
+++ b/backends/platform/ps2/rpckbd.h
@@ -47,4 +47,3 @@ extern "C" {
#endif
#endif
-
diff --git a/backends/platform/ps2/sdlkeys.h b/backends/platform/ps2/sdlkeys.h
index b2f783cedd..791b1eb190 100644
--- a/backends/platform/ps2/sdlkeys.h
+++ b/backends/platform/ps2/sdlkeys.h
@@ -260,5 +260,3 @@ enum SdlKeyCodes {
};
#endif
-
-
diff --git a/backends/platform/psp/Makefile b/backends/platform/psp/Makefile
index 899bf37e80..7f4f20446e 100644
--- a/backends/platform/psp/Makefile
+++ b/backends/platform/psp/Makefile
@@ -201,4 +201,3 @@ SCEkxploit: $(TARGET).elf $(PSP_EBOOT_SFO)
$(PACK_PBP) "%__SCE__$(TARGET)/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \
$(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR)
-
diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP
index dcfa30898c..a101481dca 100644
--- a/backends/platform/psp/README.PSP
+++ b/backends/platform/psp/README.PSP
@@ -169,4 +169,3 @@ Joost Peters (joostp@scummvm.org)
Paolo Costabel (paoloc@pacbell.net)
Thomas Mayer (tommybear@internode.on.net)
Yotam Barnoy (yotambarnoy@gmail.com)
-
diff --git a/backends/platform/psp/README.PSP.in b/backends/platform/psp/README.PSP.in
index 978f8a60bd..1ee99db84b 100644
--- a/backends/platform/psp/README.PSP.in
+++ b/backends/platform/psp/README.PSP.in
@@ -169,4 +169,3 @@ Joost Peters (joostp@scummvm.org)
Paolo Costabel (paoloc@pacbell.net)
Thomas Mayer (tommybear@internode.on.net)
Yotam Barnoy (yotambarnoy@gmail.com)
-
diff --git a/backends/platform/psp/display_manager.cpp b/backends/platform/psp/display_manager.cpp
index 422805714f..cdb130e2a0 100644
--- a/backends/platform/psp/display_manager.cpp
+++ b/backends/platform/psp/display_manager.cpp
@@ -479,4 +479,3 @@ Common::List<Graphics::PixelFormat> DisplayManager::getSupportedPixelFormats() c
return list;
}
-
diff --git a/backends/platform/psp/dummy.cpp b/backends/platform/psp/dummy.cpp
index 748ac8cbf3..998ecf1488 100644
--- a/backends/platform/psp/dummy.cpp
+++ b/backends/platform/psp/dummy.cpp
@@ -53,4 +53,4 @@
getsockopt(0, 0, 0, NULL, NULL);
return i;
-} \ No newline at end of file
+}
diff --git a/backends/platform/psp/image_viewer.cpp b/backends/platform/psp/image_viewer.cpp
index 1ed7698bc8..98205ddee9 100644
--- a/backends/platform/psp/image_viewer.cpp
+++ b/backends/platform/psp/image_viewer.cpp
@@ -69,7 +69,7 @@ bool ImageViewer::load(int imageNum) {
assert(_renderer);
// Load a PNG into our buffer and palette. Size it by the actual size of the image
- PngLoader image(file, *_buffer, *_palette, Buffer::kSizeBySourceSize);
+ PngLoader image(*file, *_buffer, *_palette, Buffer::kSizeBySourceSize);
PngLoader::Status status = image.allocate(); // allocate the buffers for the file
@@ -321,4 +321,4 @@ void ImageViewer::handleEvent(uint32 event) {
PSP_ERROR("Unknown event %d\n", event);
break;
}
-} \ No newline at end of file
+}
diff --git a/backends/platform/psp/image_viewer.h b/backends/platform/psp/image_viewer.h
index ad188536a3..91a70b85cc 100644
--- a/backends/platform/psp/image_viewer.h
+++ b/backends/platform/psp/image_viewer.h
@@ -99,4 +99,4 @@ public:
void setDisplayManager(DisplayManager *displayManager) { _displayManager = displayManager; }
};
-#endif /* PSP_IMAGE_VIEWER_H */ \ No newline at end of file
+#endif /* PSP_IMAGE_VIEWER_H */
diff --git a/backends/platform/psp/input.cpp b/backends/platform/psp/input.cpp
index a9ad441b4d..5e20fb1e43 100644
--- a/backends/platform/psp/input.cpp
+++ b/backends/platform/psp/input.cpp
@@ -566,5 +566,3 @@ void InputHandler::setButtonsForImageViewer() {
_nub.getPad().getButton(ButtonPad::BTN_RIGHT, UNSHIFTED).setPspEvent(PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_RIGHT,
PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_STOP);
}
-
-
diff --git a/backends/platform/psp/memory.h b/backends/platform/psp/memory.h
index b5e29af634..5b728460fc 100644
--- a/backends/platform/psp/memory.h
+++ b/backends/platform/psp/memory.h
@@ -122,5 +122,3 @@ public:
};
#endif /* PSP_INCLUDE_SWAP */
-
-
diff --git a/backends/platform/psp/mp3.cpp b/backends/platform/psp/mp3.cpp
index 266e31e445..3dbf31112a 100644
--- a/backends/platform/psp/mp3.cpp
+++ b/backends/platform/psp/mp3.cpp
@@ -179,8 +179,7 @@ bool Mp3PspStream::loadStartAudioModule(const char *modname, int partition){
// TODO: make parallel function for unloading the 1.50 modules
Mp3PspStream::Mp3PspStream(Common::SeekableReadStream *inStream, DisposeAfterUse::Flag dispose) :
- _inStream(inStream),
- _disposeAfterUse(dispose),
+ _inStream(inStream, dispose),
_pcmLength(0),
_posInFrame(0),
_state(MP3_STATE_INIT),
@@ -274,9 +273,6 @@ Mp3PspStream::~Mp3PspStream() {
deinitStream();
releaseStreamME(); // free the memory used for this stream
-
- if (_disposeAfterUse == DisposeAfterUse::YES)
- delete _inStream;
}
void Mp3PspStream::deinitStream() {
diff --git a/backends/platform/psp/mp3.h b/backends/platform/psp/mp3.h
index 8b01fe4872..f7bfdda254 100644
--- a/backends/platform/psp/mp3.h
+++ b/backends/platform/psp/mp3.h
@@ -23,6 +23,7 @@
#ifndef SOUND_MP3_PSP_H
#define SOUND_MP3_PSP_H
+#include "common/ptr.h"
#include "common/types.h"
#include "common/scummsys.h"
@@ -48,8 +49,7 @@ protected:
byte _codecInBuffer[3072] __attribute__((aligned(64))); // the codec always needs alignment
unsigned long _codecParams[65]__attribute__((aligned(64))); // TODO: change to struct
- Common::SeekableReadStream *_inStream;
- DisposeAfterUse::Flag _disposeAfterUse;
+ Common::DisposablePtr<Common::SeekableReadStream> _inStream;
uint32 _pcmLength; // how many pcm samples we have for this type of file (x2 this for stereo)
diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp
index 16377539c8..4de13d1e73 100644
--- a/backends/platform/psp/png_loader.cpp
+++ b/backends/platform/psp/png_loader.cpp
@@ -78,7 +78,7 @@ PngLoader::Status PngLoader::allocate() {
bool PngLoader::load() {
DEBUG_ENTER_FUNC();
// Try to load the image
- _file->seek(0); // Go back to start
+ _file.seek(0); // Go back to start
if (!loadImageIntoBuffer()) {
PSP_DEBUG_PRINT("failed to load image\n");
@@ -99,11 +99,9 @@ void PngLoader::warningFn(png_structp png_ptr, png_const_charp warning_msg) {
// Read function for png library to be able to read from our SeekableReadStream
//
void PngLoader::libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length) {
- Common::SeekableReadStream *file;
+ Common::SeekableReadStream &file = *(Common::SeekableReadStream *)pngPtr->io_ptr;
- file = (Common::SeekableReadStream *)pngPtr->io_ptr;
-
- file->read(data, length);
+ file.read(data, length);
}
bool PngLoader::basicImageLoad() {
@@ -120,7 +118,7 @@ bool PngLoader::basicImageLoad() {
return false;
}
// Set the png lib to use our read function
- png_set_read_fn(_pngPtr, (void *)_file, libReadFunc);
+ png_set_read_fn(_pngPtr, &_file, libReadFunc);
unsigned int sig_read = 0;
diff --git a/backends/platform/psp/png_loader.h b/backends/platform/psp/png_loader.h
index 0ff9d8a65d..48a3220d78 100644
--- a/backends/platform/psp/png_loader.h
+++ b/backends/platform/psp/png_loader.h
@@ -34,7 +34,7 @@ private:
static void warningFn(png_structp png_ptr, png_const_charp warning_msg);
static void libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length);
- Common::SeekableReadStream *_file;
+ Common::SeekableReadStream &_file;
Buffer *_buffer;
Palette *_palette;
@@ -57,7 +57,7 @@ public:
BAD_FILE
};
- PngLoader(Common::SeekableReadStream *file, Buffer &buffer, Palette &palette,
+ PngLoader(Common::SeekableReadStream &file, Buffer &buffer, Palette &palette,
Buffer::HowToSize sizeBy = Buffer::kSizeByTextureSize) :
_file(file), _buffer(&buffer), _palette(&palette),
_width(0), _height(0), _paletteSize(0),
diff --git a/backends/platform/psp/portdefs.h b/backends/platform/psp/portdefs.h
index feb0c944ee..e8a28b31e2 100644
--- a/backends/platform/psp/portdefs.h
+++ b/backends/platform/psp/portdefs.h
@@ -53,5 +53,3 @@
//#define printf pspDebugScreenPrintf
#endif /* PORTDEFS_H */
-
-
diff --git a/backends/platform/psp/pspkeyboard.cpp b/backends/platform/psp/pspkeyboard.cpp
index 43c4cada15..66efe9145d 100644
--- a/backends/platform/psp/pspkeyboard.cpp
+++ b/backends/platform/psp/pspkeyboard.cpp
@@ -298,7 +298,7 @@ bool PSPKeyboard::load() {
goto ERROR;
}
- PngLoader image(file, _buffers[i], _palettes[i]);
+ PngLoader image(*file, _buffers[i], _palettes[i]);
if (image.allocate() != PngLoader::OK) {
PSP_ERROR("Failed to allocate memory for keyboard image %s\n", _guiStrings[i]);
diff --git a/backends/platform/psp/rtc.cpp b/backends/platform/psp/rtc.cpp
index 6c8e919986..cbbb7d3f80 100644
--- a/backends/platform/psp/rtc.cpp
+++ b/backends/platform/psp/rtc.cpp
@@ -83,4 +83,3 @@ uint32 PspRtc::getMicros() {
return ticks[0];
}
-
diff --git a/backends/platform/psp/thread.cpp b/backends/platform/psp/thread.cpp
index 5f38a54ab7..57370f7685 100644
--- a/backends/platform/psp/thread.cpp
+++ b/backends/platform/psp/thread.cpp
@@ -228,4 +228,3 @@ void PspCondition::wait(PspMutex &externalMutex) {
externalMutex.lock(); // must lock external mutex here for continuation
}
-
diff --git a/backends/platform/psp/thread.h b/backends/platform/psp/thread.h
index a2f3b5eda2..ca94b8c82c 100644
--- a/backends/platform/psp/thread.h
+++ b/backends/platform/psp/thread.h
@@ -105,5 +105,3 @@ enum StackSizes {
};
#endif /* PSP_THREADS_H */
-
-
diff --git a/backends/platform/psp/trace.cpp b/backends/platform/psp/trace.cpp
index b799b4e870..008b508b7e 100644
--- a/backends/platform/psp/trace.cpp
+++ b/backends/platform/psp/trace.cpp
@@ -148,4 +148,3 @@ void mipsBacktrace(uint32 levels, void **addresses) {
}
}
}
-
diff --git a/backends/platform/sdl/macosx/appmenu_osx.h b/backends/platform/sdl/macosx/appmenu_osx.h
new file mode 100755
index 0000000000..005414b789
--- /dev/null
+++ b/backends/platform/sdl/macosx/appmenu_osx.h
@@ -0,0 +1,32 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef APPMENU_OSX_H
+#define APPMENU_OSX_H
+
+#if defined(MACOSX)
+
+void replaceApplicationMenuItems();
+
+#endif // MACOSX
+
+#endif
diff --git a/backends/platform/sdl/macosx/appmenu_osx.mm b/backends/platform/sdl/macosx/appmenu_osx.mm
new file mode 100755
index 0000000000..bb089a6b61
--- /dev/null
+++ b/backends/platform/sdl/macosx/appmenu_osx.mm
@@ -0,0 +1,110 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "backends/platform/sdl/macosx/appmenu_osx.h"
+#include "common/translation.h"
+
+#include <Cocoa/Cocoa.h>
+
+// Apple removed setAppleMenu from the header files in 10.4,
+// but as the method still exists we declare it ourselves here.
+// Yes, this works :)
+@interface NSApplication(MissingFunction)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+
+void replaceApplicationMenuItems() {
+
+ // Code mainly copied and adapted from SDLmain.m
+ NSMenu *appleMenu;
+ NSMenu *windowMenu;
+ NSMenuItem *menuItem;
+
+ // For some reason [[NSApp mainMenu] removeAllItems] doesn't work and crashes, so we need
+ // to remove the SDL generated menus one by one
+ [[NSApp mainMenu] removeItemAtIndex:0]; // Remove application menu
+ [[NSApp mainMenu] removeItemAtIndex:0]; // Remove "Windows" menu
+
+ // Create new application menu
+ appleMenu = [[NSMenu alloc] initWithTitle:@""];
+
+ // Get current encoding
+#ifdef USE_TRANSLATION
+ NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)[NSString stringWithCString:(TransMan.getCurrentCharset()).c_str() encoding:NSASCIIStringEncoding]));
+#else
+ NSStringEncoding stringEncoding = NSASCIIStringEncoding;
+#endif
+
+ // Add "About ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("About ScummVM") encoding:stringEncoding] action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+
+ // Add separator
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ // Add "Hide ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide ScummVM") encoding:stringEncoding] action:@selector(hide:) keyEquivalent:@"h"];
+
+ // Add "Hide Others" menu item
+ menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide Others") encoding:stringEncoding] action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+ [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
+
+ // Add "Show All" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Show All") encoding:stringEncoding] action:@selector(unhideAllApplications:) keyEquivalent:@""];
+
+ // Add separator
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ // Add "Quit ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Quit ScummVM") encoding:stringEncoding] action:@selector(terminate:) keyEquivalent:@"q"];
+
+ // Put application menu into the menubar
+ menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
+ [menuItem setSubmenu:appleMenu];
+ [[NSApp mainMenu] addItem:menuItem];
+
+ // Tell the application object that this is now the application menu
+ [NSApp setAppleMenu:appleMenu];
+
+
+ // Create new "Window" menu
+ windowMenu = [[NSMenu alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding]];
+
+ // Add "Minimize" menu item
+ menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Minimize") encoding:stringEncoding] action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+ [windowMenu addItem:menuItem];
+
+ // Put menu into the menubar
+ menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding] action:nil keyEquivalent:@""];
+ [menuItem setSubmenu:windowMenu];
+ [[NSApp mainMenu] addItem:menuItem];
+
+ // Tell the application object that this is now the window menu.
+ [NSApp setWindowsMenu:windowMenu];
+
+ // Finally give up our references to the objects
+ [appleMenu release];
+ [windowMenu release];
+ [menuItem release];
+}
diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp
index 817f61e864..d9de4e5e33 100644
--- a/backends/platform/sdl/macosx/macosx.cpp
+++ b/backends/platform/sdl/macosx/macosx.cpp
@@ -29,9 +29,13 @@
#include "backends/platform/sdl/macosx/macosx.h"
#include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h"
+#include "backends/platform/sdl/macosx/appmenu_osx.h"
+#include "backends/updates/macosx/macosx-updates.h"
#include "common/archive.h"
+#include "common/config-manager.h"
#include "common/fs.h"
+#include "common/translation.h"
#include "ApplicationServices/ApplicationServices.h" // for LSOpenFSRef
#include "CoreFoundation/CoreFoundation.h" // for CF* stuff
@@ -51,6 +55,20 @@ void OSystem_MacOSX::initBackend() {
_mixerManager->init();
}
+#ifdef USE_TRANSLATION
+ // We need to initialize the translataion manager here for the following
+ // call to replaceApplicationMenuItems() work correctly
+ TransMan.setLanguage(ConfMan.get("gui_language").c_str());
+#endif // USE_TRANSLATION
+
+ // Replace the SDL generated menu items with our own translated ones on Mac OS X
+ replaceApplicationMenuItems();
+
+#ifdef USE_SPARKLE
+ // Initialize updates manager
+ _updateManager = new MacOSXUpdateManager();
+#endif
+
// Invoke parent implementation of this method
OSystem_POSIX::initBackend();
}
diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk
index e67bf859d6..f1afe37349 100644
--- a/backends/platform/sdl/module.mk
+++ b/backends/platform/sdl/module.mk
@@ -14,7 +14,8 @@ endif
ifdef MACOSX
MODULE_OBJS += \
macosx/macosx-main.o \
- macosx/macosx.o
+ macosx/macosx.o \
+ macosx/appmenu_osx.o
endif
ifdef WIN32
diff --git a/backends/platform/sdl/ps3/ps3.cpp b/backends/platform/sdl/ps3/ps3.cpp
index 16722ccdb7..33586ce693 100644
--- a/backends/platform/sdl/ps3/ps3.cpp
+++ b/backends/platform/sdl/ps3/ps3.cpp
@@ -21,7 +21,7 @@
*/
#define FORBIDDEN_SYMBOL_EXCEPTION_mkdir
-#define FORBIDDEN_SYMBOL_EXCEPTION_time_h //On IRIX, sys/stat.h includes sys/time.h
+#define FORBIDDEN_SYMBOL_EXCEPTION_time_h // sys/stat.h includes sys/time.h
#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h
#include "common/scummsys.h"
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index d05cca4d1f..8dff5cec05 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -49,6 +49,7 @@
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
#ifdef USE_OPENGL
#include "backends/graphics/openglsdl/openglsdl-graphics.h"
+#include "graphics/cursorman.h"
#endif
#include "icons/scummvm.xpm"
@@ -174,7 +175,7 @@ void OSystem_SDL::initBackend() {
// If the gfx_mode is from OpenGL, create the OpenGL graphics manager
if (use_opengl) {
- _graphicsManager = new OpenGLSdlGraphicsManager();
+ _graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
graphicsManagerType = 1;
}
}
@@ -472,7 +473,8 @@ uint32 OSystem_SDL::getMillis() {
}
void OSystem_SDL::delayMillis(uint msecs) {
- SDL_Delay(msecs);
+ if (!g_eventRec.processDelayMillis(msecs))
+ SDL_Delay(msecs);
}
void OSystem_SDL::getTimeAndDate(TimeDate &td) const {
@@ -523,6 +525,22 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
i = _sdlModesCount;
}
+ // Very hacky way to set up the old graphics manager state, in case we
+ // switch from SDL->OpenGL or OpenGL->SDL.
+ //
+ // This is a probably temporary workaround to fix bugs like #3368143
+ // "SDL/OpenGL: Crash when switching renderer backend".
+ const int screenWidth = _graphicsManager->getWidth();
+ const int screenHeight = _graphicsManager->getHeight();
+ const bool arState = _graphicsManager->getFeatureState(kFeatureAspectRatioCorrection);
+ const bool fullscreen = _graphicsManager->getFeatureState(kFeatureFullscreenMode);
+ const bool cursorPalette = _graphicsManager->getFeatureState(kFeatureCursorPalette);
+#ifdef USE_RGB_COLOR
+ const Graphics::PixelFormat pixelFormat = _graphicsManager->getScreenFormat();
+#endif
+
+ bool switchedManager = false;
+
// Loop through modes
while (srcMode->name) {
if (i == mode) {
@@ -534,16 +552,55 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
_graphicsManager = new SurfaceSdlGraphicsManager(_eventSource);
((SurfaceSdlGraphicsManager *)_graphicsManager)->initEventObserver();
_graphicsManager->beginGFXTransaction();
+
+ switchedManager = true;
} else if (_graphicsMode < _sdlModesCount && mode >= _sdlModesCount) {
debug(1, "switching to OpenGL graphics");
delete _graphicsManager;
- _graphicsManager = new OpenGLSdlGraphicsManager();
+ _graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
((OpenGLSdlGraphicsManager *)_graphicsManager)->initEventObserver();
_graphicsManager->beginGFXTransaction();
+
+ switchedManager = true;
}
_graphicsMode = mode;
- return _graphicsManager->setGraphicsMode(srcMode->id);
+
+ if (switchedManager) {
+#ifdef USE_RGB_COLOR
+ _graphicsManager->initSize(screenWidth, screenHeight, &pixelFormat);
+#else
+ _graphicsManager->initSize(screenWidth, screenHeight, 0);
+#endif
+ _graphicsManager->setFeatureState(kFeatureAspectRatioCorrection, arState);
+ _graphicsManager->setFeatureState(kFeatureFullscreenMode, fullscreen);
+ _graphicsManager->setFeatureState(kFeatureCursorPalette, cursorPalette);
+
+ // Worst part about this right now, tell the cursor manager to
+ // resetup the cursor + cursor palette if necessarily
+
+ // First we need to try to setup the old state on the new manager...
+ if (_graphicsManager->endGFXTransaction() != kTransactionSuccess) {
+ // Oh my god if this failed the client code might just explode.
+ return false;
+ }
+
+ // Next setup the cursor again
+ CursorMan.pushCursor(0, 0, 0, 0, 0, 0);
+ CursorMan.popCursor();
+
+ // Next setup cursor palette if needed
+ if (cursorPalette) {
+ CursorMan.pushCursorPalette(0, 0, 0);
+ CursorMan.popCursorPalette();
+ }
+
+ _graphicsManager->beginGFXTransaction();
+ // Oh my god if this failed the client code might just explode.
+ return _graphicsManager->setGraphicsMode(srcMode->id);
+ } else {
+ return _graphicsManager->setGraphicsMode(srcMode->id);
+ }
}
i++;
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 395b2b3aac..22d79dbfe7 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -74,12 +74,6 @@ public:
virtual void getTimeAndDate(TimeDate &td) const;
virtual Audio::Mixer *getMixer();
- // HACK: Special SDL events types
- enum SdlEvent {
- kSdlEventExpose = 100,
- kSdlEventResize = 101
- };
-
protected:
bool _inited;
bool _initedSDL;
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp
index c1b6c853e4..a2c8e43424 100644
--- a/backends/platform/sdl/win32/win32.cpp
+++ b/backends/platform/sdl/win32/win32.cpp
@@ -23,11 +23,6 @@
// Disable symbol overrides so that we can use system headers.
#define FORBIDDEN_SYMBOL_ALLOW_ALL
-#include "common/scummsys.h"
-#include "common/config-manager.h"
-#include "common/error.h"
-#include "common/textconsole.h"
-
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
@@ -35,6 +30,11 @@
#undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one...
#include <shellapi.h>
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+#include "common/error.h"
+#include "common/textconsole.h"
+
#include <SDL_syswm.h> // For setting the icon
#include "backends/platform/sdl/win32/win32.h"
diff --git a/backends/platform/symbian/.placeholder b/backends/platform/symbian/.placeholder
index dcf4d34a62..4af1e27cc7 100644
--- a/backends/platform/symbian/.placeholder
+++ b/backends/platform/symbian/.placeholder
@@ -1 +1 @@
->> SumthinWicked *grins* << \ No newline at end of file
+>> SumthinWicked *grins* <<
diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
index 3bdcede76a..3062068852 100644
--- a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
+++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
@@ -798,5 +798,3 @@ sub PrintMessage()
}
##################################################################################################################
-
-
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README
index 1f49c52f02..3e3be592e7 100644
--- a/backends/platform/symbian/README
+++ b/backends/platform/symbian/README
@@ -177,4 +177,3 @@ Greetz & such
greetz,
SumthinWicked & Anotherguest
-
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
index 469c815afb..0d22c9d016 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
@@ -61,4 +61,4 @@
""-"!:\system\apps\ScummVM\sdl.ini",FILENULL
; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
-; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file
+; It will remove the config file, std***.txt files & dirs on uninstall.
diff --git a/backends/platform/symbian/S60v3/ScummVM_Loc.rss b/backends/platform/symbian/S60v3/ScummVM_Loc.rss
index d98ef5ae71..7247ce1207 100644
--- a/backends/platform/symbian/S60v3/ScummVM_Loc.rss
+++ b/backends/platform/symbian/S60v3/ScummVM_Loc.rss
@@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
index 9273312f42..849e0b017f 100644
--- a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
+++ b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
@@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
index 1b1cc9e64f..031be012cd 100644
--- a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
+++ b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";
}
-
diff --git a/backends/platform/symbian/S60v3/scummvm_reg.rss b/backends/platform/symbian/S60v3/scummvm_reg.rss
index 1156694bd7..b5617913d6 100644
--- a/backends/platform/symbian/S60v3/scummvm_reg.rss
+++ b/backends/platform/symbian/S60v3/scummvm_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";
}
-
diff --git a/backends/platform/symbian/S80/ScummVM_S80.mmp.in b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
index efd0d0ee32..5e4b6d447e 100644
--- a/backends/platform/symbian/S80/ScummVM_S80.mmp.in
+++ b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
@@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib
LIBRARY estlib.lib apgrfx.lib
LIBRARY gdi.lib hal.lib bitgdi.lib
LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib bafl.lib
-
diff --git a/backends/platform/symbian/S90/Scummvm_S90.mmp.in b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
index 4afdb5c62e..06d65f1641 100644
--- a/backends/platform/symbian/S90/Scummvm_S90.mmp.in
+++ b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
@@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib
LIBRARY estlib.lib apgrfx.lib
LIBRARY gdi.lib hal.lib bitgdi.lib bafl.lib
LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib
-
diff --git a/backends/platform/symbian/UIQ2/ScummVM.rss b/backends/platform/symbian/UIQ2/ScummVM.rss
index 3550d82f7d..374bd50680 100644
--- a/backends/platform/symbian/UIQ2/ScummVM.rss
+++ b/backends/platform/symbian/UIQ2/ScummVM.rss
@@ -41,4 +41,3 @@ RESOURCE TBUF16 { buf=""; }
RESOURCE EIK_APP_INFO
{
}
-
diff --git a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
index 4000b1653d..80ba37d694 100644
--- a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
+++ b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
@@ -106,4 +106,3 @@ LIBRARY qikctl.lib bafl.lib
START WINS
WIN32_LIBRARY lldiv.obj llmul.obj llshl.obj
END
-
diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
index ad3a31cb30..8284f64611 100644
--- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
+++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
@@ -54,4 +54,4 @@
; add extra Vibration lib for P800, will be ignored during all other installs
IF MachineUID = 0x101F408B
@"Vibration.sis", (0x101F94A3)
-ENDIF \ No newline at end of file
+ENDIF
diff --git a/backends/platform/symbian/UIQ3/ScummVM.rss b/backends/platform/symbian/UIQ3/ScummVM.rss
index cb47568288..2021b0506e 100644
--- a/backends/platform/symbian/UIQ3/ScummVM.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM.rss
@@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO
}
#include <sdl.ra>
-
diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
index cb47568288..2021b0506e 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
@@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO
}
#include <sdl.ra>
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
index a6ee70ab25..7f3b71ef84 100644
--- a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
@@ -82,4 +82,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
index 2158406d0d..68d0d33abd 100644
--- a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_loc.rss b/backends/platform/symbian/UIQ3/scummvm_loc.rss
index 201aacefa3..d00a67f3dc 100644
--- a/backends/platform/symbian/UIQ3/scummvm_loc.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_loc.rss
@@ -56,4 +56,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_reg.rss b/backends/platform/symbian/UIQ3/scummvm_reg.rss
index 1156694bd7..b5617913d6 100644
--- a/backends/platform/symbian/UIQ3/scummvm_reg.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";
}
-
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index 9acef57cea..6a4bba8345 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -156,4 +156,4 @@ SOURCE backends\vkeybd\virtual-keyboard.cpp
// Downscaler
SOURCE graphics\scaler\downscaler.cpp
-MACRO SDL_BACKEND \ No newline at end of file
+MACRO SDL_BACKEND
diff --git a/backends/platform/symbian/res/ScummVmAif.rss b/backends/platform/symbian/res/ScummVmAif.rss
index 31bf7bd394..b2addc3f21 100644
--- a/backends/platform/symbian/res/ScummVmAif.rss
+++ b/backends/platform/symbian/res/ScummVmAif.rss
@@ -42,6 +42,3 @@ RESOURCE AIF_DATA
//
num_icons=2;
}
-
-
-
diff --git a/backends/platform/symbian/src/ScummApp.cpp b/backends/platform/symbian/src/ScummApp.cpp
index c4d9fc88d9..405fb5c3c2 100644
--- a/backends/platform/symbian/src/ScummApp.cpp
+++ b/backends/platform/symbian/src/ScummApp.cpp
@@ -116,5 +116,3 @@ void CScummApp::GetDataFolder(TDes& aDataFolder)
aDataFolder = _L("ScummVM");
}
/////////////////////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/backends/platform/symbian/src/ScummApp.h b/backends/platform/symbian/src/ScummApp.h
index 376964f0a1..0b9ebcdf53 100644
--- a/backends/platform/symbian/src/ScummApp.h
+++ b/backends/platform/symbian/src/ScummApp.h
@@ -48,5 +48,3 @@ public:
#endif
};
#endif
-
-
diff --git a/backends/platform/wii/gdb.txt b/backends/platform/wii/gdb.txt
index 4e6c7928c3..0bd2209745 100644
--- a/backends/platform/wii/gdb.txt
+++ b/backends/platform/wii/gdb.txt
@@ -1,4 +1,3 @@
target remote /dev/ttyUSB0
info threads
bt
-
diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp
index 3965f51b7f..affe053b6a 100644
--- a/backends/platform/wii/main.cpp
+++ b/backends/platform/wii/main.cpp
@@ -247,4 +247,3 @@ int main(int argc, char *argv[]) {
#ifdef __cplusplus
}
#endif
-
diff --git a/backends/platform/wii/module.mk b/backends/platform/wii/module.mk
index 00eb0d7e49..88e75fba26 100644
--- a/backends/platform/wii/module.mk
+++ b/backends/platform/wii/module.mk
@@ -12,4 +12,3 @@ MODULE_OBJS := \
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
-
diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp
index 8c12ad9b81..ede81343ca 100644
--- a/backends/platform/wii/options.cpp
+++ b/backends/platform/wii/options.cpp
@@ -315,4 +315,3 @@ void WiiOptionsDialog::save() {
ConfMan.flushToDisk();
}
-
diff --git a/backends/platform/wii/options.h b/backends/platform/wii/options.h
index 00d42bc2ef..9b500ef29f 100644
--- a/backends/platform/wii/options.h
+++ b/backends/platform/wii/options.h
@@ -77,4 +77,3 @@ private:
};
#endif
-
diff --git a/backends/platform/wii/osystem_events.cpp b/backends/platform/wii/osystem_events.cpp
index 389d3823e7..3ba66aed89 100644
--- a/backends/platform/wii/osystem_events.cpp
+++ b/backends/platform/wii/osystem_events.cpp
@@ -451,4 +451,3 @@ bool OSystem_Wii::pollEvent(Common::Event &event) {
return false;
}
-
diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp
index 443e738a4a..83607984cc 100644
--- a/backends/platform/wii/osystem_gfx.cpp
+++ b/backends/platform/wii/osystem_gfx.cpp
@@ -747,4 +747,3 @@ void OSystem_Wii::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX,
if ((_texMouse.palette) && (oldKeycolor != _mouseKeyColor))
_cursorPaletteDirty = true;
}
-
diff --git a/backends/platform/wii/osystem_sfx.cpp b/backends/platform/wii/osystem_sfx.cpp
index acab6df7e1..2e658e47aa 100644
--- a/backends/platform/wii/osystem_sfx.cpp
+++ b/backends/platform/wii/osystem_sfx.cpp
@@ -131,4 +131,3 @@ void OSystem_Wii::deinitSfx() {
free(sound_buffer[i]);
}
}
-
diff --git a/backends/platform/wii/wii.mk b/backends/platform/wii/wii.mk
index aed30523b2..7d2db68b4e 100644
--- a/backends/platform/wii/wii.mk
+++ b/backends/platform/wii/wii.mk
@@ -49,4 +49,3 @@ wiiloaddist: wiidist
$(DEVKITPPC)/bin/wiiload wiidist/scummvm.zip
.PHONY: wiiclean wiiload geckoupload wiigdb wiidebug wiidist wiiloaddist
-
diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp
index 194f855e98..5980a41caa 100644
--- a/backends/platform/wince/CEActionsPocket.cpp
+++ b/backends/platform/wince/CEActionsPocket.cpp
@@ -215,6 +215,8 @@ void CEActionsPocket::initInstanceGame() {
_key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else if (is_simon)
+ _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10
else
_key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Key bind method
@@ -268,6 +270,15 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
else
_key_action[action].setKey(SDLK_s);
}
+ if (action == POCKET_ACTION_SKIP && ConfMan.get("gameid") == "agi") {
+ // In several AGI games (for example SQ2) it is needed to press F10 to exit from
+ // a screen. But we still want be able to skip normally with the skip button.
+ // Because of this, we inject a F10 keystroke here (this works and doesn't seem
+ // to have side-effects)
+ _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10
+ EventsBuffer::simulateKey(&_key_action[action], true);
+ _key_action[action].setKey(KEY_ALL_SKIP);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case POCKET_ACTION_KEYBOARD:
diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp
index c6456d3eb5..2cce288323 100644
--- a/backends/platform/wince/CEActionsSmartphone.cpp
+++ b/backends/platform/wince/CEActionsSmartphone.cpp
@@ -181,6 +181,8 @@ void CEActionsSmartphone::initInstanceGame() {
_key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else if (is_simon)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10
else
_key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Bind keys
@@ -232,6 +234,15 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
else
_key_action[action].setKey(SDLK_s);
}
+ if (action == SMARTPHONE_ACTION_SKIP && ConfMan.get("gameid") == "agi") {
+ // In several AGI games (for example SQ2) it is needed to press F10 to exit from
+ // a screen. But we still want be able to skip normally with the skip button.
+ // Because of this, we inject a F10 keystroke here (this works and doesn't seem
+ // to have side-effects)
+ _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10
+ EventsBuffer::simulateKey(&_key_action[action], true);
+ _key_action[action].setKey(KEY_ALL_SKIP);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case SMARTPHONE_ACTION_RIGHTCLICK:
diff --git a/backends/platform/wince/CEScaler.cpp b/backends/platform/wince/CEScaler.cpp
index f07a7ec84b..66f7809a3a 100644
--- a/backends/platform/wince/CEScaler.cpp
+++ b/backends/platform/wince/CEScaler.cpp
@@ -86,4 +86,3 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui
}
#endif
-
diff --git a/backends/platform/wince/CEgui/CEGUI.h b/backends/platform/wince/CEgui/CEGUI.h
index 4e44115476..8b2e3528e3 100644
--- a/backends/platform/wince/CEgui/CEGUI.h
+++ b/backends/platform/wince/CEgui/CEGUI.h
@@ -24,4 +24,3 @@
#include "Panel.h"
#include "ItemSwitch.h"
#include "PanelKeyboard.h"
-
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp
index 442d7fc68c..cab02150c5 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.cpp
+++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp
@@ -96,4 +96,3 @@ bool PanelKeyboard::action(int x, int y, bool pushed) {
}
} // End of namespace CEGUI
-
diff --git a/backends/platform/wince/CEkeys/CEKeys.h b/backends/platform/wince/CEkeys/CEKeys.h
index ac4907704d..cf71b982f3 100644
--- a/backends/platform/wince/CEkeys/CEKeys.h
+++ b/backends/platform/wince/CEkeys/CEKeys.h
@@ -21,4 +21,3 @@
*/
#include "EventsBuffer.h"
-
diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp
index d5818c3731..c993798dc8 100644
--- a/backends/platform/wince/CEkeys/EventsBuffer.cpp
+++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp
@@ -76,5 +76,3 @@ bool EventsBuffer::simulateMouseRightClick(int x, int y, bool pushed) {
return (SDL_PushEvent(&ev) == 0);
}
}
-
-
diff --git a/backends/platform/wince/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt
index 8f1262051a..60bcf710bb 100644
--- a/backends/platform/wince/README-WinCE.txt
+++ b/backends/platform/wince/README-WinCE.txt
@@ -1,10 +1,19 @@
ScummVM Windows CE FAQ
-Last updated: 2011-07-01
-Release version: 1.3.1
+Last updated: 2011-07-20
+Release version: x.x.x
------------------------------------------------------------------------
New in this version
-------------------
+x.x.x:
+- Changed default values for "high_sample_rate" & "FM_high_quality" to "true" as
+ most devices today are fast enough to handle this. It's still possible to set
+ this to "false" if you have a slower device.
+- Fix for TeenAgent & Hugo engines (both weren't running at all, crashed right
+ at the beginning)
+- Replaced the game mass-adding functionality with the functionality used on all
+ other platforms. It now shows progress while searching for games.
+
1.3.1:
- Fix for Normal2xAspect scaler which was causing screen update issues in some
games.
@@ -361,14 +370,13 @@ Some parameters are specific to this port :
Game specific sections (f.e. [monkey2]) - performance options
* high_sample_rate bool Desktop quality (22 kHz) sound output if
- set. The default is 11 kHz.
- If you have a fast device, you can set this
- to true to enjoy better sound effects and
- music.
+ set. This is the default.
+ If you have a slow device, you can set this
+ to false to prevent lags/delays in the game.
* FM_high_quality bool Desktop quality FM synthesis if set. Lower
- quality otherwise. The default is low
+ quality otherwise. The default is high
quality. You can change this if you have a
- fast device.
+ slow device.
* sound_thread_priority int Set the priority of the sound thread (0, 1,
2). Depending on the release, this is set
to 1 internally (above normal).
diff --git a/backends/platform/wince/missing/assert.h b/backends/platform/wince/missing/assert.h
index 734b8f9482..e9c871da60 100644
--- a/backends/platform/wince/missing/assert.h
+++ b/backends/platform/wince/missing/assert.h
@@ -6,4 +6,3 @@ void CDECL _declspec(noreturn) error(const char *s, ...);
#define assert(e) ((e) ? 0 : (::error("Assertion failed %s (%s, %d)", #e, __FILE__, __LINE__)))
#define abort() ::error("Abort (%s, %d)", __FILE__, __LINE__)
-
diff --git a/backends/platform/wince/missing/io.h b/backends/platform/wince/missing/io.h
index de492cac68..b2cb2abd8e 100644
--- a/backends/platform/wince/missing/io.h
+++ b/backends/platform/wince/missing/io.h
@@ -9,4 +9,3 @@ typedef void FILE;
#endif
FILE *wce_fopen(const char *fname, const char *fmode);
#define fopen wce_fopen
-
diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp
index ec222c6fc1..1abc3cb350 100644
--- a/backends/platform/wince/wince-sdl.cpp
+++ b/backends/platform/wince/wince-sdl.cpp
@@ -42,6 +42,7 @@
#include "audio/mixer_intern.h"
#include "audio/fmopl.h"
+#include "backends/mutex/sdl/sdl-mutex.h"
#include "backends/timer/sdl/sdl-timer.h"
#include "gui/Actions.h"
@@ -379,14 +380,6 @@ void OSystem_WINCE3::initBackend() {
((WINCESdlEventSource *)_eventSource)->init((WINCESdlGraphicsManager *)_graphicsManager);
- // Create the timer (but remove the timer manager from the SDL backend first).
- // CE SDL does not support multiple timers (SDL_AddTimer).
- // We work around this by using the SetTimer function, since we only use
- // one timer in scummvm (for the time being)
- delete _timerManager;
- _timerManager = new DefaultTimerManager();
- SDL_SetTimer(10, &timer_handler_wrapper);
-
// Call parent implementation of this method
OSystem_SDL::initBackend();
@@ -546,6 +539,24 @@ void OSystem_WINCE3::initSDL() {
}
}
+void OSystem_WINCE3::init() {
+ // Create SdlMutexManager instance as the TimerManager relies on the
+ // MutexManager being already initialized
+ if (_mutexManager == 0)
+ _mutexManager = new SdlMutexManager();
+
+ // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer).
+ // We work around this by using the SetTimer function, since we only use
+ // one timer in scummvm (for the time being)
+ if (_timerManager == 0) {
+ _timerManager = new DefaultTimerManager();
+ SDL_SetTimer(10, &timer_handler_wrapper);
+ }
+
+ // Call parent implementation of this method
+ OSystem_SDL::init();
+}
+
void OSystem_WINCE3::quit() {
fclose(stdout_file);
fclose(stderr_file);
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
index 481956c19a..b4f323c9e2 100644
--- a/backends/platform/wince/wince-sdl.h
+++ b/backends/platform/wince/wince-sdl.h
@@ -52,6 +52,7 @@ public:
void initBackend();
// Overloaded from SDL backend
+ void init();
void quit();
virtual Common::String getSystemLanguage() const;