/*
			指定サイズ文字入力関数 Ver.1.010
											Okome System
*/

#include	<string.h>
#include	<MOS.H>
#include	<FMCfrb.h>
#include	<kkstr2.h>
#include	<Normlib.h>

extern int kkx, kky;

int keyin(int x, int y, char *nn, int l, int c0, int c1, int p )
{
	static int xp=0;
	unsigned int m, k;
	int sl, r = 3;
	sl = strlen(nn);
	kkx = x + xp*8;
	kky = y;
	if (xp > sl)
		xp = sl;
	do	{
		m = KYB_read(1, &k);
	}	while((m & 0xff00) == 0xff00 && KAN_inpchk()==KAN_MISET);
	if ( (m & 0xff00) != 0xff00)
	{
		switch(m)
		{
		case 0x08:
			if (sl) {
				if (xp==0) {
					xp++;
					if (iskanji3(nn,xp+1)==3)
						xp++;
				}
				if (iskanji3(nn,xp)==3) {
					strcpy(&nn[xp-2], &nn[xp]);
					sl--;
					xp--;
				} else
					strcpy(&nn[xp-1], &nn[xp]);
				sl--;
				xp--;
			}
			break;
		case 0x0d:
		case 0x8012:
			xp = 0;
			r = 0;
			break;
		case 0x1d:
			if (xp) {
				xp--;
				if (iskanji3(nn,xp+1)==3)
					xp--;
			}
			break;
		case 0x1c:
			if (xp<sl) {
				xp++;
				if (iskanji3(nn,xp+1)==3)
					if (xp<sl)
						xp++;
					else
						xp--;
			}
			break;
		case 0x7f:
			if (xp<sl)
				strcpy(&nn[xp], &nn[xp+iskanji3(nn,xp+1)]);
			break;
		case 0x1b:
		case 0x8011:
			r = 2;
			break;
		default:
			if (0x1F < m && m < 0x100) {
				if (sl<l) {
					_rstrcpy( &nn[xp+1], &nn[xp] );
					sl++;
					nn[xp] = m;
					if (xp<l-1) xp++;
				}
				else if (iskanji3(nn,l)==2) {
					nn[l-1] = 0;
					sl--;
				}
			}
		}
	}
	if ( m / 0x100 != 0xff || p) {
		MOS_disp(0);
		boxf( x, y, x+l*8-1, y+15, c1 );
		symbol( x,y+15, nn, 16, c0 );
		if (r)
			boxb( x + xp*8, y, x + xp*8+1, y+15, 0xa );
		MOS_disp(1);
	}
	return (r);
}
