#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(
	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
)
{
	chdir("/usr/gp2x");
	execl("./gp2xmenu", "./gp2xmenu", NULL);
}