/*
 * Keyboard related functions
 *
 * Copyright 1993 Bob Amstadt
 */

static char Copyright[] = "Copyright  Bob Amstadt, 1993";

#include "win.h"
#include "windows.h"

extern BOOL MouseButtonsStates[3];
extern BOOL AsyncMouseButtonsStates[3];
extern BYTE KeyStateTable[256];

/**********************************************************************
 *		GetKeyState			[USER.106]
 */
int GetKeyState(int keycode)
{
	switch(keycode) {
		case VK_LBUTTON:
		    return MouseButtonsStates[0];
		case VK_MBUTTON:
		    return MouseButtonsStates[1];
		case VK_RBUTTON:
		    return MouseButtonsStates[2];
		default:
		    return 0;
		}
}

/**********************************************************************
 *		GetKeyboardState			[USER.222]
 */
void GetKeyboardState(BYTE FAR *lpKeyState)
{
	if (lpKeyState != NULL) {
		memcpy(lpKeyState, KeyStateTable, 256);
		}
}

/**********************************************************************
 *
 *            GetAsyncKeyState        (USER.249)
 *
 *	Determine if a key is or was pressed.  retval has high-order 
 * byte set to 1 if currently pressed, low-order byte 1 if key has
 * been pressed.
 *
 *	This uses the variable AsyncMouseButtonsStates (set in event.c)
 * which have the mouse button number set to true if the mouse had been
 * depressed since the last call to GetAsyncKeyState.
 *
 *   	There should also be some keyboard stuff here... it isn't here
 * yet.
 */
int GetAsyncKeyState(int nKey)
{
	short 	retval;	

	switch (nKey) {

           case VK_LBUTTON:
		retval = AsyncMouseButtonsStates[0] | 
                              (MouseButtonsStates[0] << 8);
		break;
           case VK_MBUTTON:
                retval = AsyncMouseButtonsStates[1] |
                              (MouseButtonsStates[1] << 8);
		break;
           case VK_RBUTTON:
                retval = AsyncMouseButtonsStates[2] |
                              MouseButtonsStates[2] << 8;
		break;
           default:
                retval = 0;
		break;
        }

	bzero(AsyncMouseButtonsStates, 3);	/* all states to false */

	return retval;
}

