/*************************************************************************
*	"center01.c" : サンプルセンタープログラム(type 1)
*-------------------------------------------------------------------------
*	BIG-Model系ホスト
*************************************************************************/

/*	-------------------	------------------------------------------------
	マクロ				説明
	-------------------	------------------------------------------------
	CENTER_TITLE		タイトル
	CENTER_KEY			センターキーワード
	CENTER_RECKEY		接続時間記録用キーワード
	CENTER_TEL			初期設定電話番号
	CHEK_CONNECT1		接続直後の確認用文字列#1				省略可
	WAIT_CONNECT1		接続確認待ち時間#1						省略可
	SEND_CONNECT1		接続時の送信文字列#1					省略可
	WAIT_CONNECT2		接続確認待ち時間#2						省略可
	CHEK_CONNECT2		接続直後の確認用文字列#2				省略可
	SEND_CONNECT2		接続時の送信文字列#2					省略可
	CHEK_CONNECT3		接続直後の確認用文字列#3				省略可
	WAIT_CONNECT3		接続確認待ち時間#3						省略可
	SEND_CONNECT3		接続時の送信文字列#3					省略可
	CHEK_CONNECT4		接続直後の確認用文字列#4				省略可
	WAIT_CONNECT4		接続確認待ち時間#4						省略可
	SEND_CONNECT4		接続時の送信文字列#4					省略可
	CHK_ID				ID 送信確認用文字列
	CHK_PW				パスワード送信確認用文字列
	LOGOUT_COMMAND		ログアウト・コマンド					省略可
	CHEK_LOGOUT1		ログアウト確認用文字列#1				省略可
	WAIT_LOGOUT1		ログアウト待ち時間#1					省略可
	SEND_LOGOUT1		ログアウト送信文字列#1					省略可
	CHEK_LOGOUT2		ログアウト確認用文字列#2				省略可
	WAIT_LOGOUT2		ログアウト待ち時間#2					省略可
	SEND_LOGOUT2		ログアウト送信文字列#2					省略可
	CHEK_LOGOUT3		ログアウト確認用文字列#3				省略可
	WAIT_LOGOUT3		ログアウト待ち時間#3					省略可
	SEND_LOGOUT3		ログアウト送信文字列#3					省略可
	CHEK_LOGOUT4		ログアウト確認用文字列#4				省略可
	WAIT_LOGOUT4		ログアウト待ち時間#4					省略可
	SEND_LOGOUT4		ログアウト送信文字列#4					省略可
	LINBUF_MAX			ログバッファの保持行数					省略可
	LOGSAVE_SUB			ログ保存用のファイル名拡張子			省略可
	LOGSAVE_PATH		ログ保存用ディレクトリ					省略可
	-------------------	------------------------------------------------
*/

/***********************************************************************/
#define	CENTER_TITLE	"Sample center (type-01:BIG-Model)"
#define	CENTER_KEY		"CENTER01"
#define	CENTER_RECKEY	"CENTER01"
#define	CENTER_TEL		"XX-XXXX-XXXX"
#define	CHK_ID			"ＩＤを入力してください :"
#define	CHK_PW			"パスワードを入力してください :"
#define	LOGOUT_COMMAND	"E\r"
#define	CHEK_LOGOUT1	"(Y/N) ? "
#define	SEND_LOGOUT1	"Y\r"
#define	LINBUF_MAX		1024
#define	LOGSAVE_SUB		".c01"
#define	LOGSAVE_PATH	"K:/TMP/"
/***********************************************************************/

#define	CENTERKEY		CENTER_KEY
#define	RECKEY			_center01_recKey

char	*_center01_recKey;

int		_CENTER01_init()
{
	char	*center;

	NTM_setCenterFunc(CENTERKEY, CENTER_TITLE);
	if ( (center = NTM_centerAlloc( CENTERKEY )) != NULL )
	{
		NtmCenterSetName(    center, CENTER_TITLE);
		NtmCenterSetFuncKey( center, "CENTER01");
		NtmCenterSetRecKey(  center, CENTER_RECKEY );
		NtmCenterSetRsPara(  center, -1, -1, -1 );
		NtmCenterSetRsBreak( center, 50 );
		NtmCenterSetCrWait(  center, 100 );
		NtmCenterSetTel(     center, CENTER_TEL );
		NtmCenterSetModem1(  center, "ATZ" );
	}
	return (NORMAL);
}


/*************************************************************************
*	パラメータの指定
*************************************************************************/

int		_CENTER01_para( char *ntm, char *center )
{
	char	*keyWord;
	char	*id;

	keyWord = NtmCenterGetKeyWord(center);
	if ( NTM_centerConfig( keyWord ) == NORMAL )
	{
		id  = NtmCenterGetID( center );
		if ( id[0] == 0 || NtmCenterChkPassword(center) == FALSE )
			return (ERR);
		return (NORMAL);
	} else
		return (ERR);
}


/*************************************************************************
*	処理の中断
*************************************************************************/

int		_CENTER01_abort( char *ntm, char *center )
{
	AplRecWrite("%s:Abort", RECKEY);
	NTM_offline( ntm, DTR_OFF_TIME );
	return (NORMAL);
}

/*************************************************************************
*	[AUTO]メニュー処理
*************************************************************************/

int		_CENTER01_autoMenu( char *ntm, char *center, int x, int y)
{
	int		ret;
	char	*obj;
	char	*mnu;
	char	title[128], tmp[128], tmBuf[32];
	long	loginTime;

	if ( ntm == NULL || center == NULL )
		return (0);
	loginTime = NtmCenterGetTime(center, NTM_TIME_LOGIN );
	if ( loginTime )
	{
		sprintf( tmp, "Login time %s ", GetAsciiTime(tmBuf,loginTime) );
	} else
	{
		strcpy( tmp, "Login time XXXX/XX/XX XX:XX:XX");
	}
	obj = MNU_alloc(3);
	MNU_setObj(obj, 0, MNU_MSG,  0 , tmp               , NULL, 0, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'O', "OFF 終了"        , NULL, 1, NULL, NULL );
	MNU_setObj(obj, 2, MNU_NOR, 'B', "OFF 強制回線切断", NULL, 2, NULL, NULL );

	sprintf( title, "MENU : %s", NtmCenterGetName(center));
	mnu = MNU_open( x, y, MNUATT_EXIT, obj, title );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	switch ( ret )
	{
		case 1:
			return	NTM_callLogout( ntm );
		case 2:
			NTM_wait(3);
			AplRecWrite("%s:Abort disconnect", RECKEY);
			return NTM_offline(ntm, DTR_OFF_TIME);
	}
	return (NORMAL);
}

/*************************************************************************
*	ログイン処理
*************************************************************************/

int		_CENTER01_login( char *ntm, char *center )
{
	int		i, ret, retry;
	char	*name, *tel, *id, *para;
	int		argc;
	char	*s, **argv;
	long	tm;
	char	*cns;
	char	*mos;

	mos = NULL;
	cns = NtmGetCnsPtr(ntm);
#ifdef	LINBUF_MAX
	if ( CnsGet_maxLinBuf(cns) < LINBUF_MAX )
		CnsSet_maxLinBuf(cns,LINBUF_MAX);
#endif
	_center01_recKey = NtmCenterGetRecKey(center);

	name = NtmCenterGetName( center );
	tel  = NtmCenterGetTel(  center );
	id   = NtmCenterGetID(   center );
	if ( tel[0] == 0 || id[0] == 0 || NtmCenterChkPassword(center) == FALSE )
	{
		_ntm_errmsg_no_setup_id_and_pw();
		if ( _CENTER01_para( ntm, center ) )
			return (ERR);
		id  = NtmCenterGetID( center );
		tel = NtmCenterGetTel( center );
	}

	_ntm_dspmsg_dial_start( name, tel, cns );

	AplRecWrite("%s:Dial start tel.%s", RECKEY, tel );
	if ( ntm_dialStart( ntm, tel ) != NORMAL )
	{
ABORT:	_CENTER01_abort( ntm, center );
		if ( mos )	MOS_pop(mos);
		return (ERR);
	}

	mos = MOS_push();
	MOS_curType(MOSCUR_TIME);
	MOS_CON();
	AplRecWrite("%s:Connect", RECKEY );

#ifdef	CHEK_CONNECT1
# ifndef	WAIT_CONNECT1
#	define	WAIT_CONNECT1	30
# endif
	s = CHEK_CONNECT1;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, WAIT_CONNECT1, s, NULL );
		if ( ret == NTM_WAIT_CANCEL )
			goto ABORT;
		NTM_wait(1);
	}
#endif
#ifdef	SEND_CONNECT1
	s = SEND_CONNECT1;
	if ( *s )
		NTM_rsPuts( ntm, s );
#endif

#ifdef	CHEK_CONNECT2
# ifndef	WAIT_CONNECT2
#	define	WAIT_CONNECT2	30
# endif
	s = CHEK_CONNECT2;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, WAIT_CONNECT2, s, NULL );
		if ( ret == NTM_WAIT_CANCEL )
			goto ABORT;
		NTM_wait(1);
	}
#endif
#ifdef	SEND_CONNECT2
	s = SEND_CONNECT2;
	if ( *s )
		NTM_rsPuts( ntm, s );
#endif

#ifdef	CHEK_CONNECT3
# ifndef	WAIT_CONNECT3
#	define	WAIT_CONNECT3	30
# endif
	s = CHEK_CONNECT3;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, WAIT_CONNECT3, s, NULL );
		if ( ret == NTM_WAIT_CANCEL )
			goto ABORT;
		NTM_wait(1);
	}
#endif
#ifdef	SEND_CONNECT3
	s = SEND_CONNECT3;
	if ( *s )
		NTM_rsPuts( ntm, s );
#endif

#ifdef	CHEK_CONNECT4
# ifndef	WAIT_CONNECT4
#	define	WAIT_CONNECT4	30
# endif
	s = CHEK_CONNECT4;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, WAIT_CONNECT4, s, NULL );
		if ( ret == NTM_WAIT_CANCEL )
			goto ABORT;
		NTM_wait(1);
	}
#endif
#ifdef	SEND_CONNECT4
	s = SEND_CONNECT4;
	if ( *s )
		NTM_rsPuts( ntm, s );
#endif

	ret = NTM_waitInstr( ntm, 30, CHK_ID, NULL );
	if ( ret == NTM_WAIT_CANCEL )
		goto ABORT;
	NTM_wait(1);
	NTM_rsPuts( ntm, id );	NTM_rsPuts(ntm,"\r");

	ret = NTM_waitStr( ntm, 30, CHK_PW, NULL);
	if ( ret == NTM_WAIT_CANCEL )
		goto ABORT;
	NTM_wait(1);
	NTM_sendCenterPassword( ntm, center );	NTM_rsPuts(ntm,"\r");

	/* ログイン時間	*/
	time(&tm);
	NtmCenterSetTime( center, NTM_TIME_LOGIN, tm );
	AplRecWrite("%s:Login successful", RECKEY );
	MOS_pop(mos);

	return (NORMAL);
}


/*************************************************************************
*	ログアウト処理
*************************************************************************/

int		_CENTER01_logout( char *ntm, char *center )
{
	int		ret;
	long	tm;
	char	*s;
#ifdef	LOGSAVE_SUB
	char	*sub;
	char	*btn;
	char	*argv[2], tmp[128], *fn;
	char	*cns;
#endif

	time(&tm);
	NtmCenterSetTime( center, NTM_TIME_LOGOUT, tm );
	AplRecWrite("%s:Logout", RECKEY);
	NTM_wait(1);
	NTM_rsPuts( ntm, LOGOUT_COMMAND);

#ifdef	CHEK_LOGOUT1
# ifndef	WAIT_LOGOUT1
#	define	WAIT_LOGOUT1	30
# endif
	s = CHEK_LOGOUT1;
	if ( *s )
	{
		NTM_waitInstr( ntm, WAIT_LOGOUT1, CHEK_LOGOUT1, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT1
			s = SEND_LOGOUT1;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT1);
			}
#endif
		}
	}
#endif

#ifdef	CHEK_LOGOUT2
# ifndef	WAIT_LOGOUT2
#	define	WAIT_LOGOUT2	30
# endif
	s = CHEK_LOGOUT2;
	if ( *s )
	{
		NTM_waitInstr( ntm, WAIT_LOGOUT2, CHEK_LOGOUT2, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT2
			s = SEND_LOGOUT2;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT2);
			}
#endif
		}
	}
#endif

#ifdef	CHEK_LOGOUT3
# ifndef	WAIT_LOGOUT3
#	define	WAIT_LOGOUT3	30
# endif
	s = CHEK_LOGOUT3;
	if ( *s )
	{
		NTM_waitInstr( ntm, WAIT_LOGOUT3, CHEK_LOGOUT3, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT3
			s = SEND_LOGOUT3;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT3);
			}
#endif
		}
	}
#endif

#ifdef	CHEK_LOGOUT4
# ifndef	WAIT_LOGOUT4
#	define	WAIT_LOGOUT4	30
# endif
	s = CHEK_LOGOUT4;
	if ( *s )
	{
		NTM_waitInstr( ntm, WAIT_LOGOUT4, CHEK_LOGOUT4, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT4
			s = SEND_LOGOUT4;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT4);
			}
#endif
		}
	}
#endif

	NTM_waitInstr( ntm, 30, "NO CARRIER", NULL );
	NTM_offline(ntm, DTR_OFF_TIME);
	AplRecWrite("%s:Disconnect", RECKEY);

#ifdef	LOGSAVE_SUB
	sub = LOGSAVE_SUB;
	if ( *sub )
	{	/* ログを保存するか確認する	*/
		btn = MNU_allocBtn(2);
		MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "SAVE : [実行]" );
		MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
		ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
			C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
			"    ログの保存を行いますか？  ");
		MNU_freeBtn(btn);
		if ( ret == 1 )
		{	/* 行う	*/
#ifdef		LOGSAVE_PATH
			fn = MakeFnDate( tmp, LOGSAVE_PATH     , "l", sub );
#else
			fn = MakeFnDate( tmp, AplGetStartPath(), "l", sub );
#endif
			if ( fn )
			{
				cns = NtmGetCnsPtr(ntm);
				CNS_saveFile( cns, fn, 1 );
			}
		}
	}
#endif
	return (NORMAL);
}

/*************************************************************************
*	受信行のチェック
*************************************************************************/

int		_CENTER01_lineCheck( char *ntm, char *buf )
{
	return (NORMAL);
}

/*************************************************************************
*	入力文字列の送信
*************************************************************************/

int		_CENTER01_inputCheck( char *ntm, char *s )
{
	NTM_rsPuts( ntm, s    );
	NTM_rsPuts( ntm, "\r" );
	return (NORMAL);
}

/*************************************************************************
*	フィルタ設定メニュー
*************************************************************************/

int		_CENTER01_filterMenu( char *ntm, int x, int y )
{
	return	NtmUsr_filterMenu( ntm, x, y );
}

#undef	CENTERKEY
#undef	RECKEY

#undef	CENTER_TITLE
#undef	CENTER_KEY
#undef	CENTER_RECKEY
#undef	CENTER_TEL
#ifdef	CHEK_CONNECT1
# undef	CHEK_CONNECT1
#endif
#ifdef	WAIT_CONNECT1
# undef	WAIT_CONNECT1
#endif
#ifdef	SEND_CONNECT1
# undef	SEND_CONNECT1
#endif
#ifdef	CHEK_CONNECT2
# undef	CHEK_CONNECT2
#endif
#ifdef	WAIT_CONNECT2
# undef	WAIT_CONNECT2
#endif
#ifdef	SEND_CONNECT2
# undef	SEND_CONNECT2
#endif
#ifdef	CHEK_CONNECT3
# undef	CHEK_CONNECT3
#endif
#ifdef	WAIT_CONNECT3
# undef	WAIT_CONNECT3
#endif
#ifdef	SEND_CONNECT3
# undef	SEND_CONNECT3
#endif
#ifdef	CHEK_CONNECT4
# undef	CHEK_CONNECT4
#endif
#ifdef	WAIT_CONNECT4
# undef	WAIT_CONNECT4
#endif
#ifdef	SEND_CONNECT4
# undef	SEND_CONNECT4
#endif
#undef	CHK_ID
#undef	CHK_PW
#undef	LOGOUT_COMMAND
#ifdef	CHEK_LOGOUT1
# undef	CHEK_LOGOUT1
#endif
#ifdef	SEND_LOGOUT1
# undef	SEND_LOGOUT1
#endif
#ifdef	WAIT_LOGOUT1
# undef	WAIT_LOGOUT1
#endif
#ifdef	CHEK_LOGOUT2
# undef	CHEK_LOGOUT2
#endif
#ifdef	WAIT_LOGOUT2
# undef	WAIT_LOGOUT2
#endif
#ifdef	SEND_LOGOUT2
# undef	SEND_LOGOUT2
#endif
#ifdef	CHEK_LOGOUT3
# undef	CHEK_LOGOUT3
#endif
#ifdef	WAIT_LOGOUT3
# undef	WAIT_LOGOUT3
#endif
#ifdef	SEND_LOGOUT3
# undef	SEND_LOGOUT3
#endif
#ifdef	CHEK_LOGOUT4
# undef	CHEK_LOGOUT4
#endif
#ifdef	WAIT_LOGOUT4
# undef	WAIT_LOGOUT4
#endif
#ifdef	SEND_LOGOUT4
# undef	SEND_LOGOUT4
#endif
#ifdef	LINBUF_MAX
# undef	LINBUF_MAX
#endif
#ifdef	LOGSAVE_SUB
# undef	LOGSAVE_SUB
#endif
#ifdef	LOGSAVE_PATH
# undef	LOGSAVE_PATH
#endif
