/*************************************************************************
*	"center02.cci" : Nanno net用センター処理
*************************************************************************/

/***********************************************************************/
#define	CENTER_TITLE	"Sample center (type-02:nanno)"	/* タイトル		*/
#define	CENTER_KEY		"CENTER02"				/* センターキーワード		*/
#define	CENTER_RECKEY	"CENTER02"				/* 接続時間記録用キーワード	*/
#define	CENTER_TEL		"XX-XXXX-XXXX"			/* 電話番号					*/
#define	CHK_CONNECT1	"HIT RETURN KEY>"		/* 接続直後の確認用文字列#1	*/
#define	SEND_CONNECT1	"\r"					/* 接続後に送信する文字列#1	*/
#define	CHK_ID			"User ID="				/* ID 送信確認用文字列		*/
#define	CHK_PW			"Password="				/* ﾊﾟｽﾜｰﾄﾞ送信確認用文字列	*/
#define	LOGOUT_COMMAND	"OFF\r"					/* ﾛｸﾞｱｳﾄ･コマンド			*/
#define	LOGSAVE_SUB		".c02"					/* ﾛｸﾞ保存時の拡張子		*/
#define	LOGSAVE_PATH	"K:/TMP/"				/* ﾛｸﾞを保存する場所		*/
/***********************************************************************/

#define	CENTERKEY		CENTER_KEY
#define	RECKEY			_center02_recKey

char	*_center02_recKey;

int		_CENTER02_init()
{
	char	*center;

	if ( (center = NTM_centerAlloc( CENTERKEY )) != NULL )
	{
		NtmCenterSetName(    center, CENTER_TITLE);
		NtmCenterSetFuncKey( center, "CENTER02");
		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		_CENTER02_naviInit( char *ntm, char *center )
{
	NtmSetNaviServiceMode( ntm, 0 );	/* ナビゲーションシステムなし	*/
	return (NORMAL);
}


/*************************************************************************
*	パラメータの指定
*************************************************************************/

int		_CENTER02_para( char *ntm, char *center )
{
	char	*keyWord;
	char	*id, *pw;

	keyWord = NtmCenterGetKeyWord(center);
	if ( NTM_centerConfig( keyWord ) == NORMAL )
	{
		id  = NtmCenterGetID      ( center );
		pw  = NtmCenterGetPassword( center );
		if ( id[0] == 0 || pw[0] == 0 )
			return (ERR);
		return (NORMAL);
	} else
		return (ERR);
}


/*************************************************************************
*	処理の中断
*************************************************************************/

int		_CENTER02_abort( char *ntm, char *center )
{
	AplRecWrite("%s:Abort", RECKEY);
	NTM_offline( ntm, DTR_OFF_TIME );
	return (NORMAL);
}

/*************************************************************************
*	[AUTO]メニュー処理
*************************************************************************/

int		_CENTER02_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		_CENTER02_login( char *ntm, char *center )
{
	int		i, ret, retry;
	char	*name, *tel, *id, *pw, *para;
	int		argc;
	char	*s, **argv;
	long	tm;
	char	*cns;
	char	*mos;

	mos = NULL;
	cns = NtmGetCnsPtr(ntm);
#ifdef	_TAROPYON_SYSTEM
	/* ログ保存行数を増やす	*/
	if ( CnsGet_maxLinBuf(cns) < 99999 )
		CnsSet_maxLinBuf(cns,99999);
#endif
	_center02_recKey = NtmCenterGetRecKey(center);

	name = NtmCenterGetName    ( center );
	tel  = NtmCenterGetTel     ( center );
	id   = NtmCenterGetID      ( center );
	pw   = NtmCenterGetPassword( center );
	if ( tel[0] == 0 || id[0] == 0 || pw[0] == 0 )
	{
		_ntm_errmsg_no_setup_id_and_pw();
		if ( _CENTER02_para( ntm, center ) )
			return (ERR);
		id  = NtmCenterGetID      ( center );
		pw  = NtmCenterGetPassword( 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:	_CENTER02_abort( ntm, center );
		if ( mos )	MOS_pop(mos);
		return (ERR);
	}

	mos = MOS_push();
	MOS_curType(MOSCUR_TIME);
	MOS_CON();
	AplRecWrite("%s:Connect", RECKEY );

#ifdef	CHK_CONNECT1
	s = CHK_CONNECT1;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, 30, 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	CHK_CONNECT2
	s = CHK_CONNECT2;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, 30, 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	CHK_CONNECT3
	s = CHK_CONNECT3;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, 30, 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	CHK_CONNECT4
	s = CHK_CONNECT4;
	if ( *s )
	{
		ret = NTM_waitInstr( ntm, 30, 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_rsPuts( ntm, pw );	NTM_rsPuts(ntm,"\r");

	/* ログイン時間	*/
	time(&tm);
	NtmCenterSetTime( center, NTM_TIME_LOGIN, tm );
	AplRecWrite("%s:Login successful", RECKEY );
	MOS_pop(mos);

	return (NORMAL);
}


/*************************************************************************
*	ログアウト処理
*************************************************************************/

int		_CENTER02_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	CHK_LOGOUT1
	s = CHK_LOGOUT1;
	if ( *s )
	{
		NTM_waitInstr( ntm, 30, CHK_LOGOUT1, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT1
			s = SEND_LOGOUT1;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT1);
			}
#endif
		}
	}
#endif

#ifdef	CHK_LOGOUT2
	s = CHK_LOGOUT2;
	if ( *s )
	{
		NTM_waitInstr( ntm, 30, CHK_LOGOUT2, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT2
			s = SEND_LOGOUT2;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT2);
			}
#endif
		}
	}
#endif

#ifdef	CHK_LOGOUT3
	s = CHK_LOGOUT3;
	if ( *s )
	{
		NTM_waitInstr( ntm, 30, CHK_LOGOUT3, NULL );
		if ( ret != NTM_WAIT_CANCEL )
		{
#ifdef		SEND_LOGOUT3
			s = SEND_LOGOUT3;
			if ( *s )
			{
				NTM_rsPuts( ntm, SEND_LOGOUT3);
			}
#endif
		}
	}
#endif

#ifdef	CHK_LOGOUT4
	s = CHK_LOGOUT4;
	if ( *s )
	{
		NTM_waitInstr( ntm, 30, CHK_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, "EXECUTE : [実行]" );
		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		_CENTER02_lineCheck( char *ntm, char *buf )
{
	return (NORMAL);
}

/*************************************************************************
*	入力文字列の送信
*************************************************************************/

int		_CENTER02_inputCheck( char *ntm, char *s )
{
	NTM_rsPuts( ntm, s    );
	NTM_rsPuts( ntm, "\r" );
	return (NORMAL);
}

/*************************************************************************
*	フィルタ設定メニュー
*************************************************************************/

int		_CENTER02_filterMenu( char *ntm, int x, int y )
{
	return	NtmUsr_filterMenu( ntm, x, y );
}

int		CCI_dspCenter02Stt()
{
	char	*center;
	char	*name;
	long	loginTime, logoutTime;
	char	t1[32], t2[32];

	if ( (center = NTM_getCenter(CENTERKEY)) == NULL )
		return (ERR);
	name = NtmCenterGetName(center);
	loginTime  = NtmCenterGetTime( center, NTM_TIME_LOGIN );
	logoutTime = NtmCenterGetTime( center, NTM_TIME_LOGOUT );
	DLG_tmpMsgBox( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
	    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
	    "  センター名 : %s\n  Login time       %s  \n  Last logout time %s  ",
	    name, GetAsciiTime(t1, loginTime), GetAsciiTime(t2,logoutTime) );
	return (NORMAL);
}


#undef	CENTERKEY
#undef	RECKEY

#undef	CENTER_TITLE
#undef	CENTER_KEY
#undef	CENTER_RECKEY
#undef	CENTER_TEL
#ifdef	CHK_CONNECT1
# undef	CHK_CONNECT1
#endif
#ifdef	SEND_CONNECT1
# undef	SEND_CONNECT1
#endif
#ifdef	CHK_CONNECT2
# undef	CHK_CONNECT2
#endif
#ifdef	SEND_CONNECT2
# undef	SEND_CONNECT2
#endif
#ifdef	CHK_CONNECT3
# undef	CHK_CONNECT3
#endif
#ifdef	SEND_CONNECT3
# undef	SEND_CONNECT3
#endif
#ifdef	CHK_CONNECT4
# undef	CHK_CONNECT4
#endif
#ifdef	SEND_CONNECT4
# undef	SEND_CONNECT4
#endif
#undef	CHK_ID
#undef	CHK_PW
#undef	LOGOUT_COMMAND
#ifdef	CHK_LOGOUT1
# undef	CHK_LOGOUT1
#endif
#ifdef	SEND_LOGOUT1
# undef	SEND_LOGOUT1
#endif
#ifdef	CHK_LOGOUT2
# undef	CHK_LOGOUT2
#endif
#ifdef	SEND_LOGOUT2
# undef	SEND_LOGOUT2
#endif
#ifdef	CHK_LOGOUT3
# undef	CHK_LOGOUT3
#endif
#ifdef	SEND_LOGOUT3
# undef	SEND_LOGOUT3
#endif
#ifdef	CHK_LOGOUT4
# undef	CHK_LOGOUT4
#endif
#ifdef	SEND_LOGOUT4
# undef	SEND_LOGOUT4
#endif
#ifdef	LOGSAVE_SUB
# undef	LOGSAVE_SUB
#endif
#ifdef	LOGSAVE_PATH
# undef	LOGSAVE_PATH
#endif
