Browse Source

Deal with input code & move osx->macos

LouYihua 7 years ago
parent
commit
12dea8595c

+ 2 - 2
3ds/Makefile

@@ -31,7 +31,7 @@ include $(DEVKITARM)/3ds_rules
 #---------------------------------------------------------------------------------
 TARGET		:=	sdlpal
 BUILD		:=	build
-SOURCES		:=	.. ../adplug ../libmad
+SOURCES		:=	. .. ../adplug ../libmad
 
 APP_TITLE	:=	SDLPAL
 APP_DESCRIPTION :=	Pal DOS for 3DS
@@ -48,7 +48,7 @@ CFLAGS	:=	-g -Wall -O2 -mword-relocations \
 			-fomit-frame-pointer -ffunction-sections \
 			$(ARCH)
 
-CFLAGS	+=	$(INCLUDE) -DARM11 -D_3DS -D__3DS__ -D__N3DS__ -I.
+CFLAGS	+=	$(INCLUDE) -DARM11 -D_3DS -D__3DS__ -D__N3DS__ -DPAL_HAS_PLATFORM_SPECIFIC_UTILS -I.
 
 CXXFLAGS	:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++14
 

+ 47 - 0
3ds/pal_utils.c

@@ -0,0 +1,47 @@
+
+#include "main.h"
+
+static void init_filter()
+{
+	SDL_N3DSKeyBind(KEY_A, SDLK_RETURN);
+	SDL_N3DSKeyBind(KEY_B, SDLK_ESCAPE);
+	SDL_N3DSKeyBind(KEY_CPAD_UP, SDLK_UP);
+	SDL_N3DSKeyBind(KEY_CPAD_DOWN, SDLK_DOWN);
+	SDL_N3DSKeyBind(KEY_CPAD_LEFT, SDLK_LEFT);
+	SDL_N3DSKeyBind(KEY_CPAD_RIGHT, SDLK_RIGHT);
+}
+
+BOOL
+UTIL_GetScreenSize(
+	DWORD *pdwScreenWidth,
+	DWORD *pdwScreenHeight
+)
+{
+	return FALSE;
+}
+
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+)
+{
+	return FALSE;
+}
+
+INT
+UTIL_Platform_Init(
+	int argc,
+	char* argv[]
+)
+{
+	PAL_RegisterInputFilter(init_filter, NULL, NULL);
+	gConfig.fLaunchSetting = FALSE;
+	return 0;
+}
+
+VOID
+UTIL_Platform_Quit(
+	VOID
+)
+{
+}

+ 61 - 65
common.h

@@ -84,9 +84,68 @@ extern "C"
 #endif /* SDL_FORCE_INLINE not defined */
 
 #if defined(_MSC_VER)
-#define PAL_FORCE_INLINE static SDL_FORCE_INLINE
+# define PAL_FORCE_INLINE static SDL_FORCE_INLINE
 #else
-#define PAL_FORCE_INLINE SDL_FORCE_INLINE
+# define PAL_FORCE_INLINE SDL_FORCE_INLINE
+#endif
+
+#ifdef _WIN32
+
+# include <windows.h>
+# include <io.h>
+
+# if defined(_MSC_VER)
+#  if _MSC_VER < 1900
+#   define vsnprintf _vsnprintf
+#   define snprintf _snprintf
+#  endif
+#  define strdup _strdup
+#  pragma warning (disable:4244)
+# endif
+
+# ifndef _LPCBYTE_DEFINED
+#  define _LPCBYTE_DEFINED
+typedef const BYTE *LPCBYTE;
+# endif
+
+#else
+
+# include <unistd.h>
+# include <dirent.h>
+
+# ifndef FALSE
+#  define FALSE               0
+# endif
+# ifndef TRUE
+#  define TRUE                1
+# endif
+# define VOID                void
+typedef char                CHAR;
+typedef wchar_t             WCHAR;
+typedef short               SHORT;
+typedef long                LONG;
+
+typedef unsigned long       ULONG, *PULONG;
+typedef unsigned short      USHORT, *PUSHORT;
+typedef unsigned char       UCHAR, *PUCHAR;
+
+typedef unsigned short      WORD, *LPWORD;
+typedef unsigned int        DWORD, *LPDWORD;
+typedef int                 INT, *LPINT;
+# ifndef __OBJC__
+typedef int                 BOOL, *LPBOOL;
+# endif
+typedef unsigned int        UINT, *PUINT, UINT32, *PUINT32;
+typedef unsigned char       BYTE, *LPBYTE;
+typedef const BYTE         *LPCBYTE;
+typedef float               FLOAT, *LPFLOAT;
+typedef void               *LPVOID;
+typedef const void         *LPCVOID;
+typedef CHAR               *LPSTR;
+typedef const CHAR         *LPCSTR;
+typedef WCHAR              *LPWSTR;
+typedef const WCHAR        *LPCWSTR;
+
 #endif
 
 /* When porting SDLPAL to a new platform, please make a separate directory and put a file 
@@ -131,69 +190,6 @@ extern "C"
 # define PAL_SCREENSHOT_PREFIX PAL_SAVE_PREFIX
 #endif
 
-#ifdef _WIN32
-
-#include <windows.h>
-#include <io.h>
-
-#if defined(_MSC_VER)
-# if _MSC_VER < 1900
-#  define vsnprintf _vsnprintf
-#  define snprintf _snprintf
-# endif
-# define strdup _strdup
-# pragma warning (disable:4244)
-#endif
-
-#ifndef _LPCBYTE_DEFINED
-# define _LPCBYTE_DEFINED
-typedef const BYTE *LPCBYTE;
-#endif
-
-#ifndef __WINRT__
-# define PAL_HAS_NATIVEMIDI  1
-#endif
-
-#else
-
-#include <unistd.h>
-#include <dirent.h>
-
-#ifndef FALSE
-#define FALSE               0
-#endif
-#ifndef TRUE
-#define TRUE                1
-#endif
-#define VOID                void
-typedef char                CHAR;
-typedef wchar_t             WCHAR;
-typedef short               SHORT;
-typedef long                LONG;
-
-typedef unsigned long       ULONG, *PULONG;
-typedef unsigned short      USHORT, *PUSHORT;
-typedef unsigned char       UCHAR, *PUCHAR;
-
-typedef unsigned short      WORD, *LPWORD;
-typedef unsigned int        DWORD, *LPDWORD;
-typedef int                 INT, *LPINT;
-#ifndef __OBJC__
-typedef int                 BOOL, *LPBOOL;
-#endif
-typedef unsigned int        UINT, *PUINT, UINT32, *PUINT32;
-typedef unsigned char       BYTE, *LPBYTE;
-typedef const BYTE         *LPCBYTE;
-typedef float               FLOAT, *LPFLOAT;
-typedef void               *LPVOID;
-typedef const void         *LPCVOID;
-typedef CHAR               *LPSTR;
-typedef const CHAR         *LPCSTR;
-typedef WCHAR              *LPWSTR;
-typedef const WCHAR        *LPCWSTR;
-
-#endif
-
 #ifndef PAL_HAS_NATIVEMIDI
 # define PAL_HAS_NATIVEMIDI  0
 #endif

+ 1 - 1
dingux/Makefile.dingux

@@ -7,7 +7,7 @@ CFILES = $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.c))
 CPPFILES = $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.cpp))
 OFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
 
-CFLAGS = -g -Wall -O2 `sdl-config --cflags` -DDINGOO -DPAL_CLASSIC -I.
+CFLAGS = -g -Wall -O2 `sdl-config --cflags` -DDINGOO -DPAL_CLASSIC -DPAL_HAS_PLATFORM_SPECIFIC_UTILS -I.
 CXXFLAGS = $(CFLAGS)
 LDFLAGS = `sdl-config --libs`
 

+ 52 - 0
dingux/pal_utils.c

@@ -0,0 +1,52 @@
+
+#include "main.h"
+
+static int input_event_filter(const SDL_Event *lpEvent, PALINPUTSTATE *state)
+{
+	switch (lpEvent->type)
+	{
+	case SDLK_SPACE:
+		state->dwKeyPress = kKeyMenu;
+		return 1;
+
+	case SDLK_LCTRL:
+		state->dwKeyPress = kKeySearch;
+		return 1;
+	}
+	return 0;
+}
+
+BOOL
+UTIL_GetScreenSize(
+	DWORD *pdwScreenWidth,
+	DWORD *pdwScreenHeight
+)
+{
+	return FALSE;
+}
+
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+)
+{
+	return FALSE;
+}
+
+INT
+UTIL_Platform_Init(
+	int argc,
+	char* argv[]
+)
+{
+	PAL_RegisterInputFilter(NULL, input_event_filter, NULL);
+	gConfig.fLaunchSetting = FALSE;
+	return 0;
+}
+
+VOID
+UTIL_Platform_Quit(
+	VOID
+)
+{
+}

+ 72 - 1
gph/pal_utils.c

@@ -1,5 +1,75 @@
 
-#include "common.h"
+#include "main.h"
+
+static int input_event_filter(const SDL_Event *lpEvent, PALINPUTSTATE *state)
+{
+	switch (lpEvent->type)
+	{
+	case SDL_JOYAXISMOTION:
+		switch (lpEvent->jaxis.axis)
+		{
+		case 0:
+			//
+			// X axis
+			//
+			if (lpEvent->jaxis.value > MAX_DEADZONE) {
+				state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+				state->dir = kDirEast;
+				state->dwKeyPress = kKeyRight;
+			}
+			else if (lpEvent->jaxis.value < MIN_DEADZONE) {
+				state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+				state->dir = kDirWest;
+				state->dwKeyPress = kKeyLeft;
+			}
+			else {
+				state->dir = kDirUnknown;
+			}
+			return 1;
+		case 1:
+			//
+			// Y axis
+			//
+			if (lpEvent->jaxis.value > MAX_DEADZONE) {
+				state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+				state->dir = kDirSouth;
+				state->dwKeyPress = kKeyDown;
+			}
+			else if (lpEvent->jaxis.value < MIN_DEADZONE) {
+				state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+				state->dir = kDirNorth;
+				state->dwKeyPress = kKeyUp;
+			}
+			else {
+				state->dir = kDirUnknown;
+			}
+			return 1;
+		}
+		break;
+
+	case SDL_JOYBUTTONDOWN:
+		switch (lpEvent->jbutton.button)
+		{
+#if defined(GP2XWIZ)
+		case 14:
+#elif defined(CAANOO)
+		case 3:
+#endif
+			state->dwKeyPress = kKeyMenu;
+			return 1;
+
+#if defined(GP2XWIZ)
+		case 13:
+#elif defined(CAANOO)
+		case 2:
+#endif
+			state->dwKeyPress = kKeySearch;
+			return 1;
+		}
+		break;
+	}
+	return 0;
+}
 
 BOOL
 UTIL_GetScreenSize(
@@ -24,6 +94,7 @@ UTIL_Platform_Init(
 	char* argv[]
 )
 {
+	PAL_RegisterInputFilter(NULL, input_event_filter, NULL);
 	gConfig.fLaunchSetting = FALSE;
 	return 0;
 }

+ 30 - 3
incomplete_ports/pal_utils.c

@@ -1,7 +1,30 @@
 
-#if if defined(NDS)
-#include "common.h"
+#include "main.h"
+#if defined(NDS)
 #include <fat.h>
+#endif
+
+#if defined(__SYMBIAN32__)
+static int input_event_filter(const SDL_Event *lpEvent, PALINPUTSTATE *state)
+{
+	//
+	// Symbian-specific stuff
+	//
+	switch (lpEvent->type)
+	{
+	case SDLK_0:
+		VIDEO_ToggleScaleScreen();
+		return 1;
+	case SDLK_1:
+		AUDIO_DecreaseVolume();
+		return 1;
+	case SDLK_3:
+		AUDIO_IncreaseVolume();
+		return 1;
+	}
+	return 0;
+}
+#endif
 
 BOOL
 UTIL_GetScreenSize(
@@ -26,7 +49,12 @@ UTIL_Platform_Init(
 	char* argv[]
 )
 {
+#if defined(NDS)
 	fatInitDefault();
+#endif
+#if defined(__SYMBIAN32__)
+	PAL_RegisterInputFilter(NULL, input_event_filter, NULL);
+#endif
 	gConfig.fLaunchSetting = FALSE;
 	return 0;
 }
@@ -37,4 +65,3 @@ UTIL_Platform_Quit(
 )
 {
 }
-#endif

+ 50 - 133
input.c

@@ -33,6 +33,15 @@ static SDL_Joystick     *g_pJoy = NULL;
 #endif
 BOOL                     g_fUseJoystick = TRUE;
 
+static void _default_init_filter() {}
+static int _default_input_event_filter(const SDL_Event *event, volatile PALINPUTSTATE *state) { return 0; }
+static void _default_input_shutdown_filter() {}
+
+static void (*input_init_filter)() = _default_init_filter;
+static int (*input_event_filter)(const SDL_Event *, volatile PALINPUTSTATE *) = _default_input_event_filter;
+static void (*input_shutdown_filter)() = _default_input_shutdown_filter;
+
+
 static VOID
 PAL_KeyboardEventFilter(
    const SDL_Event       *lpEvent
@@ -79,20 +88,6 @@ PAL_KeyboardEventFilter(
 
       switch (lpEvent->key.keysym.sym)
       {
-#ifdef __SYMBIAN32__
-      //
-      // Symbian-specific stuff
-      //
-      case SDLK_0:
-         VIDEO_ToggleScaleScreen();
-         break;
-      case SDLK_1:
-         AUDIO_DecreaseVolume();
-         break;
-      case SDLK_3:
-         AUDIO_IncreaseVolume();
-         break;
-#endif
       case SDLK_UP:
       case SDLK_KP8:
          if (gpGlobals->fInBattle || g_InputState.dir != kDirNorth)
@@ -133,15 +128,6 @@ PAL_KeyboardEventFilter(
          }
          break;
 
-#if defined(DINGOO)
-      case SDLK_SPACE:
-         g_InputState.dwKeyPress = kKeyMenu;
-         break;
-
-      case SDLK_LCTRL:
-         g_InputState.dwKeyPress = kKeySearch;
-         break;
-#else
       case SDLK_ESCAPE:
       case SDLK_INSERT:
       case SDLK_LALT:
@@ -197,12 +183,6 @@ PAL_KeyboardEventFilter(
          g_InputState.dwKeyPress |= kKeyThrowItem;
          break;
 
-#if defined(__WINRT__)
-      case SDLK_AC_BACK:
-         // If game not started, exit directly
-         if (!gpGlobals->fInMainGame)
-            PAL_Shutdown(0);
-#endif
       case SDLK_q:
          g_InputState.dwKeyPress |= kKeyFlee;
          break;
@@ -220,7 +200,6 @@ PAL_KeyboardEventFilter(
       case SDLK_p:
          VIDEO_SaveScreenshot();
          break;
-#endif
 
       default:
          break;
@@ -487,36 +466,6 @@ PAL_JoystickEventFilter(
 #if PAL_HAS_JOYSTICKS
    switch (lpEvent->type)
    {
-#if defined (GEKKO)
-   case SDL_JOYHATMOTION:
-      switch (lpEvent->jhat.value)
-      {
-      case SDL_HAT_LEFT:
-        g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-        g_InputState.dir = kDirWest;
-        g_InputState.dwKeyPress = kKeyLeft;
-        break;
-
-      case SDL_HAT_RIGHT:
-        g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-        g_InputState.dir = kDirEast;
-        g_InputState.dwKeyPress = kKeyRight;
-        break;
-
-      case SDL_HAT_UP:
-        g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-        g_InputState.dir = kDirNorth;
-        g_InputState.dwKeyPress = kKeyUp;
-        break;
-
-      case SDL_HAT_DOWN:
-        g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-        g_InputState.dir = kDirSouth;
-        g_InputState.dwKeyPress = kKeyDown;
-        break;
-      }
-      break;
-#else
    case SDL_JOYAXISMOTION:
       //
       // Moved an axis on joystick
@@ -527,19 +476,6 @@ PAL_JoystickEventFilter(
          //
          // X axis
          //
-#if defined(GPH)
-      if (lpEvent->jaxis.value > MAX_DEADZONE) {
-         g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-         g_InputState.dir = kDirEast;
-         g_InputState.dwKeyPress = kKeyRight;
-      } else if (lpEvent->jaxis.value < MIN_DEADZONE) {
-         g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-         g_InputState.dir = kDirWest;
-         g_InputState.dwKeyPress = kKeyLeft;
-      } else {
-         g_InputState.dir = kDirUnknown;
-      }
-#else
          if (lpEvent->jaxis.value > 20000)
          {
             if (g_InputState.dir != kDirEast)
@@ -567,26 +503,12 @@ PAL_JoystickEventFilter(
             }
             g_InputState.prevdir = kDirUnknown;
          }
-#endif
          break;
 
       case 1:
          //
          // Y axis
          //
-#if defined(GPH)
-      if (lpEvent->jaxis.value > MAX_DEADZONE) {
-         g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-         g_InputState.dir = kDirSouth;
-         g_InputState.dwKeyPress = kKeyDown;
-      } else if (lpEvent->jaxis.value < MIN_DEADZONE) {
-         g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir);
-         g_InputState.dir = kDirNorth;
-         g_InputState.dwKeyPress = kKeyUp;
-      } else {
-         g_InputState.dir = kDirUnknown;
-      }
-#else
          if (lpEvent->jaxis.value > 20000)
          {
             if (g_InputState.dir != kDirSouth)
@@ -614,46 +536,14 @@ PAL_JoystickEventFilter(
             }
             g_InputState.prevdir = kDirUnknown;
          }
-#endif
          break;
       }
       break;
-#endif
 
    case SDL_JOYBUTTONDOWN:
       //
       // Pressed the joystick button
       //
-#if defined(GPH)
-      switch (lpEvent->jbutton.button)
-      {
-#if defined(GP2XWIZ)
-      case 14:
-#elif defined(CAANOO)
-      case 3:
-#endif
-         g_InputState.dwKeyPress = kKeyMenu;
-         break;
-
-#if defined(GP2XWIZ)
-      case 13:
-#elif defined(CAANOO)
-      case 2:
-#endif
-         g_InputState.dwKeyPress = kKeySearch;
-         break;
-#else
-#if defined(GEKKO)
-      switch (lpEvent->jbutton.button)
-      {
-      case 2:
-         g_InputState.dwKeyPress |= kKeyMenu;
-         break;
-
-      case 3:
-         g_InputState.dwKeyPress |= kKeySearch;
-         break;
-#else
       switch (lpEvent->jbutton.button & 1)
       {
       case 0:
@@ -663,8 +553,6 @@ PAL_JoystickEventFilter(
       case 1:
          g_InputState.dwKeyPress |= kKeySearch;
          break;
-#endif
-#endif
       }
       break;
    }
@@ -1074,14 +962,7 @@ PAL_InitInput(
    SDL_EnableKeyRepeat(0, 0);
 #endif
 
-#ifdef __N3DS__
-   SDL_N3DSKeyBind(KEY_A, SDLK_RETURN);
-   SDL_N3DSKeyBind(KEY_B, SDLK_ESCAPE);
-   SDL_N3DSKeyBind(KEY_CPAD_UP, SDLK_UP);
-   SDL_N3DSKeyBind(KEY_CPAD_DOWN, SDLK_DOWN);
-   SDL_N3DSKeyBind(KEY_CPAD_LEFT, SDLK_LEFT);
-   SDL_N3DSKeyBind(KEY_CPAD_RIGHT, SDLK_RIGHT);
-#endif
+   input_init_filter();
 }
 
 VOID
@@ -1104,21 +985,22 @@ PAL_ShutdownInput(
 --*/
 {
 #if PAL_HAS_JOYSTICKS
-#if SDL_VERSION_ATLEAST(2,0,0)
+# if SDL_VERSION_ATLEAST(2,0,0)
    if (g_pJoy != NULL)
    {
       SDL_JoystickClose(g_pJoy);
       g_pJoy = NULL;
    }
-#else
+# else
    if (SDL_JoystickOpened(0))
    {
       assert(g_pJoy != NULL);
       SDL_JoystickClose(g_pJoy);
       g_pJoy = NULL;
    }
+# endif
 #endif
-#endif
+   input_shutdown_filter();
 }
 
 VOID
@@ -1168,7 +1050,7 @@ PAL_PollEvent(
    SDL_Event evt;
 
    int ret = SDL_PollEvent(&evt);
-   if (ret != 0)
+   if (ret != 0 && !input_event_filter(&evt, &g_InputState))
    {
       PAL_EventFilter(&evt);
    }
@@ -1180,3 +1062,38 @@ PAL_PollEvent(
 
    return ret;
 }
+
+VOID
+PAL_RegisterInputFilter(
+   void (*init_filter)(),
+   int (*event_filter)(const SDL_Event *, volatile PALINPUTSTATE *),
+   void (*shutdown_filter)()
+)
+/*++
+  Purpose:
+
+    Register caller-defined input event filter.
+
+  Parameters:
+
+    [IN] init_filter - Filter that will be called inside PAL_InitInput
+	[IN] event_filter - Filter that will be called inside PAL_PollEvent, 
+	                    return non-zero value from this filter disables
+						further internal event processing.
+	[IN] shutdown_filter - Filter that will be called inside PAL_ShutdownInput
+
+	Passing NULL to either parameter means the caller does not provide such filter.
+
+  Return value:
+
+    None.
+
+--*/
+{
+	if (init_filter)
+		input_init_filter = init_filter;
+	if (event_filter)
+		input_event_filter = event_filter;
+	if (shutdown_filter)
+		input_shutdown_filter = shutdown_filter;
+}

+ 7 - 0
input.h

@@ -92,6 +92,13 @@ PAL_SetTouchBounds(
    SDL_Rect renderRect
 );
 
+VOID
+PAL_RegisterInputFilter(
+   void (*init_filter)(),
+   int (*event_filter)(const SDL_Event *, volatile PALINPUTSTATE *),
+   void (*shutdown_filter)()
+);
+
 extern BOOL g_fUseJoystick;
 
 #ifdef __cplusplus

osx/English.lproj/InfoPlist.strings → macos/English.lproj/InfoPlist.strings


osx/Info.plist → macos/Info.plist


osx/Pal.xcodeproj/project.pbxproj → macos/Pal.xcodeproj/project.pbxproj


osx/Pal.xcodeproj/project.xcworkspace/contents.xcworkspacedata → macos/Pal.xcodeproj/project.xcworkspace/contents.xcworkspacedata


osx/pal_config.h → macos/pal_config.h


osx/sdlpal.icns → macos/sdlpal.icns


+ 0 - 15
util.h

@@ -108,16 +108,6 @@ UTIL_CloseFile(
    FILE                *fp
 );
 
-LPCSTR
-UTIL_ConfigPath(
-   VOID
-);
-
-LPCSTR
-UTIL_ScreenShotPath(
-	VOID
-);
-
 BOOL
 UTIL_GetScreenSize(
    DWORD *pdwScreenWidth,
@@ -129,11 +119,6 @@ UTIL_IsAbsolutePath(
 	LPCSTR  lpszFileName
 );
 
-BOOL
-UTIL_TouchEnabled(
-   VOID
-);
-
 INT
 UTIL_Platform_Init(
    int argc,

+ 50 - 1
wii/pal_utils.c

@@ -1,7 +1,55 @@
 
-#include "common.h"
+#include "main.h"
 #include <fat.h>
 
+static int input_event_filter(const SDL_Event *lpEvent, PALINPUTSTATE *state)
+{
+	switch (lpEvent->type)
+	{
+	case SDL_JOYHATMOTION:
+		switch (lpEvent->jhat.value)
+		{
+		case SDL_HAT_LEFT:
+			state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+			state->dir = kDirWest;
+			state->dwKeyPress = kKeyLeft;
+			break;
+
+		case SDL_HAT_RIGHT:
+			state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+			state->dir = kDirEast;
+			state->dwKeyPress = kKeyRight;
+			break;
+
+		case SDL_HAT_UP:
+			state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+			state->dir = kDirNorth;
+			state->dwKeyPress = kKeyUp;
+			break;
+
+		case SDL_HAT_DOWN:
+			state->prevdir = (gpGlobals->fInBattle ? kDirUnknown : state->dir);
+			state->dir = kDirSouth;
+			state->dwKeyPress = kKeyDown;
+			break;
+		}
+		return 1;
+
+	case SDL_JOYBUTTONDOWN:
+		switch (lpEvent->jbutton.button)
+		{
+		case 2:
+			state->dwKeyPress |= kKeyMenu;
+			return 1;
+
+		case 3:
+			state->dwKeyPress |= kKeySearch;
+			return 1;
+		}
+	}
+	return 0;
+}
+
 BOOL
 UTIL_GetScreenSize(
 	DWORD *pdwScreenWidth,
@@ -26,6 +74,7 @@ UTIL_Platform_Init(
 )
 {
 	fatInitDefault();
+	PAL_RegisterInputFilter(NULL, input_event_filter, NULL);
 	gConfig.fLaunchSetting = FALSE;
 	return 0;
 }

+ 2 - 0
win32/pal_config.h

@@ -33,3 +33,5 @@
 #define PAL_HAS_CONFIG_PAGE 1
 
 #define PAL_FILESYSTEM_IGNORE_CASE 1
+
+#define PAL_HAS_NATIVEMIDI  1

+ 12 - 2
winrt/SDLPal.Common/WinRTUtil.cpp

@@ -6,8 +6,7 @@
 #include <ppltasks.h>
 #include "../SDLPal.Common/AsyncHelper.h"
 #include "../SDLPal.Common/StringHelper.h"
-#include "../../global.h"
-#include "../../palcfg.h"
+#include "../../main.h"
 
 #include "SDL.h"
 #include "SDL_endian.h"
@@ -149,6 +148,17 @@ static int SDLCALL WinRT_EventFilter(void *userdata, SDL_Event * event)
 	return 0;
 }
 
+static int input_event_filter(const SDL_Event *lpEvent, PALINPUTSTATE *state)
+{
+	if (lpEvent->type == SDL_KEYDOWN &&
+		lpEvent->key.keysym.sym == SDLK_AC_BACK &&
+		!gpGlobals->fInMainGame)
+	{
+		PAL_Shutdown(0);
+	}
+	return 0;
+}
+
 extern "C"
 INT UTIL_Platform_Init(int argc, char* argv[])
 {

+ 6 - 6
winrt/SDLPal.UWP/SDLPal.UWP.vcxproj

@@ -135,7 +135,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
@@ -148,7 +148,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
@@ -161,7 +161,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
@@ -174,7 +174,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
@@ -187,7 +187,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
@@ -200,7 +200,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>

+ 6 - 6
winrt/SDLPal.Windows/SDLPal.vcxproj

@@ -132,7 +132,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -145,7 +145,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -158,7 +158,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -171,7 +171,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -184,7 +184,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -197,7 +197,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>

+ 4 - 4
winrt/SDLPal.WindowsPhone/SDLPal.vcxproj

@@ -98,7 +98,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -111,7 +111,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -124,7 +124,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -137,7 +137,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>

+ 25 - 0
winrt/pal_config.h

@@ -24,3 +24,28 @@
 #define PAL_HAS_CONFIG_PAGE  1
 
 #define PAL_FILESYSTEM_IGNORE_CASE 1
+
+LPCSTR
+UTIL_BasePath(
+   VOID
+);
+
+LPCSTR
+UTIL_SavePath(
+   VOID
+);
+
+LPCSTR
+UTIL_ConfigPath(
+   VOID
+);
+
+LPCSTR
+UTIL_ScreenShotPath(
+   VOID
+);
+
+BOOL
+UTIL_TouchEnabled(
+   VOID
+);