aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authorChristopher Page2008-07-14 00:10:09 +0000
committerChristopher Page2008-07-14 00:10:09 +0000
commitd2e8d4831e33f9e1c63d53c9dd615a15f67ab995 (patch)
tree308cc8bb9ab0bc80d006c84b8ff84267355cedcb /backends/platform
parent3ac3e84ecffa967f02eeb497e260a0de08e3d2e7 (diff)
parentef95c6ff70c1b428ab1d086a9b0b551fc82c8451 (diff)
downloadscummvm-rg350-d2e8d4831e33f9e1c63d53c9dd615a15f67ab995.tar.gz
scummvm-rg350-d2e8d4831e33f9e1c63d53c9dd615a15f67ab995.tar.bz2
scummvm-rg350-d2e8d4831e33f9e1c63d53c9dd615a15f67ab995.zip
Merged revisions 32744-32745,32747,32750-32759,32762-32764,32769,32777,32783,32785-32786,32789-32791,32798-32799,32801-32807,32809-32812,32816-32817,32819-32821,32823-32830,32832-32836,32838-32844,32846-32850,32852-32854,32858-32859,32865-32868,32873-32874,32879,32883,32895,32899,32902-32904,32910-32912,32923-32924,32930-32931,32938,32940,32948-32949,32951,32960-32964,32966-32970,32972-32974,32976,32978,32983,32986-32990,32992,32994,33002-33004,33006-33007,33009-33010,33014,33017,33021-33023,33030,33033 via svnmerge from
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk svn-id: r33051
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/dc/Makefile28
-rw-r--r--backends/platform/dc/audio.cpp13
-rw-r--r--backends/platform/dc/dc.h5
-rw-r--r--backends/platform/dc/dcmain.cpp7
-rw-r--r--backends/platform/dc/selector.cpp14
-rw-r--r--backends/platform/ds/arm9/source/dsmain.cpp13
-rw-r--r--backends/platform/ds/arm9/source/dsmain.h1
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.cpp26
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.h12
-rw-r--r--backends/platform/ds/arm9/source/wordcompletion.cpp2
-rw-r--r--backends/platform/gp2x/build/README-GP2X2
-rw-r--r--backends/platform/gp2x/build/README-GP2X.html147
-rwxr-xr-x[-rw-r--r--]backends/platform/gp2x/build/build.sh0
-rwxr-xr-x[-rw-r--r--]backends/platform/gp2x/build/bundle.sh0
-rwxr-xr-x[-rw-r--r--]backends/platform/gp2x/build/clean.sh0
-rwxr-xr-x[-rw-r--r--]backends/platform/gp2x/build/config.sh4
-rwxr-xr-x[-rw-r--r--]backends/platform/gp2x/build/scummvm.gpe0
-rw-r--r--backends/platform/gp2x/gp2x-common.h11
-rw-r--r--backends/platform/gp2x/gp2x.cpp65
-rw-r--r--backends/platform/iphone/osys_iphone.cpp4
-rw-r--r--backends/platform/iphone/osys_iphone.h1
-rw-r--r--backends/platform/null/null.cpp64
-rw-r--r--backends/platform/ps2/systemps2.cpp1
-rw-r--r--backends/platform/psp/Makefile28
-rw-r--r--backends/platform/psp/osys_psp.cpp58
-rw-r--r--backends/platform/psp/osys_psp.h9
-rw-r--r--backends/platform/sdl/sdl.cpp53
-rw-r--r--backends/platform/sdl/sdl.h10
-rw-r--r--backends/platform/symbian/AdaptAllMMPs.pl231
-rw-r--r--backends/platform/symbian/BuildPackageUpload_AllVersions.pl267
-rw-r--r--backends/platform/symbian/BuildPackageUpload_LocalSettings.pl562
-rw-r--r--backends/platform/symbian/README7
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in9
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in9
-rw-r--r--backends/platform/symbian/mmp/scummvm_agi.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_agos.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in55
-rw-r--r--backends/platform/symbian/mmp/scummvm_cine.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cruise.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_drascula.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_gob.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_kyra.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_lure.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_m4.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_made.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_parallaction.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_queen.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_saga.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_scumm.mmp.in21
-rw-r--r--backends/platform/symbian/mmp/scummvm_sky.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword1.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword2.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_touche.mmp.in2
-rw-r--r--backends/platform/symbian/src/SymbianOS.cpp69
-rw-r--r--backends/platform/symbian/src/SymbianOS.h9
-rw-r--r--backends/platform/symbian/src/portdefs.h4
-rw-r--r--backends/platform/wii/osystem.cpp2
-rw-r--r--backends/platform/wii/osystem.h5
-rw-r--r--backends/platform/wii/osystem_sfx.cpp16
-rw-r--r--backends/platform/wince/Makefile5
-rw-r--r--backends/platform/wince/wince-sdl.cpp51
-rw-r--r--backends/platform/wince/wince-sdl.h5
-rw-r--r--backends/platform/x11/module.mk10
-rw-r--r--backends/platform/x11/x11.cpp1050
-rw-r--r--backends/platform/x11/x11.h197
65 files changed, 1026 insertions, 2170 deletions
diff --git a/backends/platform/dc/Makefile b/backends/platform/dc/Makefile
index 0a048c45e9..56848504e1 100644
--- a/backends/platform/dc/Makefile
+++ b/backends/platform/dc/Makefile
@@ -16,6 +16,7 @@ LDFLAGS = -Wl,-Ttext,0x8c010000 -nostartfiles $(ronindir)/lib/crt0.o
INCLUDES= -I./ -I$(srcdir) -I$(ronindir)/include/ -I$(srcdir)/engines
LIBS = -L$(ronindir)/lib -lmad -lronin -lz -lm
EXECUTABLE = scummvm.elf
+DEPDIR = .deps
PLUGIN_PREFIX =
PLUGIN_SUFFIX = .plg
PLUGIN_EXTRA_DEPS = plugin.x plugin.syms scummvm.elf
@@ -32,12 +33,37 @@ ifdef DYNAMIC_MODULES
DEFINES += -DDYNAMIC_MODULES
PRE_OBJS_FLAGS = -Wl,--whole-archive
POST_OBJS_FLAGS = -Wl,--no-whole-archive
+ENABLED=DYNAMIC_PLUGIN
+else
+ENABLED=STATIC_PLUGIN
endif
+ENABLE_SCUMM = $(ENABLED)
+ENABLE_SCUMM_7_8 = $(ENABLED)
+ENABLE_HE = $(ENABLED)
+ENABLE_AGI = $(ENABLED)
+ENABLE_AGOS = $(ENABLED)
+ENABLE_CINE = $(ENABLED)
+ENABLE_CRUISE = $(ENABLED)
+ENABLE_DRASCULA = $(ENABLED)
+ENABLE_GOB = $(ENABLED)
+ENABLE_IGOR = $(ENABLED)
+ENABLE_KYRA = $(ENABLED)
+ENABLE_LURE = $(ENABLED)
+ENABLE_M4 = $(ENABLED)
+ENABLE_MADE = $(ENABLED)
+ENABLE_PARALLACTION = $(ENABLED)
+ENABLE_QUEEN = $(ENABLED)
+ENABLE_SAGA = $(ENABLED)
+ENABLE_SKY = $(ENABLED)
+ENABLE_SWORD1 = $(ENABLED)
+ENABLE_SWORD2 = $(ENABLED)
+ENABLE_TOUCHE = $(ENABLED)
+
OBJS := dcmain.o time.o display.o audio.o input.o selector.o icon.o \
label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o
-MODULE_DIRS += .
+MODULE_DIRS += ./
include $(srcdir)/Makefile.common
diff --git a/backends/platform/dc/audio.cpp b/backends/platform/dc/audio.cpp
index 5f95a836e8..b5667e74b0 100644
--- a/backends/platform/dc/audio.cpp
+++ b/backends/platform/dc/audio.cpp
@@ -25,17 +25,18 @@
#include <common/scummsys.h>
#include "engines/engine.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include "dc.h"
EXTERN_C void *memcpy4s(void *s1, const void *s2, unsigned int n);
-void initSound()
+uint OSystem_Dreamcast::initSound()
{
stop_sound();
do_sound_command(CMD_SET_FREQ_EXP(FREQ_22050_EXP));
do_sound_command(CMD_SET_STEREO(1));
do_sound_command(CMD_SET_BUFFER(SOUND_BUFFER_SHIFT));
+ return read_sound_int(&SOUNDSTATUS->freq);
}
void OSystem_Dreamcast::checkSound()
@@ -61,8 +62,8 @@ void OSystem_Dreamcast::checkSound()
if (n<100)
return;
- Audio::Mixer::mixCallback(_mixer, (byte*)temp_sound_buffer,
- 2*SAMPLES_TO_BYTES(n));
+ _mixer->mixCallback((byte*)temp_sound_buffer,
+ 2*SAMPLES_TO_BYTES(n));
if (fillpos+n > curr_ring_buffer_samples) {
int r = curr_ring_buffer_samples - fillpos;
@@ -77,8 +78,4 @@ void OSystem_Dreamcast::checkSound()
fillpos = 0;
}
-int OSystem_Dreamcast::getOutputSampleRate() const
-{
- return read_sound_int(&SOUNDSTATUS->freq);
-}
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index b7494a77bc..9dfd4c331e 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -28,6 +28,7 @@
#include <ronin/soundcommon.h>
#include "backends/timer/default/default-timer.h"
#include "backends/fs/fs-factory.h"
+#include "sound/mixer_intern.h"
#define NUM_BUFFERS 4
#define SOUND_BUFFER_SHIFT 3
@@ -195,7 +196,7 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
private:
Common::SaveFileManager *_savefile;
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
DefaultTimerManager *_timer;
SoftKeyboard _softkbd;
@@ -223,6 +224,7 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
+ uint initSound();
void checkSound();
void drawMouse(int xdraw, int ydraw, int w, int h,
@@ -237,6 +239,5 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
extern int handleInput(struct mapledev *pad,
int &mouse_x, int &mouse_y,
byte &shiftFlags, Interactive *inter = NULL);
-extern void initSound();
extern bool selectGame(char *&, char *&, class Icon &);
diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp
index 913bc9948e..0b114bee10 100644
--- a/backends/platform/dc/dcmain.cpp
+++ b/backends/platform/dc/dcmain.cpp
@@ -33,7 +33,7 @@
#include <common/config-manager.h>
#include "backends/plugins/dc/dc-provider.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
Icon icon;
@@ -54,8 +54,10 @@ OSystem_Dreamcast::OSystem_Dreamcast()
void OSystem_Dreamcast::initBackend()
{
_savefile = createSavefileManager();
- _mixer = new Audio::Mixer();
+ _mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
+ _mixer->setOutputRate(initSound());
+ _mixer->setReady(true);
}
@@ -216,7 +218,6 @@ int main()
static int argc = 1;
dc_init_hardware();
- initSound();
g_system = new OSystem_Dreamcast();
assert(g_system);
diff --git a/backends/platform/dc/selector.cpp b/backends/platform/dc/selector.cpp
index 880fbc400f..91c851506f 100644
--- a/backends/platform/dc/selector.cpp
+++ b/backends/platform/dc/selector.cpp
@@ -25,7 +25,9 @@
#include <common/scummsys.h>
#include <engines/engine.h>
+#include <engines/metaengine.h>
#include <base/plugins.h>
+#include <base/game.h>
#include <common/fs.h>
#include <common/events.h>
#include "dc.h"
@@ -149,15 +151,6 @@ struct Dir
static Game the_game;
-static void detectGames(FSList &files, GameList &candidates)
-{
- const EnginePluginList &plugins = EngineMan.getPlugins();
- EnginePluginList::const_iterator iter = plugins.begin();
- for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
- candidates.push_back((*iter)->detectGames(files));
- }
-}
-
static bool isIcon(const FilesystemNode &entry)
{
int l = entry.getDisplayName().size();
@@ -227,8 +220,7 @@ static int findGames(Game *games, int max)
files.push_back(*entry);
}
- GameList candidates;
- detectGames(files, candidates);
+ GameList candidates = EngineMan.detectGames(files);
for (GameList::const_iterator ge = candidates.begin();
ge != candidates.end(); ++ge)
diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp
index a130509e36..f4706807f7 100644
--- a/backends/platform/ds/arm9/source/dsmain.cpp
+++ b/backends/platform/ds/arm9/source/dsmain.cpp
@@ -168,7 +168,7 @@ bool displayModeIs8Bit = false;
u8 gameID;
bool snapToBorder = false;
-bool consoleEnable = false;
+bool consoleEnable = true;
bool gameScreenSwap = false;
bool isCpuScalerEnabled();
//#define HEAVY_LOGGING
@@ -899,12 +899,6 @@ u16* get8BitBackBuffer() {
return BG_GFX + 0x10000; // 16bit qty!
}
-void setSoundProc(OSystem_DS::SoundProc proc, void* param) {
-// consolePrintf("Set sound callback");
- soundCallback = proc;
- soundParam = param;
-}
-
// The sound system in ScummVM seems to always return stereo interleaved samples.
// Here, I'm treating an 11Khz stereo stream as a 22Khz mono stream, which works sorta ok, but is
// a horrible bodge. Any advice on how to change the engine to output mono would be greatly
@@ -914,7 +908,8 @@ void doSoundCallback() {
consolePrintf("doSoundCallback...");
#endif
- if (soundCallback) {
+ if (OSystem_DS::instance())
+ if (OSystem_DS::instance()->getMixerImpl()) {
lastCallbackFrame = frameCount;
for (int r = IPC->playingSection; r < IPC->playingSection + 4; r++) {
@@ -923,7 +918,7 @@ void doSoundCallback() {
if (IPC->fillNeeded[chunk]) {
IPC->fillNeeded[chunk] = false;
DC_FlushAll();
- soundCallback(soundParam, (byte *) (soundBuffer + ((bufferSamples >> 2) * chunk)), bufferSamples >> 1);
+ OSystem_DS::instance()->getMixerImpl()->mixCallback((byte *) (soundBuffer + ((bufferSamples >> 2) * chunk)), bufferSamples >> 1);
IPC->fillNeeded[chunk] = false;
DC_FlushAll();
}
diff --git a/backends/platform/ds/arm9/source/dsmain.h b/backends/platform/ds/arm9/source/dsmain.h
index f20442b11e..43258b5c5d 100644
--- a/backends/platform/ds/arm9/source/dsmain.h
+++ b/backends/platform/ds/arm9/source/dsmain.h
@@ -88,7 +88,6 @@ int getMillis(); // Return the current runtime in milliseconds
void doTimerCallback(); // Call callback function if required
// Sound
-void setSoundProc(OSystem_DS::SoundProc proc, void* param); // Setup a callback function for sound
void doSoundCallback(); // Call function if sound buffers need more data
void playSound(const void* data, u32 length, bool loop, bool adpcm = false, int rate = 22050); // Start a sound
void stopSound(int channel);
diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp
index 6e6b457115..79b0c5390b 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.cpp
+++ b/backends/platform/ds/arm9/source/osystem_ds.cpp
@@ -67,10 +67,12 @@ void OSystem_DS::initBackend() {
ConfMan.setInt("autosave_period", 0);
ConfMan.setBool("FM_medium_quality", true);
- _mixer = new DSAudioMixer;
- _timer = new DSTimerManager;
- DS::setSoundProc(Audio::Mixer::mixCallback, _mixer);
- DS::setTimerCallback(&OSystem_DS::timerHandler, 10);
+ _mixer = new DSAudioMixer(this);
+ _timer = new DSTimerManager();
+ DS::setTimerCallback(&OSystem_DS::timerHandler, 10);
+
+ _mixer->setOutputRate(11025 /*DS::getSoundFrequency()*/);
+ _mixer->setReady(true);
OSystem::initBackend();
}
@@ -139,7 +141,7 @@ void OSystem_DS::setPalette(const byte *colors, uint start, uint num) {
green >>= 3;
blue >>= 3;
-// if (r != 255)
+ if (r != 255)
{
BG_PALETTE[r] = red | (green << 5) | (blue << 10);
if (!DS::getKeyboardEnable()) {
@@ -158,13 +160,13 @@ bool OSystem_DS::grabRawScreen(Graphics::Surface* surf) {
// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
- u16* image = (u16 *) DS::get8BitBackBuffer();
+ const u16* image = (const u16 *) DS::get8BitBackBuffer();
for (int y = 0; y < DS::getGameHeight(); y++)
{
DC_FlushRange(image + (y << 8), DS::getGameWidth());
for (int x = 0; x < DS::getGameWidth() >> 1; x++)
{
- *(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y << 8 + x];
+ *(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[(y << 8) + x];
}
}
@@ -277,7 +279,7 @@ void OSystem_DS::grabOverlay (OverlayColor *buf, int pitch) {
void OSystem_DS::copyRectToOverlay (const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
u16* bg = (u16 *) DS::get16BitBackBuffer();
- u16* src = (u16 *) buf;
+ const u16* src = (const u16 *) buf;
// if (x + w > 256) w = 256 - x;
//if (x + h > 256) h = 256 - y;
@@ -433,13 +435,7 @@ void OSystem_DS::unlockMutex(MutexRef mutex) {
void OSystem_DS::deleteMutex(MutexRef mutex) {
}
-void OSystem_DS::clearSoundCallback() {
-// consolePrintf("Clearing sound callback");
-// DS::setSoundProc(NULL, NULL);
-}
-
-int OSystem_DS::getOutputSampleRate() const
-{
+int OSystem_DS::getOutputSampleRate() const {
return DS::getSoundFrequency();
}
diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h
index 246797188f..8c8d661ad8 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.h
+++ b/backends/platform/ds/arm9/source/osystem_ds.h
@@ -30,10 +30,13 @@
#include "gbampsave.h"
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include "graphics/surface.h"
-class DSAudioMixer : public Audio::Mixer {
+class DSAudioMixer : public Audio::MixerImpl {
+
+public:
+ DSAudioMixer(OSystem* system) : Audio::MixerImpl(system) { }
};
class DSTimerManager : public DefaultTimerManager {
@@ -62,7 +65,7 @@ protected:
Graphics::Surface* createTempFrameBuffer();
public:
- typedef void (*SoundProc)(void *param, byte *buf, int len);
+ typedef void (*SoundProc)(byte *buf, int len);
typedef int (*TimerProc)(int interval);
OSystem_DS();
@@ -114,7 +117,6 @@ public:
virtual void unlockMutex(MutexRef mutex);
virtual void deleteMutex(MutexRef mutex);
- virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
virtual bool openCD(int drive);
@@ -147,6 +149,8 @@ public:
virtual void unlockScreen();
virtual Audio::Mixer* getMixer() { return _mixer; }
+ Audio::MixerImpl* getMixerImpl() { return _mixer; }
+
virtual Common::TimerManager* getTimerManager() { return _timer; }
static int timerHandler(int t);
diff --git a/backends/platform/ds/arm9/source/wordcompletion.cpp b/backends/platform/ds/arm9/source/wordcompletion.cpp
index 9eeeb62410..ff52572a40 100644
--- a/backends/platform/ds/arm9/source/wordcompletion.cpp
+++ b/backends/platform/ds/arm9/source/wordcompletion.cpp
@@ -1,6 +1,6 @@
#include "wordcompletion.h"
-#include "engines/agi/agi.h"
#include "osystem_ds.h"
+#include "engines/agi/agi.h" // Caution for #define for NUM_CHANNELS, causes problems in mixer_intern.h
#ifdef ENABLE_AGI
diff --git a/backends/platform/gp2x/build/README-GP2X b/backends/platform/gp2x/build/README-GP2X
index cb1d043500..7e10fc484e 100644
--- a/backends/platform/gp2x/build/README-GP2X
+++ b/backends/platform/gp2x/build/README-GP2X
@@ -1,4 +1,4 @@
-ScummVM - GP2X SPECIFIC README - 0.10.0 SVN
+ScummVM - GP2X SPECIFIC README - HEAD SVN
------------------------------------------------------------------------
Contents:
diff --git a/backends/platform/gp2x/build/README-GP2X.html b/backends/platform/gp2x/build/README-GP2X.html
index 5289d3d36c..1b5f1a4173 100644
--- a/backends/platform/gp2x/build/README-GP2X.html
+++ b/backends/platform/gp2x/build/README-GP2X.html
@@ -2,12 +2,15 @@
<html>
<head>
<title>ScummVM - GP2X SPECIFIC README</title>
+
+
</head>
<body>
-<span style="font-weight: bold;">ScummVM - GP2X&nbsp;SPECIFIC README - 0.10.0 SVN<br>
+<span style="font-weight: bold;">ScummVM -
+GP2X&nbsp;SPECIFIC README - HEAD SVN<br>
</span>
<hr style="width: 100%; height: 2px;"><br>
@@ -16,52 +19,65 @@
<ul>
- <li><a href="#About_the_backendport">About the backend/port</a></li>
+ <li><a href="#About_the_backendport">About the
+backend/port</a></li>
- <li><a href="#Game_compatibility">Game compatability</a></li>
+ <li><a href="#Game_compatibility">Game
+compatability</a></li>
<li><a href="#Included_engines">Included engines</a></li>
- <li><a href="#Supported_audio_options">Supported audio options</a></li>
+ <li><a href="#Supported_audio_options">Supported
+audio options</a></li>
- <li><a href="#Supported_cut-scene_options">Supported cut-scene options</a></li>
+ <li><a href="#Supported_cut-scene_options">Supported
+cut-scene options</a></li>
<li><a href="#Recent_changes">Recent changes</a></li>
<li><a href="#How_to_save">How to save</a></li>
- <li><a href="#Controller_mappings">Controller mappings</a></li>
+ <li><a href="#Controller_mappings">Controller
+mappings</a></li>
<li><a href="#Know_issues">Know issues</a></li>
<li><a href="#Major_TODOs">Major TODO's</a></li>
- <li><a href="#Additional_resourceslinks">Additional resources/links</a></li>
+ <li><a href="#Additional_resourceslinks">Additional
+resources/links</a></li>
<li><a href="#Credits">Credits</a></li>
</ul>
+
<br>
+
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="About_the_backendport"></a><span style="font-weight: bold;">About the backend/port</span><br>
<br>
-This is the readme for the offficial GP2X ScummVM backend (also known as the GP2X port).<br>
+This is the readme for the offficial GP2X ScummVM backend (also known
+as the GP2X port).<br>
<br>
-This is an SVN test release of ScummVM for the GP2X, it would be appreciated
+This is an SVN test release of ScummVM for the GP2X, it would be
+appreciated
if this SVN test distribution was not mirrored and that people be
-directed to <a href="http://www.distant-earth.com/scummvm">http://www.distant-earth.com/scummvm</a> instead for updated SVN builds.<br>
+directed to <a href="http://www.distant-earth.com/scummvm">http://www.distant-earth.com/scummvm</a>
+instead for updated SVN builds.<br>
<br>
Full supported official releases of the GP2X ScummVM backend are made
-in line with main official releases and are avalalble from the <a href="http://www.scummvm.org/downloads.php">ScummVM downloads page</a>.<br>
+in line with main official releases and are avalalble from the <a href="http://www.scummvm.org/downloads.php">ScummVM
+downloads page</a>.<br>
<br>
-This build is in an active state of development and as such no &lsquo;expected&rsquo; behavior can be guaranteed ;).<br>
+This build is in an active state of development and as such no
+&lsquo;expected&rsquo; behavior can be guaranteed ;).<br>
<br>
@@ -69,47 +85,59 @@ SVN builds are quickly tested with firmware 2.0.0 for reference.<br>
<br>
-Please refer to the <a href="http://forums.scummvm.org/viewforum.php?f=14">GP2X ScummVM forum</a> and <a href="http://wiki.scummvm.org/index.php/GP2X">WiKi</a> for the latest information on the port.<br>
+Please refer to the <a href="http://forums.scummvm.org/viewforum.php?f=14">GP2X
+ScummVM forum</a> and <a href="http://wiki.scummvm.org/index.php/GP2X">WiKi</a>
+for the latest information on the port.<br>
+
<br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Game_compatibility"></a><span style="font-weight: bold;">Game compatibility</span><br>
<br>
-For information on the compatability of a specific game please refer to the <a href="http://wiki.scummvm.org/index.php/GP2X#Compatibility_List">GP2X compatability section of the ScummVM WiKi</a>.<br>
+For information on the compatability of a specific game please refer to
+the <a href="http://wiki.scummvm.org/index.php/GP2X#Compatibility_List">GP2X
+compatability section of the ScummVM WiKi</a>.<br>
<br>
-Please note the version and date of the ScummVM build you are running when reviewing the above list.<br>
+Please note the version and date of the ScummVM build you are running
+when reviewing the above list.<br>
<br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Included_engines"></a><span style="font-weight: bold;">Included engines</span><br>
<br>
+
Just because an engine is included does not mean any/all of its games
are supported. Please check game compatability for more infomation.<br>
+
<ul>
- <li>
-Scumm - (All games supported by ScummVM should work to some extent, using the hardware scalar if needed)</li>
+
+ <li>Scumm - (All games supported by ScummVM should work to some
+extent, using the hardware scalar if needed)</li>
+
<li>AGOS (AKA Simon) - (Simon the Sorcerer one and two).</li>
+
<li>Sky - (Beneath a Steel Sky)</li>
- <li>
-Sword - (Broken Sword 1) - This engine uses the hardware scalar to
+
+ <li>Sword - (Broken Sword 1) - This engine uses the hardware
+scalar to
downsize the graphics to fix on the GP2X. It is NOT very nice to look
at.</li>
- <li>
-Sword2 - (Broken Sword 2) - This engine uses the hardware
+
+ <li>Sword2 - (Broken Sword 2) - This engine uses the hardware
scalar to downsize the graphics to fix on the GP2X. It is NOT very nice
to look at.</li>
- <li>
-Gob - (Goblins one)</li>
- <li>
-Queen - (Flight of the Amazon Queen)</li>
- <li>
-Kyra - (The Legend of Kyrandia)</li>
-</ul>
+ <li>Gob - (Goblins one)</li>
+
+ <li>Queen - (Flight of the Amazon Queen)</li>
+
+ <li>Kyra - (The Legend of Kyrandia)</li>
+
+</ul>
All other game engines are disabled in this release.<br>
@@ -155,13 +183,18 @@ DXA video support will be added as soon as it is stable.<br>
Enabled hardware scalar code.<br>
-Now built using SDL 1.2.9 for the parts of the port that use SDL (some parts now hit the hardware directly).<br>
+Now built using SDL 1.2.9 for the parts of the port that use SDL (some
+parts now hit the hardware directly).<br>
-Enabled new launcher - (Ensure defaulttheme.zip is in the same folder as the executable).<br>
+Enabled new launcher - (Ensure defaulttheme.zip is in the same folder
+as the executable).<br>
-Aspect Ratio Correction can now be disabled &lsquo;per game&rsquo;. When adding a game you can find this option on the GFX tab. <br>
+Aspect Ratio Correction can now be disabled &lsquo;per
+game&rsquo;. When adding a game you can find this option on the GFX
+tab. <br>
-Note: This will cause the game to run with a black border at the bottom as it will be rendered to a 320*200 frame.<br>
+Note: This will cause the game to run with a black border at the bottom
+as it will be rendered to a 320*200 frame.<br>
<br>
@@ -169,7 +202,9 @@ Note: This will cause the game to run with a black border at the bottom as it wi
<br>
-<span style="font-weight: bold;">NOTE:</span> Everything is saved to the SD card, saves are stored in the <span style="font-weight: bold;">saves</span> folder under your main ScummVM executable unless you set another save location.<br>
+<span style="font-weight: bold;">NOTE:</span>
+Everything is saved to the SD card, saves are stored in the <span style="font-weight: bold;">saves</span> folder under
+your main ScummVM executable unless you set another save location.<br>
<br>
@@ -178,7 +213,8 @@ same place as the ScummVM executable.<br>
<br>
-The save process below is&nbsp;for Scumm engine games but the principle is the same for all.<br>
+The save process below is&nbsp;for Scumm engine games but the
+principle is the same for all.<br>
<br>
@@ -198,11 +234,13 @@ In Game.<br>
<br>
-Basically the emulated keys you can use are equivelent to the values buttons are mapped to, <br>
+Basically the emulated keys you can use are equivelent to the values
+buttons are mapped to, <br>
<br>
-I have a virtual keyboard like the GP32 one (left/right on the stick to pick chars) to add in at some point ;-)<br>
+I have a virtual keyboard like the GP32 one (left/right on the stick to
+pick chars) to add in at some point ;-)<br>
<br>
@@ -262,9 +300,11 @@ Select: Exit ScummVM completely (and gracefully)<br>
<br>
-Possible random crash (well SegFault). I have had this happen twice and have not tracked down the cause. <br>
+Possible random crash (well SegFault). I have had this happen twice and
+have not tracked down the cause. <br>
-It happens very infrequently, both times it was in the DOTT CD intro. Saving often is never a bad idea anyhow.<br>
+It happens very infrequently, both times it was in the DOTT CD intro.
+Saving often is never a bad idea anyhow.<br>
<br>
@@ -272,11 +312,14 @@ It happens very infrequently, both times it was in the DOTT CD intro. Saving oft
<br>
-Fix save support when using the Sky engine (Beneath a Steel Sky) - You CAN'T save at the moment but auto save works.<br>
+Fix save support when using the Sky engine (Beneath a Steel Sky) - You
+CAN'T save at the moment but auto save works.<br>
-Look into inconsistencies with AGOS engine and map Y key to a button combination to allow clean quitting (Simon 1/2).<br>
+Look into inconsistencies with AGOS engine and map Y key to a button
+combination to allow clean quitting (Simon 1/2).<br>
-Add splash-screen and pre-ScummVM config menu (CPU speed, LCD timings etc.) - Partly done.<br>
+Add splash-screen and pre-ScummVM config menu (CPU speed, LCD timings
+etc.) - Partly done.<br>
Fix TV out, maybe make it an option in the pre-ScummVM config menu.<br>
@@ -284,17 +327,29 @@ Any help appreciated :).<br>
<br style="font-weight: bold;">
-<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Additional_resourceslinks"></a><span style="font-weight: bold;">Additional resources/links</span><br>
+<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Additional_resourceslinks"></a><span style="font-weight: bold;">Additional resources/links<br>
+
+<br>
+
+</span><span style="font-weight: bold;">Note:</span>
+When providing feedback,
+requests, forum posts, bug reports or anything like that always include
+a mention of the version of ScummVM you are using (the build version,
+date and time can be seen in the main game launcher window).<br>
<ul>
- <li><a href="http://wiki.scummvm.org/index.php/GP2X">ScummVM WiKi GP2X page</a></li>
+ <li><a href="http://wiki.scummvm.org/index.php/GP2X">ScummVM
+WiKi GP2X page</a></li>
- <li><a href="http://forums.scummvm.org/viewforum.php?f=14">ScummVM forums GP2X forum</a></li>
+ <li><a href="http://forums.scummvm.org/viewforum.php?f=14">ScummVM
+forums GP2X forum</a></li>
- <li><a href="http://www.distant-earth.com/scummvm">My own ScummVM page</a> (for SVN/test builds)</li>
+ <li><a href="http://www.distant-earth.com/scummvm">My
+own ScummVM page</a> (for SVN/test builds)</li>
- <li><a href="http://www.scummvm.org">Main ScummVM site</a> (for official supported release builds)</li>
+ <li><a href="http://www.scummvm.org">Main ScummVM
+site</a> (for official supported release builds)</li>
</ul>
diff --git a/backends/platform/gp2x/build/build.sh b/backends/platform/gp2x/build/build.sh
index 1ea77f4937..1ea77f4937 100644..100755
--- a/backends/platform/gp2x/build/build.sh
+++ b/backends/platform/gp2x/build/build.sh
diff --git a/backends/platform/gp2x/build/bundle.sh b/backends/platform/gp2x/build/bundle.sh
index 9824c9b451..9824c9b451 100644..100755
--- a/backends/platform/gp2x/build/bundle.sh
+++ b/backends/platform/gp2x/build/bundle.sh
diff --git a/backends/platform/gp2x/build/clean.sh b/backends/platform/gp2x/build/clean.sh
index 0979f6c7d6..0979f6c7d6 100644..100755
--- a/backends/platform/gp2x/build/clean.sh
+++ b/backends/platform/gp2x/build/clean.sh
diff --git a/backends/platform/gp2x/build/config.sh b/backends/platform/gp2x/build/config.sh
index 4a30ed4a31..17083d1ea4 100644..100755
--- a/backends/platform/gp2x/build/config.sh
+++ b/backends/platform/gp2x/build/config.sh
@@ -17,7 +17,7 @@ export DEFINES=-DNDEBUG
# Edit the configure line to suit.
cd ../../../..
-./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6
-#--enable-plugins
+./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-made --enable-m4
+#--enable-plugins --default-dynamic
echo Generating config for GP2X complete. Check for errors.
diff --git a/backends/platform/gp2x/build/scummvm.gpe b/backends/platform/gp2x/build/scummvm.gpe
index 1e69c149b9..1e69c149b9 100644..100755
--- a/backends/platform/gp2x/build/scummvm.gpe
+++ b/backends/platform/gp2x/build/scummvm.gpe
diff --git a/backends/platform/gp2x/gp2x-common.h b/backends/platform/gp2x/gp2x-common.h
index e8e128a249..92f625bdc4 100644
--- a/backends/platform/gp2x/gp2x-common.h
+++ b/backends/platform/gp2x/gp2x-common.h
@@ -37,7 +37,7 @@
#include <SDL_gp2x.h>
namespace Audio {
- class Mixer;
+ class MixerImpl;
}
namespace Common {
@@ -128,12 +128,10 @@ public:
virtual bool pollEvent(Common::Event &event); // overloaded by CE backend
// Set function that generates samples
- typedef void (*SoundProc)(void *param, byte *buf, int len);
- virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
+ void setupMixer();
+ static void mixCallback(void *s, byte *samples, int len);
virtual Audio::Mixer *getMixer();
- void clearSoundCallback();
-
// Poll CD status
// Returns true if cd audio is playing
bool pollCD();
@@ -181,7 +179,6 @@ public:
int getGraphicsMode() const;
bool openCD(int drive);
- int getOutputSampleRate() const;
bool hasFeature(Feature f);
void setFeatureState(Feature f, bool enable);
@@ -369,7 +366,7 @@ protected:
Common::SaveFileManager *_savefile;
FilesystemFactory *getFilesystemFactory();
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
SDL_TimerID _timerID;
Common::TimerManager *_timer;
diff --git a/backends/platform/gp2x/gp2x.cpp b/backends/platform/gp2x/gp2x.cpp
index 2d2b4b8078..c138f6c54d 100644
--- a/backends/platform/gp2x/gp2x.cpp
+++ b/backends/platform/gp2x/gp2x.cpp
@@ -40,7 +40,7 @@
#include "backends/timer/default/default-timer.h"
#include "backends/plugins/posix/posix-provider.h"
#include "backends/fs/posix/posix-fs-factory.h" // for getFilesystemFactory()
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include <stdio.h>
#include <stdlib.h>
@@ -225,8 +225,7 @@ void OSystem_GP2X::initBackend() {
// Create and hook up the mixer, if none exists yet (we check for this to
// allow subclasses to provide their own).
if (_mixer == 0) {
- _mixer = new Audio::Mixer();
- setSoundCallback(Audio::Mixer::mixCallback, _mixer);
+ setupMixer();
}
// Create and hook up the timer manager, if none exists yet (we check for
@@ -445,45 +444,69 @@ void OSystem_GP2X::deleteMutex(MutexRef mutex) {
#pragma mark --- Audio ---
#pragma mark -
-bool OSystem_GP2X::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_GP2X::mixCallback(void *sys, byte *samples, int len) {
+ OSystem_GP2X *this_ = (OSystem_GP2X *)sys;
+ assert(this_);
+
+ if (this_->_mixer)
+ this_->_mixer->mixCallback(samples, len);
+}
+
+void OSystem_GP2X::setupMixer() {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
- memset(&desired, 0, sizeof(desired));
+ //memset(&desired, 0, sizeof(desired));
+ // Determine the desired output sampling frequency.
_samplesPerSec = 0;
-
if (ConfMan.hasKey("output_rate"))
_samplesPerSec = ConfMan.getInt("output_rate");
-
if (_samplesPerSec <= 0)
_samplesPerSec = SAMPLES_PER_SEC;
+
//Quick EVIL Hack - DJWillis
_samplesPerSec = 11025;
+ // Determine the sample buffer size. We want it to store enough data for
+ // about 1/16th of a second. Note that it must be a power of two.
+ // So e.g. at 22050 Hz, we request a sample buffer size of 2048.
+ int samples = 8192;
+ while (16 * samples >= _samplesPerSec) {
+ samples >>= 1;
+ }
+
+ memset(&desired, 0, sizeof(desired));
desired.freq = _samplesPerSec;
desired.format = AUDIO_S16SYS;
desired.channels = 2;
//desired.samples = (uint16)samples;
desired.samples = 128; // Samples hack
- desired.callback = proc;
- desired.userdata = param;
+ desired.callback = mixCallback;
+ desired.userdata = this;
+
+ // Create the mixer instance
+ assert(!_mixer);
+ _mixer = new Audio::MixerImpl(this);
+ assert(_mixer);
+
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
- return false;
+ _samplesPerSec = 0;
+ _mixer->setReady(false);
+ } else {
+ // Note: This should be the obtained output rate, but it seems that at
+ // least on some platforms SDL will lie and claim it did get the rate
+ // even if it didn't. Probably only happens for "weird" rates, though.
+ _samplesPerSec = obtained.freq;
+ debug(1, "Output sample rate: %d Hz", _samplesPerSec);
+
+ // Tell the mixer that we are ready and start the sound processing
+ _mixer->setOutputRate(_samplesPerSec);
+ _mixer->setReady(true);
+ SDL_PauseAudio(0);
}
- _samplesPerSec = obtained.freq;
- SDL_PauseAudio(0);
- return true;
-}
-
-void OSystem_GP2X::clearSoundCallback() {
- SDL_CloseAudio();
-}
-
-int OSystem_GP2X::getOutputSampleRate() const {
- return _samplesPerSec;
}
Audio::Mixer *OSystem_GP2X::getMixer() {
diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp
index 3365c2da9d..4cb90d35b9 100644
--- a/backends/platform/iphone/osys_iphone.cpp
+++ b/backends/platform/iphone/osys_iphone.cpp
@@ -1128,10 +1128,6 @@ bool OSystem_IPHONE::setSoundCallback(SoundProc proc, void *param) {
return true;
}
-void OSystem_IPHONE::clearSoundCallback() {
- debug("clearSoundCallback()\n");
-}
-
int OSystem_IPHONE::getOutputSampleRate() const {
return AUDIO_SAMPLE_RATE;
}
diff --git a/backends/platform/iphone/osys_iphone.h b/backends/platform/iphone/osys_iphone.h
index 71272b73fe..a01cad480a 100644
--- a/backends/platform/iphone/osys_iphone.h
+++ b/backends/platform/iphone/osys_iphone.h
@@ -153,7 +153,6 @@ public:
virtual void deleteMutex(MutexRef mutex);
virtual bool setSoundCallback(SoundProc proc, void *param);
- virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
virtual void setTimerCallback(TimerProc callback, int interval);
diff --git a/backends/platform/null/null.cpp b/backends/platform/null/null.cpp
index 64d429a83e..463e9d7b2d 100644
--- a/backends/platform/null/null.cpp
+++ b/backends/platform/null/null.cpp
@@ -28,18 +28,37 @@
#if defined(USE_NULL_DRIVER)
+#ifdef UNIX
+#include <unistd.h>
+#include <sys/time.h>
+#endif
+
#include "common/rect.h"
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
+
+/*
+ * Include header files needed for the getFilesystemFactory() method.
+ */
+#if defined(__amigaos4__)
+ #include "backends/fs/amigaos4/amigaos4-fs-factory.h"
+#elif defined(UNIX)
+ #include "backends/fs/posix/posix-fs-factory.h"
+#elif defined(WIN32)
+ #include "backends/fs/windows/windows-fs-factory.h"
+#endif
+
+
class OSystem_NULL : public OSystem {
protected:
Common::SaveFileManager *_savefile;
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
Common::TimerManager *_timer;
+ timeval _startTime;
public:
OSystem_NULL();
@@ -93,8 +112,6 @@ public:
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param);
- virtual void clearSoundCallback();
- virtual int getOutputSampleRate() const;
virtual void quit();
@@ -104,6 +121,8 @@ public:
virtual Audio::Mixer *getMixer();
virtual void getTimeAndDate(struct tm &t) const;
virtual Common::TimerManager *getTimerManager();
+ FilesystemFactory *getFilesystemFactory();
+
};
static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
@@ -124,9 +143,14 @@ OSystem_NULL::~OSystem_NULL() {
void OSystem_NULL::initBackend() {
_savefile = new DefaultSaveFileManager();
- _mixer = new Audio::Mixer();
+ _mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
+ _mixer->setOutputRate(22050);
+ _mixer->setReady(false);
+
+ gettimeofday(&_startTime, NULL);
+
// Note that both the mixer and the timer manager are useless
// this way; they need to be hooked into the system somehow to
// be functional. Of course, can't do that in a NULL backend :).
@@ -245,10 +269,20 @@ bool OSystem_NULL::pollEvent(Common::Event &event) {
}
uint32 OSystem_NULL::getMillis() {
+#ifdef UNIX
+ timeval curTime;
+ gettimeofday(&curTime, NULL);
+ return (uint32)(((curTime.tv_sec - _startTime.tv_sec) * 1000) + \
+ ((curTime.tv_usec - _startTime.tv_usec) / 1000));
+#else
return 0;
+#endif
}
void OSystem_NULL::delayMillis(uint msecs) {
+#ifdef UNIX
+ usleep(msecs * 1000);
+#endif
}
OSystem::MutexRef OSystem_NULL::createMutex(void) {
@@ -268,13 +302,6 @@ bool OSystem_NULL::setSoundCallback(SoundProc proc, void *param) {
return true;
}
-void OSystem_NULL::clearSoundCallback() {
-}
-
-int OSystem_NULL::getOutputSampleRate() const {
- return 22050;
-}
-
void OSystem_NULL::quit() {
}
@@ -299,6 +326,19 @@ Common::TimerManager *OSystem_NULL::getTimerManager() {
void OSystem_NULL::getTimeAndDate(struct tm &t) const {
}
+FilesystemFactory *OSystem_NULL::getFilesystemFactory() {
+ #if defined(__amigaos4__)
+ return &AmigaOSFilesystemFactory::instance();
+ #elif defined(UNIX)
+ return &POSIXFilesystemFactory::instance();
+ #elif defined(WIN32)
+ return &WindowsFilesystemFactory::instance();
+ #else
+ #error Unknown and unsupported backend in OSystem_NULL::getFilesystemFactory
+ #endif
+}
+
+
OSystem *OSystem_NULL_create() {
return new OSystem_NULL();
}
diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp
index b2818ebfc0..28ced7b345 100644
--- a/backends/platform/ps2/systemps2.cpp
+++ b/backends/platform/ps2/systemps2.cpp
@@ -727,7 +727,6 @@ void OSystem_PS2::quit(void) {
driveStandby();
fio.umount("pfs0:");
}
- //clearSoundCallback();
//setTimerCallback(NULL, 0);
_screen->wantAnim(false);
_systemQuit = true;
diff --git a/backends/platform/psp/Makefile b/backends/platform/psp/Makefile
index aa27f388b9..ca09286c4d 100644
--- a/backends/platform/psp/Makefile
+++ b/backends/platform/psp/Makefile
@@ -2,10 +2,36 @@
# $URL$
# $Id$
+ENABLED=STATIC_PLUGIN
+
#control build
DISABLE_SCALERS = true
DISABLE_HQ_SCALERS = true
+ENABLE_SCUMM = $(ENABLED)
+ENABLE_SCUMM_7_8 = $(ENABLED)
+#ENABLE_HE = $(ENABLED)
+ENABLE_AGI = $(ENABLED)
+ENABLE_AGOS = $(ENABLED)
+#ENABLE_CINE = $(ENABLED)
+#ENABLE_CRUISE = $(ENABLED)
+ENABLE_DRASCULA = $(ENABLED)
+ENABLE_GOB = $(ENABLED)
+#ENABLE_IGOR = $(ENABLED)
+ENABLE_KYRA = $(ENABLED)
+ENABLE_LURE = $(ENABLED)
+#ENABLE_M4 = $(ENABLED)
+#ENABLE_MADE = $(ENABLED)
+#ENABLE_PARALLACTION = $(ENABLED)
+#ENABLE_QUEEN = $(ENABLED)
+#ENABLE_SAGA = $(ENABLED)
+ENABLE_SKY = $(ENABLED)
+ENABLE_SWORD1 = $(ENABLED)
+ENABLE_SWORD2 = $(ENABLED)
+#ENABLE_TINSEL = $(ENABLED)
+#ENABLE_TOUCHE = $(ENABLED)
+
+
srcdir = ../../..
VPATH = $(srcdir)
HAVE_GCC3 = false
@@ -63,6 +89,8 @@ OBJS := psp_main.o \
kbd_l_c.o \
trace.o
+DEPDIR = .deps
+
include $(srcdir)/Makefile.common
PSP_EBOOT_SFO = param.sfo
diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp
index d5d59d4d6e..6e9b5980d4 100644
--- a/backends/platform/psp/osys_psp.cpp
+++ b/backends/platform/psp/osys_psp.cpp
@@ -34,7 +34,7 @@
#include "backends/timer/default/default-timer.h"
#include "graphics/surface.h"
#include "graphics/scaler.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include <pspgu.h>
@@ -72,7 +72,7 @@ const OSystem::GraphicsMode OSystem_PSP::s_supportedGraphicsModes[] = {
};
-OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0) {
+OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0), _mixer(0) {
memset(_palette, 0, sizeof(_palette));
@@ -99,11 +99,11 @@ OSystem_PSP::~OSystem_PSP() {
void OSystem_PSP::initBackend() {
_savefile = new DefaultSaveFileManager();
- _mixer = new Audio::Mixer();
_timer = new DefaultTimerManager();
- setSoundCallback(Audio::Mixer::mixCallback, _mixer);
setTimerCallback(&timer_handler, 10);
+ setupMixer();
+
OSystem::initBackend();
}
@@ -586,7 +586,15 @@ void OSystem_PSP::deleteMutex(MutexRef mutex) {
SDL_DestroyMutex((SDL_mutex *)mutex);
}
-bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_PSP::mixCallback(void *sys, byte *samples, int len) {
+ OSystem_PSP *this_ = (OSystem_PSP *)sys;
+ assert(this_);
+
+ if (this_->_mixer)
+ this_->_mixer->mixCallback(samples, len);
+}
+
+void OSystem_PSP::setupMixer(void) {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@@ -613,29 +621,33 @@ bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = samples;
- desired.callback = proc;
- desired.userdata = param;
- if (SDL_OpenAudio(&desired, &obtained) != 0) {
- return false;
- }
- // Note: This should be the obtained output rate, but it seems that at
- // least on some platforms SDL will lie and claim it did get the rate
- // even if it didn't. Probably only happens for "weird" rates, though.
- _samplesPerSec = obtained.freq;
- SDL_PauseAudio(0);
- return true;
-}
+ desired.callback = mixCallback;
+ desired.userdata = this;
-void OSystem_PSP::clearSoundCallback() {
- SDL_CloseAudio();
-}
+ assert(!_mixer);
+ _mixer = new Audio::MixerImpl(this);
+ assert(_mixer);
-int OSystem_PSP::getOutputSampleRate() const {
- return _samplesPerSec;
+ if (SDL_OpenAudio(&desired, &obtained) != 0) {
+ warning("Could not open audio: %s", SDL_GetError());
+ _samplesPerSec = 0;
+ _mixer->setReady(false);
+ } else {
+ // Note: This should be the obtained output rate, but it seems that at
+ // least on some platforms SDL will lie and claim it did get the rate
+ // even if it didn't. Probably only happens for "weird" rates, though.
+ _samplesPerSec = obtained.freq;
+
+ // Tell the mixer that we are ready and start the sound processing
+ _mixer->setOutputRate(_samplesPerSec);
+ _mixer->setReady(true);
+
+ SDL_PauseAudio(0);
+ }
}
void OSystem_PSP::quit() {
- clearSoundCallback();
+ SDL_CloseAudio();
SDL_Quit();
sceGuTerm();
sceKernelExitGame();
diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h
index a59e927b97..dca6ccb036 100644
--- a/backends/platform/psp/osys_psp.h
+++ b/backends/platform/psp/osys_psp.h
@@ -26,6 +26,7 @@
#include "common/scummsys.h"
#include "common/system.h"
#include "graphics/surface.h"
+#include "sound/mixer_intern.h"
#include "backends/fs/psp/psp-fs-factory.h"
@@ -71,7 +72,7 @@ protected:
SceCtrlData pad;
Common::SaveFileManager *_savefile;
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
Common::TimerManager *_timer;
public:
@@ -129,10 +130,8 @@ public:
virtual void unlockMutex(MutexRef mutex);
virtual void deleteMutex(MutexRef mutex);
- typedef void (*SoundProc)(void *param, byte *buf, int len);
- virtual bool setSoundCallback(SoundProc proc, void *param);
- virtual void clearSoundCallback();
- virtual int getOutputSampleRate() const;
+ static void mixCallback(void *sys, byte *samples, int len);
+ virtual void setupMixer(void);
Common::SaveFileManager *getSavefileManager() { return _savefile; }
Audio::Mixer *getMixer() { return _mixer; }
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index be3aaad926..290fe63663 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -30,7 +30,7 @@
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include "icons/scummvm.xpm"
@@ -131,9 +131,7 @@ void OSystem_SDL::initBackend() {
// Create and hook up the mixer, if none exists yet (we check for this to
// allow subclasses to provide their own).
if (_mixer == 0) {
- _mixer = new Audio::Mixer();
- bool result = setSoundCallback(Audio::Mixer::mixCallback, _mixer);
- _mixer->setReady(result);
+ setupMixer();
}
// Create and hook up the timer manager, if none exists yet (we check for
@@ -391,7 +389,15 @@ void OSystem_SDL::deleteMutex(MutexRef mutex) {
#pragma mark --- Audio ---
#pragma mark -
-bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_SDL::mixCallback(void *sys, byte *samples, int len) {
+ OSystem_SDL *this_ = (OSystem_SDL *)sys;
+ assert(this_);
+
+ if (this_->_mixer)
+ this_->_mixer->mixCallback(samples, len);
+}
+
+void OSystem_SDL::setupMixer() {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@@ -403,7 +409,7 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
_samplesPerSec = SAMPLES_PER_SEC;
// Determine the sample buffer size. We want it to store enough data for
- // about 1/32th of a second. Note that it must be a power of two.
+ // about 1/16th of a second. Note that it must be a power of two.
// So e.g. at 22050 Hz, we request a sample buffer size of 2048.
int samples = 8192;
while (16 * samples >= _samplesPerSec) {
@@ -415,23 +421,30 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = (uint16)samples;
- desired.callback = proc;
- desired.userdata = param;
+ desired.callback = mixCallback;
+ desired.userdata = this;
+
+ // Create the mixer instance
+ assert(!_mixer);
+ _mixer = new Audio::MixerImpl(this);
+ assert(_mixer);
+
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
- return false;
+ _samplesPerSec = 0;
+ _mixer->setReady(false);
+ } else {
+ // Note: This should be the obtained output rate, but it seems that at
+ // least on some platforms SDL will lie and claim it did get the rate
+ // even if it didn't. Probably only happens for "weird" rates, though.
+ _samplesPerSec = obtained.freq;
+ debug(1, "Output sample rate: %d Hz", _samplesPerSec);
+
+ // Tell the mixer that we are ready and start the sound processing
+ _mixer->setOutputRate(_samplesPerSec);
+ _mixer->setReady(true);
+ SDL_PauseAudio(0);
}
- // Note: This should be the obtained output rate, but it seems that at
- // least on some platforms SDL will lie and claim it did get the rate
- // even if it didn't. Probably only happens for "weird" rates, though.
- _samplesPerSec = obtained.freq;
- debug(1, "Output sample rate: %d Hz", _samplesPerSec);
- SDL_PauseAudio(0);
- return true;
-}
-
-int OSystem_SDL::getOutputSampleRate() const {
- return _samplesPerSec;
}
Audio::Mixer *OSystem_SDL::getMixer() {
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 2cbadae2f4..8a94a17b00 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -38,7 +38,7 @@
namespace Audio {
- class Mixer;
+ class MixerImpl;
}
namespace Common {
@@ -134,8 +134,9 @@ public:
virtual bool pollEvent(Common::Event &event); // overloaded by CE backend
// Set function that generates samples
- typedef void (*SoundProc)(void *param, byte *buf, int len);
- virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
+ virtual void setupMixer();
+ static void mixCallback(void *s, byte *samples, int len);
+
virtual Audio::Mixer *getMixer();
// Poll CD status
@@ -186,7 +187,6 @@ public:
virtual void setWindowCaption(const char *caption);
virtual bool openCD(int drive);
- virtual int getOutputSampleRate() const;
virtual bool hasFeature(Feature f);
virtual void setFeatureState(Feature f, bool enable);
@@ -371,7 +371,7 @@ protected:
Common::SaveFileManager *_savefile;
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
SDL_TimerID _timerID;
Common::TimerManager *_timer;
diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl
index 99c037379d..b576bb3993 100644
--- a/backends/platform/symbian/AdaptAllMMPs.pl
+++ b/backends/platform/symbian/AdaptAllMMPs.pl
@@ -6,31 +6,37 @@ chdir("../../../");
# list of project files to process
@mmp_files = (
- "mmp/scummvm_scumm.mmp",
- "mmp/scummvm_queen.mmp",
- "mmp/scummvm_agos.mmp",
- "mmp/scummvm_sky.mmp",
- "mmp/scummvm_gob.mmp",
- "mmp/scummvm_saga.mmp",
- "mmp/scummvm_kyra.mmp",
- "mmp/scummvm_sword1.mmp",
- "mmp/scummvm_sword2.mmp",
- "mmp/scummvm_lure.mmp",
- "mmp/scummvm_cine.mmp",
- "mmp/scummvm_agi.mmp",
- "mmp/scummvm_touche.mmp",
- "mmp/scummvm_parallaction.mmp",
- "mmp/scummvm_cruise.mmp",
- "mmp/scummvm_drascula.mmp",
- "mmp/scummvm_igor.mmp",
- "mmp/scummvm_made.mmp",
+
+ # Engine Project files
+ "mmp/scummvm_agi.mmp",
+ "mmp/scummvm_agos.mmp",
+ "mmp/scummvm_cine.mmp",
+ "mmp/scummvm_cruise.mmp",
+ "mmp/scummvm_drascula.mmp",
+ "mmp/scummvm_gob.mmp",
+ "mmp/scummvm_igor.mmp",
+ "mmp/scummvm_kyra.mmp",
+ "mmp/scummvm_lure.mmp",
"mmp/scummvm_m4.mmp",
- "S60/ScummVM_S60.mmp",
- "S60v3/ScummVM_S60v3.mmp",
- "S80/ScummVM_S80.mmp",
+ "mmp/scummvm_made.mmp",
+ "mmp/scummvm_parallaction.mmp",
+ "mmp/scummvm_queen.mmp",
+ "mmp/scummvm_saga.mmp",
+ "mmp/scummvm_scumm.mmp",
+ "mmp/scummvm_sky.mmp",
+ "mmp/scummvm_sword1.mmp",
+ "mmp/scummvm_sword2.mmp",
+ "mmp/scummvm_touche.mmp",
+
+
+ # Target Platform Project Files
+ "S60/ScummVM_S60.mmp",
+ "S60v3/ScummVM_S60v3.mmp",
+ "S80/ScummVM_S80.mmp",
"S90/ScummVM_S90.mmp",
- "UIQ2/ScummVM_UIQ2.mmp",
- "UIQ3/ScummVM_UIQ3.mmp"
+ "UIQ2/ScummVM_UIQ2.mmp",
+ "UIQ3/ScummVM_UIQ3.mmp"
+
);
# do this first to set all *.mmp & *.inf files to *.*.in states
@@ -43,7 +49,7 @@ Updating slave MACRO settings in MMP files from master 'scummvm_base.mmp'
";
-# do this first so we have @DisableDefines for correct inclusion of SOURCE files later
+# do this first so we have @EnabledDefines and @DisabledDefines for correct inclusion of SOURCE files later
UpdateSlaveMacros();
print "
@@ -53,33 +59,40 @@ Preparing to update all the Symbian MMP project files with objects from module.m
";
+
+# some modules.mk files have #ifndef ENABLE_XXXX blocks:
my @section_empty = (""); # section standard: no #ifdef's in module.mk files
-my @sections_scumm = ("", "DISABLE_SCUMM_7_8", "DISABLE_HE"); # special sections for engine SCUMM
+my @sections_scumm = ("", "ENABLE_SCUMM_7_8", "ENABLE_HE"); # special sections for engine SCUMM
+
# files excluded from build, case insensitive, will be matched in filename string only
-my @excludes_snd = (
- "mt32",
- "fluidsynth",
- "i386",
- "part.cpp",
- "partial.cpp",
- "partialmanager.cpp",
+my @excludes_snd = (
+ "mt32.*",
+ "fluidsynth.cpp",
+ "i386.cpp",
+ "part.*",
"synth.cpp",
"tables.cpp",
- "freeverb.cpp"
-);
+ "freeverb.cpp",
+ "rate.*" # not really needed, USE_ARM_SOUND_ASM currently not parsed correctly,
+ # "rate[_arm|_arm_asm].(cpp|s)" will be added later based on WINS/ARM build!
+ # These #defines for compile time are set in portdefs.h
+);
-my @excludes_graphics = (
-"iff.cpp"
-);
+my @excludes_graphics = (
+ "iff.cpp"
+);
+# the USE_ARM_* defines not parsed correctly, exclude manually:
my @excludes_scumm = (
- "codec47ARM.cpp",
- "gfxARM.cpp",
- "proc3arm.cpp"
+ ".*ARM.*", # the *ARM.s files are added in .mpp files based on WINS/ARM build!
+ # USE_ARM_SMUSH_ASM codec47ARM.s
+ # USE_ARM_GFX_ASM gfxARM.s
+ # USE_ARM_COSTUME_ASM proc3ARM.s compiled, linked?, but *not* used :P (portdefs.h)
);
-#arseModule(mmpStr, dirStr, ifdefArray, [exclusionsArray])
+
+#arseModule(mmpStr, dirStr, ifdefArray, [exclusionsArray])
ParseModule("_base", "base", \@section_empty); # now in ./TRG/ScummVM_TRG.mmp, these never change anyways...
ParseModule("_base", "common", \@section_empty);
ParseModule("_base", "gui", \@section_empty);
@@ -98,14 +111,14 @@ ParseModule("_sword1", "sword1", \@section_empty);
ParseModule("_sword2", "sword2", \@section_empty);
ParseModule("_lure", "lure", \@section_empty);
ParseModule("_cine", "cine", \@section_empty);
-ParseModule("_agi", "agi", \@section_empty);
+ParseModule("_agi", "agi", \@section_empty);
ParseModule("_touche", "touche", \@section_empty);
ParseModule("_parallaction","parallaction",\@section_empty);
ParseModule("_cruise", "cruise", \@section_empty);
ParseModule("_drascula","drascula", \@section_empty);
ParseModule("_igor", "igor", \@section_empty);
ParseModule("_made", "made", \@section_empty);
-ParseModule("_m4", "m4", \@section_empty);
+ParseModule("_m4", "m4", \@section_empty);
print "
=======================================================================================
Done. Enjoy :P
@@ -115,7 +128,7 @@ Done. Enjoy :P
##################################################################################################################
##################################################################################################################
-# parses multiple sections per mmp/module
+# parses multiple sections per mmp/module
sub ParseModule
{
my ($mmp,$module,$sections,$exclusions) = @_;
@@ -140,7 +153,7 @@ sub CheckForModuleMK
if (-d $item)
{
#print "$item\n";
-
+
opendir DIR, $item;
#my @Files = readdir DIR;
my @Files = grep s/^([^\.].*)$/$1/, readdir DIR;
@@ -156,9 +169,10 @@ sub CheckForModuleMK
if (-f $item and $item =~ /.*\/module.mk$/)
{
my $sec = "";
+ my $isenable;
my $ObjectsSelected = 0;
my $ObjectsTotal = 0;
-
+
print "$item for section '$section' ... ";
open FILE, $item;
@@ -167,14 +181,24 @@ sub CheckForModuleMK
my $count = @lines;
print "$count lines";
-
+
A: foreach $line (@lines)
{
- # found a section? reset
+ # all things we need are inside #ifdef sections,
+ # there is nothing we need in #ifndef sections: so ignore these for now
+
+ # found a section? reset
+ if ($line =~ /^ifdef (.*)/)
+ {
+ $sec = $1;
+ $isenable = 1;
+ }
if ($line =~ /^ifndef (.*)/)
{
$sec = $1;
+ $isenable = 0;
}
+
# found an object? Not uncommented!
if (!($line =~ /^#/) && $line =~ s/\.o/.cpp/)
{
@@ -187,27 +211,47 @@ sub CheckForModuleMK
$line =~ s/ \\//; # remove possible trailing ' \'
$line =~ s/\//\\/g; # replace / with \
chop($line); # remove \n
-
+
# do we need to skip this file? According to our own @exclusions array
foreach $exclusion (@exclusions)
{
if ($line =~ /$exclusion/i)
{
- print "\n ! $line (excluded, \@exclusions[$exclusion])";
+ my $reason = "excluded, \@exclusions[$exclusion]";
+ print "\n ! $line ($reason)";
+ $output .= "//SOURCE $line ($reason)\n";
next A;
}
}
-
- # do we need to skip this file? According to MACROs in .MMPs
- foreach $DisableDefine (@DisableDefines)
+
+ # do we need to do this file? According to MACROs in .MMPs
+ my $found = 0;
+ foreach $EnableDefine (@EnabledDefines)
{
- if ($DisableDefine eq $section && $section ne '')
+ if (($EnableDefine eq $section) && ($section ne ''))
{
- print "\n !$line (excluded, MACRO $DisableDefine)";
- next A;
+ $found = 1;
+ last;
}
}
-
+ foreach $DisableDefine (@DisabledDefines)
+ {
+ if (($DisableDefine eq $section) && ($section ne ''))
+ {
+ $found = 0;
+ last;
+ }
+ }
+ # always allow non-sections
+ $found = 1 if ($section eq '');
+ if (!$found)
+ {
+ my $reason = "excluded, MACRO $section";
+ print "\n !$line ($reason)";
+ $output .= "//SOURCE $line ($reason)\n";
+ next A;
+ }
+
$ObjectsSelected++;
#print "\n $line";
$output .= "SOURCE $line\n";
@@ -230,7 +274,7 @@ sub UpdateProjectFile
my $updated = " Updated @ ".localtime();
my $name;
my @mmp_files_plus_one = @mmp_files;
- unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp";
+ unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp";
foreach $name (@mmp_files_plus_one)
{
@@ -239,23 +283,23 @@ sub UpdateProjectFile
open FILE, "$file";
my @lines = <FILE>;
close FILE;
-
+
my $onestr = join("",@lines);
-
+
if ($onestr =~ /$n/)
{
print " - $name @ $n updating ... ";
-
+
$onestr =~ s/$a.*$b/$a$updated\n$output$b/s;
open FILE, ">$file";
print FILE $onestr;
close FILE;
-
+
print "done.\n";
}
}
-
+
$output = "";
}
@@ -265,7 +309,7 @@ sub UpdateSlaveMacros
{
my $updated = " Updated @ ".localtime();
- my $name = "mmp/scummvm_base.mmp";
+ my $name = "mmp/scummvm_base.mmp";
my $file = "$buildDir/$name";
print "Reading master MACROS from backends/symbian/$name ... ";
@@ -279,7 +323,7 @@ sub UpdateSlaveMacros
my $b = "\/\/STOP_$n\/\/";
$onestr =~ /$a(.*)$b/s;
my $macros = $1;
-
+
my $libs_first = "\n// automagically enabled static libs from macros above\n";
my $libs_second = "STATICLIBRARY scummvm_base.lib // must be above USE_* .libs\n";
my $macro_counter = 0;
@@ -292,32 +336,45 @@ sub UpdateSlaveMacros
if ($line =~ /^.*MACRO\s*([0-9A-Z_]*)\s*\/\/\s*LIB\:(.*)$/)
{
my $macro = $1; my $lib = $2;
-
+
# this macro enabled? then also add the .lib
if ($line =~ /^\s*MACRO\s*$macro/m)
{
- # these are the USE_ libs
+ # add an USE_ lib? (these need to be added @ the beginning, before _base)
$libs_second .= "STATICLIBRARY $lib\n" if ($macro =~ /^USE_/);
+
+ # add an ENABLE_ lib? (these need to be added @ the end, after _base)
+ if ($macro =~ /^ENABLE_/)
+ {
+ $libs_first .= "STATICLIBRARY $lib\n";
+
+ # add projects for BLD.INF's
+ my $projectname = substr("$lib",0,-4);
+ $projects .= "..\\mmp\\$projectname.mmp\n";
+ }
}
else
{
- # these are the non DISABLED_ libs
- $libs_first .= "STATICLIBRARY $lib\n" if ($macro =~ /^DISABLE_/);
-
- # add projects for BLD.INF's
- my $projectname = substr("$lib",0,-4);
- $projects .= "..\\mmp\\$projectname.mmp\n" if ($macro =~ /^DISABLE_/);
+ # skip lines not beginning with "MACRO" (like "//MACRO")
}
$macro_counter++;
}
+
# not commented out? then add the macro to output string
if ($line =~ /^\s*MACRO\s*([0-9A-Z_]*)\s*/)
{
my $macro = $1;
$macros2 .= "$line\n";
- push @DisableDefines, $macro; # used in CheckForModuleMK()!!
+ if ($macro =~ /^ENABLE_/)
+ {
+ push @EnabledDefines, $macro; # used in CheckForModuleMK()!!
+ }
+ elsif ($macro =~ /^DISABLE_/)
+ {
+ push @DisabledDefines, $macro; # used in CheckForModuleMK()!!
+ }
}
- }
+ }
print "$macro_counter macro lines.\n";
@@ -328,23 +385,23 @@ sub UpdateSlaveMacros
$m = "AUTO_PROJECTS";
$p = "\/\/START_$m\/\/";
$q = "\/\/STOP_$m\/\/";
-
+
foreach $name (@mmp_files)
{
$file = "$buildDir/$name";
$fileBLDINF = $buildDir .'/'. substr($name, 0, rindex($name, "/")) . "/BLD.INF";
print "Updating macros in $file ... ";
#print "Updating macros in backends/symbian/$name ... ";
-
+
open FILE, "$file"; @lines = <FILE>; close FILE;
$onestr = join("",@lines);
-
+
my $extralibs = ""; # output
# slash in name means it's a phone specific build file: add LIBs
$extralibs .= "$libs_first$libs_second" if (-e $fileBLDINF);
-
+
$onestr =~ s/$a.*$b/$a$updated$macros2$extralibs$b/s;
-
+
open FILE, ">$file"; print FILE $onestr; close FILE;
my $count = @lines;
@@ -358,13 +415,13 @@ sub UpdateSlaveMacros
open FILE, "$fileBLDINF"; @lines = <FILE>; close FILE;
$onestr = join("",@lines);
-
+
$onestr =~ s/$p.*$q/$p$updated$projects$q/s;
-
+
open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE;
}
}
-}
+}
##################################################################################################################
@@ -372,10 +429,10 @@ sub ResetProjectFiles()
{
my $onestr, @lines;
my @mmp_files_plus_one = @mmp_files;
-# unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp";
-
+# unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp";
+
print "Resetting project files: ";
-
+
# we don't need to do mmp/scummvm_base.mmp", it was done in BuildPackageUpload.pl before the call to this script
foreach $name (@mmp_files_plus_one)
{
@@ -395,7 +452,7 @@ sub ResetProjectFiles()
$onestr = join("",@lines);
open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE;
}
- }
+ }
print "... done.\n";
}
diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
index a40f8b7663..94edbf4fcf 100644
--- a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
+++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
@@ -8,6 +8,7 @@ require "BuildPackageUpload_LocalSettings.pl";
##################################################################################################################
# prep some vars
+# the dir containing the build files: '.\backends\platforms\symbian\$SDK_BuildDir\'
$SDK_BuildDirs{'UIQ2'} = "UIQ2";
$SDK_BuildDirs{'UIQ3'} = "UIQ3";
$SDK_BuildDirs{'S60v1'} = "S60";
@@ -16,6 +17,7 @@ $SDK_BuildDirs{'S60v3'} = "S60v3";
$SDK_BuildDirs{'S80'} = "S80";
$SDK_BuildDirs{'S90'} = "S90";
+# the target name inserted here: 'abld BUILD $SDK_TargetName UREL'
$SDK_TargetName{'UIQ2'} = "armi";
$SDK_TargetName{'UIQ3'} = "gcce";
$SDK_TargetName{'S60v1'}= "armi";
@@ -24,6 +26,7 @@ $SDK_TargetName{'S60v3'}= "gcce";
$SDK_TargetName{'S80'} = "armi";
$SDK_TargetName{'S90'} = "armi";
+# Binaries are installed here: '$SDK_RootDirs\epoc32\release\$SDK_TargetDir\urel\'
$SDK_TargetDir{'UIQ2'} = "armi";
$SDK_TargetDir{'UIQ3'} = "armv5";
$SDK_TargetDir{'S60v1'} = "armi";
@@ -34,11 +37,11 @@ $SDK_TargetDir{'S90'} = "armi";
$build_dir = getcwd();
$output_dir = "$build_dir/Packages";
-chdir("../../");
+chdir("../../../");
$base_dir = getcwd();
chdir($build_dir);
-$build_log_out = "$build_dir/Build.out.log";
-$build_log_err = "$build_dir/Build.err.log";
+$build_log_out = "$build_dir/out.build.out.log"; # don't start these files with "Build"
+$build_log_err = "$build_dir/out.build.err.log"; # so "B"+TAB completion works in 1 go :P
$initial_path = $ENV{'PATH'}; # so we can start with a fresh PATH for each Build
@@ -54,14 +57,27 @@ $PackagesUploaded = 0;
@ErrorMessages = ();
$ftp_url = "FTP://$FTP_User\@$FTP_Host/$FTP_Dir/";
-$ExtraMacros = "MACRO NONSTANDARD_PORT\n";
-$ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n";
+# these macros are always defined:
+$ExtraMacros = "MACRO NONSTANDARD_PORT\n";
+$ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n";
+$ExtraMacros .= "MACRO DISABLE_SCALERS\n";
+$ExtraMacros .= "MACRO DISABLE_HQ_SCALERS\n";
# prep nice list of SDKs
#while( ($SDK, $RootDir) = each(%SDK_RootDirs) )
foreach $SDK (sort keys(%SDK_RootDirs))
{
- $SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\n\t\t\t";
+ # see if it exists!
+ if (-d $SDK_RootDirs{$SDK})
+ {
+ $SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\n\t\t\t";
+ }
+ else # missing?
+ {
+ $SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\t[MISSING: Skipping!]\n\t\t\t";
+ # remove it from array, to prevent building!
+ delete $SDK_RootDirs{$SDK};
+ }
}
# prep nice list of Libraries
@@ -69,7 +85,16 @@ while( ($SDK, $Value) = each(%SDK_LibraryDirs) )
{
while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) )
{
- $PresentLibs{$Library} = $Path;
+ # maybe it's already been built?
+ if (-e $SDK_RootDirs{$SDK}."\\epoc32\\release\\$SDK_TargetDir{$SDK}\\urel\\$Library")
+ {
+ $PresentLibs{$Library} = "$Path [EXISTS: Skipping!]";
+ delete $SDK_LibraryDirs{$SDK}{$Library};
+ }
+ else # make it!
+ {
+ $PresentLibs{$Library} = "$Path";
+ }
}
}
foreach $Library (sort keys(%PresentLibs))
@@ -78,10 +103,37 @@ foreach $Library (sort keys(%PresentLibs))
}
# prep nice list of Variations
-while( ($SDK, $Value) = each(%SDK_Variations) )
+#while( ($SDK, $Value) = each(%SDK_Variations) )
+#{
+# while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) )
+# {
+# $Extra = ($Variation ne '' ? "_$Variation" : "");
+# if ($SDK eq "ALL")
+# {
+# while( ($SDK2, $RootDir) = each(%SDK_RootDirs) )
+# {
+# if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently)
+# {
+# push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK2, $Extra);
+# $PackagesQueued++;
+# }
+# }
+# }
+# else
+# {
+# if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently)
+# {
+# push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra);
+# $PackagesQueued++;
+# }
+# }
+# }
+#}
+while( ($SDK, $Value) = each(%VariationSets) )
{
- while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) )
+ while( ($Variation, $FeaturesBlock) = each(%{$VariationSets{$SDK}}) )
{
+#my $MacroBlock = &MakeMppMacroDefs($FeaturesBlock);
$Extra = ($Variation ne '' ? "_$Variation" : "");
if ($SDK eq "ALL")
{
@@ -92,7 +144,7 @@ while( ($SDK, $Value) = each(%SDK_Variations) )
push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK2, $Extra);
$PackagesQueued++;
}
- }
+ }
}
else
{
@@ -118,7 +170,7 @@ Preparing to Build, Package & Upload $PackagesQueued SymbianOS ScummVM variation
SDKs inst'd \t$SDKs ".( %SDK_LibraryDirs ? "
LIBs inst'd \t$LIBs " : "" )."
- $PackagesQueued Variations \t$PackagesStr
+ $PackagesQueued Variations \t$PackagesStr
DIR base \t$base_dir
build \t$build_dir
output \t$output_dir
@@ -126,7 +178,7 @@ Preparing to Build, Package & Upload $PackagesQueued SymbianOS ScummVM variation
FTP host \t$FTP_Host
user \t$FTP_User
pass \t"."*" x length($FTP_Pass)."
- dir \t$FTP_Dir
+ dir \t$FTP_Dir
" : "" )."
=======================================================================================
Press Ctrl-C to abort or enter to continue Build, Package & Upload $PackagesQueued Variations...
@@ -142,7 +194,7 @@ unlink($build_log_out);
unlink($build_log_err);
# init _base.mmp now, so we can start changing it without affecting the CVS version _base.mmp.in!
-my $name = "mmp/scummvm_base.mmp";
+my $name = "mmp/scummvm_base.mmp";
my $file = "$build_dir/$name";
open FILE, "$file.in"; @lines = <FILE>; close FILE;
my $onestr = join("",@lines);
@@ -161,15 +213,21 @@ while( ($SDK, $Value) = each(%SDK_LibraryDirs) )
{
if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently)
{
+ # do we already have this one?
+ next if (-e $SDK_RootDirs{$SDK2}."\\epoc32\\release\\$SDK_TargetDir{$SDK2}\\urel\\$Library");
+
$LibrariesQueued++;
DoLibrary($SDK2, $Library, $Path);
}
- }
+ }
}
else
{
if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently)
{
+ # do we already have this one?
+ next if (-e $SDK_RootDirs{$SDK}."\\epoc32\\release\\$SDK_TargetDir{$SDK}\\urel\\$Library");
+
$LibrariesQueued++;
DoLibrary($SDK, $Library, $Path);
}
@@ -194,8 +252,33 @@ while( ($SDK, $VariationsHash) = each(%SDK_Variations) )
{
DoVariation($SDK2, $Variation, $MacroBlock);
}
+ }
+ }
+ else
+ {
+ if ($SDK_RootDirs{$SDK} ne '')
+ {
+ DoVariation($SDK, $Variation, $MacroBlock);
}
}
+ }
+}
+
+while( ($SDK, $VariationsHash) = each(%VariationSets) )
+{
+ while( ($Variation, $FeaturesBlock) = each(%{$VariationSets{$SDK}}) )
+ {
+ my $MacroBlock = &MakeMppMacroDefs($FeaturesBlock);
+ if ($SDK eq "ALL")
+ {
+ while( ($SDK2, $RootDir) = each(%SDK_RootDirs) )
+ {
+ if ($SDK_RootDirs{$SDK2} ne '')
+ {
+ DoVariation($SDK2, $Variation, $MacroBlock);
+ }
+ }
+ }
else
{
if ($SDK_RootDirs{$SDK} ne '')
@@ -248,7 +331,81 @@ print " SumthinWicked wishes you a ridiculously good and optimally happy d
##################################################################################################################
##################################################################################################################
-# Build, Package & Upload a single Variation
+# create a set of "MACRO xxx" definitions for use in the scummvm_base.mpp file
+sub MakeMppMacroDefs
+{
+ my ($features) = @_;
+
+ my %EnabledFeatures = ();
+ foreach (split(/\W|\r|\n/, $features))
+ {
+ if ($_ ne "")
+ {
+ #print "FEATURE: $_\n";
+ $EnabledFeatures{$_} = 1;
+ }
+ }
+
+ my $MacroDefs = "";
+
+ $MacroDefs .= " // Features //\n";
+ foreach my $e (sort keys %UseableFeatures)
+ {
+ my $E = uc($e);
+ if ($EnabledFeatures{$e})
+ {
+ $MacroDefs .= "MACRO USE_$E // LIB:$UseableFeatures{$e}\n";
+ # this one is used: remove it now
+ delete $EnabledFeatures{$e};
+ # this will leave us with a list of unparsed options!
+ }
+ else
+ {
+ $MacroDefs .= "//MACRO USE_$E\n";
+ }
+ }
+
+ $MacroDefs .= " // Engines //\n";
+ foreach my $e (sort @EnablableEngines)
+ {
+ my $E = uc($e);
+ if ($EnabledFeatures{$e})
+ {
+ $MacroDefs .= "MACRO ENABLE_$E // LIB:scummvm_$e.lib\n";
+ # this one is used: remove it now
+ delete $EnabledFeatures{$e};
+ # this will leave us with a list of unparsed options!
+ }
+ else
+ {
+ $MacroDefs .= "//MACRO ENABLE_$E\n";
+ }
+ }
+
+ $MacroDefs .= " // SubEngines //\n";
+ foreach my $e (sort @EnablableSubEngines)
+ {
+ my $E = uc($e);
+ if ($EnabledFeatures{$e})
+ {
+ $MacroDefs .= "MACRO ENABLE_$E\n";
+ # this one is used: remove it now
+ delete $EnabledFeatures{$e};
+ # this will leave us with a list of unparsed options!
+ }
+ else
+ {
+ $MacroDefs .= "//MACRO ENABLE_$E\n";
+ }
+ }
+
+#print "\n\n'$features' ==> $MacroDefs\n\n\n";
+ return $MacroDefs;
+}
+
+##################################################################################################################
+
+# Build, Package & Upload a single Variation
sub DoLibrary
{
my ($SDK, $Library, $Path) = @_;
@@ -278,19 +435,19 @@ my $header = "
my $OK = 1;
PrepSdkPaths($SDK);
-
+
chdir($Path) or $OK=0;
PrintErrorMessage("Changing to $Path failed!") if (!$OK);
- return 0 if (!$OK);
+ return 0 if (!$OK);
PrintMessage("Cleaning for $Target") if (!$ReallyQuiet);
system("bldmake bldfiles > NUL 2> NUL");
PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8);
- system("abld clean $TargetName urel > NUL 2> NUL");
- PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
+ system("abld CLEAN $TargetName UREL > NUL 2> NUL");
+ PrintErrorMessage("'abld CLEAN $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
# remove file so we are sure that after .lib generation we have a fresh copy!
if (-e $TargetFilePath) { unlink($TargetFilePath) or PrintErrorMessage("Removing $TargetFilePath"); }
-
+
my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen");
my $Message = "Building $Target ($Redirection)";
PrintMessage($Message) if (!$ReallyQuiet);
@@ -298,18 +455,18 @@ my $header = "
my $OldSize = (-s $build_log_err);
$Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : "");
- system("abld build $TargetName urel $Redirection >> $build_log_out");
+ system("abld BUILD $TargetName UREL $Redirection >> $build_log_out");
$OK = 0 if ($? >> 8);
# print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err));
- PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
- return 0 if (!$OK); # ABLD always returns ok :( grr
+ PrintErrorMessage("'abld BUILD $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
+ return 0 if (!$OK); # ABLD always returns ok :( grr
PrintMessage("Done.") if (!$ReallyQuiet);
# did it work? :)
if (-e $TargetFilePath)
{
$LibrariesSucceeded++;
-
+
if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path!
{
system("del /S /Q $TargetIntermediatePath > NUL");
@@ -318,9 +475,9 @@ my $header = "
}
else
{
- PrintErrorMessage("'abld build $TargetName urel' apparently failed.");
+ PrintErrorMessage("'abld BUILD $TargetName UREL' apparently failed.");
if ($HaltOnError)
- {
+ {
PrintErrorMessage("Halting on error as requested!");
exit 1;
}
@@ -330,12 +487,12 @@ my $header = "
##################################################################################################################
-# Build, Package & Upload a single Variation
+# Build, Package & Upload a single Variation
sub DoVariation
{
my ($SDK, $Variation, $MacroBlock) = @_;
my $Extra = ($Variation ne '' ? "_$Variation" : "");
- my $Package = sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra);
+ my $Package = sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra);
if ($SkipExistingPackages && -f "$output_dir/$Package")
{
@@ -366,7 +523,7 @@ my $header = "
if ($OK)
{
$OK = BuildVariation($SDK, $Variation, $Package, $MacroBlock);
-
+
if ($OK && $FTP_Host ne '')
{
UploadVariation($SDK, $Variation, $Package);
@@ -382,17 +539,17 @@ sub PrepVariation()
my $OK = 1;
PrepSdkPaths($SDK);
-
+
chdir($build_dir) or $OK=0;
PrintErrorMessage("Changing to $build_dir failed!") if (!$OK);
- return 0 if (!$OK);
+ return 0 if (!$OK);
# insert $MacroBlock into AUTO_MACRO_MASTER in scummvm_base.mmp
PrintMessage("Setting new AUTO_MACROS_MASTER in scummvm_base.mmp for '$Variation'") if (!$ReallyQuiet);
my $n = "AUTO_MACROS_MASTER";
my $a = "\/\/START_$n\/\/";
my $b = "\/\/STOP_$n\/\/";
- my $name = "scummvm_base.mmp";
+ my $name = "scummvm_base.mmp";
my $file = "$build_dir/mmp/$name";
my $updated = " Updated @ ".localtime();
@@ -401,11 +558,11 @@ sub PrepVariation()
return 0 if (!$OK);
my @lines = <FILE>;
close FILE;
-
+
my $onestr = join("",@lines);
$MacroBlock =~ s/^\s*//gm;
$onestr =~ s/$a(.*)$b/$a$updated\n$ExtraMacros$MacroBlock$b/s;
-
+
open FILE, ">$file" or $OK=0;
PrintErrorMessage("Writing file '$file'") if (!$OK);
return 0 if (!$OK);
@@ -418,7 +575,7 @@ sub PrepVariation()
$OK = 0 if ($? >> 8);
PrintErrorMessage("'AdaptAllMMPs.pl' exited with value " . ($? >> 8)) if ($? >> 8);
return 0 if (!$OK);
-
+
# we are here: so all is ok :)
return 1;
}
@@ -431,7 +588,7 @@ sub BuildVariation()
my $TargetName = $SDK_TargetName{$SDK};
my $TargetDir = $SDK_TargetDir{$SDK};
my $OK = 1;
-
+
my $dir = $build_dir."/".$SDK_BuildDirs{$SDK};
$dir =~ s#/#\\#g;
chdir($dir);
@@ -449,13 +606,15 @@ sub BuildVariation()
if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); }
$UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.exe";
if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); }
+ # remove all libs here, note they are in another dir!
+ system("del ".$SDK_RootDirs{$SDK}."/epoc32/release/$TargetName/urel/scummvm_*.lib");
system("bldmake bldfiles 2> NUL > NUL");
PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8);
- system("abld clean $TargetName urel 2> NUL > NUL");
- PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
-
+ system("abld CLEAN $TargetName UREL 2> NUL > NUL");
+ PrintErrorMessage("'abld CLEAN $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
+
my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen");
my $Message = "Building $Package ($Redirection)";
PrintMessage($Message) if (!$ReallyQuiet);
@@ -463,11 +622,11 @@ sub BuildVariation()
my $OldSize = (-s $build_log_err);
$Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : "");
- system("abld build $TargetName urel $Redirection >> $build_log_out");
+ system("abld BUILD $TargetName UREL $Redirection >> $build_log_out");
$OK = 0 if ($? >> 8);
print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err) && !$ReallyQuiet);
- PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
- return 0 if (!$OK); # ABLD always returns ok :( grr
+ PrintErrorMessage("'abld BUILD $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
+ return 0 if (!$OK); # ABLD always returns ok :( grr
PrintMessage("Done.") if (!$ReallyQuiet);
# do we have an override suffix for the package name?
@@ -491,7 +650,7 @@ sub BuildVariation()
if (-e "$output_dir/$Package")
{
$PackagesCreated++;
-
+
if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path!
{
#PrintMessage("Cleaning $TargetIntermediatePath");
@@ -514,7 +673,7 @@ sub UploadVariation()
use Net::FTP;
my $newerr;
-
+
PrintMessage("Connecting to FTP $FTP_Host") if (!$ReallyQuiet);
$ftp = Net::FTP->new($FTP_Host,Timeout=>240) or $newerr=1;
@@ -529,7 +688,7 @@ sub UploadVariation()
{
PrintMessage("Changing to dir $FTP_Dir");
$ftp->cwd($FTP_Dir) or $newerr=1;
-
+
if ($newerr)
{
PrintErrorMessage("Changing to dir $FTP_Dir! Aborting!");
@@ -541,20 +700,20 @@ sub UploadVariation()
# leave this for possible auto-deletion of old files?
# @files = $ftp->dir or $newerr=1;
# push @ERRORS, "Can't get file list $!\n" if $newerr;
-# print "Got file list\n";
+# print "Got file list\n";
# foreach(@files) {
# print "$_\n";
# }
-
+
PrintMessage("Uploading $Package (".(-s "$output_dir/$Package")." bytes)");
-
+
$ftp->binary;
$ftp->put("$output_dir/$Package") or $newerr=1;
PrintErrorMessage("Uploading package! Aborting!") if $newerr;
$PackagesUploaded++ if (!$newerr);
- }
+ }
- $ftp->quit;
+ $ftp->quit;
}
}
@@ -574,6 +733,7 @@ sub PrepSdkPaths()
# set env stuff
PrintMessage("Prepending $SDK specific paths to %PATH%") if (!$ReallyQuiet);
+ $AdditionalPathEntries .= "$SDK_ToolchainDirs{$SDK};" if ($SDK_ToolchainDirs{$SDK} ne '');
$AdditionalPathEntries .= "$ECompXL_BinDir;" if ($ECompXL_BinDir ne '' && $SDK eq 'UIQ2');
$AdditionalPathEntries .= "$EPOC32RT\\include;";
$AdditionalPathEntries .= "$EPOC32RT\\tools;";
@@ -594,7 +754,7 @@ sub CleanupPath()
{
$path =~ s/\"\Q$ECompXL_BinDir\E\";//g;
}
-
+
while( ($SDK, $RootDir) = each(%SDK_RootDirs) )
{
if ($SDK_RootDirs{$SDK} ne '')
@@ -602,8 +762,8 @@ sub CleanupPath()
my $path_component = "\"".$SDK_RootDirs{$SDK}."\\epoc32\\";
$path =~ s/\Q$path_component\E.*?\";//g;
}
- }
-
+ }
+
return $path;
}
@@ -634,4 +794,5 @@ sub PrintMessage()
}
##################################################################################################################
+
diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
index 0b334c08ea..1e5e4dc0c8 100644
--- a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
+++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
@@ -1,75 +1,119 @@
##################################################################################################################
- # you can use these below for speed & clarity or override with custom settings
- $DefaultTopMacros = "
- MACRO USE_ZLIB // LIB:zlib.lib
- MACRO USE_MAD // LIB:libmad.lib
- MACRO USE_TREMOR // LIB:libtremor.lib
- ";
-
- $DefaultBottomMacros = "
- MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
- MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
- ";
+ @WorkingEngines = qw(
+ scumm agos sky queen gob saga
+ kyra lure agi
+ );
+ @TestingEngines = qw(
+ cine cruise touche parallaction
+ drascula igor made m4
+ );
+ @BrokenEngines = qw(
+ sword1
+ sword2
+ );
+
+ @EnablableEngines = (@WorkingEngines, @TestingEngines);
+
+ @EnablableSubEngines = qw(
+ scumm_7_8
+ he
+ );
+
+ %UseableFeatures = (
+ 'zlib' => 'zlib.lib',
+ 'mad' => 'libmad.lib',
+ 'tremor' => 'libtremor.lib',
+ 'mpeg2' => 'libmpeg2.lib'
+ );
+
+ # these are normally enabled for each variation
+ $DefaultFeatures = qw(zlib tremor);
+ #$DefaultFeatures = qw(zlib mad tremor);
+
+ # you can use these below for speed & clarity or override with custom settings
+ $DefaultTopMacros = "
+ MACRO USE_ZLIB // LIB:zlib.lib
+ //MACRO USE_MAD // LIB:libmad.lib
+ MACRO USE_TREMOR // LIB:libtremor.lib
+ ";
+
+ $DefaultBottomMacros = "
+ MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
+ MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
+ ";
+
+##################################################################################################################
##
- ## General system information:
+ ## General system information, based on $COMPUTERNAME, so this way
+ ## you can use the same LocalSettings.pl file on multiple machines!
##
+##################################################################################################################
- # this way you can use the same LocalSettings.pl file on multiple machines!
- if ($ENV{'COMPUTERNAME'} eq "BRAAMBOOK")
+ if ($ENV{'COMPUTERNAME'} eq "PC-21") #########################################################################
{
# might use this string for file/dir naming in the future :)
$Producer = "SumthinWicked";
$RedirectSTDERR = 0;
- $HaltOnError = 1;
+ $HaltOnError = 0;
$SkipExistingPackages = 0;
$ReallyQuiet = 0;
-
+ $DevBase = "C:\\S";
+
# specify an optional FTP server to upload to after each Build+Package (can leave empty)
- #$FTP_Host = "host.domain";
- #$FTP_User = "test";
- #$FTP_Pass = "test";
- #$FTP_Dir = "test";
-
#$FTP_Host = "host.com";
$FTP_User = "something";
$FTP_Pass = "password";
$FTP_Dir = "cvsbuilds";
-
+
+ # What Platform SDKs are installed on this machine?
# possible SDKs: ("UIQ2", UIQ3", "S60v1", "S60v2", "S60v3", "S80", "S90")
# Note1: the \epoc32 directory needs to be in these rootdirs
# Note2: these paths do NOT end in a backslash!
- $SDK_RootDirs{'UIQ2'} = "C:\\S\\UIQ_21";
- $SDK_RootDirs{'S60v1'} = "C:\\S\\S60v1";
- $SDK_RootDirs{'S60v2'} = "C:\\S\\S60v2";
- $SDK_RootDirs{'S80'} = "C:\\S\\S80";
- $SDK_RootDirs{'S90'} = "C:\\S\\S90";
- $ECompXL_BinDir = "C:\\S\\ECompXL\\bin"; # only needed for UIQ
- # you need to specify each of the SDKs used in the blocks below!
+ # $SDK_RootDirs{'UIQ2'} = "$DevBase\\UIQ_21";
+ $SDK_RootDirs{'UIQ3'} = "$DevBase\\UIQ3";
+ # $SDK_RootDirs{'S60v1'} = "$DevBase\\S60v1";
+ # $SDK_RootDirs{'S60v2'} = "$DevBase\\S60v2";
+ $SDK_RootDirs{'S60v3'} = "$DevBase\\S60v3";
+ # $SDK_RootDirs{'S80'} = "$DevBase\\S80";
+ # $SDK_RootDirs{'S90'} = "$DevBase\\S90";
+
+ $SDK_ToolchainDirs{'S60v3'} = "$DevBase\\arm-symbianelf\\bin";
+ $SDK_ToolchainDirs{'UIQ2'} = "$DevBase\\ECompXL\\bin"; # only needed for UIQ2/UIQ3
+ $SDK_ToolchainDirs{'UIQ3'} = "$DevBase\\ECompXL\\bin"; # only needed for UIQ2/UIQ3
# these supporting libraries get built first, then all the Variations
# Note: the string {'xxx.lib'} is used in checking in build success: so needs to be accurate!
if (0) # so we can turn them on/off easily
{
- #$SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc";
- #$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group";
- #$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\S\\tremor\\epoc";
- $SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\UIQ";
- #$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S60";
- #$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S80";
- #$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90";
- #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
+ ## Standard libraries
+ $SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "$DevBase\\zlib-1.2.2\\epoc";
+ #$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "$DevBase\\libmad-0.15.1b\\group";
+ $SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "$DevBase\\tremor\\epoc";
+
+ ## SDL 1.2.12 / AnotherGuest / Symbian version
+ my $SdlBase = "$DevBase\\SDL-1.2.12-ag\\Symbian";
+ #$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = "$SdlBase\\S60"; // unsupported?
+ #$SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = "$SdlBase\\S60v2";
+ $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "$SdlBase\\S60v3";
+ #$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "$SdlBase\\S80";
+ #$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "$SdlBase\\S90";
+ #$SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = "$SdlBase\\UIQ2"
+ #$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "$SdlBase\\UIQ3";
+
+ ## HardlySupported(TM) :P
+ #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "$DevBase\\mpeg2dec-0.4.0\\epoc";
}
+
+ # now you can add $VariationSets only built on this PC below this line :)
+
+ #$VariationSets{'ALL'}{'scumm'} = "$DefaultFeatures scumm scumm_7_8 he";
+ #$VariationSets{'ALL'}{'all'} = "$DefaultFeatures @WorkingEngines @EnablableSubEngines";
- # backup :P
- #Path=C:\Progra~1\Active\Python24\.;C:\Program Files\Active\Tcl\bin;C:\Progra~1\Active\Perl\bin\;C:\WINDOWS\system32;C:\W
- #INDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\GNU\cvsnt;C:\Progra
- #m Files\WinSCP3\;"C:\Program Files\Common Files\Microsoft Shared\VSA\8.0\VsaEnv\";"c:\Program Files\Microsoft Visual Stu
- #dio 8\VC\bin";"C:\Program Files\UltraEdit-32"
}
- elsif ($ENV{'COMPUTERNAME'} eq "TSSLND0106")
+ elsif ($ENV{'COMPUTERNAME'} eq "TSSLND0106") #################################################################
{
$Producer = "AnotherGuest";
$RedirectSTDERR = 1;
@@ -90,7 +134,7 @@
#$SDK_RootDirs{'S80'}= "C:\\S80";
#$SDK_RootDirs{'S90'}= "C:\\S90";
$ECompXL_BinDir= "C:\\ECompXL\\";
-if (0) # so we can turn them on/off easily
+ if (0) # so we can turn them on/off easily
{
# $SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc";
# $SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group";
@@ -101,9 +145,11 @@ if (0) # so we can turn them on/off easily
# $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90";
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
}
- # now you can add $SDK_Variations only built on this PC here :)
+
+ # now you can add $VariationSets only built on this PC below this line :)
+
}
-elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE")
+ elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE") #################################################################
{
$Producer = "AnotherGuest";
$RedirectSTDERR = 1;
@@ -116,15 +162,15 @@ elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE")
#$FTP_Pass = "password";
#$FTP_Dir = "cvsbuilds";
- #$SDK_RootDirs{'UIQ2'}= "E:\\UIQ2";
- $SDK_RootDirs{'UIQ3'}= "E:\\UIQ3";
- #$SDK_RootDirs{'S60v1'}= "E:\\S60v1";
- #$SDK_RootDirs{'S60v2'}= "E:\\S60v2";
- $SDK_RootDirs{'S60v3'}= "E:\\S60v3";
- #$SDK_RootDirs{'S80'}= "E:\\S80";
- #$SDK_RootDirs{'S90'}= "E:\\S90";
- $ECompXL_BinDir= "E:\\ECompXL\\";
-if (0) # so we can turn them on/off easily
+ #$SDK_RootDirs{'UIQ2'}= "D:\\UIQ2";
+ $SDK_RootDirs{'UIQ3'}= "D:\\UIQ3";
+ #$SDK_RootDirs{'S60v1'}= "D:\\S60v1";
+ #$SDK_RootDirs{'S60v2'}= "D:\\S60v2";
+ $SDK_RootDirs{'S60v3'}= "D:\\S60v3";
+ #$SDK_RootDirs{'S80'}= "D:\\S80";
+ #$SDK_RootDirs{'S90'}= "D:\\S90";
+ $ECompXL_BinDir= "D:\\ECompXL\\";
+ if (0) # so we can turn them on/off easily
{
# $SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc";
# $SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group";
@@ -137,28 +183,32 @@ if (0) # so we can turn them on/off easily
$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3";
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
}
- # now you can add $SDK_Variations only built on this PC here :)
+
+ # now you can add $VariationSets only built on this PC below this line :)
+
}
- else
+ else #########################################################################################################
{
print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!";
exit 1;
}
+##################################################################################################################
##
## Variation defines:
##
+##################################################################################################################
# second hash index = literal string used in .sis file created.
# empty string also removes the trailing '_'. Some 051101 examples:
- # $SDK_Variations{'UIQ2'}{''} would produce:
+ # $VariationSets{'UIQ2'}{''} would produce:
# scummvm-051101-SymbianUIQ2.sis
- # $SDK_Variations{'S60v2'}{'agos'} would produce:
+ # $VariationSets{'S60v2'}{'agos'} would produce:
# scummvm-051101-SymbianS60v2_agos.sis
- # $SDK_Variations{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce:
+ # $VariationSets{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce:
# scummvm-051101-SymbianUIQ2_queen.sis
# scummvm-051101-SymbianUIQ3_queen.sis
# scummvm-051101-SymbianS60v1_queen.sis
@@ -167,361 +217,47 @@ if (0) # so we can turn them on/off easily
# scummvm-051101-SymbianS80_queen.sis
# scummvm-051101-SymbianS90_queen.sis
- #$SDK_Variations{'ALL'}{'test'} = "$DefaultTopMacro
- # //MACRO USE_TREMOR // LIB:libtremor.lib
- # //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- # //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- # //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- # //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- # //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- # //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- # //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- #$DefaultBottomMacros";
- #$SDK_Variations{'S60v1'}{'test'} = $SDK_Variations{'UIQ2'}{'test'};
-
-if (1) # all regular combo's
-{
- # the first one includes all SDKs & release-ready engines
-
- $SDK_Variations{'ALL'}{'all'} = "$DefaultTopMacros
- //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- //MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- //MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- //MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- //MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- //MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
+ # NOTE: empty $VariationSets{''} string instead of 'ALL' = easy way to disable pkg!
- //MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- //MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- //MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- //MACRO DISABLE_MADE // LIB:scummvm_made.lib
- //MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- # now one for each ready-for-release engine
-
- $SDK_Variations{'ALL'}{'scumm'} = "$DefaultTopMacros
- //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'agos'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'sky'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'queen'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'gob'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'saga'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'kyra'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- # below here you could specify weird & experimental combinations, non-ready engines
-
- $SDK_Variations{'ALL'}{'saga_mini'} = "
- //MACRO USE_ZLIB // LIB:zlib.lib
- //MACRO USE_MAD // LIB:libmad.lib
- //MACRO USE_TREMOR // LIB:libtremor.lib
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
-# $SDK_Variations{'ALL'}{'scumm_no78he'} = "
-# MACRO USE_ZLIB // LIB:zlib.lib
-# MACRO USE_MAD // LIB:libmad.lib
-# //MACRO USE_TREMOR // LIB:libtremor.lib
-# MACRO DISABLE_SCUMM_7_8
-# MACRO DISABLE_SCUMM_HE
-# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
-# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
-# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
-# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
-# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
-# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
-# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
-# MACRO DISABLE_AGI // LIB:scummvm_agi.lib
-# MACRO DISABLE_LURE // LIB:scummvm_lure.lib
-# MACRO DISABLE_CINE // LIB:scummvm_cine.lib
-# MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
-# $DefaultBottomMacros";
-
-# $SDK_Variations{'ALL'}{'all_vorbis'} = "
-# MACRO USE_ZLIB // LIB:zlib.lib
-# MACRO USE_MAD // LIB:libmad.lib
-# MACRO USE_TREMOR // LIB:libtremor.lib
-#
-# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
-# //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
-# //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
-# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
-# //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
-# //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
-# //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
-# $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'lure'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- //MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_agi.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- # empty $SDK_Variations{''} string instead of 'ALL' = package disabled
- $SDK_Variations{'ALL'}{'test_cine'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- //MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
- $SDK_Variations{'ALL'}{'agi'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- //MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- $DefaultBottomMacros";
-
-
- $SDK_Variations{'ALL'}{'test_touche'} = "$DefaultTopMacros
- MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- //MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
- MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
- MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
- MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
- MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
- MACRO DISABLE_MADE // LIB:scummvm_made.lib
- MACRO DISABLE_M4 // LIB:scummvm_m4.lib
- ";
-}
-
-#
-# $SDK_Variations{'S60v2'}{'test_sword'} = "$DefaultTopMacros
-# MACRO USE_MPEG2 // LIB:libmpeg2.lib
-# MACRO USE_TREMOR // LIB:libtremor.lib
-# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
-# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
-# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
-# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
-# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
-# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
-# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
-# MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
-# MACRO DISABLE_CINE // LIB:scummvm_cine.lib
-# MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
-# //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
-# //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
-# ";
-# $SDK_Variations{'UIQ2'}{'test_sword'} = $SDK_Variations{'S60v2'}{'test_sword'}
-#
+ if (1) # all regular combo's
+ {
+ # the first one includes all SDKs & release-ready engines
+
+ $VariationSets{'ALL'}{'all'} = "$DefaultFeatures @WorkingEngines @EnablableSubEngines";
+
+ # now one for each ready-for-release engine
+
+ foreach (@WorkingEngines)
+ {
+ $VariationSets{'ALL'}{$_} = "$DefaultFeatures $_";
+ }
+ # for scumm, we need to add 2 features:
+ $VariationSets{'ALL'}{'scumm'} .= " scumm_7_8 he";
+
+ # now one for each not-ready-for-release-or-testing engine
+
+ foreach (@TestingEngines)
+ {
+ $VariationSets{'ALL'}{"test_$_"} = "$DefaultFeatures $_";
+ }
+
+ # below here you could specify weird & experimental combinations, non-ready engines
+
+ # a small version of the saga engine, because it is so big (no tremor,mad,zlib)
+ $VariationSets{'ALL'}{'saga_mini'} = "saga";
+
+ # a smaller version of scumm without support for v7, v8 and HE games
+ $VariationSets{'ALL'}{'scumm_no78he'} = "$DefaultFeatures scumm";
+
+ # maybe you feel lucky and want to test the sword engines? :P
+ #$VariationSets{'S60v2'}{'test_sword'} = "$DefaultFeatures mpeg2 sword1 sword2";
+ #$VariationSets{'UIQ2'}{'test_sword'} = "$DefaultFeatures mpeg2 sword1 sword2";
+
+ # for mega-fast-testing only plz! Warning: contains to engines!
+ #$VariationSets{'ALL'}{'fast_empty'} = "";
+
+ } # end quick-n-fast if (1|0)
-# for mega-fast-testing only plz!
-# $SDK_Variations{'ALL'}{'(fast_empty)'} = "
-# //MACRO USE_ZLIB // LIB:zlib.lib
-# //MACRO USE_MAD // LIB:libmad.lib
-# //MACRO USE_TREMOR // LIB:libtremor.lib
-# MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib
-# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
-# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
-# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
-# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
-# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
-# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
-# $DefaultBottomMacros";
##################################################################################################################
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README
index 0f9df338c3..8ab729a4d0 100644
--- a/backends/platform/symbian/README
+++ b/backends/platform/symbian/README
@@ -38,6 +38,7 @@ Building ScummVM
Lets just say the framework needs quite some time to set up and takes a while
to get used to. If you choose to continue you will need the following items:
+ - UIQ 3.0 SDK (To build for UIQ3 devices)
- UIQ 2.1 SDK (To build for UIQ2 devices);
http://www.symbian.com/developer/sdks_uiq.asp
@@ -58,14 +59,14 @@ Building ScummVM
- zlib, a massively spiffy yet delicately unobtrusive compression library
http://www.zlib.net/
-
- These are probably too heavy-duty for your phone:
+ - latest version of active perl (included with Symbian SDK does not work with the build scripts)
- libogg, the free media file container format
http://www.xiph.org/ogg/
-
+
- libvorbis, the free audio codec
http://www.vorbis.com/
+ These are probably too heavy-duty for your phone:
- flac, the Free Lossless Audio Codec
http://flac.sourceforge.net/
diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
index ff11657b34..3fea916e43 100644
--- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
@@ -29,7 +29,7 @@
TARGET ScummVM.exe
TARGETPATH sys\bin
TARGETTYPE exe
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
UID 0x100039ce 0xA0000657
@@ -81,13 +81,6 @@ ALWAYS_BUILD_AS_ARM
STATICLIBRARY esdl.lib
-#if !defined(WINS)
-staticlibrary rate_arm_asm.o
-staticlibrary proc3arm.o
-staticlibrary codec47ARM.o
-staticlibrary gfxARM.o
-#endif
-
// *** Include paths
USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
index a1ac965148..0013d061ca 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
@@ -30,7 +30,7 @@ TARGET ScummVM.exe
TARGETPATH sys\bin
TARGETTYPE exe
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
UID 0x100039ce 0xA0000657
@@ -82,13 +82,6 @@ ALWAYS_BUILD_AS_ARM
STATICLIBRARY esdl.lib
-#if !defined(WINS)
-staticlibrary rate_arm_asm.o
-staticlibrary proc3arm.o
-staticlibrary codec47ARM.o
-staticlibrary gfxARM.o
-#endif
-
// *** Include paths
USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
diff --git a/backends/platform/symbian/mmp/scummvm_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
index 8432968f32..04cf068133 100644
--- a/backends/platform/symbian/mmp/scummvm_agi.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_agi.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_agos.mmp.in b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
index 528349c176..d03a30d88b 100644
--- a/backends/platform/symbian/mmp/scummvm_agos.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_agos.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index 761d4867e7..d1c8878d4b 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -30,36 +30,15 @@ TARGET scummvm_base.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them!
//START_AUTO_MACROS_MASTER//
// empty base file, will be updated by Perl build scripts
-
- // list of possible MACROs: (will be replaced when generating scummvm_base.mmp)
- //MACRO USE_ZLIB // LIB:zlib.lib
- //MACRO USE_MAD // LIB:libmad.lib
- //MACRO USE_TREMOR // LIB:libtremor.lib
- //MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib
- //MACRO DISABLE_SCUMM_7_8
- //MACRO DISABLE_SCUMM_HE
- //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
- //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
- //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
- //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
- //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
- //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
- //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
- //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
- //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
- //MACRO DISABLE_LURE // LIB:scummvm_lure.lib
- //MACRO DISABLE_CINE // LIB:scummvm_cine.lib
- //MACRO DISABLE_AGI // LIB:scummvm_agi.lib
- //MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
- //MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
- //MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
+ // this file will be modified first, then from here all
+ // MACROs will be replicated to the other MPP files.
//STOP_AUTO_MACROS_MASTER//
@@ -77,6 +56,7 @@ SYSTEMINCLUDE ..\src // for portdefs.h
// *** SOURCE files
+
SOURCEPATH ..\..\..\..\common
//START_AUTO_OBJECTS_COMMON_//
@@ -84,6 +64,7 @@ SOURCEPATH ..\..\..\..\common
//STOP_AUTO_OBJECTS_COMMON_//
+
SOURCEPATH ..\..\..\..\graphics
//START_AUTO_OBJECTS_GRAPHICS_//
@@ -91,6 +72,7 @@ SOURCEPATH ..\..\..\..\graphics
//STOP_AUTO_OBJECTS_GRAPHICS_//
+
SOURCEPATH ..\..\..\..\gui
//START_AUTO_OBJECTS_GUI_//
@@ -103,6 +85,7 @@ SOURCEPATH ..\..\..\..\gui
//SOURCE KeysDialog.cpp
//SOURCE Actions.cpp
+
SOURCEPATH ..\..\..\..\sound
//START_AUTO_OBJECTS_SOUND_//
@@ -110,16 +93,22 @@ SOURCEPATH ..\..\..\..\sound
//STOP_AUTO_OBJECTS_SOUND_//
#if defined (WINS)
-SOURCE rate.cpp
+SOURCE rate.cpp // WINS emulator version: add regular .cpp
#else
-SOURCE rate_arm.cpp
+SOURCE rate_arm.cpp // ARM version: add ASM .cpp wrapper
+SOURCE rate_arm_asm.s // ARM version: add ASM routines
#endif
-sourcepath ..\..\..\..
-source backends\events\default\default-events.cpp
-source backends\timer\default\default-timer.cpp
-source backends\saves\savefile.cpp
-source backends\saves\default\default-saves.cpp
-source backends\saves\compressed\compressed-saves.cpp
-source engines\engine.cpp
+
+
+// add a few files manually, since they are not parsed from modules.mk files
+SOURCEPATH ..\..\..\..
+SOURCE backends\events\default\default-events.cpp
+SOURCE backends\timer\default\default-timer.cpp
+SOURCE backends\saves\savefile.cpp
+SOURCE backends\saves\default\default-saves.cpp
+SOURCE backends\saves\compressed\compressed-saves.cpp
+SOURCE engines\engine.cpp
+
+
// backend specific includes
// backend specific includes
diff --git a/backends/platform/symbian/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
index 052b62759b..cc355b0318 100644
--- a/backends/platform/symbian/mmp/scummvm_cine.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_CINE.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
index ad363984c8..718f80a95b 100644
--- a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_cruise.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
index 4c9d614446..4979cc91a6 100644
--- a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_drascula.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
index 734f3c686c..8522a937ab 100644
--- a/backends/platform/symbian/mmp/scummvm_gob.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_gob.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
index 6c4e9a0a97..503a54ce1f 100644
--- a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_kyra.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
index 6b3410e95f..24173c6a57 100644
--- a/backends/platform/symbian/mmp/scummvm_lure.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_lure.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_m4.mmp.in b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
index 62a00143be..4429582bd7 100644
--- a/backends/platform/symbian/mmp/scummvm_m4.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_m4.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_made.mmp.in b/backends/platform/symbian/mmp/scummvm_made.mmp.in
index 7aac818f4e..cb69cbf115 100644
--- a/backends/platform/symbian/mmp/scummvm_made.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_made.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_made.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
index 910bb42ec9..4c117fba45 100644
--- a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_parallaction.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
index 96b827a994..6bee237f77 100644
--- a/backends/platform/symbian/mmp/scummvm_queen.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_queen.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
index 9e8c658a8f..c040de250c 100644
--- a/backends/platform/symbian/mmp/scummvm_saga.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_saga.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
index 39490cfd29..7eecfd3ff6 100644
--- a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_scumm.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
@@ -43,23 +43,34 @@ ALWAYS_BUILD_AS_ARM
SOURCEPATH ..\..\..\..\engines\scumm
+
//START_AUTO_OBJECTS_SCUMM_//
// empty base file, will be updated by Perl build scripts
//STOP_AUTO_OBJECTS_SCUMM_//
+#if !defined (WINS)
+SOURCE gfxARM.s // ARM version: add ASM routines
+SOURCE proc3ARM.s // ARM version: add ASM routines
+#endif
+
-//START_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8//
+//START_AUTO_OBJECTS_SCUMM_ENABLE_SCUMM_7_8//
// empty base file, will be updated by Perl build scripts
-//STOP_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8//
+//STOP_AUTO_OBJECTS_SCUMM_ENABLE_SCUMM_7_8//
+#if !defined (WINS)
+SOURCE smush/codec47ARM.s // ARM version: add ASM routines
+#endif
-//START_AUTO_OBJECTS_SCUMM_DISABLE_HE//
+
+//START_AUTO_OBJECTS_SCUMM_ENABLE_HE//
// empty base file, will be updated by Perl build scripts
-//STOP_AUTO_OBJECTS_SCUMM_DISABLE_HE//
+//STOP_AUTO_OBJECTS_SCUMM_ENABLE_HE//
+
// *** Include paths
diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
index e359803194..9ae57aa2b6 100644
--- a/backends/platform/symbian/mmp/scummvm_sky.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_sky.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
index 9bc97919c5..ecf71c2d30 100644
--- a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_sword1.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
index 4d25a41e89..91029b1f8d 100644
--- a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_sword2.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_touche.mmp.in b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
index 9ea7636af5..3b8a7e6105 100644
--- a/backends/platform/symbian/mmp/scummvm_touche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
@@ -30,7 +30,7 @@ TARGET scummvm_touche.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
-OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
+OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp
index d3e92731db..dfeb24d825 100644
--- a/backends/platform/symbian/src/SymbianOS.cpp
+++ b/backends/platform/symbian/src/SymbianOS.cpp
@@ -173,11 +173,8 @@ void OSystem_SDL_Symbian::quit() {
OSystem_SDL::quit();
}
-bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_SDL_Symbian::setupMixer() {
- // First save the proc and param
- _sound_proc_param = param;
- _sound_proc = proc;
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@@ -207,48 +204,53 @@ bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = (uint16)samples;
-#ifdef S60
desired.callback = symbianMixCallback;
desired.userdata = this;
-#else
- desired.callback = proc;
- desired.userdata = param;
-#endif
+
+ // Create the mixer instance
+ assert(!_mixer);
+ _mixer = new Audio::MixerImpl(this);
+ assert(_mixer);
+
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
- return false;
- }
- // Note: This should be the obtained output rate, but it seems that at
- // least on some platforms SDL will lie and claim it did get the rate
- // even if it didn't. Probably only happens for "weird" rates, though.
- _samplesPerSec = obtained.freq;
- _channels = obtained.channels;
-
- // Need to create mixbuffer for stereo mix to downmix
- if (_channels != 2) {
- _stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values
+ _samplesPerSec = 0;
+ _mixer->setReady(false);
+ } else {
+ // Note: This should be the obtained output rate, but it seems that at
+ // least on some platforms SDL will lie and claim it did get the rate
+ // even if it didn't. Probably only happens for "weird" rates, though.
+ _samplesPerSec = obtained.freq;
+ _channels = obtained.channels;
+
+ // Need to create mixbuffer for stereo mix to downmix
+ if (_channels != 2) {
+ _stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values
+ }
+
+ // Tell the mixer that we are ready and start the sound processing
+ _mixer->setOutputRate(_samplesPerSec);
+ _mixer->setReady(true);
+ SDL_PauseAudio(0);
}
-
- SDL_PauseAudio(0);
- return true;
}
/**
* The mixer callback function, passed on to OSystem::setSoundCallback().
* This simply calls the mix() method.
*/
-void OSystem_SDL_Symbian::symbianMixCallback(void *s, byte *samples, int len) {
- static_cast <OSystem_SDL_Symbian*>(s)->symbianMix(samples,len);
-}
+void OSystem_SDL_Symbian::symbianMixCallback(void *sys, byte *samples, int len) {
+ OSystem_SDL_Symbian *this_ = (OSystem_SDL_Symbian *)sys;
+ assert(this_);
+ if (!this_->_mixer)
+ return;
-/**
- * Actual mixing implementation
- */
-void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) {
+#ifdef S60
// If not stereo then we need to downmix
if (_channels != 2) {
- _sound_proc(_sound_proc_param, _stereo_mix_buffer, len * 2);
+ this_->_mixer->mixCallback(_stereo_mix_buffer, len * 2);
+
int16 *bitmixDst = (int16 *)samples;
int16 *bitmixSrc = (int16 *)_stereo_mix_buffer;
@@ -258,9 +260,12 @@ void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) {
bitmixSrc += 2;
}
} else
- _sound_proc(_sound_proc_param, samples, len);
+#else
+ this_->_mixer->mixCallback(samples, len);
+#endif
}
+
/**
* This is an implementation by the remapKey function
* @param SDL_Event to remap
diff --git a/backends/platform/symbian/src/SymbianOS.h b/backends/platform/symbian/src/SymbianOS.h
index 77e42cd476..71d24f6286 100644
--- a/backends/platform/symbian/src/SymbianOS.h
+++ b/backends/platform/symbian/src/SymbianOS.h
@@ -58,7 +58,7 @@ public:
// This function is overridden by the symbian port in order to provide MONO audio
// downmix is done by supplying our own audiocallback
//
- virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
+ virtual void setupMixer(); // overloaded by CE backend
// Overloaded from SDL_Commmon
void quit();
@@ -70,11 +70,6 @@ protected:
//
static void symbianMixCallback(void *s, byte *samples, int len);
- //
- // Actual mixing implementation
- //
- void symbianMix(byte *samples, int len);
-
virtual FilesystemFactory *getFilesystemFactory();
public:
// vibration support
@@ -121,8 +116,6 @@ protected:
// Audio
int _channels;
- SoundProc _sound_proc;
- void *_sound_proc_param;
byte *_stereo_mix_buffer;
// Used to handle joystick navi zones
diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h
index 2723c0bab0..06a4cf374c 100644
--- a/backends/platform/symbian/src/portdefs.h
+++ b/backends/platform/symbian/src/portdefs.h
@@ -35,8 +35,8 @@
#include <e32std.h>
#include <math.h>
-#define DISABLE_SCALERS // we only need 1x
-#define DISABLE_HQ_SCALERS
+//#define DISABLE_SCALERS // we only need 1x
+//#define DISABLE_HQ_SCALERS
#if defined(USE_TREMOR) && !defined(USE_VORBIS)
#define USE_VORBIS // make sure this one is defined together with USE_TREMOR!
diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp
index 2667ecb69d..9e708345c5 100644
--- a/backends/platform/wii/osystem.cpp
+++ b/backends/platform/wii/osystem.cpp
@@ -91,7 +91,7 @@ void OSystem_Wii::initBackend() {
_startup_time = gettime();
_savefile = new DefaultSaveFileManager();
- _mixer = new Audio::Mixer();
+ _mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
initGfx();
diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h
index 2a168fd0b7..7fbc560b1a 100644
--- a/backends/platform/wii/osystem.h
+++ b/backends/platform/wii/osystem.h
@@ -31,7 +31,7 @@
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "graphics/surface.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include <gctypes.h>
#include <gccore.h>
@@ -96,7 +96,7 @@ private:
protected:
Common::SaveFileManager *_savefile;
- Audio::Mixer *_mixer;
+ Audio::MixerImpl *_mixer;
DefaultTimerManager *_timer;
public:
@@ -159,7 +159,6 @@ public:
virtual void deleteMutex(MutexRef mutex);
typedef void (*SoundProc)(void *param, byte *buf, int len);
- virtual int getOutputSampleRate() const;
virtual void quit();
diff --git a/backends/platform/wii/osystem_sfx.cpp b/backends/platform/wii/osystem_sfx.cpp
index 16b2f3b055..0a225e80c7 100644
--- a/backends/platform/wii/osystem_sfx.cpp
+++ b/backends/platform/wii/osystem_sfx.cpp
@@ -36,9 +36,6 @@ static bool sfx_thread_quit = false;
static u8 sb = 0;
static u8 *sound_buffer[2];
-static OSystem_Wii::SoundProc sound_proc = NULL;
-static void *proc_param = NULL;
-
static void audio_switch_buffers() {
AUDIO_StopDMA();
AUDIO_InitDMA((u32) sound_buffer[sb], SFX_THREAD_FRAG_SIZE);
@@ -48,6 +45,7 @@ static void audio_switch_buffers() {
}
static void * sfx_thread_func(void *arg) {
+ Audio::MixerImpl *mixer = (Audio::MixerImpl *) arg;
u8 next_sb;
while (true) {
@@ -57,7 +55,7 @@ static void * sfx_thread_func(void *arg) {
break;
next_sb = sb ^ 1;
- sound_proc(proc_param, sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
+ mixer->mixCallback(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
DCFlushRange(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
sb = next_sb;
@@ -75,7 +73,7 @@ void OSystem_Wii::initSfx() {
LWP_InitQueue(&sfx_queue);
- s32 res = LWP_CreateThread(&sfx_thread, sfx_thread_func, NULL, sfx_stack,
+ s32 res = LWP_CreateThread(&sfx_thread, sfx_thread_func, _mixer, sfx_stack,
SFX_THREAD_STACKSIZE, SFX_THREAD_PRIO);
if (res) {
@@ -95,9 +93,7 @@ void OSystem_Wii::initSfx() {
DCFlushRange(sound_buffer[0], SFX_THREAD_FRAG_SIZE);
DCFlushRange(sound_buffer[1], SFX_THREAD_FRAG_SIZE);
- sound_proc = Audio::Mixer::mixCallback;
- proc_param = _mixer;
-
+ _mixer->setOutputRate(48000);
_mixer->setReady(true);
AUDIO_SetDSPSampleRate(AI_SAMPLERATE_48KHZ);
@@ -127,7 +123,3 @@ void OSystem_Wii::deinitSfx() {
}
}
-int OSystem_Wii::getOutputSampleRate() const {
- return 48000;
-}
-
diff --git a/backends/platform/wince/Makefile b/backends/platform/wince/Makefile
index 734bf82eaa..176971067e 100644
--- a/backends/platform/wince/Makefile
+++ b/backends/platform/wince/Makefile
@@ -19,6 +19,8 @@
## Enable whichever engines you want here
ENABLE_SCUMM = STATIC_PLUGIN
+ENABLE_SCUMM_7_8 = 1
+ENABLE_HE = 1
ENABLE_SKY = STATIC_PLUGIN
ENABLE_QUEEN = STATIC_PLUGIN
ENABLE_GOB = STATIC_PLUGIN
@@ -163,7 +165,8 @@ endif
EXECUTABLE = scummvm.exe
CXXFLAGS := $(CFLAGS)
OBJS :=
-MODULE_DIRS += .
+MODULE_DIRS += ./
+DEPDIR = .deps
OBJS += CEActionsPocket.o CEDevice.o CEScaler.o \
CEActionsSmartphone.o CELauncherDialog.o wince-sdl.o
diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp
index 8cf5fac279..3f16b4fdd1 100644
--- a/backends/platform/wince/wince-sdl.cpp
+++ b/backends/platform/wince/wince-sdl.cpp
@@ -35,7 +35,7 @@
#include "base/main.h"
#include "base/plugins.h"
-#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
#include "sound/fmopl.h"
#include "backends/timer/default/default-timer.h"
@@ -94,7 +94,6 @@ static char stdout_fname[MAX_PATH], stderr_fname[MAX_PATH];
// Static member inits
typedef void (*SoundProc)(void *param, byte *buf, int len);
bool OSystem_WINCE3::_soundMaster = true;
-SoundProc OSystem_WINCE3::_originalSoundProc = NULL;
bool _isSmartphone = false;
bool _hasSmartphoneResolution = false;
@@ -403,9 +402,8 @@ void OSystem_WINCE3::initBackend()
{
// Instantiate our own sound mixer
// mixer init is postponed until a game engine is selected.
- if (_mixer == 0) {
- _mixer = new Audio::Mixer();
- }
+ if (_mixer == 0)
+ _mixer = new Audio::MixerImpl(this);
// 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
@@ -770,7 +768,7 @@ void OSystem_WINCE3::create_toolbar() {
_toolbarHandler.setVisible(false);
}
-bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_WINCE3::setupMixer() {
SDL_AudioSpec desired;
int thread_priority;
@@ -779,18 +777,20 @@ bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
memset(&desired, 0, sizeof(desired));
- _originalSoundProc = proc;
desired.freq = _sampleRate;
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = 128;
desired.callback = private_sound_proc;
- desired.userdata = param;
+ desired.userdata = this;
+
+ // Create the mixer instance
+ if (_mixer == 0)
+ _mixer = new Audio::MixerImpl(this);
// Add sound thread priority
- if (!ConfMan.hasKey("sound_thread_priority")) {
+ if (!ConfMan.hasKey("sound_thread_priority"))
thread_priority = THREAD_PRIORITY_NORMAL;
- }
else
thread_priority = ConfMan.getInt("sound_thread_priority");
@@ -799,16 +799,26 @@ bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
SDL_CloseAudio();
if (SDL_OpenAudio(&desired, NULL) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
- return false;
- }
- else
+ _mixer->setReady(false);
+
+ } else {
debug(1, "Sound opened OK, mixing at %d Hz", _sampleRate);
- SDL_PauseAudio(0);
- return true;
+
+ // Re-create mixer to match the output rate
+ delete(_mixer);
+ _mixer = new Audio::MixerImpl(this);
+ _mixer->setOutputRate(_sampleRate);
+ _mixer->setReady(true);
+ SDL_PauseAudio(0);
+ }
}
void OSystem_WINCE3::private_sound_proc(void *param, byte *buf, int len) {
- (*_originalSoundProc)(param, buf, len);
+ OSystem_WINCE3 *this_ = (OSystem_WINCE3 *)param;
+ assert(this_);
+
+ if (this_->_mixer)
+ this_->_mixer->mixCallback(buf, len);
if (!_soundMaster)
memset(buf, 0, len);
}
@@ -838,7 +848,7 @@ bool OSystem_WINCE3::checkOggHighSampleRate() {
}
#endif
-void OSystem_WINCE3::get_sample_rate() {
+void OSystem_WINCE3::compute_sample_rate() {
// Force at least medium quality FM synthesis for FOTAQ
Common::String gameid(ConfMan.get("gameid"));
if (gameid == "queen") {
@@ -875,9 +885,8 @@ void OSystem_WINCE3::setWindowCaption(const char *caption) {
//update_game_settings();
// finalize mixer init
- get_sample_rate();
- bool result = setSoundCallback(Audio::Mixer::mixCallback, _mixer);
- _mixer->setReady(result);
+ compute_sample_rate();
+ setupMixer();
// handle the actual event
OSystem_SDL::setWindowCaption(caption);
@@ -1050,7 +1059,7 @@ void OSystem_WINCE3::update_game_settings() {
}
}
- get_sample_rate();
+ compute_sample_rate();
}
void OSystem_WINCE3::initSize(uint w, uint h) {
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
index daa7e832f6..8853c156d8 100644
--- a/backends/platform/wince/wince-sdl.h
+++ b/backends/platform/wince/wince-sdl.h
@@ -82,7 +82,7 @@ public:
// Overloaded from SDL_Commmon
void quit();
// Overloaded from SDL_Commmon (master volume and sample rate subtleties)
- bool setSoundCallback(SoundProc proc, void *param);
+ void setupMixer();
// Overloaded from OSystem
//void engineInit();
void getTimeAndDate(struct tm &t) const;
@@ -160,13 +160,12 @@ private:
#endif
static void private_sound_proc(void *param, byte *buf, int len);
- static SoundProc _originalSoundProc;
bool update_scalers();
void create_toolbar();
void update_game_settings();
void check_mappings();
- void get_sample_rate();
+ void compute_sample_rate();
void retrieve_mouse_location(int &x, int &y);
diff --git a/backends/platform/x11/module.mk b/backends/platform/x11/module.mk
deleted file mode 100644
index 22015b53be..0000000000
--- a/backends/platform/x11/module.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-MODULE := backends/platform/x11
-
-MODULE_OBJS := \
- x11.o
-
-MODULE_DIRS += \
- backends/platform/x11/
-
-# We don't use the rules.mk here on purpose
-OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) $(OBJS)
diff --git a/backends/platform/x11/x11.cpp b/backends/platform/x11/x11.cpp
deleted file mode 100644
index 329d994335..0000000000
--- a/backends/platform/x11/x11.cpp
+++ /dev/null
@@ -1,1050 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-/* The bare pure X11 port done by Lionel 'BBrox' Ulmer */
-
-#include "common/scummsys.h"
-#include "common/events.h"
-#include "common/system.h"
-#include "common/util.h"
-#include "base/main.h"
-#include "backends/platform/x11/x11.h"
-#include "backends/plugins/posix/posix-provider.h"
-
-#include <stdio.h>
-#include <assert.h>
-
-#include <sys/time.h>
-#include <unistd.h>
-
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/extensions/XShm.h>
-
-#ifdef __linux__
-#include <linux/soundcard.h>
-#else
-#include <sys/soundcard.h>
-#endif
-
-#include <sched.h>
-#include <pthread.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-
-//#define SAMPLES_PER_SEC 11025
-#define SAMPLES_PER_SEC 22050
-//#define SAMPLES_PER_SEC 44100
-
-
-int main(int argc, char *argv[]) {
- g_system = OSystem_X11::create(0, 0);
- assert(g_system);
-
-#ifdef DYNAMIC_MODULES
- PluginManager::instance().addPluginProvider(new POSIXPluginProvider());
-#endif
-
- // Invoke the actual ScummVM main entry point:
- int res = scummvm_main(argc, argv);
- g_system->quit(); // TODO: Consider removing / replacing this!
- return res;
-}
-
-OSystem *OSystem_X11::create(int gfx_mode, bool full_screen) {
- OSystem_X11 *syst = new OSystem_X11();
- return syst;
-}
-
-OSystem_X11::OSystem_X11() {
- /* Some members initialization */
- _fake_right_mouse = 0;
- _report_presses = 1;
- _current_shake_pos = 0;
- _new_shake_pos = 0;
- _palette_changed = false;
- _num_of_dirty_rects = 0;
- _overlay_visible = false;
- _mouse_state_changed = true;
- _mouse_visible = true;
- _ms_buf = NULL;
- _curMouseState.x = 0;
- _curMouseState.y = 0;
- _curMouseState.hot_x = 0;
- _curMouseState.hot_y = 0;
- _curMouseState.w = 0;
- _curMouseState.h = 0;
- _palette16 = 0;
- _palette32 = 0;
- _bytesPerPixel = 0;
- _image = 0;
- _local_fb = 0;
- _local_fb_overlay = 0;
-}
-
-OSystem_X11::~OSystem_X11() {
- XFree(_image);
- if (_palette16)
- free(_palette16);
-
- if (_palette32)
- free(_palette32);
-
- if (_ms_buf)
- free(_ms_buf);
-
- free(_local_fb_overlay);
- free(_local_fb);
-}
-
-void OSystem_X11::initBackend() {
- char buf[512];
- XWMHints *wm_hints;
- XGCValues values;
- XTextProperty window_name;
- char *name = (char *)&buf;
- /* For the_window title */
- sprintf(buf, "ScummVM");
-
- _display = XOpenDisplay(NULL);
- if (_display == NULL) {
- error("Could not open display !\n");
- exit(1);
- }
-
- if (XShmQueryExtension(_display)!=True)
- error("No Shared Memory Extension present");
-
- _screen = DefaultScreen(_display);
- _depth = DefaultDepth(_display, _screen);
- switch (_depth) {
- case 16 :
- _bytesPerPixel = 2;
- break;
- case 24 :
- case 32 :
- _bytesPerPixel = 4;
- break;
- }
-
- if (!_bytesPerPixel)
- error("Your screen depth is %ibit. Values other than 16, 24 and 32bit are currently not supported", _depth);
-
- _window_width = 320;
- _window_height = 200;
- _scumm_x = 0;
- _scumm_y = 0;
- _window = XCreateSimpleWindow(_display, XRootWindow(_display, _screen), 0, 0, 320, 200, 0, 0, 0);
- wm_hints = XAllocWMHints();
- if (wm_hints == NULL) {
- error("Not enough memory to allocate Hints !\n");
- exit(1);
- }
- wm_hints->flags = InputHint | StateHint;
- wm_hints->input = True;
- wm_hints->initial_state = NormalState;
- XStringListToTextProperty(&name, 1, &window_name);
- XSetWMProperties(_display, _window, &window_name, &window_name,
- NULL /* argv */ , 0 /* argc */ , NULL /* size hints */ ,
- wm_hints, NULL /* class hints */ );
- XFree(wm_hints);
-
- XSelectInput(_display, _window,
- ExposureMask | KeyPressMask | KeyReleaseMask |
- PointerMotionMask | ButtonPressMask | ButtonReleaseMask | StructureNotifyMask);
-
- values.foreground = BlackPixel(_display, _screen);
- _black_gc = XCreateGC(_display, _window, GCForeground, &values);
-
- XMapWindow(_display, _window);
- XFlush(_display);
-
- _fb_width = 0;
- _fb_height = 0;
-
- if (!_palette16)
- _palette16 = (uint16 *)calloc(256, sizeof(uint16));
- if (!_palette32 && _bytesPerPixel == 4)
- _palette32 = (uint32 *)calloc(256, sizeof(uint32));
-
- while (1) {
- XEvent event;
- XNextEvent(_display, &event);
- switch (event.type) {
- case Expose:
- goto out_of_loop;
- }
- }
-out_of_loop:
- create_empty_cursor();
-
- /* Initialize the timer routines */
- _timer_active = false;
-
- /* And finally start the local timer */
- gettimeofday(&_start_time, NULL);
-
- OSystem::initBackend();
-}
-
-#undef CAPTURE_SOUND
-#define FRAG_SIZE 4096
-
-static void *sound_and_music_thread(void *params) {
- /* Init sound */
- int sound_fd, param, frag_size;
- uint8 sound_buffer[FRAG_SIZE];
- OSystem::SoundProc sound_proc = ((THREAD_PARAM *)params)->sound_proc;
- void *proc_param = ((THREAD_PARAM *)params)->param;
-
-#ifdef CAPTURE_SOUND
- FILE *f = fopen("sound.raw", "wb");
-#endif
-
- sound_fd = open("/dev/dsp", O_WRONLY);
- audio_buf_info info;
- if (sound_fd < 0) {
- warning("Error opening sound device!\n");
- return NULL;
- }
- param = 0;
- frag_size = FRAG_SIZE /* audio fragment size */ ;
- while (frag_size) {
- frag_size >>= 1;
- param++;
- }
- param--;
- param |= /* audio_fragment_num */ 3 << 16;
- if (ioctl(sound_fd, SNDCTL_DSP_SETFRAGMENT, &param) != 0) {
- warning("Error in the SNDCTL_DSP_SETFRAGMENT ioctl!\n");
- return NULL;
- }
- param = AFMT_S16_LE;
- if (ioctl(sound_fd, SNDCTL_DSP_SETFMT, &param) == -1) {
- warning("Error in the SNDCTL_DSP_SETFMT ioctl!\n");
- return NULL;
- }
- if (param != AFMT_S16_LE) {
- warning("AFMT_S16_LE not supported!\n");
- return NULL;
- }
- param = 2;
- if (ioctl(sound_fd, SNDCTL_DSP_CHANNELS, &param) == -1) {
- warning("Error in the SNDCTL_DSP_CHANNELS ioctl!\n");
- return NULL;
- }
- if (param != 2) {
- warning("Stereo mode not supported!\n");
- return NULL;
- }
- param = SAMPLES_PER_SEC;
- if (ioctl(sound_fd, SNDCTL_DSP_SPEED, &param) == -1) {
- warning("Error in the SNDCTL_DSP_SPEED ioctl!\n");
- return NULL;
- }
- if (param != SAMPLES_PER_SEC) {
- warning("%d kHz not supported!\n", SAMPLES_PER_SEC);
- return NULL;
- }
- if (ioctl(sound_fd, SNDCTL_DSP_GETOSPACE, &info) != 0) {
- warning("SNDCTL_DSP_GETOSPACE");
- return NULL;
- }
-
- sched_yield();
- while (1) {
- uint8 *buf = (uint8 *)sound_buffer;
- int size, written;
-
- sound_proc(proc_param, (byte *)sound_buffer, FRAG_SIZE);
-#ifdef CAPTURE_SOUND
- fwrite(buf, 2, FRAG_SIZE >> 1, f);
- fflush(f);
-#endif
- size = FRAG_SIZE;
- while (size > 0) {
- written = write(sound_fd, buf, size);
- buf += written;
- size -= written;
- }
- }
-
- return NULL;
-}
-
-/* Function used to hide the mouse cursor */
-void OSystem_X11::create_empty_cursor() {
- XColor bg;
- Pixmap pixmapBits;
- Cursor cursor = None;
- static const char data[] = { 0 };
-
- bg.red = bg.green = bg.blue = 0x0000;
- pixmapBits = XCreateBitmapFromData(_display, XRootWindow(_display, _screen), data, 1, 1);
- if (pixmapBits) {
- cursor = XCreatePixmapCursor(_display, pixmapBits, pixmapBits, &bg, &bg, 0, 0);
- XFreePixmap(_display, pixmapBits);
- }
- XDefineCursor(_display, _window, cursor);
-}
-
-bool OSystem_X11::hasFeature(Feature f) {
- return false;
-}
-
-void OSystem_X11::setFeatureState(Feature f, bool enable) {
-}
-
-bool OSystem_X11::getFeatureState(Feature f) {
- return false;
-}
-
-const OSystem::GraphicsMode *OSystem_X11::getSupportedGraphicsModes() const {
- static const OSystem::GraphicsMode mode = {"1x", "Normal mode", 0};
- return &mode;
-}
-
-int OSystem_X11::getDefaultGraphicsMode() const {
- return 0;
-}
-
-bool OSystem_X11::setGraphicsMode(int mode) {
- return (mode == 0);
-}
-
-int OSystem_X11::getGraphicsMode() const {
- return 0;
-}
-
-
-uint32 OSystem_X11::getMillis() {
- struct timeval current_time;
- gettimeofday(&current_time, NULL);
- return (uint32)(((current_time.tv_sec - _start_time.tv_sec) * 1000) +
- ((current_time.tv_usec - _start_time.tv_usec) / 1000));
-}
-
-void OSystem_X11::initSize(uint w, uint h) {
- //debug("initSize(%i, %i)", w, h);
- static XShmSegmentInfo shminfo;
-
- if (((uint)_fb_width != w) || ((uint)_fb_height != w)) {
- _fb_width = w;
- _fb_height = h;
-
- /* We need to change the size of the X11_window */
- XWindowChanges new_values;
-
- new_values.width = _fb_width;
- new_values.height = _fb_height;
-
- XConfigureWindow(_display,_window, CWWidth | CWHeight, &new_values);
-
- if (_image)
- XFree(_image);
- _image = XShmCreateImage(_display, DefaultVisual(_display, _screen), _depth, ZPixmap, NULL, &shminfo,_fb_width,_fb_height);
- if (!_image)
- error("Couldn't get image by XShmCreateImage()");
-
- shminfo.shmid = shmget(IPC_PRIVATE, _image->bytes_per_line * _image->height, IPC_CREAT | 0700);
- if (shminfo.shmid < 0)
- error("Couldn't allocate image data by shmget()");
-
- _image->data = shminfo.shmaddr = (char *)shmat(shminfo.shmid, 0, 0);
- shminfo.readOnly = False;
- if (XShmAttach(_display, &shminfo) == 0) {
- error("Could not attach shared memory segment !\n");
- exit(1);
- }
- shmctl(shminfo.shmid, IPC_RMID, 0);
-
- if (_local_fb)
- free(_local_fb);
- if (_local_fb_overlay)
- free(_local_fb_overlay);
- /* Initialize the 'local' frame buffer and the palette */
- _local_fb = (uint8 *)calloc(_fb_width * _fb_height, sizeof(uint8));
- _local_fb_overlay = (uint16 *)calloc(_fb_width * _fb_height, sizeof(uint16));
-
- }
-}
-
-bool OSystem_X11::setSoundCallback(SoundProc proc, void *param) {
- static THREAD_PARAM thread_param;
-
- /* And finally start the music thread */
- thread_param.param = param;
- thread_param.sound_proc = proc;
-
- pthread_create(&_sound_thread, NULL, sound_and_music_thread, (void *)&thread_param);
-
- return true;
-}
-
-void OSystem_X11::clearSoundCallback() {
- // TODO implement this...
- // The sound_thread has to be stopped in a nice way. In particular,
- // using pthread_kill would be a bad idea. Rather, use pthread_cancel,
- // or maybe a global variable, to achieve this.
- // This method shouldn't return until the sound thread really has stopped.
-}
-
-
-void OSystem_X11::setPalette(const byte *colors, uint start, uint num) {
- uint16 *pal = &(_palette16[start]);
- const byte *data = colors;
-
- if (_bytesPerPixel == 4) {
- for (uint i = start; i < start+num; i++) {
- //_palette32[i] = ((uint32 *)colors)[i];
- _palette32[i] = (colors[i * 4 + 0] << 16) | (colors[i * 4 + 1] << 8) | (colors[i * 4 + 2] << 0);
- }
- }
-
- do {
- *pal++ = ((data[0] & 0xF8) << 8) | ((data[1] & 0xFC) << 3) | (data[2] >> 3);
- data += 4;
- num--;
- } while (num > 0);
-
- _palette_changed = true;
-}
-
-#define AddDirtyRec(xi,yi,wi,hi) \
- if (_num_of_dirty_rects < MAX_NUMBER_OF_DIRTY_RECTS) { \
- _ds[_num_of_dirty_rects].x = xi; \
- _ds[_num_of_dirty_rects].y = yi; \
- _ds[_num_of_dirty_rects].w = wi; \
- _ds[_num_of_dirty_rects].h = hi; \
- _num_of_dirty_rects++; \
- }
-
-void OSystem_X11::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
- uint8 *dst;
-
- if (y < 0) {
- h += y;
- buf -= y * pitch;
- y = 0;
- }
- if (h > (_fb_height - y)) {
- h = _fb_height - y;
- }
-
- dst = _local_fb + _fb_width * y + x;
-
- if (h <= 0)
- return;
-
- AddDirtyRec(x, y, w, h);
- while (h-- > 0) {
- memcpy(dst, buf, w);
- dst +=_fb_width;
- buf += pitch;
- }
-}
-
-void OSystem_X11::blit(const DirtyRect *d, uint16 *dst, int pitch) {
- uint8 *ptr_src = _local_fb + (_fb_width * d->y) + d->x;
- uint16 *ptr_dst = dst + ((_fb_width * d->y) + d->x);
- int x, y;
-
- for (y = 0; y < d->h; y++) {
- for (x = 0; x < d->w; x++) {
- *ptr_dst++ = _palette16[*ptr_src++];
- }
- ptr_dst += pitch - d->w;
- ptr_src +=_fb_width - d->w;
- }
-}
-
-void OSystem_X11::blit_convert(const DirtyRect *d, uint8 *dst, int pitch) {
- uint8 *ptr_src = _local_fb + (_fb_width * d->y) + d->x;
- uint8 *ptr_dst = dst + ((_fb_width * d->y) + d->x) * _bytesPerPixel;
- int x, y;
-
- switch (_bytesPerPixel) {
- case 2:
- for (y = 0; y < d->h; y++) {
- for (x = 0; x < d->w; x++) {
- *ptr_dst = _palette16[*ptr_src++];
- ptr_dst += _bytesPerPixel;
- }
- ptr_dst += (pitch - d->w) * _bytesPerPixel;
- ptr_src +=_fb_width - d->w;
- }
- break;
- case 4:
- for (y = 0; y < d->h; y++) {
- for (x = 0; x < d->w; x++) {
- *(uint32 *)ptr_dst = _palette32[*ptr_src];
- ptr_dst += _bytesPerPixel;
- ptr_src++;
- }
- ptr_dst += (pitch - d->w) * _bytesPerPixel;
- ptr_src += _fb_width - d->w;
- }
- }
-}
-
-void OSystem_X11::updateScreen_helper(const DirtyRect *d, DirtyRect *dout) {
-
- if (_overlay_visible == false) {
- blit_convert(d, (uint8 *)_image->data, _fb_width);
- } else {
- uint16 *ptr_src = _local_fb_overlay + (_fb_width * d->y) + d->x;
- uint8 *ptr_dst = (uint8 *)_image->data + ((_fb_width * d->y) + d->x) * _bytesPerPixel;
-
- int y;
-
- switch (_bytesPerPixel) {
- case 2:
- for (y = 0; y < d->h; y++) {
- memcpy(ptr_dst, ptr_src, d->w * sizeof(uint16));
- ptr_dst += _fb_width * sizeof(uint16);
- ptr_src += _fb_width;
- }
- break;
- case 4:
- uint16 currLine, x;
- register uint16 currPixel;
- for (y = d->y; y < d->y + d->h; y++) {
- currLine = y * _fb_width;
- for (x = d->x; x < d->x + d->w; x++) {
- currPixel = _local_fb_overlay[(currLine + x)];
- *(uint32 *)ptr_dst = ((currPixel & 0xF800) << 8) + ((currPixel & 0x07E0) << 5) +
- ((currPixel & 0x001F) << 3);
- ptr_dst += sizeof(uint32);
- }
- ptr_dst += (_fb_width - d->w) * _bytesPerPixel;
- }
-
- }
- }
- if (d->x < dout->x)
- dout->x = d->x;
- if (d->y < dout->y)
- dout->y = d->y;
- if ((d->x + d->w) > dout->w)
- dout->w = d->x + d->w;
- if ((d->y + d->h) > dout->h)
- dout->h = d->y + d->h;
-}
-
-void OSystem_X11::updateScreen() {
- bool full_redraw = false;
- bool need_redraw = false;
- static const DirtyRect ds_full = { 0, 0, _fb_width, _fb_height };
- DirtyRect dout = {_fb_width, _fb_height, 0, 0 };
-
- if (_palette_changed) {
- full_redraw = true;
- _num_of_dirty_rects = 0;
- _palette_changed = false;
- } else if (_num_of_dirty_rects >= MAX_NUMBER_OF_DIRTY_RECTS) {
- full_redraw = true;
- _num_of_dirty_rects = 0;
- }
-
- if (full_redraw) {
- updateScreen_helper(&ds_full, &dout);
- need_redraw = true;
- } else if ((_num_of_dirty_rects > 0) || (_mouse_state_changed == true)) {
- need_redraw = true;
- while (_num_of_dirty_rects > 0) {
- _num_of_dirty_rects--;
- updateScreen_helper(&(_ds[_num_of_dirty_rects]), &dout);
- }
- }
-
- /* Then 'overlay' the mouse on the image */
- draw_mouse(&dout);
-
- if (_current_shake_pos != _new_shake_pos) {
- /* Redraw first the 'black borders' in case of resize */
- if (_current_shake_pos < _new_shake_pos)
- XFillRectangle(_display,_window, _black_gc, 0, _current_shake_pos, _window_width, _new_shake_pos);
- else
- XFillRectangle(_display,_window, _black_gc, 0, _window_height - _current_shake_pos,
- _window_width,_window_height - _new_shake_pos);
- XShmPutImage(_display, _window, DefaultGC(_display, _screen), _image,
- 0, 0, _scumm_x, _scumm_y + _new_shake_pos, _fb_width, _fb_height, 0);
- _current_shake_pos = _new_shake_pos;
- } else if (need_redraw == true) {
- XShmPutImage(_display, _window, DefaultGC(_display, _screen), _image,
- dout.x, dout.y, _scumm_x + dout.x, _scumm_y + dout.y + _current_shake_pos,
- dout.w - dout.x, dout.h - dout.y, 0);
- XFlush(_display);
- }
-}
-
-bool OSystem_X11::showMouse(bool visible)
-{
- if (_mouse_visible == visible)
- return visible;
-
- bool last = _mouse_visible;
- _mouse_visible = visible;
-
- if ((visible == false) && (_mouse_state_changed == false)) {
- undraw_mouse();
- }
- _mouse_state_changed = true;
-
- return last;
-}
-
-void OSystem_X11::quit() {
- exit(0);
-}
-
-void OSystem_X11::setWindowCaption(const char *caption) {
- //debug("setWindowCaption('%s')", caption);
-}
-
-void OSystem_X11::undraw_mouse() {
- AddDirtyRec(_oldMouseState.x, _oldMouseState.y, _oldMouseState.w, _oldMouseState.h);
-}
-
-void OSystem_X11::draw_mouse(DirtyRect *dout) {
- //debug("draw_mouse()");
- _mouse_state_changed = false;
-
- if (_mouse_visible == false)
- return;
-
- int xdraw = _curMouseState.x - _curMouseState.hot_x;
- int ydraw = _curMouseState.y - _curMouseState.hot_y;
- int w = _curMouseState.w;
- int h = _curMouseState.h;
- int real_w;
- int real_h;
-
- uint8 *dst;
- const byte *buf = _ms_buf;
-
- if (ydraw < 0) {
- real_h = h + ydraw;
- buf += (-ydraw) * w;
- ydraw = 0;
- } else {
- real_h = (ydraw + h) > _fb_height ? (_fb_height - ydraw) : h;
- }
- if (xdraw < 0) {
- real_w = w + xdraw;
- buf += (-xdraw);
- xdraw = 0;
- } else {
- real_w = (xdraw + w) > _fb_width ? (_fb_width - xdraw) : w;
- }
-
- dst = (uint8 *)_image->data + ((ydraw *_fb_width) + xdraw) * _bytesPerPixel;
-
- if ((real_h == 0) || (real_w == 0)) {
- return;
- }
-
-
- if (xdraw < dout->x)
- dout->x = xdraw;
- if (ydraw < dout->y)
- dout->y = ydraw;
- if ((xdraw + real_w) > dout->w)
- dout->w = xdraw + real_w;
- if ((ydraw + real_h) > dout->h)
- dout->h = ydraw + real_h;
-
- _oldMouseState.x = xdraw;
- _oldMouseState.y = ydraw;
- _oldMouseState.w = real_w;
- _oldMouseState.h = real_h;
-
- while (real_h > 0) {
- int width = real_w;
- while (width > 0) {
- byte color = *buf;
- if (color != _mouseKeycolor) {
- if (_depth == 16)
- *(uint16 *)dst = _palette16[color];
- else {
- *(uint32 *)dst = _palette32[color];
- }
- }
- buf++;
- dst += _bytesPerPixel;
- width--;
- }
- buf += w - real_w;
- dst += (_fb_width - real_w) * _bytesPerPixel;
- real_h--;
- }
-}
-
-void OSystem_X11::set_mouse_pos(int x, int y) {
- if ((x != _curMouseState.x) || (y != _curMouseState.y)) {
- _curMouseState.x = x;
- _curMouseState.y = y;
- if (_mouse_state_changed == false) {
- undraw_mouse();
- }
- _mouse_state_changed = true;
- }
-}
-
-void OSystem_X11::warpMouse(int x, int y) {
- set_mouse_pos(x, y);
-}
-
-void OSystem_X11::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale) {
- _curMouseState.w = w;
- _curMouseState.h = h;
- _curMouseState.hot_x = hotspot_x;
- _curMouseState.hot_y = hotspot_y;
-
- if (_ms_buf)
- free(_ms_buf);
- _ms_buf = (byte *) malloc(w * h);
- memcpy(_ms_buf, buf, w * h);
-
- if (_mouse_state_changed == false) {
- undraw_mouse();
- }
- _mouseKeycolor = keycolor;
- _mouse_state_changed = true;
-}
-
-void OSystem_X11::setShakePos(int shake_pos) {
- if (_new_shake_pos != shake_pos) {
- if (_mouse_state_changed == false) {
- undraw_mouse();
- }
- _mouse_state_changed = true;
- }
- _new_shake_pos = shake_pos;
-}
-
-int OSystem_X11::getOutputSampleRate() const {
- return SAMPLES_PER_SEC;
-}
-
-void OSystem_X11::delayMillis(uint msecs) {
- usleep(msecs * 1000);
-}
-
-bool OSystem_X11::pollEvent(Common::Event &scumm_event) {
- /* First, handle timers */
- uint32 current_msecs = getMillis();
-
- if (_timer_active && (current_msecs >= _timer_next_expiry)) {
- _timer_duration = _timer_callback(_timer_duration);
- _timer_next_expiry = current_msecs + _timer_duration;
- }
-
- while (XPending(_display)) {
- XEvent event;
-
- XNextEvent(_display, &event);
- switch (event.type) {
- case Expose:{
- int real_w, real_h;
- int real_x, real_y;
- real_x = event.xexpose.x;
- real_y = event.xexpose.y;
- real_w = event.xexpose.width;
- real_h = event.xexpose.height;
- if (real_x < _scumm_x) {
- real_w -= _scumm_x - real_x;
- real_x = 0;
- } else {
- real_x -= _scumm_x;
- }
- if (real_y < _scumm_y) {
- real_h -= _scumm_y - real_y;
- real_y = 0;
- } else {
- real_y -= _scumm_y;
- }
- if ((real_h <= 0) || (real_w <= 0))
- break;
- if ((real_x >=_fb_width) || (real_y >=_fb_height))
- break;
-
- if ((real_x + real_w) >=_fb_width) {
- real_w =_fb_width - real_x;
- }
- if ((real_y + real_h) >=_fb_height) {
- real_h =_fb_height - real_y;
- }
-
- /* Compute the intersection of the expose event with the real ScummVM display zone */
- AddDirtyRec(real_x, real_y, real_w, real_h);
- }
- break;
-
- case KeyPress:{
- /* I am using keycodes here and NOT keysyms to be sure that even if the user
- remaps his iPAQ's keyboard, it will still work.
- */
- int keycode = -1;
- int ascii = -1;
- byte mode = 0;
-
- if (event.xkey.state & 0x01)
- mode |= Common::KBD_SHIFT;
- if (event.xkey.state & 0x04)
- mode |= Common::KBD_CTRL;
- if (event.xkey.state & 0x08)
- mode |= Common::KBD_ALT;
- switch (event.xkey.keycode) {
-
- case 9: /* Escape on my PC */
- case 130: /* Calendar on the iPAQ */
- keycode = 27;
- break;
-
- case 71: /* F5 on my PC */
- case 128: /* Record on the iPAQ */
- keycode = 319;
- break;
-
- case 65: /* Space on my PC */
- case 131: /* Schedule on the iPAQ */
- keycode = 32;
- break;
-
- case 132:
- _report_presses = 0;
- break;
-
- case 133:
- _fake_right_mouse = 1;
- break;
-
- default:{
- KeySym xsym;
- xsym = XKeycodeToKeysym(_display, event.xkey.keycode, 0);
- keycode = xsym;
- if ((xsym >= 'a') && (xsym <= 'z') && (event.xkey.state & 0x01))
- xsym &= ~0x20; /* Handle shifted keys */
- ascii = xsym;
- }
- }
- if (keycode != -1) {
- scumm_event.type = Common::EVENT_KEYDOWN;
- scumm_event.kbd.keycode = keycode;
- scumm_event.kbd.ascii = (ascii != -1 ? ascii : keycode);
- scumm_event.kbd.flags = mode;
- return true;
- }
- }
- break;
-
- case KeyRelease:{
- /* I am using keycodes here and NOT keysyms to be sure that even if the user
- remaps his iPAQ's keyboard, it will still work.
- */
- int keycode = -1;
- int ascii = -1;
- byte mode = 0;
-
- if (event.xkey.state & 0x01)
- mode |= Common::KBD_SHIFT;
- if (event.xkey.state & 0x04)
- mode |= Common::KBD_CTRL;
- if (event.xkey.state & 0x08)
- mode |= Common::KBD_ALT;
- switch (event.xkey.keycode) {
- case 132: /* 'Q' on the iPAQ */
- _report_presses = 1;
- break;
-
- case 133: /* Arrow on the iPAQ */
- _fake_right_mouse = 0;
- break;
-
- default:{
- KeySym xsym;
- xsym = XKeycodeToKeysym(_display, event.xkey.keycode, 0);
- keycode = xsym;
- if ((xsym >= 'a') && (xsym <= 'z') && (event.xkey.state & 0x01))
- xsym &= ~0x20; /* Handle shifted keys */
- ascii = xsym;
- }
- }
- if (keycode != -1) {
- scumm_event.type = Common::EVENT_KEYUP;
- scumm_event.kbd.keycode = keycode;
- scumm_event.kbd.ascii = (ascii != -1 ? ascii : keycode);
- scumm_event.kbd.flags = mode;
- return true;
- }
- }
- break;
-
- case ButtonPress:
- if (_report_presses != 0) {
- if (event.xbutton.button == 1) {
- if (_fake_right_mouse == 0) {
- scumm_event.type = Common::EVENT_LBUTTONDOWN;
- } else {
- scumm_event.type = Common::EVENT_RBUTTONDOWN;
- }
- } else if (event.xbutton.button == 3)
- scumm_event.type = Common::EVENT_RBUTTONDOWN;
- scumm_event.mouse.x = event.xbutton.x - _scumm_x;
- scumm_event.mouse.y = event.xbutton.y - _scumm_y;
- return true;
- }
- break;
-
- case ButtonRelease:
- if (_report_presses != 0) {
- if (event.xbutton.button == 1) {
- if (_fake_right_mouse == 0) {
- scumm_event.type = Common::EVENT_LBUTTONUP;
- } else {
- scumm_event.type = Common::EVENT_RBUTTONUP;
- }
- } else if (event.xbutton.button == 3)
- scumm_event.type = Common::EVENT_RBUTTONUP;
- scumm_event.mouse.x = event.xbutton.x - _scumm_x;
- scumm_event.mouse.y = event.xbutton.y - _scumm_y;
- return true;
- }
- break;
-
- case MotionNotify:
- scumm_event.type = Common::EVENT_MOUSEMOVE;
- scumm_event.mouse.x = event.xmotion.x - _scumm_x;
- scumm_event.mouse.y = event.xmotion.y - _scumm_y;
- set_mouse_pos(scumm_event.mouse.x, scumm_event.mouse.y);
- return true;
-
- case ConfigureNotify:{
- if ((_window_width != event.xconfigure.width) || (_window_height != event.xconfigure.height)) {
- _window_width = event.xconfigure.width;
- _window_height = event.xconfigure.height;
- _scumm_x = (_window_width -_fb_width) / 2;
- _scumm_y = (_window_height -_fb_height) / 2;
- XFillRectangle(_display, _window, _black_gc, 0, 0, _window_width, _window_height);
- }
- }
- break;
-
- default:
- printf("Unhandled event : %d\n", event.type);
- break;
- }
- }
-
- return false;
-}
-
-void OSystem_X11::setTimerCallback(TimerProc callback, int interval) {
- if (callback != NULL) {
- _timer_duration = interval;
- _timer_next_expiry = getMillis() + interval;
- _timer_callback = callback;
- _timer_active = true;
- } else {
- _timer_active = false;
- }
-}
-
-OSystem::MutexRef OSystem_X11::createMutex(void) {
- pthread_mutex_t *mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
- pthread_mutex_init(mutex, NULL);
- return (MutexRef)mutex;
-}
-
-void OSystem_X11::lockMutex(MutexRef mutex) {
- pthread_mutex_lock((pthread_mutex_t *) mutex);
-}
-
-void OSystem_X11::unlockMutex(MutexRef mutex) {
- pthread_mutex_unlock((pthread_mutex_t *) mutex);
-}
-
-void OSystem_X11::deleteMutex(MutexRef mutex) {
- pthread_mutex_destroy((pthread_mutex_t *) mutex);
- free(mutex);
-}
-
-void OSystem_X11::showOverlay() {
- _overlay_visible = true;
-}
-
-void OSystem_X11::hideOverlay() {
- _overlay_visible = false;
- _palette_changed = true; // This is to force a full redraw to hide the overlay
-}
-
-void OSystem_X11::clearOverlay() {
- if (_overlay_visible == false)
- return;
- DirtyRect d = { 0, 0, _fb_width, _fb_height };
- AddDirtyRec(0, 0, _fb_width, _fb_height);
- blit(&d, _local_fb_overlay, _fb_width);
-}
-
-void OSystem_X11::grabOverlay(int16 *dest, int pitch) {
- if (_overlay_visible == false)
- return;
-
- DirtyRect d = { 0, 0, _fb_width, _fb_height };
- blit(&d, (uint16 *)dest, pitch);
-}
-
-void OSystem_X11::copyRectToOverlay(const int16 *src, int pitch, int x, int y, int w, int h) {
- if (_overlay_visible == false)
- return;
- uint16 *dst = _local_fb_overlay + x + (y * _fb_width);
- AddDirtyRec(x, y, w, h);
- while (h > 0) {
- memcpy(dst, src, w * sizeof(*dst));
- dst +=_fb_width;
- src += pitch;
- h--;
- }
-}
-
-int16 OSystem_X11::getHeight() {
- return _fb_height;
-}
-
-int16 OSystem_X11::getWidth() {
- return _fb_width;
-}
-
-void OSystem_X11::grabPalette(byte *colors, uint start, uint num) {
- warning("Dummy: grabPalette()");
-}
diff --git a/backends/platform/x11/x11.h b/backends/platform/x11/x11.h
deleted file mode 100644
index bf5da5745a..0000000000
--- a/backends/platform/x11/x11.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-class OSystem_X11:public OSystem {
-public:
- OSystem_X11();
- ~OSystem_X11();
-
- void initBackend();
-
- // Determine whether the backend supports the specified feature.
- bool hasFeature(Feature f);
-
- // En-/disable the specified feature.
- void setFeatureState(Feature f, bool enable);
-
- // Query the state of the specified feature.
- bool getFeatureState(Feature f);
-
- // Retrieve a list of all graphics modes supported by this backend.
- const GraphicsMode *getSupportedGraphicsModes() const;
-
- // Return the ID of the 'default' graphics mode.
- int getDefaultGraphicsMode() const;
-
- // Switch to the specified graphics mode.
- bool setGraphicsMode(int mode);
-
- // Determine which graphics mode is currently active.
- int getGraphicsMode() const;
-
- // Set colors of the palette
- void setPalette(const byte *colors, uint start, uint num);
-
- // Set the size of the video bitmap.
- // Typically, 320x200
- void initSize(uint w, uint h);
-
- // Draw a bitmap to screen.
- // The screen will not be updated to reflect the new bitmap
- void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
-
- // Update the dirty areas of the screen
- void updateScreen();
-
- // Either show or hide the mouse cursor
- bool showMouse(bool visible);
-
- // Set the position of the mouse cursor
- void set_mouse_pos(int x, int y);
-
- // Warp the mouse cursor. Where set_mouse_pos() only informs the
- // backend of the mouse cursor's current position, this function
- // actually moves the cursor to the specified position.
- void warpMouse(int x, int y);
-
- // Set the bitmap that's used when drawing the cursor.
- void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1);
-
- // Shaking is used in SCUMM. Set current shake position.
- void setShakePos(int shake_pos);
-
- // Get the number of milliseconds since the program was started.
- uint32 getMillis();
-
- // Delay for a specified amount of milliseconds
- void delayMillis(uint msecs);
-
- // Get the next event.
- // Returns true if an event was retrieved.
- bool pollEvent(Common::Event &event);
-
- // Set function that generates samples
- bool setSoundCallback(SoundProc proc, void *param);
- void clearSoundCallback();
-
- // Determine the output sample rate. Audio data provided by the sound
- // callback will be played using this rate.
- int getOutputSampleRate() const;
-
- // Quit
- void quit();
-
- // Add a callback timer
- void setTimerCallback(TimerProc callback, int interval);
-
- // Mutex handling
- MutexRef createMutex();
- void lockMutex(MutexRef mutex);
- void unlockMutex(MutexRef mutex);
- void deleteMutex(MutexRef mutex);
-
- // Overlay handling for the new menu system
- void showOverlay();
- void hideOverlay();
- void clearOverlay();
- void grabOverlay(int16 *, int);
- void copyRectToOverlay(const int16 *, int, int, int, int, int);
- virtual int16 getHeight();
- virtual int16 getWidth();
-
- virtual void grabPalette(byte *colors, uint start, uint num);
-
- // Set a window caption or any other comparable status display to the
- // given value.
- void setWindowCaption(const char *caption);
-
- static OSystem *create(int gfx_mode, bool full_screen);
-
-private:
- typedef struct {
- int x, y;
- int w, h;
- int hot_x, hot_y;
- } MouseState;
-
- typedef struct {
- int x, y, w, h;
- } DirtyRect;
-
- enum {
- MAX_NUMBER_OF_DIRTY_RECTS = 32
- };
-
- void create_empty_cursor();
- void draw_mouse(DirtyRect *dout);
- void undraw_mouse();
- void updateScreen_helper(const DirtyRect *d, DirtyRect *dout);
- void blit_convert(const DirtyRect *d, uint8 *dst, int pitch);
- void blit(const DirtyRect *d, uint16 *dst, int pitch);
-
- uint8 *_local_fb;
- uint16 *_local_fb_overlay;
- bool _overlay_visible;
-
- int _window_width, _window_height;
- int _fb_width, _fb_height;
- int _scumm_x, _scumm_y;
-
- uint16 *_palette16;
- uint32 *_palette32;
-
- bool _palette_changed;
- Display *_display;
- int _screen, _depth;
- uint8 _bytesPerPixel;
- Window _window;
- GC _black_gc;
- XImage *_image;
- pthread_t _sound_thread;
-
- struct timeval _start_time;
-
- int _fake_right_mouse;
- int _report_presses;
- int _current_shake_pos;
- int _new_shake_pos;
- DirtyRect _ds[MAX_NUMBER_OF_DIRTY_RECTS];
- int _num_of_dirty_rects;
-
- MouseState _oldMouseState, _curMouseState;
- byte *_ms_buf;
- bool _mouse_visible;
- bool _mouse_state_changed;
- byte _mouseKeycolor;
-
- uint32 _timer_duration, _timer_next_expiry;
- bool _timer_active;
- int (*_timer_callback) (int);
-};
-
-typedef struct {
- OSystem::SoundProc sound_proc;
- void *param;
-} THREAD_PARAM;