#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <file_dlg.h>
#include <time.h>
#include "igo.h"
#include "banx.h"
#include "kiffile.h"
#include "title.h"
#include "kifuctrl.h"

extern int	dialogId_handy ;
extern int	print_dialogId ;
extern int	lineset_dialogId ;
extern int	dialogId_title ;
extern int	auto_dialogId ;
extern int	backId ;
extern int	deskTopId ;
extern int	buttonId ;
extern int	blacknameId ;
extern int	whitenameId ;
extern int	numboxId[12] ;
extern int	placeId ;
extern int	listMenuId[3] ;
extern int	textcommentId[10] ;
extern int	title_messageId[12] ;
extern int	title_dispdialogId ;
extern int	warningId;
extern int	commentdialogId;
extern int	commentId;
extern int	fsavedialogId;
extern int	fsave_messageId[2];
extern int	samesave_dialogId;
extern int	deskTopBtnId[2];
extern int	judge_dialogId[2] ;
extern int	judge_messageId[4] ;

/*	initDataMIDESK:buttonId:MJ_BUTTONL40の呼び出し関数	*/
int	igo_oper(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
int ichi;
static int waittime = 20;
static short int dx, dy;
static short int shift;

	if(pev->what == EVMOSDN){
		dx = *((short *)&(pev->info));
		dy = *(((short *)&(pev->info)) + 1);
		shift = pev->shift;
		waittime = 20;
	}

	ichi = disp_chk( dx, dy);
	switch (ichi){
	case -1: /* 盤外のにゅ力　*/
		if(shift & SLEFTBTN){
			kifu_forward();
			comment_dispFunc();
			wait(waittime);
			waittime *= 0.75;
		}else{
			kifu_back();
			comment_dispFunc();
			wait(waittime);
			waittime *= 0.75;
		}
		break;
	case -2:
		break;
	default:
		if(shift & SLEFTBTN){
			if(kifu_put(ichi)==0){
				title_fsave_on();
			}
			comment_dispFunc();
		}else{
			kifu_cancel();
			comment_dispFunc();
		}
		break;
	}

	return NOERR ;
}

/*	initDataMIDESK:mitem1Id[0]:MJ_MITEML40の呼び出し関数	*/
int	igo_init(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if(title_fsave_read()==ON){
		title_state_set(NEW);

		MMI_SendMessage( fsave_messageId[0], MM_SETMSG, 1, 
					"棋譜デ−タが保存されておりません");
		MMI_SendMessage( fsave_messageId[1], MM_SETMSG, 1, 
					"デ−タを保存して新規作成を行いますか");

		/*	オブジェクトをダイアログに取り付ける	*/
		MMI_SendMessage( fsavedialogId , MM_ATTACH , 1 , backId ) ;

		/*	オブジェクトを表示する	*/
		MMI_SendMessage( fsavedialogId , MM_SHOW , 0 ) ; 

		/*	オブジェクトをダイアログから取り外す	*/
		MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
		MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	}else{
		igo_do_init();
	}
	
	return NOERR ;
}

/* initの下請け関数 */
int	igo_do_init()
{
BAN_TYPE ban_type;

	ban_type = *title_bantype_read();
	title_init();
	title_bantype_set( ban_type); /* タイトルで保持すべきなのはこれだけ  */

	kifu_init();
	comment_dispFunc();
	title_dispFunc();
	
	return NOERR ;
}

/*	initDataMIDESK:mitem1Id[1]:MJ_MITEML40の呼び出し関数	*/
int	igo_read(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{

	if(title_fsave_read()==ON){
		title_state_set(READ);

		MMI_SendMessage( fsave_messageId[0], MM_SETMSG, 1, 
					"棋譜デ−タが保存されておりません");
		MMI_SendMessage( fsave_messageId[1], MM_SETMSG, 1, 
					"デ−タを保存して読込を行いますか");

		/*	オブジェクトをダイアログに取り付ける	*/
		MMI_SendMessage( fsavedialogId , MM_ATTACH , 1 , backId ) ;

		/*	dialogId_handyでされるオブジェクトを表示する	*/
		MMI_SendMessage( fsavedialogId , MM_SHOW , 0 ) ; 

		/*	オブジェクトをダイアログから取り外す	*/
		MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
		MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	}else{
		igo_do_read();
	}

	return NOERR ;
}

/* readの下請け関数 */
int	igo_do_read()
{
char fileName[80] ;		/*	ファイル名用の配列		*/
int  cell_id;
int  change_flg;

	/*	ファイルダイアログで"取消"が押されたらこれ以下を実行しない	*/
	if( fdlgFunc( fileName ) != 0 )
	{

		if(kifu_read(fileName) != 0){
			/*	オブジェクトをダイアログに取り付ける	*/
			MMI_SendMessage( warningId , MM_ATTACH , 1 , backId ) ;

			/*	warningIdで示されるオブジェクトを表示する	*/
			MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 

			return NOERR;
		}
		title_fname_set(fileName);
		change_flg = kifu_chg_flg_set( 1);
		kifu_first();
		do{
			cell_id = kifu_forward();
		}while( cell_id != HEAD_CELL && cell_id != REPEAT_CANNOT_BOTTOM_CELL);
		
		if( cell_id == HEAD_CELL){
			kifu_back();
		}
		kifu_chg_flg_set( change_flg);
		comment_dispFunc();
		title_dispFunc();

	}

	return NOERR ;
}

/*	initDataMIDESK:mitem1Id[2]:MJ_MITEML40の呼び出し関数	*/
int	igo_write(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	FILE *fp;
	char wk_fname[80] ;		/*	ファイル名用の配列		*/
	char wk_kifname[13];
	YMDHM wk_start_date;
	char alp_str[] = "abcdefghijklmnopqrstuvwxyz";
	int i, j;
	
	wk_start_date = *title_playstart_time_read();
	sprintf(wk_kifname, "%02u%02u%02u%02u.kif", wk_start_date.year%100, 
			wk_start_date.month%100, wk_start_date.day%100, wk_start_date.hour%100);

	if((fp = fopen(wk_kifname, "r")) == NULL){
				FDG_SetFileText(wk_kifname);

	/*	ファイルダイアログで"取消"が押されたらこれ以下を実行しない	*/
				if( fdlgFunc( wk_fname ) != 0 )
				{
					title_fname_set( wk_fname);
					igo_do_write();
				}

				return NOERR ;

	}
	fclose(fp);

	for(i=0;i<strlen(alp_str);i++){
		for(j=0;j<strlen(alp_str);j++){
			wk_kifname[6] = alp_str[i];
			wk_kifname[7] = alp_str[j];
			if((fp = fopen(wk_kifname, "r")) == NULL){
				FDG_SetFileText(wk_kifname);

	/*	ファイルダイアログで"取消"が押されたらこれ以下を実行しない	*/
				if( fdlgFunc( wk_fname ) != 0 )
				{
					title_fname_set( wk_fname);
					igo_do_write();
				}

				return NOERR ;
			}
			fclose(fp);

		}
	}

	return NOERR ;
}

/* writeの下請け関数 */
int	igo_do_write()
{
	char *fileName; 		/*	ファイル名用の配列		*/

	fileName = title_fname_read();
	if(kifu_write(fileName) != 0){
		/*	オブジェクトをダイアログに取り付ける	*/
		MMI_SendMessage( warningId , MM_ATTACH , 1 , backId ) ;

		/*	warningIdで示されるオブジェクトを表示する	*/
		MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 
		
		return NOERR;
	}
	title_fsave_off();
	title_dispFunc();

	return NOERR ;

}

/*	initDataMIDESK:mitem1Id[4]:MJ_MITEML40の呼び出し関数	*/
int	igo_handy(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( dialogId_handy , MM_ATTACH , 1 , backId ) ;

	/*	dialogId_handyでされるオブジェクトを表示する	*/
	MMI_SendMessage( dialogId_handy , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}


/*	initDataMIDESK:mitem1Id[3]:MJ_MITEML40の呼び出し関数	*/
int	igo_samewrite(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
char *fname;
FILE *fp;
	
	fname = title_fname_read();
	if((fp=fopen(fname,"rb"))==NULL){
		/*	オブジェクトをダイアログに取り付ける	*/
		MMI_SendMessage( warningId , MM_ATTACH , 1 , backId ) ;

		/*	warningIdで示されるオブジェクトを表示する	*/
		MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 
			
		return NOERR;

	}else{
		
		fclose(fp);
		/*	オブジェクトをダイアログに取り付ける	*/
		MMI_SendMessage( samesave_dialogId , MM_ATTACH , 1 , backId ) ;

		/*	オブジェクトを表示する	*/
		MMI_SendMessage( samesave_dialogId , MM_SHOW , 0 ) ; 

		/*	オブジェクトをダイアログから取り外す	*/
		MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
		MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	}
	
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[7]:MJ_MITEML40の呼び出し関数	*/
int	igo_print(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( print_dialogId , MM_ATTACH , 1 , backId ) ;

	/*	print_dialogIdで指定されるオブジェクトを表示する	*/
	MMI_SendMessage( print_dialogId , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[8]:MJ_MITEML40の呼び出し関数	*/
int	igo_line(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( lineset_dialogId , MM_ATTACH , 1 , backId ) ;

	/*	lineset_dialogIdで指定されるオブジェクトを表示する	*/
	MMI_SendMessage( lineset_dialogId , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[10]:MJ_MITEML40の呼び出し関数	*/
int	igo_abandon(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	kifu_abandon();
	comment_dispFunc();

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[0]:MJ_MITEML40の呼び出し関数	*/
int	igo_title(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char tptr[21];
	YMDHM *ymdhm;
	time_t *timer;
	int i, j, k, l;
	int vicdef_id, vicdef_number;
	struct tm    *current_time;
	static char	*listString1[] = { "黒コミ出し", "白コミ出し", "コミなし" } ;
	static char	*listString2[] = { "半", "ちょうど" } ;
	static char	*listString3[] = { "黒", "白", "引き分け",
									"黒中押し勝ち", "白中押し勝ち"} ;
	
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( dialogId_title , MM_ATTACH , 1 , backId ) ;

	/*  値を設定する */
	title_blacknameread( tptr);
	MMI_SendMessage( blacknameId, MM_SETTEXT, 3, tptr, 21, FALSE);
	
	title_whitenameread( tptr);
	MMI_SendMessage( whitenameId, MM_SETTEXT, 3, tptr, 21, FALSE);
	
	title_playspaceread( tptr);
	MMI_SendMessage( placeId, MM_SETTEXT, 3, tptr, 21, FALSE);
	
	/*  日付時刻を設定する */
	time(timer);
	current_time = localtime(timer);
	
	ymdhm = title_playstart_time_read();
	if(ymdhm->year== 0){
		ymdhm->year = 1900 + current_time->tm_year;
	}
	if(ymdhm->month== 0){
		ymdhm->month = 1 + current_time->tm_mon;
	}
	if(ymdhm->day == 0){
		ymdhm->day = current_time->tm_mday;
	}
	MMI_SendMessage( numboxId[0], MM_SETNUMBOX, 5, ymdhm->year, 0, 9999, 1, 0);
	MMI_SendMessage( numboxId[1], MM_SETNUMBOX, 5, ymdhm->month, 0, 12, 1, 0);
	MMI_SendMessage( numboxId[2], MM_SETNUMBOX, 5, ymdhm->day, 0, 31, 1, 0);
	MMI_SendMessage( numboxId[3], MM_SETNUMBOX, 5, ymdhm->hour, 0, 23, 1, 0);
	MMI_SendMessage( numboxId[4], MM_SETNUMBOX, 5, ymdhm->minute, 0, 59, 1, 0);
	
	ymdhm = title_playend_time_read();

	MMI_SendMessage( numboxId[5], MM_SETNUMBOX, 5, ymdhm->year, 0, 9999, 1, 0);
	MMI_SendMessage( numboxId[6], MM_SETNUMBOX, 5, ymdhm->month, 0, 12, 1, 0);
	MMI_SendMessage( numboxId[7], MM_SETNUMBOX, 5, ymdhm->day, 0, 31, 1, 0);
	MMI_SendMessage( numboxId[8], MM_SETNUMBOX, 5, ymdhm->hour, 0, 23, 1, 0);
	MMI_SendMessage( numboxId[9], MM_SETNUMBOX, 5, ymdhm->minute, 0, 59, 1, 0);
	
	title_komiread(&j, &k, &l);
	/*	リストメニューの設定をします。						*/
	MMI_SendMessage(listMenuId[0], MM_SETMAXROWCOLUM, 2, 3, 11) ;
	MMI_SendMessage(listMenuId[0], MM_SETCOLUMLEN, 2, 0, 11) ;
	for (i = 0 ; i < sizeof(listString1)/sizeof(char *) ; i++)
		MMI_SendMessage(listMenuId[0], MM_SETROWCOLUM, 3, i, 0, listString1[i]) ;
	if(j== -1){
		j = 0;
	}
	/*	リストメニューの先頭の項目を選択状態とします。		*/
	MMI_SendMessage(listMenuId[0], MM_SETROWCOLUM, 4, 
										j, 0, listString1[j], TRUE) ;

	if(k== -1){
		k = 5;
	}
	MMI_SendMessage( numboxId[10], MM_SETNUMBOX, 5, k, 0, 9999, 1, 0);
	
	/*	リストメニューの設定をします。						*/
	MMI_SendMessage(listMenuId[1], MM_SETMAXROWCOLUM, 2, 2, 9) ;
	MMI_SendMessage(listMenuId[1], MM_SETCOLUMLEN, 2, 0, 9) ;
	for (i = 0 ; i < sizeof(listString2)/sizeof(char *) ; i++)
		MMI_SendMessage(listMenuId[1], MM_SETROWCOLUM, 3, i, 0, listString2[i]) ;

	if(l== -1){
		l = 0;
	}
	/*	リストメニューの先頭の項目を選択状態とします。		*/
	MMI_SendMessage(listMenuId[1], MM_SETROWCOLUM, 4, 
										l, 0, listString2[l], TRUE) ;

	/*	リストメニューの設定をします。						*/
	MMI_SendMessage(listMenuId[2], MM_SETMAXROWCOLUM, 2, 5, 13) ;
	MMI_SendMessage(listMenuId[2], MM_SETCOLUMLEN, 2, 0, 13) ;
	for (i = 0 ; i < sizeof(listString3)/sizeof(char *) ; i++)
		MMI_SendMessage(listMenuId[2], MM_SETROWCOLUM, 3, i, 0, listString3[i]) ;

	title_issueread(&vicdef_id, &vicdef_number);
	switch(vicdef_id ){
		case 0: 
			if(vicdef_number==-1){
				j=3;
				break;
			}else{
				j=0;
				break;
			}
		case 1:
			if(vicdef_number==-1){
				j=4;
				break;
			}else{
				j=1;
				break;
			}
		case 2:
			j=2;
			break;
		default:
			j=0;
			break;
	}

	if(vicdef_number==-1){
		k=0;
	}else{
		k=vicdef_number;
	}
	
	/*	リストメニューの先頭の項目を選択状態とします。		*/
	MMI_SendMessage(listMenuId[2], MM_SETROWCOLUM, 4, 
										j, 0, listString3[j], TRUE) ;

	MMI_SendMessage( numboxId[11], MM_SETNUMBOX, 5, k, 0, 9999, 1, 0);
	
	/*  カ−ソルを対局者黒の位置に持っていく */
	MMI_SendMessage( blacknameId , MM_WAKE , 0 ) ; 
	
	/*	dialogId_titleでされるオブジェクトを表示する	*/
	MMI_SendMessage( dialogId_title , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[1]:MJ_MITEML40の呼び出し関数	*/
int	igo_comment(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SendMessage( commentId, MM_SETTEXT, 3, kifu_commentread(), 256, FALSE);
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( commentdialogId, MM_ATTACH , 1 , backId ) ;

	/*	commentに直ちに文章が書けるようにする */
	MMI_SendMessage( commentId , MM_WAKE , 0 ); 
	
	/*	commentdialogIdでされるオブジェクトを表示する	*/
	MMI_SendMessage( commentdialogId , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[2]:MJ_MITEML40の呼び出し関数	*/
int	igo_chg_put(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	kifu_chg_put();
	comment_dispFunc();	
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[3]:MJ_MITEML40の呼び出し関数	*/
int	igo_chg_cancel(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	kifu_chg_cancel();
	comment_dispFunc();

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[4]:MJ_MITEML40の呼び出し関数	*/
int	igo_nummberdisp(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	kifu_numberdisp();
	disp_init();
	comment_dispFunc();
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[5]:MJ_MITEML40の呼び出し関数	*/
int	igo_rebirthset(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( auto_dialogId , MM_ATTACH , 1 , backId ) ;

	/*	dialogId_handyでされるオブジェクトを表示する	*/
	MMI_SendMessage( auto_dialogId , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[11]:MJ_MITEML40の呼び出し関数	*/
int	igo_autorebirth(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
int rebirth_speed;
EVENT	*pevent;

	rebirth_speed = kifu_rebirth_speed_set( 0);
	
	if(kifu_forward() == REPEAT_CANNOT_BOTTOM_CELL){
		kifu_first();
	}
	
	do{
		MMI_iosense();
		kifu_forward();
		comment_dispFunc();
		wait(rebirth_speed*10);
	}while(MMI_GetEvnt(EVMOSUP | EVMOSDN | EVKEY, &pevent) < NOERR);
	
	kifu_rebirth_speed_set( rebirth_speed);
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[12]:MJ_MITEML40の呼び出し関数	*/
int	igo_judge(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
int b_territory_number, w_territory_number;
int ban_number, kekka, w_num;
int komi_id, komi_number, hanmoku_id;
char kachi_chr[5];
static char judge_message[4][17];

	kifu_judge(&b_territory_number, &w_territory_number);

	sprintf(judge_message[0], "黒  %4d目%6s", b_territory_number, " ");
	MMI_SendMessage( judge_messageId[0], MM_SETMSG, 1, judge_message[0]);
	sprintf(judge_message[1], "白  %4d目%6s", w_territory_number, " ");
	MMI_SendMessage( judge_messageId[1], MM_SETMSG, 1, judge_message[1]);
	if((ban_number=(b_territory_number-w_territory_number))<0){
		ban_number*=(-1);
	}
	sprintf(judge_message[2], "盤面%4d目%6s", ban_number, " ");
	MMI_SendMessage( judge_messageId[2], MM_SETMSG, 1, judge_message[2]);
	
	title_komiread( &komi_id, &komi_number, &hanmoku_id);
	switch (komi_id){
		case 0:{
			if(hanmoku_id==0){
				kekka=2*(b_territory_number-w_territory_number-komi_number)-1;
			}else{
				kekka=2*(b_territory_number-w_territory_number-komi_number);
			}
			if(kekka>0){
				strcpy(kachi_chr, "黒");
			}else if(kekka<0){
				strcpy(kachi_chr, "白");
				kekka*=(-1);
			}
			break;
		}
		case 1:{
			if(hanmoku_id==0){
				kekka=2*(w_territory_number-b_territory_number-komi_number)-1;
			}else{
				kekka=2*(w_territory_number-b_territory_number-komi_number);
			}
			if(kekka>0){
				strcpy(kachi_chr, "白");
			}else if(kekka<0){
				strcpy(kachi_chr, "黒");
				kekka*=(-1);
			}
			break;
		}
		case 2:{
			kekka=2*(b_territory_number-w_territory_number);
			if(kekka>0){
				strcpy(kachi_chr, "黒");
			}else if(kekka<0){
				strcpy(kachi_chr, "白");
				kekka*=(-1);
			}
			break;
		}
	}
	if(kekka==0){
		sprintf(judge_message[3], "%-4s", "ジゴ");
	}else if(kekka==1){
		sprintf(judge_message[3], "%-4s半目勝ち", kachi_chr);
	}else if((w_num=kekka%2)==1){
		sprintf(judge_message[3], "%-4s%4d目半勝ち", kachi_chr, kekka/2);
	}else{
		sprintf(judge_message[3], "%-4s%4d目勝ち", kachi_chr, kekka/2);
	}
	MMI_SendMessage( judge_messageId[3], MM_SETMSG, 1, judge_message[3]);

	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( judge_dialogId[0] , MM_ATTACH , 1 , backId ) ;

	/*	オブジェクトを表示する	*/
	MMI_SendMessage( judge_dialogId[0] , MM_SHOW , 0 ) ; 

	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( deskTopId , MM_DETACH , 0 ) ;
	MMI_SendMessage( buttonId , MM_DETACH , 0 ) ;

	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[6]:MJ_MITEML40の呼び出し関数	*/
int	igo_kaiten1(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	henkan_set( 1, 1);
	disp_init();
	comment_dispFunc();
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[7]:MJ_MITEML40の呼び出し関数	*/
int	igo_kaiten2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	henkan_set( 2, 1);
	disp_init();
	comment_dispFunc();
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[8]:MJ_MITEML40の呼び出し関数	*/
int	igo_kaiten3(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	henkan_set( 3, 1);
	disp_init();
	comment_dispFunc();
	return NOERR ;
}

/*	initDataMIDESK:mitem2Id[9]:MJ_MITEML40の呼び出し関数	*/
int	igo_hanten(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	henkan_set( 0, -1);
	disp_init();
	comment_dispFunc();
	return NOERR ;
}

/*	ファイルダイアログ処理関数		*/
int fdlgFunc( PathName )
char *PathName ;
{
static	char *ExtStr[] = {"*.kif" , NULL} ;	/*	ワイルドカードの指定	*/
	unsigned int MSlctCnt ;	/*	選択されたファイル数(ここでは使っていない) */
	int	Atr ;
	int	ret ;

	/*	ファイルダイアログを表示している間は		
			メニューを選択できないようにする 		*/
	MTL_setAtrObj( deskTopId , MS_INACTIVEL40) ;
	MTL_setAtrObj( buttonId , MS_INACTIVEL40) ;

	/*	ファイルダイアログの表示			*/
	ret = FDG_DspFileDlg( MMI_GetBaseObj(), FDG_TEXT, NULL, ExtStr, &MSlctCnt ) ;

	/*	"実行"が押されたならファイル名を取得する	*/
	if( ret )
	{
		FDG_GetPathName( PathName , &Atr , 0 ) ;
	}
/*  この関数を設定するとうまく動かない 
	FDG_FreeFileDlg();
 */
 
	/*	選択不可だったものを元に戻す		*/
	MTL_resetAtrObj( deskTopId , (~MS_INACTIVEL40)) ;
	MTL_resetAtrObj( buttonId , (~MS_INACTIVEL40)) ;

	return ret ;
}

/*	棋譜タイトル表示関数		*/
int title_dispFunc()
{
	char blackname[21];
	char whitename[21];
	char play_space[21];
	int	komi_id, komi_number, hanmoku_id;
	int	vicdef_id, vicdef_number;
	char	start_time[80], end_time[80];
	static	char wstr[80], t[80];
	int handy;
	char s[80];
	
	title_blacknameread( blackname);
	title_whitenameread( whitename);
	title_playspaceread( play_space);
	title_komiread( &komi_id, &komi_number, &hanmoku_id);
	title_issueread( &vicdef_id, &vicdef_number);
	handy = title_handy_int_read();

	MMI_SendMessage( title_messageId[9], MM_SETMSG, 1, 
					title_short_fname_read());
	MMI_SendMessage( textcommentId[0], MM_SETTEXT, 3, blackname, 21, FALSE);
	MMI_SendMessage( textcommentId[1], MM_SETTEXT, 3, whitename, 21, FALSE);
	
	hyouji_start_end_time( start_time, end_time);
	MMI_SendMessage( textcommentId[2], MM_SETTEXT, 3, start_time, 23, FALSE);

	MMI_SendMessage( textcommentId[3], MM_SETTEXT, 3, end_time, 23, FALSE);

	MMI_SendMessage( textcommentId[4], MM_SETTEXT, 3, play_space, 21, FALSE);
	
	if(handy == 1){
		sprintf(s, "%-20s", "");
	}else{
		sprintf(s, " %u%-19s", handy, "子");
	}
	MMI_SendMessage( textcommentId[8], MM_SETTEXT, 3, s, 21, FALSE);
	
	switch(komi_id ){
		case 0: strcpy(wstr, "黒コミ出し");break;
		case 1: strcpy(wstr, "白コミ出し");break;
		case 2: strcpy(wstr, "コミなし  ");break;
		default: strcpy(wstr, "          ");break;
	}
	if(komi_id!=2 && komi_number > 0){
		strcat(wstr, _itoa(komi_number, t, 10));
		strcat(wstr, "目");
		switch(hanmoku_id ){
			case 0: strcat(wstr, "半");break;
			case 1: strcat(wstr, "  ");break;
			default:strcat(wstr, "  ");break;
		}
	}
	MMI_SendMessage( textcommentId[5], MM_SETTEXT, 3, wstr, 21, FALSE);
	
	switch(vicdef_id ){
		case 0: strcpy(wstr, "黒  ");break;
		case 1: strcpy(wstr, "白  ");break;
		case 2: strcpy(wstr, "ジゴ");break;
		default: strcpy(wstr, "    ");break;
	}
	switch(vicdef_id ){
		case 0: 
		case 1: 
			if(vicdef_number==-1){
				strcat(wstr, "中押し勝ち");
			}else if(vicdef_number==0){
				if(hanmoku_id == 0 && (komi_id == 0 || komi_id == 1)){
					strcat(wstr, "半目勝ち");
				}else{
					strcat(wstr, "中押し勝ち");
				}
			}else{
				strcat(wstr, _itoa(vicdef_number, t, 10));
				strcat(wstr, "目");
				if(hanmoku_id == 0 && (komi_id == 0 || komi_id == 1)){
					strcat(wstr, "半勝ち");
				}else if(vicdef_id != 2){
					strcat(wstr, "勝ち");
				}
			}
			break;
		default: break;
	}
	MMI_SendMessage( textcommentId[6], MM_SETTEXT, 3, wstr, 21, FALSE);
	
	MMI_SendMessage( title_dispdialogId , MM_SHOW , 0 ) ; 

	return 0;
}

/*  93/06/15 現在未使用 */
/*	棋譜タイトルクリア関数		*/
static int title_dispclearFunc()
{
	static	char wstr[80] = "                              ";
	

	MMI_SendMessage( textcommentId[0], MM_SETTEXT, 3, wstr, 21, FALSE);
	MMI_SendMessage( textcommentId[1], MM_SETTEXT, 3, wstr, 21, FALSE);
	MMI_SendMessage( textcommentId[2], MM_SETTEXT, 3, wstr, 23, FALSE);
	MMI_SendMessage( textcommentId[3], MM_SETTEXT, 3, wstr, 23, FALSE);
	MMI_SendMessage( textcommentId[4], MM_SETTEXT, 3, wstr, 21, FALSE);
	MMI_SendMessage( textcommentId[5], MM_SETTEXT, 3, wstr, 21, FALSE);
	MMI_SendMessage( textcommentId[6], MM_SETTEXT, 3, wstr, 21, FALSE);
	
	MMI_SendMessage( title_dispdialogId , MM_SHOW , 0 ) ; 

	return 0;
}

/*	コメント出力関数		*/
int comment_dispFunc()
{
char capture_message[12];
int black_capture_number, white_capture_number;

	kifu_disp();
	MMI_SendMessage( textcommentId[7], MM_SETTEXT, 3, kifu_commentread(), 256, FALSE);
	MMI_SendMessage( textcommentId[7], MM_SHOW , 0 ) ; 

	kifu_captureread(&black_capture_number, &white_capture_number);
	sprintf(capture_message, "黒%3d 白%3d", black_capture_number,
			white_capture_number);
	MMI_SendMessage( textcommentId[9], MM_SETTEXT, 3, capture_message, 12, FALSE);
	MMI_SendMessage( textcommentId[9], MM_SHOW , 0 ) ; 

	return 0;
}

/*	初期画面戻り関数		*/
int retunrInitMenuFunc()
{

	MMI_SendMessage( deskTopBtnId[0], MM_DETACH , 0 ) ;
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( deskTopId , MM_ATTACH , 1 , backId ) ;
	MMI_SendMessage( buttonId , MM_ATTACH , 1 , backId ) ;
	MMI_SendMessage( deskTopBtnId[0], MM_ATTACH , 1 , backId ) ;

	return 0;
}
