#include    <stdio.h>
#include    <ctype.h>
#include    <egb.h>
#include    <fmc.h>
#include    "consol.h"
#include	"keyboard.h"
#include	"ledit.h"
#include	"graphic.h"

char	work[EgbWorkSize];

#define		KB_KANJI	0x59	/* かな/漢字 */
#define		KB_KDIC		0x6B	/* 漢字辞書 */
#define		KB_KDEL		0x6C	/* 単語抹消 */
#define		KB_KSAV		0x6D	/* 単語登録 */
#define		KB_HANZEN	0x71	/* 半角/全角 */

extern int	ec;

void main()
{
	int  key;
	char ch;

	EGB_init(work,EgbWorkSize);
	EGB_resolution(work,0,3);
	EGB_resolution(work,1,3);
	EGB_displayPage(work,1,3);

	copen();

	cursor_off;
	DSP_rbox(0, 0, 639, 479, 15, 7);
	DSP_rbox(176, 56, 448, 75, 9, 15);
	color(0, 15);
	put_str(23, 3, "＊＊＊　キーボードテスト　＊＊＊");
	color(13, 7);
	put_str(59, 15, "[ESC] 終了");
	color(14, 7);
	put_str(56, 24, "By Trouble･MakerのＪ.Ｊ");
	DSP_rbox(104, 219, 568, 254, 15, 1);
	color(15, 1);

    do {

		do {
			ch=getch(1);
		} while ( ch == 0xFF );

		key = ec >> 8;

		if ( ch == 0x1B && key != 0x01 ) ch = getch(1);	/* not ESC */

		csr_posit(15,12);
		cprintf("あなたの押したキーは、");

		cprintf("%s ", ec & 0x10 ? "CTRL ＋" : "       " );
		cprintf("%s ", ec & 0x04 ? "SHIFT ＋" : "        " );

		switch ( key ) {
			case  KB_ESC  : cprintf(" ＥＳＣ　"); break;
			case  KB_PF01 : cprintf("ＰＦ　１ "); break;
			case  KB_PF02 : cprintf("ＰＦ　２ "); break;
			case  KB_PF03 : cprintf("ＰＦ　３ "); break;
			case  KB_PF04 : cprintf("ＰＦ　４ "); break;
			case  KB_PF05 : cprintf("ＰＦ　５ "); break;
			case  KB_PF06 : cprintf("ＰＦ　６ "); break;
			case  KB_PF07 : cprintf("ＰＦ　７ "); break;
			case  KB_PF08 : cprintf("ＰＦ　８ "); break;
			case  KB_PF09 : cprintf("ＰＦ　９ "); break;
			case  KB_PF10 : cprintf("ＰＦ１０ "); break;
			case  KB_PF11 : cprintf("ＰＦ１１ "); break;
			case  KB_PF12 : cprintf("ＰＦ１２ "); break;
			case  KB_PF13 : cprintf("ＰＦ１３ "); break;
			case  KB_PF14 : cprintf("ＰＦ１４ "); break;
			case  KB_PF15 : cprintf("ＰＦ１５ "); break;
			case  KB_PF16 : cprintf("ＰＦ１６ "); break;
			case  KB_PF17 : cprintf("ＰＦ１７ "); break;
			case  KB_PF18 : cprintf("ＰＦ１８ "); break;
			case  KB_PF19 : cprintf("ＰＦ１９ "); break;
			case  KB_PF20 : cprintf("ＰＦ２０ "); break;
			case  KB_BPAGE: cprintf("　前 行　"); break;
			case  KB_NPAGE: cprintf("　次 行　"); break;
			case  KB_INS  : cprintf("　挿 入　"); break;
			case  KB_DEL  : cprintf("　削 除　"); break;
			case  KB_UP   : cprintf("　 ↑ 　 "); break;
			case  KB_LEFT : cprintf("   ← 　 "); break;
			case  KB_RIGHT: cprintf("   →  　"); break;
			case  KB_DOWN : cprintf("   ↓  　"); break;
			case  KB_HOME : cprintf("ＨＯＭＥ "); break;
			case  KB_BS   : cprintf("ﾊﾞｯｸｽﾍﾟｰｽ"); break;
			case  KB_TAB  : cprintf(" ＴＡＢ  "); break;
			case  KB_CR   : cprintf("ﾘﾀｰﾝｷｰ1  "); break;
			case  KB_CR2  : cprintf("ﾘﾀｰﾝｷｰ2  "); break;
			case  KB_CR3  : cprintf("  実 行　"); break;
			case  KB_CAN  : cprintf("  取 消　"); break;
			case  KB_SPC  : cprintf("スペース "); break;
			case  KB_KDIC : cprintf("漢字辞書 "); break;
			case  KB_KDEL : cprintf("単語抹消 "); break;
			case  KB_KSAV : cprintf("単語登録 "); break;
			case  KB_HANZEN : cprintf("半角/全角"); break;
			case  KB_KANJI  : cprintf("かな/漢字"); break;
			default    :
			if (isprint(ch))	/* 表示可能文字 */
				cprintf("    %c    ",ch);
			else if (iscntrl(ch))
				cprintf("ｾｲｷﾞｮ ﾓｼﾞ");
			else if ( ch >= 0xA0 && ch <= 0xDF )	/* ｶﾅ */
				cprintf("    %c    ",ch);
			else
				cprintf("  その他 ");
		}
		cprintf("です。");
	} while ( key != 0x01 );

	cursor_off;
}
