#include <stdio.h>
#include <stdlib.h>
#include <fmcfrb.h>
#include "defs.h"
extern int  strlen();


/*
 *	P
 *
 *
 */
void MOJI_input1Char(UCHAR *moji_area,unsigned int ky
				,int max_moji,int *lcur_x)
{
	unsigned int l;
	char	dmy[80];
	int	cur_x,tst_x,before_x;

	
	if (ky == 0xFFFF) return;

	cur_x = *lcur_x;
	if (cur_x > strlen(moji_area)) cur_x = strlen(moji_area);
	if (cur_x == max_moji) cur_x = max_moji-1;


	switch (ky) {
	case 0x8: /* BS */
		if (cur_x != 0) {
			if ( cur_x > 1 && iskanji(*(moji_area+cur_x - 2))) {
				cur_x -= 2;
				strcpy(moji_area+cur_x,moji_area+cur_x+2);
			} else {
				cur_x--;
				strcpy(moji_area+cur_x,moji_area+cur_x+1);
			}
		}
		break;
	case 0x7f:  /* DEL */
		l = strlen(moji_area);
		if (l != 0 && l >= (cur_x+1)) {
			if (l == 1 || iskanji(*(moji_area+cur_x)) == 0) {
				strcpy(moji_area+cur_x,moji_area+cur_x+1);
			} else {
				strcpy(moji_area+cur_x,moji_area+cur_x+2);
			}
		}
		break;

	case 0x1d: /*  */
		tst_x = before_x = 0;
		while (cur_x != tst_x && tst_x <max_moji) {
			before_x = tst_x;
			if (iskanji(*(moji_area+tst_x)))
				tst_x += 2;
			else
				tst_x++;
			
		}
		cur_x = before_x;
		break;
	case 0x1c: /*  */
		if (cur_x != strlen(moji_area)) {
			if (iskanji(*(moji_area+cur_x))) {
				cur_x = cur_x + 2;
			} else {
				cur_x++;
			}
			if (cur_x > max_moji-1) cur_x = max_moji-1;
		}
		break;
	case 0x0d: /* ret */
		break;
	default:
		if (strlen(moji_area) != max_moji-1 || iskanji(ky) == FALSE) {
		    if (strlen(moji_area) < max_moji && ky < 255 && ky > 31) {
			if (cur_x == strlen(moji_area)) {
				*(moji_area+cur_x) = ky;
				*(moji_area+cur_x+1) = '\0';
			} else {
				strcpy(dmy,moji_area+cur_x);
				strcpy(moji_area+cur_x+1,dmy);
				*(moji_area+cur_x) = ky;
			}
			cur_x++;
			if (cur_x > max_moji-1) cur_x = max_moji-1;
		    }
		}
		break;
	}

	*lcur_x = cur_x;

}
