#include "WimpLib:Keyboard.h"

#include "swis.h"

int Keyboard_GetRepeatRate(void)
{
	int rate;

	_swix(OS_Byte, _INR(0,2)|_OUT(1), 197, 0, 255, &rate);

	return rate;
}

bool Keyboard_PollShift(void)
{
	int pressed;

	_swix(OS_Byte, _INR(0,1)|_OUT(1), 121, 0x80, &pressed);

	return (pressed != 0);
}

bool Keyboard_PollCtrl(void)
{
	int pressed;

	_swix(OS_Byte, _INR(0,1)|_OUT(1), 121, 0x81, &pressed);

	return (pressed != 0);
}

bool Keyboard_PollAlt(void)
{
	int pressed;

	_swix(OS_Byte, _INR(0,1)|_OUT(1), 121, 0x82, &pressed);

	return (pressed != 0);
}

int Keyboard_KeyPressed(void)
{
	int pa, pb;

	_swix(OS_Byte, _INR(0,2)|_OUTR(1,2), 129, 0, 0, &pa, &pb);
	if (!pb)
	{
		if (pa)
			return pa;

		// Ctrl keys are configured to return a leading 0
		_swix(OS_Byte, _INR(0,2)|_OUTR(1,2), 129, 0, 0, &pa, &pb);
		if (!pb && pa)
			return 0x100 + pa;
	}

	return -1;
}
