#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <egb.h>
#include <guidbg.h>

int	iconBaseHyperID = -1 ;
int	iconBaseWindowID = -1 ;
int	iconMenuID[3] = -1 ;
int	iconMenuItemID[11] = -1 ;
int	dialogBaseHyperID = -1 ;
int	aboutDialogID = -1 ;
int	aboutMessageID[4] = -1 ;
int	aboutDButtonID = -1 ;
int	timeSetBaseDialogID = -1 ;
int	timeSetDButtonID[8] = -1 ;
int	timeSetMessageID[11] = -1 ;
int	timeSetScrollbarID = -1 ;

#include <eintm.h>
#include <time.h>
#include <mos.h>
#include <wgb.h>
#include <smsg.h>

extern char	*guiEgbPtr ;			/*	EGB のワークアドレス	*/

#define T4GDATASIZE (7480)
// #define DEBUG

typedef	struct {
	_Far char *pixel;
	short	x1,y1;
	short	x2,y2;
	} EGB_BLOCK;

int t4QuitFuncRet = ILLEGAL_FUNCTION  ;
int t4UpdateFlag = -1 ; // -1:ｱｯﾌﾟﾃﾞｰﾄ不可 0:ｱｯﾌﾟﾃﾞｰﾄ可 1:一時強制全ｱｯﾌﾟﾃﾞｰﾄ
int	t4old_sec = -1;
int t4old_min = -1;
int t4old_hou = -1;
int t4Hour[3] =   {13,16, 1} ;	//タイマー時刻(時)
int t4Minute[3] = {54,59,30} ;	//タイマー時刻(分)
int t4HourB[3];				//タイマー時刻(時)(設定用バッファ)
int t4MinuteB[3];			//タイマー時刻(分)(設定用バッファ)
int t4Switch[5];			//スイッチの状態 0:解除 1:設定
char t4GBuffer[T4GDATASIZE];//グラフィックデータバッファ
int t4x,t4y;				//座標
int t4BackColor ;			//塗り潰し用の色
int t4Poff ;
int t4Ps ;
int t4Noff ;
int t4Ns ;
int t4ClipFlag = 0;			//クリップフラグ 他のダイアログが出ているとき、1
int t4TimeSetFlag = 0;		//0〜5
char t4MenuMessage[3][11] ;	//メニューメッセージバッファ
int t4SMSGFlag = 0 ;		//0:常駐していない 1:常駐している
int t4Beep[5];				//Beep Flag -1/0

char sBufA[] = "127000000 bytes free\0\0";	//about dialog
char sBuf[] = "00\0\0";						//number(scrollbar's)
char sBufS[6][7] ;							//time set draw button number

EGB_BLOCK t4put;

void t4IdleTask(void);
void t4PreScreenChangeFunc(void);
void t4PostScreenChangeFunc(void);
void numPut(int,int);
void beep(int);
void messageSet( int , char * );

//===========================================================================
void t4IdleTask(void)
{
	static int pflag = 0;

	if(t4UpdateFlag == -1){
		#ifdef DEBUG
		printf("時計ｰ:アップデート禁止っす\n");
		#endif
		return;
	}
	if(t4UpdateFlag == 1){
		#ifdef DEBUG
		printf("時計ｰ:強制アップデート開始\n");
		#endif
		t4UpdateFlag = 0;
		t4old_sec = -1;
		t4old_min = -1;
		t4old_hou = -1;
	}

	time_t		ct = time(NULL);
	struct tm  *lt = localtime(&ct);

	// まだ一秒経っていないなら終了
	if ( lt->tm_sec == t4old_sec ){
		return;
	}
	t4old_sec = lt->tm_sec;
	pflag = 1 - pflag;

	//ポイント描画
	//クリップをかける
	WINCLIP *clip;
	WINCLIP *clipBuffer;

	if(t4ClipFlag != 0){
		#ifdef DEBUG
		printf("時計ｰ:クリップ設定\n");
		#endif
		FRAME fr;
		fr.lupx = t4x;
		fr.lupy = t4y;
		fr.rdwx = t4x + 58;
		fr.rdwy = t4y + 15;
		clip = WIN_clipWindow(iconBaseWindowID,
										WIN_getClipMemory(&fr,NULL),TRUE);
		WIN_pushClip(clip, &clipBuffer) ;
	}

	EGB_color( guiEgbPtr , 0 , t4BackColor );	//	前景色
	EGB_color( guiEgbPtr , 2 , t4BackColor );	//	面塗り色
	EGB_paintMode( guiEgbPtr , 2+32 );	//	ベタ塗り

	t4put.pixel = (char *)&t4GBuffer[t4Poff + pflag * t4Ps] ;
	t4put.x1 = t4x + 26;
	t4put.y1 = t4y + 3 ;
	t4put.x2 = t4put.x1 + 5 ;
	t4put.y2 = t4put.y1 + 9 ;
	// 現在のマウスカーソルの位置を読む
	int	i;
	Rect	rmos;
	MOS_rdpos( &i,(int *)&rmos.left, (int *)&rmos.up );
	rmos.right= rmos.left + 31;
	rmos.down = rmos.up   + 31;
	if ( SectRect( &rmos, (Rect *)&t4put.x1 ) ){
		MG_mosDisp(2);
		EGB_writeMode( guiEgbPtr , 0 );	//	0=PSET
		WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
		EGB_writeMode( guiEgbPtr , 6 );	//	6=MATTE
		WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
		MG_mosDisp(3);
	} else {
		EGB_writeMode( guiEgbPtr , 0 );	//	0=PSET
		WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
		EGB_writeMode( guiEgbPtr , 6 );	//	6=MATTE
		WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
	}
	// 一分経っていたら描画
	if ( lt->tm_min != t4old_min ){
		#ifdef DEBUG
		printf("時計ｰ:分表示\n");
		#endif
		t4old_min = lt->tm_min;
		numPut(2 , t4old_min / 10);
		numPut(3 , t4old_min % 10);
		for(i=0;i<3;i++){
			if(t4Switch[i]==1)
				if((t4old_min==t4Minute[i]) && (lt->tm_hour==t4Hour[i]) ){
					if(t4Beep[i]!=t4old_min){
						t4Beep[i] = t4old_min ;
						#ifdef DEBUG
						printf("時計ｰ:タイマー%d(%d:%d)のチャイムです\n",
												i+1,t4Hour[i],t4Minute[i]);
						#endif
						beep(5);
					}
				} else t4Beep[i] = -1 ;
		}
		if((t4old_min==0) || (t4old_min==30))
			if((t4Switch[4]==1) && (t4Beep[4]!=t4old_min)){
				#ifdef DEBUG
				printf("時計ｰ:%d分のチャイムです\n",t4old_min);
				#endif
				beep(2);
				t4Beep[4]=t4old_min;
			}
	}
	// 一時間経っていたら描画
	if ( lt->tm_hour != t4old_hou ){
		#ifdef DEBUG
		printf("時計ｰ:時表示\n");
		#endif
		t4old_hou = lt->tm_hour;
		numPut(0 , t4old_hou / 10);
		numPut(1 , t4old_hou % 10);
		if(t4old_min==0)
			if((t4Switch[3]==1) && (t4Beep[3]!=t4old_hou)){
				#ifdef DEBUG
				printf("時計ｰ:%d時のチャイムです\n",t4old_hou);
				#endif
				beep(3);
				t4Beep[3]=t4old_hou;
			}
	}
	//クリップ解除
	if(t4ClipFlag != 0){
		WIN_popClip(clipBuffer);
	}
	return;
}

//===========================================================================
void beep( num )
int num;
{
	//アラームを鳴らす
	int i;
	for(i=0;i<num;i++){
		int j,ptr;
		j = MG_PushPtr(((i%2)==0) ? 24 : 121 ,&ptr);
		if(j==0){
			#ifdef DEBUG
			printf("時計ｰ:音あり\n");
			#endif
			if(t4SMSGFlag==1) SMSG_play(7,0);
			MMI_WaitLoop(40);
			MG_PopPtr( ptr );
		} else { ;
			#ifdef DEBUG
			printf("時計ｰ:音なし\n");
			#endif
		}
		
	}

	return ;
}

//===========================================================================
void numPut( id, num)
int id;
int num;
{
	t4put.pixel = (char *)&t4GBuffer[t4Noff + num * t4Ns] ;
	t4put.x1 = t4x + id * 13;
	t4put.y1 = t4y ;
	if(id>1) t4put.x1 = t4put.x1 + 7;
	t4put.x2 = t4put.x1 + 11 ;
	t4put.y2 = t4put.y1 + 15 ;

	int btn;
	Rect rmos;

	MOS_rdpos( &btn,(int *)&rmos.left, (int *)&rmos.up );
	rmos.right= rmos.left + 31;
	rmos.down = rmos.up   + 31;
	if ( SectRect( &rmos, (Rect *)&t4put.x1 ) ){
		MG_mosDisp(2);
		EGB_writeMode( guiEgbPtr , 0 );	//	0=PSET
		WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
		EGB_writeMode( guiEgbPtr , 6 );	//	6=MATTE
		WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
		MG_mosDisp(3);
	} else {
		EGB_writeMode( guiEgbPtr , 0 );	//	0=PSET
		WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
		EGB_writeMode( guiEgbPtr , 6 );	//	6=MATTE
		WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
	}

	return;
}

//===========================================================================
/*	initDataICONGUI:iconBaseWindowID:MJ_WINDOWL40の呼び出し関数	*/
int	windowFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if(messId==MM_MOVE){
		#ifdef DEBUG
		printf("時計ｰ(Window):MM_MOVE\n");
		#endif
		FRAME fr;
		EIN_getObjectFrame(kobj,&fr);
		t4x = fr.lupx + 6 ;
		t4y = fr.lupy + 4 ;
	} else if((messId==MM_SHOW) || (messId==MM_UPDATE)){
		#ifdef DEBUG
		printf("時計ｰ(Window):MM_SHOW||MM_UPDATE\n");
		#endif
		t4UpdateFlag = 1;
	} else return -1 ;	// -1で抜けると、window本来の動きをする
	return NOERR ;
}

//===========================================================================
/*	initDataICONGUI:iconMenuItemID[1]:MJ_MITEML40の呼び出し関数	*/
int	aboutFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	//aboutダイアログを出す
	sprintf(sBufA,"%d bytes free",EIN_checkMem());
	MMI_SendMessage( aboutMessageID[2],MM_SETMSG,1, sBufA);
	//アイコン関係を選択不可にする
	MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,FALSE);
	MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
	//aboutダイアログを繋いで、表示
	MMI_SendMessage(aboutDialogID,MM_ATTACH,1,dialogBaseHyperID);
	MMI_SendMessage(aboutDialogID,MM_SHOW,0);
	t4UpdateFlag = 1;
	t4ClipFlag = 1 ;
	return NOERR ;
}

//===========================================================================
/*	initDataICONGUI:iconMenuItemID[6]:MJ_MITEML40の呼び出し関数	*/
/*	initDataICONGUI:iconMenuItemID[7]:MJ_MITEML40の呼び出し関数	*/
/*	initDataICONGUI:iconMenuItemID[8]:MJ_MITEML40の呼び出し関数	*/
/*	initDataICONGUI:iconMenuItemID[9]:MJ_MITEML40の呼び出し関数	*/
/*	initDataICONGUI:iconMenuItemID[10]:MJ_MITEML40の呼び出し関数	*/
int	switchSetFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i=6;
	while(iconMenuItemID[i] != kobj) i++;
	i = i-6;
	if(t4Switch[i] == 1){
		//リセット
		t4Switch[i] = 0;
		MTL_resetAtrObj( kobj , ~MS_CHECKL40 );
		#ifdef DEBUG
		printf("時計ｰ:タイマー%d(%2d時 %2d分)解除\n",
												i+1,t4Hour[i],t4Minute[i]);
		#endif
	} else {
		//セット
		t4Switch[i] = 1;
		MTL_setAtrObj( kobj , MS_CHECKL40 );
		#ifdef DEBUG
		printf("時計ｰ:タイマー%d(%2d時 %2d分)設定\n",
												i+1,t4Hour[i],t4Minute[i]);
		#endif
	}
	t4UpdateFlag = 1;
	t4ClipFlag = 0;

	return NOERR ;
}

HYPER hypDB[6];

//===========================================================================
/*	initDataICONGUI:iconMenuItemID[3]:MJ_MITEML40の呼び出し関数	*/
int	timerSetFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	//時刻セットダイアログを出す
	//アイコン関係を選択不可にする
	MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,FALSE);
	MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
	//時刻セットダイアログを繋いで、表示
	MMI_SendMessage(timeSetBaseDialogID,MM_ATTACH,1,dialogBaseHyperID);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
													&(hypDB[t4TimeSetFlag]));
	hypDB[t4TimeSetFlag].atrm =
				((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_DFRAMEL40 );
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
														&hypDB[t4TimeSetFlag]);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ENABLE ,1,FALSE);
	//スクロールバーに値をセット
	int i,j,k;
	if((t4TimeSetFlag%2)==1){
		i = 59;
		j = 5;
		k = t4Minute[t4TimeSetFlag/2];
	} else {
		i = 23;
		j = 2;
		k = t4Hour[t4TimeSetFlag/2];
	}
	MMI_SendMessage( timeSetScrollbarID , MM_SETSCROLL ,5,
									k , 0, i, 1, j );
	MMI_SendMessage( timeSetScrollbarID , MM_ENABLE ,1,TRUE);

	//現在のタイマーの値を複写する
	for(i=0;i<3;i++){
		t4HourB[i] = t4Hour[i];
		t4MinuteB[i] = t4Minute[i];
		#ifdef DEBUG
		printf("時計ｰ:タイマー%d  %2d時 %2d分.\n",
												i+1,t4Hour[i],t4Minute[i]);
		#endif
	}

	//タイマー時刻を、ボタンに書き込む
	for(i=0;i<3;i++){
		sprintf(&(sBufS[i*2][0]),"%2d時",t4Hour[i]);
		sprintf(&(sBufS[i*2+1][0]),"%2d分",t4Minute[i]);
		MMI_SendMessage(timeSetMessageID[i*2+1],MM_SETMSG,1,
											&(sBufS[i*2][0]));
		MMI_SendMessage(timeSetMessageID[i*2+2],MM_SETMSG,1,
											&(sBufS[i*2+1][0]));
	}

	//全表示
	MMI_SendMessage( timeSetBaseDialogID , MM_SHOW , 0 );

	t4ClipFlag = 1 ;
	t4UpdateFlag = 1;
	return NOERR ;
}

//===========================================================================
/*	initDataICONGUI:iconMenuItemID[5]:MJ_MITEML40の呼び出し関数	*/
int	quitFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE );
	t4UpdateFlag = -1;
	t4QuitFuncRet = NOERR;
	t4ClipFlag = 0;
	return NOERR ;
}

//===========================================================================
/*	initDataABOUTGUI:aboutDButtonID:MJ_DBUTTONL40の呼び出し関数	*/
int	aboutQuitFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	//aboutダイアログを消去して、はずす
	MMI_SendMessage(aboutDialogID,MM_ERASE,0);
	MMI_SendMessage(aboutDialogID,MM_DETACH,0);
	//アイコン関係を選択可にする
	MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,TRUE);
	MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
	t4ClipFlag = 0 ;
	return NOERR ;
}

//===========================================================================
/*	initDataT_SETGUI:timeSetDButtonID[0]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[1]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[2]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[3]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[4]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[5]:MJ_DBUTTONL40の呼び出し関数	*/
int	timeSetButtonFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i=0;
	while(timeSetDButtonID[i]!=kobj) i++;

	#ifdef DEBUG
	printf("時計ｰ:現在%d -> 変更%d\n",t4TimeSetFlag,i);
	#endif
	//今、へっこんでいるを、元に戻して、選択可にする
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
													&(hypDB[t4TimeSetFlag]));
	hypDB[t4TimeSetFlag].atrm =
			 ((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_UFRAMEL40 );
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
													&hypDB[t4TimeSetFlag]);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ENABLE ,1,TRUE);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ERASE,0);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SHOW,0);
	MMI_SendMessage(timeSetMessageID[t4TimeSetFlag+1],MM_SHOW,0);
	t4TimeSetFlag = i;
	//選択不可にして、へっこませる
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
													&(hypDB[t4TimeSetFlag]));
	hypDB[t4TimeSetFlag].atrm =
				((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_DFRAMEL40 );
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
														&hypDB[t4TimeSetFlag]);
	MMI_SendMessage( timeSetDButtonID[i] , MM_ENABLE ,1,FALSE);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ERASE,0);
	MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SHOW,0);
	MMI_SendMessage(timeSetMessageID[t4TimeSetFlag+1],MM_SHOW,0);

	//分だったら最大値を59に、時だったら23に、設定。現在の値も設定。
	int j,k,l;
	if((i%2)==1){
		j = 59 ;
		k = 5 ;
		l = t4MinuteB[i/2] ;
	} else {
		j = 23 ;
		k = 2 ;
		l = t4HourB[i/2] ;
	}
	sprintf(sBuf,"%d",j);
	MMI_SendMessage( timeSetScrollbarID , MM_ERASE , 0);
	MMI_SendMessage( timeSetScrollbarID , MM_ENABLE ,1,TRUE);
	MMI_SendMessage( timeSetScrollbarID , MM_SETSCROLL ,5,
										l , 0, j, 1, k );
	messageSet(timeSetMessageID[8],sBuf);
	MMI_SendMessage( timeSetScrollbarID , MM_SHOW ,0);

	return NOERR ;
}

//===========================================================================
/*	initDataT_SETGUI:timeSetDButtonID[6]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataT_SETGUI:timeSetDButtonID[7]:MJ_DBUTTONL40の呼び出し関数	*/
int	timeSetFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i;
	if(kobj==timeSetDButtonID[6]){
		//今の設定を有効にして(本物の領域に複写して)、ダイアログを消す
		//この時、メニューの数字も変えておく
		for(i=0;i<3;i++){
			t4Hour[i] = t4HourB[i];
			t4Minute[i] = t4MinuteB[i];
			sprintf(&(t4MenuMessage[i][0]),"%2d時 %2d分",
												t4Hour[i],t4Minute[i]);
			MMI_SendMessage(iconMenuItemID[i+6],MM_SETMSG,1,
												&(t4MenuMessage[i][0]));
		}
	} else {
		//今の設定は無効だから、そのままダイアログを消す
		;
	}
	t4Beep[0] = -1 ;
	t4Beep[1] = -1 ;
	t4Beep[2] = -1 ;
	t4Beep[4] = t4old_min ;
	t4Beep[3] = t4old_hou ;
	//ダイアログを消す
	MMI_SendMessage(timeSetBaseDialogID,MM_ERASE,0);
	MMI_SendMessage(timeSetBaseDialogID,MM_DETACH,0);

	MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,TRUE);
	MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
	t4ClipFlag = 0 ;

	return NOERR ;
}

//===========================================================================
/*	initDataT_SETGUI:timeSetScrollbarID:MJ_SCRLL40の呼び出し関数	*/
int	timeSetScrollbarFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i,j,dummy;
	//現在の数値を読み取って
	MMI_SendMessage( kobj,MM_GETSCROLL,5, &i, &dummy, &j ,&dummy,&dummy );
	//(仮の)時刻に設定する
	if(j==23){
		t4HourB[t4TimeSetFlag/2] = i ;
		sprintf(&(sBufS[t4TimeSetFlag][0]),"%2d時",i);
	} else {
		t4MinuteB[t4TimeSetFlag/2] = i ;
		sprintf(&(sBufS[t4TimeSetFlag][0]),"%2d分",i);
	}
	//message部品に設定して、再表示
	messageSet(timeSetMessageID[t4TimeSetFlag+1],&(sBufS[t4TimeSetFlag][0]));

	return NOERR ;
}

//===========================================================================
/*	initDataICONGUI:iconMenuItemID[0]:MJ_MITEML40の呼び出し関数	*/
int	menuCallFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	#ifdef DEBUG
	printf("時計ｰ(MenuItem):アップデート禁止\n");
	#endif
	t4UpdateFlag = -1;
	return -1;
//	return NOERR;
}

//===========================================================================
//メッセージ部品に文字を設定して、再表示
void messageSet( id , s )
int id;
char *s;
{
	MMI_SendMessage( id , MM_SETMSG , 1 , s );
	MMI_SendMessage( id , MM_SHOW , 0 );
}

//===========================================================================
void t4PreScreenChangeFunc(void)
{
	t4UpdateFlag = -1 ;
	return;
}

//===========================================================================
void t4PostScreenChangeFunc(void)
{
	//現在のピクセルモードを調べる
	int		modebuf[8];
	// EGB 画面情報取得
	EGB_getResolutionPage( 0, modebuf );

	int i;
	i = t4Poff;

	if(modebuf[4]==4){				//16色モード
		t4Poff = 128*10 ;
		t4Ps   = 40 ;
		t4Noff = 0 ;
		t4Ns   = 128 ;
		#ifdef DEBUG
		printf("時計ｰ:16色モード\n");
		#endif
	} else if(modebuf[4]==8) {		//256色モード
		t4Poff = 128*10+40*2+192*10 ;
		t4Ps = 60 ;
		t4Noff = 128*10+40*2 ;
		t4Ns = 192 ;
		#ifdef DEBUG
		printf("時計ｰ:256色モード\n");
		#endif
	} else if(modebuf[4]==16) {		//32k色モード
		t4Poff = 128*10+40*2+192*10+60*2+384*10 ;
		t4Ps = 120 ;
		t4Noff = 128*10+40*2+192*10+60*2 ;
		t4Ns = 384 ;
		#ifdef DEBUG
		printf("時計ｰ:32768色モード\n");
		#endif
	} else {						//非対応
		t4Poff = 128*10 ;
		t4Ps   = 40 ;
		t4Noff = 0 ;
		t4Ns   = 128 ;
		#ifdef DEBUG
		printf("時計ｰ:非対応画面モード(%d)\n",modebuf[4]);
		#endif
	}
	//塗り潰し用の色
	t4BackColor = MG_colorChange(1);

	t4UpdateFlag = 1 ;

	return;
}
