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; +} + | 
