diff options
Diffstat (limited to 'backends/platform/symbian/src')
| -rw-r--r-- | backends/platform/symbian/src/SymbianActions.cpp | 21 | ||||
| -rw-r--r-- | backends/platform/symbian/src/SymbianActions.h | 2 | ||||
| -rw-r--r-- | backends/platform/symbian/src/SymbianOS.cpp | 4 | ||||
| -rw-r--r-- | backends/platform/symbian/src/fnmatch.c | 173 | ||||
| -rw-r--r-- | backends/platform/symbian/src/fnmatch.h | 62 | ||||
| -rw-r--r-- | backends/platform/symbian/src/portdefs.h | 2 | 
6 files changed, 258 insertions, 6 deletions
| diff --git a/backends/platform/symbian/src/SymbianActions.cpp b/backends/platform/symbian/src/SymbianActions.cpp index 27c3e7bb06..8b7b22895a 100644 --- a/backends/platform/symbian/src/SymbianActions.cpp +++ b/backends/platform/symbian/src/SymbianActions.cpp @@ -53,17 +53,19 @@ const Common::String actionNames[] = {  	"Fast mode",  	"Quit",  	"Debugger", -	"Global menu" +	"Global menu", +	"Virtual keyboard", +	"Key mapper"  };  #ifdef UIQ -static const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_F5, SDLK_PAGEDOWN, '9', 0, 0, SDLK_PAGEUP, 0, 0, 0, 0, 0}; +static const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_F5, SDLK_PAGEDOWN, '9', 0, 0, SDLK_PAGEUP, 0, 0, 0, 0, 0, 0, 0};  #elif defined (S60) -const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, 0, 0, '*', '#', '9', 0, 0, 0, 0, 0, 0, 0, '1'}; +const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, 0, 0, '*', '#', '9', 0, 0, 0, 0, 0, 0, 0, '1', '2', '3'};  #elif defined (S90) -const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, 0, 0, SDLK_MENU, SDLK_ESCAPE, 0, 0 , 0, 0, 0, 0, 0, 0, 0}; +const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, 0, 0, SDLK_MENU, SDLK_ESCAPE, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0 ,0};  #else -const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_MENU, SDLK_ESCAPE, 0, 0, 0, 0, 0, 0, 0, 0, '1'}; +const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_MENU, SDLK_ESCAPE, 0, 0, 0, 0, 0, 0, 0, 0, '1', 0 ,0};  #endif  // creator function according to Factory Pattern @@ -123,6 +125,14 @@ void SymbianActions::initInstanceMain(OSystem *mainSystem) {  	// Skip  	_action_enabled[ACTION_SKIP] = true;  	_key_action[ACTION_SKIP].setKey(SDLK_ESCAPE); + +	// Enable keymappings +	_action_enabled[ACTION_KEYMAPPER] = true; +	_key_action[ACTION_KEYMAPPER].setKey(Common::ASCII_F8, Common::KEYCODE_F8); + +	// Enable VKB +	_action_enabled[ACTION_VKB] = true; +	_key_action[ACTION_VKB].setKey(Common::ASCII_F7, Common::KEYCODE_F7);  }  void SymbianActions::initInstanceGame() { @@ -217,6 +227,7 @@ void SymbianActions::initInstanceGame() {  	// Enable global menu  	_action_enabled[ACTION_MAINMENU] = true;  	_key_action[ACTION_MAINMENU].setKey(Common::ASCII_F5, Common::KEYCODE_F5, KMOD_CTRL); +  } diff --git a/backends/platform/symbian/src/SymbianActions.h b/backends/platform/symbian/src/SymbianActions.h index 19cee2efab..c652d0be7e 100644 --- a/backends/platform/symbian/src/SymbianActions.h +++ b/backends/platform/symbian/src/SymbianActions.h @@ -53,6 +53,8 @@ enum actionType {  		ACTION_QUIT,  		ACTION_DEBUGGER,  		ACTION_MAINMENU, +		ACTION_VKB, +		ACTION_KEYMAPPER,  		ACTION_LAST  }; diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp index b8dd96adea..452f730110 100644 --- a/backends/platform/symbian/src/SymbianOS.cpp +++ b/backends/platform/symbian/src/SymbianOS.cpp @@ -427,7 +427,9 @@ bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Common::Event &event) {  			case GUI::ACTION_SWAPCHAR:  			case GUI::ACTION_FASTMODE:  			case GUI::ACTION_DEBUGGER: -			case GUI::ACTION_MAINMENU:{ +			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; diff --git a/backends/platform/symbian/src/fnmatch.c b/backends/platform/symbian/src/fnmatch.c new file mode 100644 index 0000000000..dc01d6ea61 --- /dev/null +++ b/backends/platform/symbian/src/fnmatch.c @@ -0,0 +1,173 @@ +/*	$NetBSD: fnmatch.c,v 1.11 1995/02/27 03:43:06 cgd Exp $	*/ + +/* + * Copyright (c) 1989, 1993, 1994 + *	The Regents of the University of California.  All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + *    must display the following acknowledgement: + *	This product includes software developed by the University of + *	California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)fnmatch.c	8.2 (Berkeley) 4/16/94"; +#else +static char rcsid[] = "$NetBSD: fnmatch.c,v 1.11 1995/02/27 03:43:06 cgd Exp $"; +#endif +#endif /* LIBC_SCCS and not lint */ + +/* + * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6. + * Compares a filename or pathname to a pattern. + */ + +#include <fnmatch.h> +#include <string.h> + +#define	EOS	'\0' + +static const char *rangematch (const char *, int, int); + +int +fnmatch(const char *pattern, const char *string, int flags) +{ +	const char *stringstart; +	char c, test; + +	for (stringstart = string;;) +		switch (c = *pattern++) { +		case EOS: +			return (*string == EOS ? 0 : FNM_NOMATCH); +		case '?': +			if (*string == EOS) +				return (FNM_NOMATCH); +			if (*string == '/' && (flags & FNM_PATHNAME)) +				return (FNM_NOMATCH); +			if (*string == '.' && (flags & FNM_PERIOD) && +			    (string == stringstart || +			    ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) +				return (FNM_NOMATCH); +			++string; +			break; +		case '*': +			c = *pattern; +			/* Collapse multiple stars. */ +			while (c == '*') +				c = *++pattern; + +			if (*string == '.' && (flags & FNM_PERIOD) && +			    (string == stringstart || +			    ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) +				return (FNM_NOMATCH); + +			/* Optimize for pattern with * at end or before /. */ +			if (c == EOS) +				if (flags & FNM_PATHNAME) +					return (strchr(string, '/') == NULL ? +					    0 : FNM_NOMATCH); +				else +					return (0); +			else if (c == '/' && flags & FNM_PATHNAME) { +				if ((string = strchr(string, '/')) == NULL) +					return (FNM_NOMATCH); +				break; +			} + +			/* General case, use recursion. */ +			while ((test = *string) != EOS) { +				if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) +					return (0); +				if (test == '/' && flags & FNM_PATHNAME) +					break; +				++string; +			} +			return (FNM_NOMATCH); +		case '[': +			if (*string == EOS) +				return (FNM_NOMATCH); +			if (*string == '/' && flags & FNM_PATHNAME) +				return (FNM_NOMATCH); +			if ((pattern = +			    rangematch(pattern, *string, flags)) == NULL) +				return (FNM_NOMATCH); +			++string; +			break; +		case '\\': +			if (!(flags & FNM_NOESCAPE)) { +				if ((c = *pattern++) == EOS) { +					c = '\\'; +					--pattern; +				} +			} +			/* FALLTHROUGH */ +		default: +			if (c != *string++) +				return (FNM_NOMATCH); +			break; +		} +	/* NOTREACHED */ +} + +static const char * +rangematch(const char *pattern, int test, int flags) +{ +	int negate, ok; +	char c, c2; + +	/* +	 * A bracket expression starting with an unquoted circumflex +	 * character produces unspecified results (IEEE 1003.2-1992, +	 * 3.13.2).  This implementation treats it like '!', for +	 * consistency with the regular expression syntax. +	 * J.T. Conklin (conklin@ngai.kaleida.com) +	 */ +	if (negate = (*pattern == '!' || *pattern == '^')) +		++pattern; +	 +	for (ok = 0; (c = *pattern++) != ']';) { +		if (c == '\\' && !(flags & FNM_NOESCAPE)) +			c = *pattern++; +		if (c == EOS) +			return (NULL); +		if (*pattern == '-'  +		    && (c2 = *(pattern+1)) != EOS && c2 != ']') { +			pattern += 2; +			if (c2 == '\\' && !(flags & FNM_NOESCAPE)) +				c2 = *pattern++; +			if (c2 == EOS) +				return (NULL); +			if (c <= test && test <= c2) +				ok = 1; +		} else if (c == test) +			ok = 1; +	} +	return (ok == negate ? NULL : pattern); +} diff --git a/backends/platform/symbian/src/fnmatch.h b/backends/platform/symbian/src/fnmatch.h new file mode 100644 index 0000000000..45b88797a1 --- /dev/null +++ b/backends/platform/symbian/src/fnmatch.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 1992, 1993 + *	The Regents of the University of California.  All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + *    must display the following acknowledgement: + *	This product includes software developed by the University of + *	California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/include/fnmatch.h,v 1.9 1999/11/21 17:32:45 ache Exp $ + * $DragonFly: src/include/fnmatch.h,v 1.3 2003/11/14 01:01:43 dillon Exp $ + *	@(#)fnmatch.h	8.1 (Berkeley) 6/2/93 + */ + +#ifndef	_FNMATCH_H_ +#define	_FNMATCH_H_ + +#define	FNM_NOMATCH	1	/* Match failed. */ + +#define	FNM_NOESCAPE	0x01	/* Disable backslash escaping. */ +#define	FNM_PATHNAME	0x02	/* Slash must be matched by slash. */ +#define	FNM_PERIOD	0x04	/* Period must be matched by period. */ + +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) +#define	FNM_LEADING_DIR	0x08	/* Ignore /<tail> after Imatch. */ +#define	FNM_CASEFOLD	0x10	/* Case insensitive search. */ +#define	FNM_IGNORECASE	FNM_CASEFOLD +#define	FNM_FILE_NAME	FNM_PATHNAME +#endif + +#ifdef __cplusplus +extern "C" { +#endif +int	 fnmatch (const char *, const char *, int); + +#ifdef __cplusplus +} +#endif +#endif /* !_FNMATCH_H_ */ diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h index cfd6c89a7a..235bec5948 100644 --- a/backends/platform/symbian/src/portdefs.h +++ b/backends/platform/symbian/src/portdefs.h @@ -35,6 +35,7 @@  #include <e32std.h>  #include <math.h> +#include "fnmatch.h"  #define DISABLE_COMMAND_LINE  #if defined(USE_TREMOR) && !defined(USE_VORBIS) @@ -127,6 +128,7 @@  #define USE_ARM_COSTUME_ASM  #define USE_ARM_SOUND_ASM  #endif +#define ENABLE_KEYMAPPER  // Symbian bsearch implementation is flawed  void *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); | 
