/*****************************************************************************/
/* 枠付き日付／時刻入力ルーチン（共用）					     */
/*****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "defines.h"
#include "menu.h"
#include "aigtext.h"
#include "ascreen.h"
#include "amacro.h"
#include "skey.h"

/*****************************************************************************/

int cdt_input(func,x,y,format,year,month,day,mdata,colors,wget,rcode,getchs)
int (*func)(),(*getchs)();
int *x,*y,*year,*month,*day,rcode[];
unchar *format,*(*wget);
_MENU_DATA *mdata;
MCOLORS *colors;
/* dateでのyear,month,dayはtimeでのhour,min,secにあたる */
{
int sx,sy,ex,ey,l,ret,rkey;
int lx,ly,cur,c;
	sx=*x;
	sy=*y;
	
	/* 枠座標算出 */
	l=mdata->lcol+klen2(format)-1+mdata->rcol; /* format長さ-1＋左右空き桁 */
	ret=klen2(mdata->title); if (ret>l) l=ret;
	ret=klen2(mdata->tale);  if (ret>l) l=ret;
	l+=2; /* 枠幅 */
	if (l>=TWIDTH(&c)) return(-10011); /* length over */
	ex=sx+l-1; /* 座標は-1の位置 */
	ey=sy+mdata->aline+mdata->bline+2;
	
	if (mdata->remake==0) {
		/* ウインドウ用ワークエリア確保 */
		*wget=gettext2(sx,sy,ex,ey);
		if (*wget==NULL) return(-10003); /* memory can't get */
		
		/* ポップアップメニュー */
		if (mdata->popup) popup3s(sx,sy,ex,ey,colors->waku,mdata->pwait,mdata->udmode);
		
		/* 枠描画 */
		make_waku(sx,sy,ex,ey,mdata,colors);
		
		kflush();
	}
	
	/* モード受け渡し */
	l=BIT4; /* エラーでも値を返す */
	if (mdata->auto_ret) l|=BIT3; /* 自動確定 */
	if (mdata->key0) { /* 先行入力 */
		l|=BIT0;
		if (mdata->key0==2) l|=BIT1; /* 先行入力後カーソル */
	}
	
	cur=curon();
	cursor(&lx,&ly);
	c=EX_COLOR(-1);
	
	while (1) {
		B_LOCATE(sx+1+mdata->lcol,sy+mdata->aline+1);
		EX_COLOR(colors->menues); /* 入力文字色 */
		
		ret=func(format,year,month,day,l
				,CheckMESXY()? SKtou:0,&rkey,getchs);
		
		if (ret<0) goto DEND; /* error */
		if (ret!=100) break;
		
		/* 移動 */
		move_area(&sx,&sy,&ex,&ey
			,wget,mdata->mouse
			,mdata->startx,mdata->starty,mdata->endx,mdata->endy);
		
		/* 先行入力で前の入力を入れる */
		l|=BIT2;
	}
	
	if (mdata->popdown) { /* menu close */
		if (!(mdata->popdown==1 && ret!=-1)) {
			/* ESC onlyのときにESCでなかった場合を除く */
			popdown3s(sx,sy,ex,ey,colors->waku,mdata->pwait,mdata->udmode);
			/* under window put */
			puttext(sx,sy,*wget);
		}
	}
    DEND:
	B_LOCATE(lx,ly);
	EX_COLOR(c);
	curmode(cur);
	
	*x=sx;
	*y=sy;
	rcode[0]=rkey; /* ret key code */
	rcode[1]=ex;
	rcode[2]=ey;
	return(ret);
}

/****************************************************************************/
