diff options
Diffstat (limited to 'backends/platform/symbian')
| -rw-r--r-- | backends/platform/symbian/AdaptAllMMPs.pl | 5 | ||||
| -rw-r--r-- | backends/platform/symbian/BuildPackageUpload_LocalSettings.pl | 43 | ||||
| -rw-r--r-- | backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in | 3 | ||||
| -rw-r--r-- | backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in | 3 | ||||
| -rw-r--r-- | backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in | 9 | ||||
| -rw-r--r-- | backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in | 8 | ||||
| -rw-r--r-- | backends/platform/symbian/mmp/scummvm_base.mmp.in | 12 | ||||
| -rw-r--r-- | backends/platform/symbian/src/SymbianOS.cpp | 465 | ||||
| -rw-r--r-- | backends/platform/symbian/src/SymbianOS.h | 118 | ||||
| -rw-r--r-- | backends/platform/symbian/src/Symbianmain.cpp | 99 |
10 files changed, 238 insertions, 527 deletions
diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl index 2fba99b873..a4fdd669ca 100644 --- a/backends/platform/symbian/AdaptAllMMPs.pl +++ b/backends/platform/symbian/AdaptAllMMPs.pl @@ -91,9 +91,6 @@ my @excludes_graphics = ( "iff.cpp" ); -my @excludes_gui = ( -); - # the USE_ARM_* defines not parsed correctly, exclude manually: my @excludes_scumm = ( ".*ARM.*", # the *ARM.s files are added in .mpp files based on WINS/ARM build! @@ -106,7 +103,7 @@ my @excludes_scumm = ( #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, \@excludes_gui); +ParseModule("_base", "gui", \@section_empty); ParseModule("_base", "graphics", \@section_empty, \@excludes_graphics); ParseModule("_base", "sound", \@section_empty, \@excludes_snd); diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl index cd107f59ca..a9e7aa562a 100644 --- a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl +++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl @@ -42,12 +42,12 @@ 'zlib' => 'zlib.lib', 'mad' => 'libmad.lib', 'tremor' => 'libtremor.lib', - 'mpeg2' => 'libmpeg2.lib' + 'flac' => 'libflac.lib' ); # these are normally enabled for each variation #$DefaultFeatures = qw(zlib,mad); - $DefaultFeatures = qw(zlib,mad,tremor); + $DefaultFeatures = qw(zlib,mad,tremor,flac); ################################################################################################################## ## @@ -229,6 +229,45 @@ # now you can add $VariationSets only built on this PC below this line :) } + elsif ($ENV{'COMPUTERNAME'} eq "EMBEDDEV_VAIO1") ################################################################# + { + $Producer = "AnotherGuest"; + $RedirectSTDERR = 1; + $HaltOnError = 0; + $SkipExistingPackages = 1; + $ReallyQuiet = 1; + + #$FTP_Host = "host.com"; + #$FTP_User = "ag@host.com"; + #$FTP_Pass = "password"; + #$FTP_Dir = "cvsbuilds"; + + #$SDK_RootDirs{'UIQ2'}= "D:\\UIQ2"; + $SDK_RootDirs{'UIQ3'}= "G:\\UIQ3"; + #$SDK_RootDirs{'S60v1'}= "D:\\S60v1"; + #$SDK_RootDirs{'S60v2'}= "D:\\S60v2"; + $SDK_RootDirs{'S60v3'}= "G:\\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"; +# $SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\tremor\\epoc"; + $SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ"; + $SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60"; + $SDK_LibraryDirs{'S80'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S80"; + $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S90"; + $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60\\S60V3"; + $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 $VariationSets only built on this PC below this line :) + + } + else ######################################################################################################### { print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!"; diff --git a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in index 2916d73938..1c35f7d4cc 100644 --- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in @@ -112,14 +112,13 @@ SOURCEPATH ..\..\..\..\base SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes -SOURCE backends\platform\sdl\events.cpp -SOURCE backends\platform\sdl\graphics.cpp SOURCE backends\platform\sdl\hardwarekeys.cpp SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp SOURCE backends\platform\symbian\src\SymbianActions.cpp SOURCE backends\platform\symbian\src\ScummApp.cpp +SOURCE backends\platform\symbian\src\SymbianMain.cpp SOURCE gui\Key.cpp SOURCE gui\KeysDialog.cpp diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in index e95bb9ee21..eefdb23382 100644 --- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in @@ -112,14 +112,13 @@ SOURCEPATH ..\..\..\..\base SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes -SOURCE backends\platform\sdl\events.cpp -SOURCE backends\platform\sdl\graphics.cpp SOURCE backends\platform\sdl\hardwarekeys.cpp SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp SOURCE backends\platform\symbian\src\SymbianActions.cpp SOURCE backends\platform\symbian\src\ScummApp.cpp +SOURCE backends\platform\symbian\src\SymbianMain.cpp SOURCE gui\Key.cpp SOURCE gui\KeysDialog.cpp diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in index bd65c3b5e7..e706612c72 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in @@ -36,7 +36,6 @@ TARGET ScummVM_A0000658.exe TARGETPATH sys\bin TARGETTYPE exe - OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char UID 0x100039ce 0xA0000658 @@ -113,20 +112,22 @@ SOURCEPATH ..\..\..\..\base SOURCEPATH ..\..\..\..\ // backend EPOC/SDL/ESDL specific includes -SOURCE backends\platform\sdl\events.cpp -SOURCE backends\platform\sdl\graphics.cpp -SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\platform\sdl\hardwarekeys.cpp +SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp SOURCE backends\platform\symbian\src\SymbianActions.cpp SOURCE backends\platform\symbian\src\ScummApp.cpp +SOURCE backends\platform\symbian\src\SymbianMain.cpp SOURCE gui\Key.cpp SOURCE gui\KeysDialog.cpp SOURCE gui\Actions.cpp SOURCE gui\Dialog.cpp +// Common error +source common\error.cpp + // Special for graphics source graphics\iff.cpp diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in index 34207df5cf..c1ecc22ebb 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in @@ -113,20 +113,22 @@ SOURCEPATH ..\..\..\..\base SOURCEPATH ..\..\..\..\ // backend EPOC/SDL/ESDL specific includes -SOURCE backends\platform\sdl\events.cpp -SOURCE backends\platform\sdl\graphics.cpp -SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\platform\sdl\hardwarekeys.cpp +SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp SOURCE backends\platform\symbian\src\SymbianActions.cpp SOURCE backends\platform\symbian\src\ScummApp.cpp +SOURCE backends\platform\symbian\src\SymbianMain.cpp SOURCE gui\Key.cpp SOURCE gui\KeysDialog.cpp SOURCE gui\Actions.cpp SOURCE gui\Dialog.cpp +// Common error +source common\error.cpp + // Special for graphics source graphics\iff.cpp diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in index c178440fa9..44feda064b 100644 --- a/backends/platform/symbian/mmp/scummvm_base.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -120,12 +120,24 @@ SOURCE engines\game.cpp SOURCE engines\advanceddetector.cpp SOURCE engines\savestate.cpp // backend specific includes +SOURCE backends\modular-backend.cpp +SOURCE backends\audiocd\default\default-audiocd.cpp +SOURCE backends\audiocd\sdl\sdl-audiocd.cpp +SOURCE backends\events\sdl\sdl-events.cpp +SOURCE backends\events\symbiansdl\symbiansdl-events.cpp SOURCE backends\fs\abstract-fs.cpp SOURCE backends\fs\symbian\symbianstream.cpp +SOURCE backends\graphics\sdl\sdl-graphics.cpp +SOURCE backends\graphics\symbiansdl\symbiansdl-graphics.cpp SOURCE backends\keymapper\action.cpp SOURCE backends\keymapper\keymap.cpp SOURCE backends\keymapper\keymapper.cpp SOURCE backends\keymapper\remap-dialog.cpp +SOURCE backends\mixer\sdl\sdl-mixer.cpp +SOURCE backends\mixer\symbiansdl\symbiansdl-mixer.cpp +SOURCE backends\mutex\sdl\sdl-mutex.cpp +SOURCE backends\timer\sdl\sdl-timer.cpp + // Source files for virtual keyboard SOURCE backends\vkeybd\image-map.cpp SOURCE backends\vkeybd\polygon.cpp diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp index d63c9fe044..3a0dc318b3 100644 --- a/backends/platform/symbian/src/SymbianOS.cpp +++ b/backends/platform/symbian/src/SymbianOS.cpp @@ -26,26 +26,17 @@ #include <sdlapp.h> // for CSDLApp::GetExecutablePathCStr() @ Symbian::GetExecutablePath() #include <bautils.h> -#include "backends/fs/symbian/symbian-fs-factory.h" #include "backends/platform/symbian/src/SymbianOS.h" #include "backends/platform/symbian/src/SymbianActions.h" -#include "backends/saves/default/default-saves.h" - -#include "base/main.h" - #include "common/config-manager.h" #include "common/scummsys.h" -#include "common/translation.h" - #include "gui/message.h" -#include "sound/mixer_intern.h" - -#ifdef SAMPLES_PER_SEC_8000 // the GreanSymbianMMP format cannot handle values for defines :( - #define SAMPLES_PER_SEC 8000 -#else - #define SAMPLES_PER_SEC 16000 -#endif +#include "backends/fs/symbian/symbian-fs-factory.h" +#include "backends/saves/default/default-saves.h" +#include "backends/events/symbiansdl/symbiansdl-events.h" +#include "backends/graphics/symbiansdl/symbiansdl-graphics.h" +#include "backends/mixer/symbiansdl/symbiansdl-mixer.h" #define DEFAULT_CONFIG_FILE "scummvm.ini" #define DEFAULT_SAVE_PATH "Savegames" @@ -58,8 +49,7 @@ void FatalError(const char *msg) { TPtrC8 msgPtr((const TUint8 *)msg); TBuf<512> msg16Bit; msg16Bit.Copy(msgPtr); -#ifdef S60 -#else +#ifndef S60 CEikonEnv::Static()->InfoWinL(_L("ScummVM Fatal Error"), msg16Bit); #endif if (g_system) @@ -67,7 +57,7 @@ void FatalError(const char *msg) { } // make this easily available everywhere -char* GetExecutablePath() { +char *GetExecutablePath() { return CSDLApp::GetExecutablePathCStr(); } @@ -75,66 +65,13 @@ char* GetExecutablePath() { ////////// OSystem_SDL_Symbian ////////////////////////////////////////// -static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { - {"1x", "Fullscreen", GFX_NORMAL}, - {0, 0, 0} -}; - -bool OSystem_SDL_Symbian::hasFeature(Feature f) { - switch (f) { - case kFeatureFullscreenMode: - case kFeatureAspectRatioCorrection: - case kFeatureCursorHasPalette: -#ifdef USE_VIBRA_SE_PXXX - case kFeatureVibration: -#endif - return true; - - default: - return false; - } -} - -void OSystem_SDL_Symbian::setFeatureState(Feature f, bool enable) { - switch (f) { - case kFeatureVirtualKeyboard: - if (enable) { - } - else { - - } - break; - case kFeatureDisableKeyFiltering: - GUI::Actions::Instance()->beginMapping(enable); - break; - default: - OSystem_SDL::setFeatureState(f, enable); - } +OSystem_SDL_Symbian::OSystem_SDL_Symbian() + : + _RFs(0) { + } -static Common::String getDefaultConfigFileName() { - char configFile[MAXPATHLEN]; - strcpy(configFile, Symbian::GetExecutablePath()); - strcat(configFile, DEFAULT_CONFIG_FILE); - return configFile; -} - -Common::SeekableReadStream *OSystem_SDL_Symbian::createConfigReadStream() { - Common::FSNode file(getDefaultConfigFileName()); - return file.createReadStream(); -} - -Common::WriteStream *OSystem_SDL_Symbian::createConfigWriteStream() { - Common::FSNode file(getDefaultConfigFileName()); - return file.createWriteStream(); -} - -OSystem_SDL_Symbian::zoneDesc OSystem_SDL_Symbian::_zones[TOTAL_ZONES] = { - { 0, 0, 320, 145 }, - { 0, 145, 150, 55 }, - { 150, 145, 170, 55 } -}; -OSystem_SDL_Symbian::OSystem_SDL_Symbian() :_channels(0),_stereo_mix_buffer(0) { +void OSystem_SDL_Symbian::init() { _RFs = &CEikonEnv::Static()->FsSession(); _fsFactory = new SymbianFilesystemFactory(); } @@ -147,20 +84,19 @@ void OSystem_SDL_Symbian::initBackend() { Common::String savePath; savePath = Symbian::GetExecutablePath(); savePath += DEFAULT_SAVE_PATH "\\"; - _savefile = new DefaultSaveFileManager(savePath); + _savefileManager = new DefaultSaveFileManager(savePath); // If savepath has not already been set then set it if (!ConfMan.hasKey("savepath")) { ConfMan.set("savepath", savePath); - } // Ensure that the current set path (might have been altered by the user) exists Common::String currentPath = ConfMan.get("savepath"); TFileName fname; - TPtrC8 ptr((const unsigned char*)currentPath.c_str(),currentPath.size()); + TPtrC8 ptr((const unsigned char*)currentPath.c_str(), currentPath.size()); fname.Copy(ptr); - BaflUtils::EnsurePathExistsL(static_cast<OSystem_SDL_Symbian*>(g_system)->FsSession(), fname); + BaflUtils::EnsurePathExistsL(static_cast<OSystem_SDL_Symbian *>(g_system)->FsSession(), fname); ConfMan.setBool("FM_high_quality", false); #if !defined(S60) || defined(S60V3) // S60 has low quality as default @@ -168,11 +104,26 @@ void OSystem_SDL_Symbian::initBackend() { #else ConfMan.setBool("FM_medium_quality", false); #endif - ConfMan.setInt("joystick_num", 0); // Symbian OS should have joystick_num set to 0 in the ini file , but uiq devices might refuse opening the joystick + // Symbian OS should have joystick_num set to 0 in the ini file, + // but uiq devices might refuse opening the joystick + ConfMan.setInt("joystick_num", 0); ConfMan.flushToDisk(); GUI::Actions::init(); + // Creates the backend managers + if (_eventManager == 0) + _eventManager = new SymbianSdlEventManager(this); + if (_mixerManager == 0) { + _mixerManager = new SymbianSdlMixerManager(); + + // Setup and start mixer + _mixerManager->init(); + } + if (_graphicsManager == 0) + _graphicsManager = new SymbianSdlGraphicsManager(); + + // Call parent implementation of this method OSystem_SDL::initBackend(); // Initialize global key mapping for Smartphones @@ -180,289 +131,25 @@ void OSystem_SDL_Symbian::initBackend() { actions->initInstanceMain(this); actions->loadMapping(); - initZones(); -} - -OSystem_SDL_Symbian::~OSystem_SDL_Symbian() { - delete[] _stereo_mix_buffer; -} - -int OSystem_SDL_Symbian::getDefaultGraphicsMode() const { - return GFX_NORMAL; -} - -const OSystem::GraphicsMode *OSystem_SDL_Symbian::getSupportedGraphicsModes() const { - return s_supportedGraphicsModes; -} - -// make sure we always go to normal, even if the string might be set wrong! -bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) { - // let parent OSystem_SDL handle it - return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode()); } void OSystem_SDL_Symbian::quitWithErrorMsg(const char * /*aMsg*/) { - CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ; if (g_system) g_system->quit(); } -// Overloaded from SDL_Commmon void OSystem_SDL_Symbian::quit() { delete GUI_Actions::Instance(); - OSystem_SDL::quit(); -} -void OSystem_SDL_Symbian::setupMixer() { - - SDL_AudioSpec desired; - SDL_AudioSpec obtained; - - // Determine the desired output sampling frequency. - uint32 samplesPerSec = 0; - if (ConfMan.hasKey("output_rate")) - samplesPerSec = ConfMan.getInt("output_rate"); - if (samplesPerSec <= 0) - samplesPerSec = SAMPLES_PER_SEC; - - // Determine the sample buffer size. We want it to store enough data for - // at least 1/16th of a second (though at most 8192 samples). Note - // that it must be a power of two. So e.g. at 22050 Hz, we request a - // sample buffer size of 2048. - uint32 samples = 8192; - while (samples * 16 > samplesPerSec * 2) - samples >>= 1; - - memset(&desired, 0, sizeof(desired)); - desired.freq = samplesPerSec; - desired.format = AUDIO_S16SYS; - desired.channels = 2; - desired.samples = (uint16)samples; - desired.callback = symbianMixCallback; - desired.userdata = this; - - assert(!_mixer); - if (SDL_OpenAudio(&desired, &obtained) != 0) { - warning("Could not open audio device: %s", SDL_GetError()); - _mixer = new Audio::MixerImpl(this, samplesPerSec); - assert(_mixer); - _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 - } - - // Create the mixer instance and start the sound processing - _mixer = new Audio::MixerImpl(this, samplesPerSec); - assert(_mixer); - _mixer->setReady(true); - SDL_PauseAudio(0); - } -} - -/** - * The mixer callback function. - */ -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; - -#if defined (S60) && !defined(S60V3) - // If not stereo then we need to downmix - if (this_->_mixer->_channels != 2) { - this_->_mixer->mixCallback(_stereo_mix_buffer, len * 2); - - int16 *bitmixDst = (int16 *)samples; - int16 *bitmixSrc = (int16 *)_stereo_mix_buffer; - - for (int loop = len / 2; loop >= 0; loop --) { - *bitmixDst = (*bitmixSrc + *(bitmixSrc + 1)) >> 1; - bitmixDst++; - bitmixSrc += 2; - } - } else -#else - this_->_mixer->mixCallback(samples, len); -#endif -} - - -/** - * This is an implementation by the remapKey function - * @param SDL_Event to remap - * @param ScumVM event to modify if special result is requested - * @return true if Common::Event has a valid return status - */ -bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Common::Event &event) { - if (GUI::Actions::Instance()->mappingActive() || ev.key.keysym.sym <= SDLK_UNKNOWN) - return false; - - for (TInt loop = 0; loop < GUI::ACTION_LAST; loop++) { - if (GUI::Actions::Instance()->getMapping(loop) == ev.key.keysym.sym && - GUI::Actions::Instance()->isEnabled(loop)) { - // Create proper event instead - switch (loop) { - case GUI::ACTION_UP: - if (ev.type == SDL_KEYDOWN) { - _km.y_vel = -1; - _km.y_down_count = 1; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_DOWN: - if (ev.type == SDL_KEYDOWN) { - _km.y_vel = 1; - _km.y_down_count = 1; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_LEFT: - if (ev.type == SDL_KEYDOWN) { - _km.x_vel = -1; - _km.x_down_count = 1; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_RIGHT: - if (ev.type == SDL_KEYDOWN) { - _km.x_vel = 1; - _km.x_down_count = 1; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_LEFTCLICK: - event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_LBUTTONDOWN : Common::EVENT_LBUTTONUP); - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_RIGHTCLICK: - event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_RBUTTONDOWN : Common::EVENT_RBUTTONUP); - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_ZONE: - if (ev.type == SDL_KEYDOWN) { - int i; - - for (i=0; i < TOTAL_ZONES; i++) - if (_km.x >= _zones[i].x && _km.y >= _zones[i].y && - _km.x <= _zones[i].x + _zones[i].width && _km.y <= _zones[i].y + _zones[i].height - ) { - _mouseXZone[i] = _km.x; - _mouseYZone[i] = _km.y; - break; - } - _currentZone++; - if (_currentZone >= TOTAL_ZONES) - _currentZone = 0; - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]); - SDL_WarpMouse(event.mouse.x, event.mouse.y); - } - - return true; - case GUI::ACTION_MULTI: { - GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop); - // if key code is pause, then change event to interactive or just fall through - if (key.keycode() == SDLK_PAUSE) { - event.type = Common::EVENT_PREDICTIVE_DIALOG; - return true; - } - } - case GUI::ACTION_SAVE: - case GUI::ACTION_SKIP: - case GUI::ACTION_SKIP_TEXT: - case GUI::ACTION_PAUSE: - case GUI::ACTION_SWAPCHAR: - case GUI::ACTION_FASTMODE: - case GUI::ACTION_DEBUGGER: - case GUI::ACTION_MAINMENU: - case GUI::ACTION_VKB: - case GUI::ACTION_KEYMAPPER:{ - GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop); - ev.key.keysym.sym = (SDLKey) key.keycode(); - ev.key.keysym.scancode = 0; - ev.key.keysym.mod = (SDLMod) key.flags(); - - // Translate from SDL keymod event to Scummvm Key Mod Common::Event. - // This codes is also present in GP32 backend and in SDL backend as a static function - // Perhaps it should be shared. - if (key.flags() != 0) { - event.kbd.flags = 0; - - if (ev.key.keysym.mod & KMOD_SHIFT) - event.kbd.flags |= Common::KBD_SHIFT; - - if (ev.key.keysym.mod & KMOD_ALT) - event.kbd.flags |= Common::KBD_ALT; - - if (ev.key.keysym.mod & KMOD_CTRL) - event.kbd.flags |= Common::KBD_CTRL; - } - - return false; - } - - case GUI::ACTION_QUIT: - { - GUI::MessageDialog alert(_("Do you want to quit ?"), _("Yes"), _("No")); - if (alert.runModal() == GUI::kMessageOK) - quit(); - - return true; - } - } - } - } - - return false; -} - -void OSystem_SDL_Symbian::setWindowCaption(const char *caption) { - OSystem_SDL::setWindowCaption(caption); + // Call parent implementation of this method + OSystem_SDL::quit(); } void OSystem_SDL_Symbian::engineInit() { // Check mappings for the engine just started - check_mappings(); + checkMappings(); } void OSystem_SDL_Symbian::engineDone() { @@ -470,22 +157,26 @@ void OSystem_SDL_Symbian::engineDone() { GUI::Actions::Instance()->initInstanceMain(this); } -void OSystem_SDL_Symbian::check_mappings() { +void OSystem_SDL_Symbian::checkMappings() { if (ConfMan.get("gameid").empty() || GUI::Actions::Instance()->initialized()) return; GUI::Actions::Instance()->initInstanceGame(); } -void OSystem_SDL_Symbian::initZones() { - int i; +bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) { + return _graphicsManager->setGraphicsMode(0); +} - _currentZone = 0; +Common::String OSystem_SDL_Symbian::getDefaultConfigFileName() { + char configFile[MAXPATHLEN]; + strcpy(configFile, Symbian::GetExecutablePath()); + strcat(configFile, DEFAULT_CONFIG_FILE); + return configFile; +} - for (i = 0; i < TOTAL_ZONES; i++) { - _mouseXZone[i] = (_zones[i].x + (_zones[i].width / 2)); - _mouseYZone[i] = (_zones[i].y + (_zones[i].height / 2)); - } +void OSystem_SDL_Symbian::setupIcon() { + // Don't for Symbian: it uses the EScummVM.aif file for the icon. } RFs& OSystem_SDL_Symbian::FsSession() { @@ -511,67 +202,3 @@ void* scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size return NULL; } - -extern "C" -{ -// Include the snprintf and vsnprintf implementations as 'C' code -#include "vsnprintf.h" -} - -// Symbian SDL_Main implementation -// Redirects standard io, creates Symbian specific SDL backend (inherited from main SDL) -int main(int argc, char *argv[]) { - // - // Set up redirects for stdout/stderr under Symbian. - // Code copied from SDL_main. - // - - // Symbian does not like any output to the console through any *print* function - char STDOUT_FILE[256], STDERR_FILE[256]; // shhh, don't tell anybody :) - strcpy(STDOUT_FILE, Symbian::GetExecutablePath()); - strcpy(STDERR_FILE, Symbian::GetExecutablePath()); - strcat(STDOUT_FILE, "scummvm.stdout.txt"); - strcat(STDERR_FILE, "scummvm.stderr.txt"); - - /* Flush the output in case anything is queued */ - fclose(stdout); - fclose(stderr); - - /* Redirect standard input and standard output */ - FILE *newfp = freopen(STDOUT_FILE, "w", stdout); - if (newfp == NULL) { /* This happens on NT */ -#if !defined(stdout) - stdout = fopen(STDOUT_FILE, "w"); -#else - newfp = fopen(STDOUT_FILE, "w"); - if (newfp) { - *stdout = *newfp; - } -#endif - } - newfp = freopen(STDERR_FILE, "w", stderr); - if (newfp == NULL) { /* This happens on NT */ -#if !defined(stderr) - stderr = fopen(STDERR_FILE, "w"); -#else - newfp = fopen(STDERR_FILE, "w"); - if (newfp) { - *stderr = *newfp; - } -#endif - } - setbuf(stderr, NULL); /* No buffering */ - - // Create our OSystem instance - g_system = new OSystem_SDL_Symbian(); - assert(g_system); - -#ifdef DYNAMIC_MODULES - PluginManager::instance().addPluginProvider(new SDLPluginProvider()); -#endif - - // Invoke the actual ScummVM main entry point: - int res = scummvm_main(argc, argv); - g_system->quit(); // TODO: Consider removing / replacing this! - return res; -} diff --git a/backends/platform/symbian/src/SymbianOS.h b/backends/platform/symbian/src/SymbianOS.h index 42929f8029..e5f4ea44d0 100644 --- a/backends/platform/symbian/src/SymbianOS.h +++ b/backends/platform/symbian/src/SymbianOS.h @@ -22,71 +22,50 @@ * $Id$ */ -#ifndef SDLSYMBIANH -#define SDLSYMBIANH +#ifndef PLATFORM_SDL_SYMBIAN_H +#define PLATFORM_SDL_SYMBIAN_H #include "backends/platform/sdl/sdl.h" -#define TOTAL_ZONES 3 class RFs; class OSystem_SDL_Symbian : public OSystem_SDL { public: OSystem_SDL_Symbian(); - virtual ~OSystem_SDL_Symbian(); -public: - /** - * The following method is called once, from main.cpp, after all - * config data (including command line params etc.) are fully loaded. - */ + // Override from OSystem_SDL + virtual void init(); virtual void initBackend(); + virtual void quit(); + virtual void engineInit(); + virtual void engineDone(); + virtual bool setGraphicsMode(const char *name); + virtual Common::String getDefaultConfigFileName(); + virtual void setupIcon(); - int getDefaultGraphicsMode() const; - const OSystem::GraphicsMode *getSupportedGraphicsModes() const; - bool setGraphicsMode(const char *name); - void quitWithErrorMsg(const char *msg); - virtual bool hasFeature(Feature f); - void setFeatureState(Feature f, bool enable); - - // Set function that generates samples - // - // This function is overridden by the symbian port in order to provide MONO audio - // downmix is done by supplying our own audiocallback - // - virtual void setupMixer(); // overloaded by CE backend - - // Overloaded from SDL_Commmon - void quit(); - - // Returns reference to File session + /** + * Returns reference to File session + */ RFs& FsSession(); -protected: - // - // The mixer callback function. - // - static void symbianMixCallback(void *s, byte *samples, int len); + void quitWithErrorMsg(const char *msg); - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); -public: - // vibration support + // Vibration support #ifdef USE_VIBRA_SE_PXXX - // - // Intialize the vibration api used if present and supported - // + /** + * Intialize the vibration api used if present and supported + */ void initializeVibration(); - // - // Turn vibration on, repeat no time - // @param vibraLength number of repetitions - // + /** + * Turn vibration on, repeat no time + * @param vibraLength number of repetitions + */ void vibrationOn(int vibraLength); - // - // Turns the vibration off - // + /** + * Turns the vibration off + */ void vibrationOff(); protected: @@ -94,54 +73,11 @@ protected: #endif // USE_VIBRA_SE_PXXX protected: - - // - // This is an implementation by the remapKey function - // @param SDL_Event to remap - // @param ScumVM event to modify if special result is requested - // @return true if Common::Event has a valid return status - // - bool remapKey(SDL_Event &ev, Common::Event &event); - - void setWindowCaption(const char *caption); - /** - * Allows the backend to perform engine specific init. - * Called just before the engine is run. + * Used to intialized special game mappings */ - virtual void engineInit(); - - /** - * Allows the backend to perform engine specific de-init. - * Called after the engine finishes. - */ - virtual void engineDone(); - - // - // Used to intialized special game mappings - // - void check_mappings(); - - void initZones(); - - // Audio - int _channels; - - byte *_stereo_mix_buffer; - - // Used to handle joystick navi zones - int _mouseXZone[TOTAL_ZONES]; - int _mouseYZone[TOTAL_ZONES]; - int _currentZone; - - struct zoneDesc { - int x; - int y; - int width; - int height; - }; + void checkMappings(); - static zoneDesc _zones[TOTAL_ZONES]; RFs* _RFs; }; diff --git a/backends/platform/symbian/src/Symbianmain.cpp b/backends/platform/symbian/src/Symbianmain.cpp new file mode 100644 index 0000000000..4aaa05926f --- /dev/null +++ b/backends/platform/symbian/src/Symbianmain.cpp @@ -0,0 +1,99 @@ +/* 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$ + * + */ + +#include "base/main.h" +#include "backends/platform/symbian/src/SymbianOS.h" +#include "backends/platform/symbian/src/portdefs.h" + +extern "C" +{ +// Include the snprintf and vsnprintf implementations as 'C' code +#include "vsnprintf.h" +} + +// Symbian SDL_Main implementation +// Redirects standard io, creates Symbian specific SDL backend (inherited from main SDL) +int main(int argc, char *argv[]) { + // + // Set up redirects for stdout/stderr under Symbian. + // Code copied from SDL_main. + // + + // Symbian does not like any output to the console through any *print* function + char STDOUT_FILE[256], STDERR_FILE[256]; // shhh, don't tell anybody :) + strcpy(STDOUT_FILE, Symbian::GetExecutablePath()); + strcpy(STDERR_FILE, Symbian::GetExecutablePath()); + strcat(STDOUT_FILE, "scummvm.stdout.txt"); + strcat(STDERR_FILE, "scummvm.stderr.txt"); + + /* Flush the output in case anything is queued */ + fclose(stdout); + fclose(stderr); + + /* Redirect standard input and standard output */ + FILE *newfp = freopen(STDOUT_FILE, "w", stdout); + if (newfp == NULL) { /* This happens on NT */ +#if !defined(stdout) + stdout = fopen(STDOUT_FILE, "w"); +#else + newfp = fopen(STDOUT_FILE, "w"); + if (newfp) { + *stdout = *newfp; + } +#endif + } + newfp = freopen(STDERR_FILE, "w", stderr); + if (newfp == NULL) { /* This happens on NT */ +#if !defined(stderr) + stderr = fopen(STDERR_FILE, "w"); +#else + newfp = fopen(STDERR_FILE, "w"); + if (newfp) { + *stderr = *newfp; + } +#endif + } + setbuf(stderr, NULL); /* No buffering */ + + // Create our OSystem instance + g_system = new OSystem_SDL_Symbian(); + assert(g_system); + + // Pre initialize the backend + ((OSystem_SDL_Symbian *)g_system)->init(); + +#ifdef DYNAMIC_MODULES + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); +#endif + + // Invoke the actual ScummVM main entry point: + int res = scummvm_main(argc, argv); + + // Free OSystem + delete (OSystem_SDL_Symbian *)g_system; + + return res; +} + |
