/*
LONG g_JoystickXStart	= INT_MAX;
LONG g_JoystickXEnd		= INT_MIN;
LONG g_JoystickYStart	= INT_MAX;
LONG g_JoystickYEnd		= INT_MIN;
*/

			//g_JoystickXStart	= INT_MIN;
			//g_JoystickXEnd		= INT_MAX;
			//g_JoystickYStart	= INT_MAX;
			//g_JoystickYEnd		= INT_MIN;

void CRIOMAIN::UpdateJoystickX (DIJOYSTATE &js)
{
#define RANGE_JOYSTICK			1000L
#define DEADZONE_JOYSTICK		30L

	LONG lJ;
	LONG JoystickX_Center	= 0L;

	if ((g_JoystickX < -RANGE_JOYSTICK) || (g_JoystickX > RANGE_JOYSTICK))
	{
		// error
	}
	else
	{
		// Set StartPosition
		if (g_JoystickXStart > g_JoystickX)
			g_JoystickXStart = g_JoystickX;

		// Set EndPosition
		if (g_JoystickXEnd < g_JoystickX)
			g_JoystickXEnd = g_JoystickX;

		if ((g_JoystickXStart + g_JoystickXEnd) != 0) {
			JoystickX_Center = (g_JoystickXStart + g_JoystickXEnd) / 2;
		} else {
			JoystickX_Center = 0L;
		}

		lJ = JoystickX_Center - g_JoystickX;

		if (lJ > 0) {
			lJ -= DEADZONE_JOYSTICK;
		} else if (lJ < 0) {
			lJ += DEADZONE_JOYSTICK;
		}

		if ((g_JoystickX < JoystickX_Center + DEADZONE_JOYSTICK) && (g_JoystickX > JoystickX_Center - DEADZONE_JOYSTICK)) {
			g_JoystickXLast = 0;
		} else {
			g_JoystickXLast = lJ * 15.0L;
			if (g_JoystickXLast < -1000L) {
				g_JoystickXLast = -1000L;
			} else if (g_JoystickXLast > 1000L) {
				g_JoystickXLast = 1000L;
			}
		}		
	}

	if (g_lpJoystickXMode)
	{
		*g_lpJoystickXMode = g_JoystickXLast;
	}


#if defined(_DEBUG) && 0 // watcom
    static char s_szStr[256];
    sprintf (s_szStr, "@JOY_X@ RIO (%ld), CENTER (%ld),START (%ld), END (%ld), LAST (%ld) \n",
	 g_JoystickX, JoystickX_Center, g_JoystickXStart, g_JoystickXEnd, g_JoystickXLast);
    ::OutputDebugString(s_szStr);
#endif // watcom
}

void CRIOMAIN::UpdateJoystickY (DIJOYSTATE &js)
{
#define RANGE_JOYSTICK			1000L
#define DEADZONE_JOYSTICK		30L


	LONG lJ;
	LONG JoystickY_Center	= 0L;

	if ((g_JoystickY < -RANGE_JOYSTICK) || (g_JoystickY > RANGE_JOYSTICK))
	{
		// error
	}
	else
	{
		// Set StartPosition
		if (g_JoystickYStart > g_JoystickY)
			g_JoystickYStart = g_JoystickY;

		// Set EndPosition
		if (g_JoystickYEnd < g_JoystickY)
			g_JoystickYEnd = g_JoystickY;

		// Set CenterPosition
		if ((g_JoystickYStart + g_JoystickYEnd) != 0) {
			JoystickY_Center = (g_JoystickYStart + g_JoystickYEnd) / 2;
		} else {
			JoystickY_Center = 0L;
		}

		lJ = JoystickY_Center - g_JoystickY;

		// High sensitivity
		// Calculate from the moment of exiting the Dead Zone as 0
		if (lJ > 0) {
			lJ -= DEADZONE_JOYSTICK;
		} else if (lJ < 0) {
			lJ += DEADZONE_JOYSTICK;
		}

		if ((g_JoystickY < JoystickY_Center + DEADZONE_JOYSTICK) && (g_JoystickY > JoystickY_Center - DEADZONE_JOYSTICK)) {
			g_JoystickYLast = 0;
		} else {
			g_JoystickYLast = lJ * -15.0L;
			if (g_JoystickYLast < -1000L) {
				g_JoystickYLast = -1000L;
			} else if (g_JoystickYLast > 1000L) {
				g_JoystickYLast = 1000L;
			}
		}		
	}

	js.lY = g_JoystickYLast;

#if defined(_DEBUG) && 0 // watcom
    static char s_szStr[256];
    sprintf (s_szStr, "@JOY_Y@ RIO (%ld), CENTER (%ld),START (%ld), END (%ld), LAST (%ld) \n",
	 g_JoystickY, JoystickY_Center, g_JoystickYStart, g_JoystickYEnd, g_JoystickYLast);
    ::OutputDebugString(s_szStr);
#endif // watcom

}
/*
void CRIOMAIN::UpdateJoystick (DIJOYSTATE &js)
{
#define DEADZONE_JOYSTICK	20L

//*
//	== JOYSTICK ==

//  LEFT (+)  -  RIGHT (-)
//  UP   (-)  -  DOWN  (+)
//
	if (g_lpJoystickXMode)
	{
		if (g_JoystickX > DEADZONE_JOYSTICK || g_JoystickX < -DEADZONE_JOYSTICK) {
			*g_lpJoystickXMode = g_JoystickX * -10;
		} else {
			*g_lpJoystickXMode = 0;
		}
	}

	if (g_JoystickY > DEADZONE_JOYSTICK || g_JoystickY < -DEADZONE_JOYSTICK) {
		js.lY = g_JoystickY * 10;
	} else {
		js.lY = 0;
	}	

#if defined(_DEBUG) && 0 // watcom
    static char s_szStr[256];
    sprintf (s_szStr, "x:[%ld], y:[%ld], z:[%ld]\n",
	 g_JoystickX, g_JoystickY, js.lRz);
    ::OutputDebugString(s_szStr);
#endif // watcom

}
*/
