#include	"compiler.h"
#if defined(SUPPORT_SOFTKBD)
#include	"bmpdata.h"
#include	"softkbd.h"
#include	"keystat.h"
#define	SOFTKEY_MENU	0xfe
#define	SOFTKEY_NC		0xff
typedef struct {
	UINT8	key;
	UINT8	key2;
	UINT8	led;
	UINT8	flag;
	void	*ptr;
	CMNBMP	bmp;
	CMNPAL	pal[16];
} SOFTKBD;
static	SOFTKBD	softkbd;
#if (SUPPORT_SOFTKBD == 1)
#if defined(SIZE_QVGA)
#include	"softkbd1.res"
#else
#include	"softkbd2.res"
#endif
#elif (SUPPORT_SOFTKBD == 2)
#error not support (SUPPORT_SOFTKBD == 2)
#else
#if !defined(SUPPORT_PC9801_119)
#include	"softkbd.res"
#else
#include	"softkbd3.res"
#endif
#endif
static void loadbmp(const char *filename) {
	void	*ptr;
	softkbd.ptr = NULL;
	ptr = (void *)bmpdata_solvedata(np2kbd_bmp);
	if (ptr != NULL) {
		if (cmndraw_bmp4inf(&softkbd.bmp, ptr) == SUCCESS) {
			softkbd.ptr = ptr;
		}
		else {
			_MFREE(ptr);
		}
	}
	softkbd.flag |= SOFTKEY_FLAGREDRAW;
	(void)filename;
}
void softkbd_initialize(void) {
	softkbd.key = SOFTKEY_NC;
	softkbd.led = 0;
	loadbmp(NULL);
}
void softkbd_deinitialize(void) {
	void	*ptr;
	ptr = softkbd.ptr;
	softkbd.ptr = NULL;
	if (ptr) {
		_MFREE(ptr);
	}
}
BOOL softkbd_getsize(int *width, int *height) {
	if (softkbd.ptr == NULL) {
		return(FAILURE);
	}
	if (width) {
		*width = softkbd.bmp.width;
	}
	if (height) {
		*height = softkbd.bmp.height;
	}
	return(SUCCESS);
}
REG8 softkbd_process(void) {
	return(softkbd.flag);
}
BOOL softkbd_paint(CMNVRAM *vram, CMNPALCNV cnv, BOOL redraw) {
	UINT8	flag;
	BOOL	ret;
	flag = softkbd.flag;
	softkbd.flag = 0;
	if (redraw) {
		flag = SOFTKEY_FLAGREDRAW | SOFTKEY_FLAGDRAW;
	}
	ret = FALSE;
	if ((flag & SOFTKEY_FLAGREDRAW) && (vram) && (cnv)) {
		(*cnv)(softkbd.pal, softkbd.bmp.paltbl, softkbd.bmp.pals, vram->bpp);
		cmndraw_bmp16(vram, softkbd.ptr, cnv, CMNBMP_LEFT | CMNBMP_TOP);
		ret = TRUE;
	}
	if (flag & SOFTKEY_FLAGDRAW) {
		TRACEOUT(("softkbd_paint"));
		ledpaint(vram);
		ret = TRUE;
	}
	return(ret);
}
BOOL softkbd_down(int x, int y) {
	UINT8	key;
	softkbd_up();
	key = getsoftkbd(x, y);
	if (key == SOFTKEY_MENU) {
		return(TRUE);
	}
	else if (key != SOFTKEY_NC) {
		keystat_down(&key, 1, NKEYREF_SOFTKBD);
		softkbd.key = key;
	}
	return(FALSE);
}
void softkbd_up(void) {
	if (softkbd.key != SOFTKEY_NC) {
		keystat_up(&softkbd.key, 1, NKEYREF_SOFTKBD);
		softkbd.key = SOFTKEY_NC;
	}
}
void softkbd_led(REG8 led) {
	TRACEOUT(("softkbd_led(%x)", led));
	if (softkbd.led != led) {
		softkbd.led = led;
		softkbd.flag |= SOFTKEY_FLAGDRAW;
	}
}
#endif
RetroPC.NET-CVS <cvs@retropc.net>