#include "includes.h"

////////////////////////////////////////////////////////////////////////////////

int control(int btn)
{
	if (btn==BTN_ANY)
	{
		if (control(BTN_A)){return true;}
		if (control(BTN_B)){return true;}
		if (control(BTN_START)){return true;}
		if (control(BTN_SELECT)){return true;}
		return(false);
	}
	
	if (btn==BTN_UP)
	{
		if (key[KEY_UP]){return(true);}
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			poll_joystick();
			if (joy[joy_num].stick[0].axis[1].d1)
			{return (true);}
		}
		return(false);
	}

	if (btn==BTN_DN)
	{
		if (key[KEY_DOWN]){return(true);}
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			poll_joystick();
			if (joy[joy_num].stick[0].axis[1].d2)
			{return (true);}
		}
		return(false);
	}

	if (btn==BTN_LF)
	{
		if (key[KEY_LEFT]){return(true);}
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			poll_joystick();
			if (joy[joy_num].stick[0].axis[0].d1)
			{return (true);}
		}
		return(false);
	}

	if (btn==BTN_RT)
	{
		if (key[KEY_RIGHT]){return(true);}	
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			poll_joystick();
			if (joy[joy_num].stick[0].axis[0].d2)
			{return (true);}
		}
		return(false);
	}
	
	if (btn==BTN_A)
	{
		if (key_map[0]>0)
		{if (key[key_map[0]]) {return(true);} }
		
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			if (joy_map[0]>=0 && joy_map[0]<joy[joy_num].num_buttons)
			{
				poll_joystick();
				if (joy[joy_num].button[joy_map[0]].b)
				{return (true);}
			}
		}
		
		
		return(false);		
	}
	
	if (btn==BTN_B)
	{
		if (key_map[1]>0)
		{if (key[key_map[1]]) {return(true);} }
		
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			if (joy_map[1]>=0 && joy_map[1]<joy[joy_num].num_buttons)
			{
				poll_joystick();
				if (joy[joy_num].button[joy_map[1]].b)
				{return (true);}
			}
		}
		
		return(false);
	}

	if (btn==BTN_CANCEL)
	{
		if (key_map[2]>0)
		{if (key[key_map[2]]) {return(true);} }
		
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			if (joy_map[2]>=0 && joy_map[2]<joy[joy_num].num_buttons)
			{
				poll_joystick();
				if (joy[joy_num].button[joy_map[2]].b)
				{return (true);}
			}
		}
		
		return(false);
	}

	if (btn==BTN_OK)
	{
		if (key_map[3]>0)
		{if (key[key_map[3]]) {return(true);} }
		
		if (joystick_installed && joy_num>=0 && joy_num<num_joysticks)
		{
			if (joy_map[3]>=0 && joy_map[3]<joy[joy_num].num_buttons)
			{
				poll_joystick();
				if (joy[joy_num].button[joy_map[3]].b)
				{return (true);}
			}
		}
		
		return(false);
	}
	
	return(false);
}

////////////////////////////////////////////////////////////////////////////////

char * what_char(int kp)
{
	static char this_key[20];

	for (int i=0; i<20; i++)
	{this_key[i]=0;}


	if (kp==KEY_LEFT){sprintf(this_key,"LEFT");return(this_key);}
	if (kp==KEY_RIGHT){sprintf(this_key,"RIGHT");return(this_key);}
	if (kp==KEY_UP){sprintf(this_key,"UP");return(this_key);}
	if (kp==KEY_DOWN){sprintf(this_key,"DOWN");return(this_key);}


	if (kp==KEY_LSHIFT){sprintf(this_key,"LEFT SHIFT");return(this_key);}
	if (kp==KEY_RSHIFT){sprintf(this_key,"RIGHT SHIFT");return(this_key);}
	if (kp==KEY_LCONTROL){sprintf(this_key,"LEFT CONTROL");return(this_key);}
	if (kp==KEY_RCONTROL){sprintf(this_key,"RIGHT CONTROL");return(this_key);}
	if (kp==KEY_ALT){sprintf(this_key,"LEFT ALT");return(this_key);}
	if (kp==KEY_ALTGR){sprintf(this_key,"RIGHT ALT");return(this_key);}

	if (kp==KEY_LWIN){sprintf(this_key,"LEFT WINDOWS");return(this_key);}
	if (kp==KEY_RWIN){sprintf(this_key,"RIGHT WINDOWS");return(this_key);}
	if (kp==KEY_MENU){sprintf(this_key,"MENU");return(this_key);}

	if (kp==KEY_0_PAD){sprintf(this_key,"PAD 0");return(this_key);}
	if (kp==KEY_1_PAD){sprintf(this_key,"PAD 1");return(this_key);}
	if (kp==KEY_2_PAD){sprintf(this_key,"PAD 2");return(this_key);}
	if (kp==KEY_3_PAD){sprintf(this_key,"PAD 3");return(this_key);}
	if (kp==KEY_4_PAD){sprintf(this_key,"PAD 4");return(this_key);}
	if (kp==KEY_5_PAD){sprintf(this_key,"PAD 5");return(this_key);}
	if (kp==KEY_6_PAD){sprintf(this_key,"PAD 6");return(this_key);}
	if (kp==KEY_7_PAD){sprintf(this_key,"PAD 7");return(this_key);}
	if (kp==KEY_8_PAD){sprintf(this_key,"PAD 8");return(this_key);}
	if (kp==KEY_9_PAD){sprintf(this_key,"PAD 9");return(this_key);}

	if (kp==KEY_0){sprintf(this_key,"0");return(this_key);}
	if (kp==KEY_1){sprintf(this_key,"1");return(this_key);}
	if (kp==KEY_2){sprintf(this_key,"2");return(this_key);}
	if (kp==KEY_3){sprintf(this_key,"3");return(this_key);}
	if (kp==KEY_4){sprintf(this_key,"4");return(this_key);}
	if (kp==KEY_5){sprintf(this_key,"5");return(this_key);}
	if (kp==KEY_6){sprintf(this_key,"6");return(this_key);}
	if (kp==KEY_7){sprintf(this_key,"7");return(this_key);}
	if (kp==KEY_8){sprintf(this_key,"8");return(this_key);}
	if (kp==KEY_9){sprintf(this_key,"9");return(this_key);}

	if (kp==KEY_A){sprintf(this_key,"A");return(this_key);}
	if (kp==KEY_B){sprintf(this_key,"B");return(this_key);}
	if (kp==KEY_C){sprintf(this_key,"C");return(this_key);}
	if (kp==KEY_D){sprintf(this_key,"D");return(this_key);}
	if (kp==KEY_E){sprintf(this_key,"E");return(this_key);}
	if (kp==KEY_F){sprintf(this_key,"F");return(this_key);}
	if (kp==KEY_G){sprintf(this_key,"G");return(this_key);}
	if (kp==KEY_H){sprintf(this_key,"H");return(this_key);}
	if (kp==KEY_I){sprintf(this_key,"I");return(this_key);}
	if (kp==KEY_J){sprintf(this_key,"J");return(this_key);}
	if (kp==KEY_K){sprintf(this_key,"K");return(this_key);}
	if (kp==KEY_L){sprintf(this_key,"L");return(this_key);}
	if (kp==KEY_M){sprintf(this_key,"M");return(this_key);}
	if (kp==KEY_N){sprintf(this_key,"N");return(this_key);}
	if (kp==KEY_O){sprintf(this_key,"O");return(this_key);}
	if (kp==KEY_P){sprintf(this_key,"P");return(this_key);}
	if (kp==KEY_Q){sprintf(this_key,"Q");return(this_key);}
	if (kp==KEY_R){sprintf(this_key,"R");return(this_key);}
	if (kp==KEY_S){sprintf(this_key,"S");return(this_key);}
	if (kp==KEY_T){sprintf(this_key,"T");return(this_key);}
	if (kp==KEY_U){sprintf(this_key,"U");return(this_key);}
	if (kp==KEY_V){sprintf(this_key,"V");return(this_key);}
	if (kp==KEY_W){sprintf(this_key,"W");return(this_key);}
	if (kp==KEY_X){sprintf(this_key,"X");return(this_key);}
	if (kp==KEY_Y){sprintf(this_key,"Y");return(this_key);}
	if (kp==KEY_Z){sprintf(this_key,"Z");return(this_key);}

	if (kp==KEY_F1){sprintf(this_key,"F1");return(this_key);}
	if (kp==KEY_F2){sprintf(this_key,"F2");return(this_key);}
	if (kp==KEY_F3){sprintf(this_key,"F3");return(this_key);}
	if (kp==KEY_F4){sprintf(this_key,"F4");return(this_key);}
	if (kp==KEY_F5){sprintf(this_key,"F5");return(this_key);}
	if (kp==KEY_F6){sprintf(this_key,"F6");return(this_key);}
	if (kp==KEY_F7){sprintf(this_key,"F7");return(this_key);}
	if (kp==KEY_F8){sprintf(this_key,"F8");return(this_key);}
	if (kp==KEY_F9){sprintf(this_key,"F9");return(this_key);}
	if (kp==KEY_F10){sprintf(this_key,"F10");return(this_key);}
	if (kp==KEY_F11){sprintf(this_key,"F11");return(this_key);}
	if (kp==KEY_F12){sprintf(this_key,"F12");return(this_key);}

	if (kp==KEY_TILDE){sprintf(this_key,"TILDE");return(this_key);}
	if (kp==KEY_MINUS){sprintf(this_key,"MINUS");return(this_key);}
	if (kp==KEY_EQUALS){sprintf(this_key,"EQUALS");return(this_key);}
	if (kp==KEY_BACKSPACE){sprintf(this_key,"BACKSPACE");return(this_key);}
	if (kp==KEY_TAB){sprintf(this_key,"TAB");return(this_key);}
	if (kp==KEY_OPENBRACE){sprintf(this_key,"OPENBRACE");return(this_key);}
	if (kp==KEY_CLOSEBRACE){sprintf(this_key,"CLOSEBRACE");return(this_key);}
	if (kp==KEY_COLON){sprintf(this_key,"COLON");return(this_key);}
	if (kp==KEY_QUOTE){sprintf(this_key,"QUOTE");return(this_key);}
	if (kp==KEY_BACKSLASH){sprintf(this_key,"BACKSLASH");return(this_key);}
	if (kp==KEY_BACKSLASH2){sprintf(this_key,"OTHER BACKSLASH");return(this_key);}
	if (kp==KEY_COMMA){sprintf(this_key,"COMMA");return(this_key);}
	if (kp==KEY_STOP){sprintf(this_key,"STOP");return(this_key);}
	if (kp==KEY_SLASH){sprintf(this_key,"SLASH");return(this_key);}
	if (kp==KEY_SPACE){sprintf(this_key,"SPACE");return(this_key);}
	if (kp==KEY_INSERT){sprintf(this_key,"INSERT");return(this_key);}
	if (kp==KEY_DEL){sprintf(this_key,"DELETE");return(this_key);}
	if (kp==KEY_HOME){sprintf(this_key,"HOME");return(this_key);}
	if (kp==KEY_END){sprintf(this_key,"END");return(this_key);}
	if (kp==KEY_PGUP){sprintf(this_key,"PAGE UP");return(this_key);}
	if (kp==KEY_PGDN){sprintf(this_key,"PAGE DOWN");return(this_key);}
	if (kp==KEY_SLASH_PAD){sprintf(this_key,"PAD SLASH");return(this_key);}
	if (kp==KEY_ASTERISK){sprintf(this_key,"PAD ASTERISK");return(this_key);}
	if (kp==KEY_MINUS_PAD){sprintf(this_key,"PAD MINUS");return(this_key);}
	if (kp==KEY_PLUS_PAD){sprintf(this_key,"PAD PLUS");return(this_key);}
	if (kp==KEY_DEL_PAD){sprintf(this_key,"PAD DELETE");return(this_key);}
	if (kp==KEY_ENTER_PAD){sprintf(this_key,"PAD ENTER");return(this_key);}
	if (kp==KEY_PRTSCR){sprintf(this_key,"PRINT SCREEN");return(this_key);}
	if (kp==KEY_PAUSE){sprintf(this_key,"PAUSE");return(this_key);}

	//strange non english windows keys?
	if (kp==KEY_ABNT_C1){sprintf(this_key,"ABNT_C1");return(this_key);}
	if (kp==KEY_YEN){sprintf(this_key,"YEN");return(this_key);}
	if (kp==KEY_KANA){sprintf(this_key,"KANA");return(this_key);}
	if (kp==KEY_CONVERT){sprintf(this_key,"CONVERT");return(this_key);}
	if (kp==KEY_NOCONVERT){sprintf(this_key,"NO CONVERT");return(this_key);}
	if (kp==KEY_AT){sprintf(this_key,"AT");return(this_key);}
	if (kp==KEY_CIRCUMFLEX){sprintf(this_key,"CIRCUMFLEX");return(this_key);}
	if (kp==KEY_COLON2){sprintf(this_key,"OTHER COLON");return(this_key);}
	if (kp==KEY_KANJI){sprintf(this_key,"KANJI");return(this_key);}


	if (kp==KEY_ESC){sprintf(this_key,"ESCAPE");return(this_key);}
	if (kp==KEY_ENTER){sprintf(this_key,"ENTER");return(this_key);}


	if (kp==KEY_SCRLOCK){sprintf(this_key,"SCROLL LOCK");return(this_key);}
	if (kp==KEY_NUMLOCK){sprintf(this_key,"NUM LOCK");return(this_key);}
	if (kp==KEY_CAPSLOCK){sprintf(this_key,"CAPS LOCK");return(this_key);}


	sprintf(this_key, "UNKNOWN");
	return(this_key);
}

////////////////////////////////////////////////////////////////////////////////

int find_key(char * name)
{
	char findy[1000];
	sprintf(findy, "%s", name);
	
	for (int i=0; findy[i]; i++)
	{
		if (findy[i]>='a' && findy[i]<='z')
		{findy[i] -= 'a'; findy[i] += 'A';}
	}
	
	for (int i=0; i<KEY_MAX; i++)
	{
		if (strcmp(what_char(i), findy)==0)
		{return i;}
	}
	
	return -1;
}

////////////////////////////////////////////////////////////////////////////////
