/* DIVIDE_START=message.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>

#include	"var.h"

int	Kakunin_OK( )
{
	/*	About画面を消す							*/
	MMI_SendMessage( AlertKakuninId , MM_ERASE , 0 );
	/*	オブジェクトをダイアログから取り外す	*/
	MMI_SendMessage( AlertKakuninId , MM_DETACH , 0 );

	/*	メインループをぬけるためのフラグをセットする	*/
	MMI_SetHaltFlag( TRUE );
	return NOERR ;
}

// 下の関数は GUI ライブラリーから呼ばれていない
int		showKakunin( )
{
	if ( OutSoundMes == YES ) {
		MMI_SendMessage( AlertKakuninId , MM_VISUALEFFECT , 1 , 807 );
		MMI_SendMessage( AlertKakuninId , MM_SOUNDEFFECT , 1 , 1004 );
	} else {
		MMI_SendMessage( AlertKakuninId , MM_VISUALEFFECT , 1 , 0 );
		MMI_SendMessage( AlertKakuninId , MM_SOUNDEFFECT , 1 , 0 );
	};

	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( AlertKakuninId , MM_ATTACH , 1 , TopMenuHyperDialog );
	/*	About画面を表示する						*/
	MMI_SendMessage( AlertKakuninId , MM_SHOW , 0 );

	MMI_ExecSystem();
	return NOERR ;
}

extern	int	YesNoSw;

/*	initDataMESSAGE:DButton_getYESNO[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	getYESNO_OK( )
{
	MMI_SetHaltFlag( TRUE );
	YesNoSw= YES;
	return NOERR ;
}

/*	initDataMESSAGE:DButton_getYESNO[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	getYESNO_NO( )
{
	MMI_SetHaltFlag( TRUE );
	YesNoSw= NO;
	return NOERR ;
}

static	FILE	*WCMes_fp = NULL;
//	static	char	CrLf[] = { 0x0d, 0x0a };
void	WriteCATLOGMessage( const char *mes )
{
	/* ここでファイルに書き出す */
	if (	*CatlogMesFileName != '\0'
	||		WCMes_fp != NULL
	) {
		if ( WCMes_fp == NULL ) {
			if ( ( WCMes_fp = fopen( CatlogMesFileName , "ab" ) ) == NULL ) {
				er_open( CatlogMesFileName, 2, "WriteCATLOGMessage" );
			};
		};
		fwrite( mes, 1, strlen( mes ), WCMes_fp );
		//	fwrite( CrLf, 1, 2, WCMes_fp );
		fflush( WCMes_fp );
	};
}

void	CloseCATLOGMessageFile()
{
	if ( WCMes_fp != NULL ) {
		fclose( WCMes_fp );		WCMes_fp = NULL;
	};
}

void	RemoveCATLOGMessageFile()
{
	FILE	*fpi;
	char	fileName[ MAX_FILENAME_LEN ], *p;

	if ( ( fpi = fopen( CatlogMesFileName, "r" ) ) != NULL ) {
		if ( get_yesno("\n 古いメッセージファイルを削除しますか？" ) == YES ) {
			strcpy( fileName, CatlogMesFileName );
			p= last_yen( fileName );
			if ( p != last_comma( p ) ) {
				// 拡張子がある場合は それを削除する
				p= last_comma( p );	*p= '\0';
			};
			strcat( p, ".BAK" );
			remove( fileName );				// *.BAK を削除する
			CloseCATLOGMessageFile();
			rename( CatlogMesFileName, fileName );
		} else {
			print_now_time();
		};
	};
}

static	int		PrintMessageLineNum= 0;
void	PrintMessage( const char *mes )
{
	int		line0, line;

	WriteCATLOGMessage( mes );

	if ( PrintMessageWindowSw == FALSE ) {
		PrintMessageWindowSw = TRUE;;
		geneWindow( "CATLOG", CatlogMesFileName );
		PrintMessageWindowId = ActWindowId ;
		PrintMessageLineNum= 0;
	};
	MMI_SendMessage( window[PrintMessageWindowId].textId, MM_WAKE, 0 );
	// カーソルを文章末に移動する
	TE_GetCrtOffset( &line0 );
	TE_GetTextLen( &line );
	if ( line0 < line )	TE_offsetJump( line );
	// 文章を書き出す
	PrintMessageLineNum++;
	if ( PrintMessageLineNum > 2000 ) {
		MMI_SendMessage( window[PrintMessageWindowId].textId,
			MM_SETTEXT,3,mes,strlen(mes),FALSE
		);
		PrintMessageLineNum= 0;
	} else {
		MMI_SendMessage( window[PrintMessageWindowId].textId,
			MM_SETTEXT,3,mes,strlen(mes),TRUE
		);
	};
	MMI_SendMessage( window[PrintMessageWindowId].textId, MM_SHOW, 0 );
	MMI_SendMessage( window[PrintMessageWindowId].textId, MM_SLEEP, 0 );
}

void	ResizePrintMessageWindow( int smoll )
{
}

#define	MAX_GET_YESNO_LINE	3

int		get_yesno( char *mes )
{
	int		j, maxLen;
	char	Mes[MAX_GET_YESNO_LINE][ MAX_GAMEN_KANJI_LEN * 2 + 4];
	HYPER		hyp ;
	int			lupx, rdwx ;
	WINCLIP		*pwclp;

	//	PrintMessage( mes );
	WriteCATLOGMessage( mes );
	if ( *mes == '\n' )		mes++;
	if ( *mes == ' ' )		mes++;

	// ダイヤログの大きさを変更する
	// １行１００バイト
	maxLen= 40;
	for ( j=0; j< MAX_GET_YESNO_LINE ; j++ ) {
		mes= skip_space( mes );
		mes= KanStrCpy( Mes[j], mes, MAX_GAMEN_KANJI_LEN );
		MMI_SendMessage( GetYesNoMessage[j], MM_SETMSG, 1, Mes[j] );
		if ( maxLen < strlen(Mes[j]) )		maxLen= strlen( Mes[j] );
	};
	// ダイヤログの大きさを調整する
	MMI_SendMessage( AlertGetYesNo , MM_GETHYPER , 1 , &hyp );
		hyp.fr.lupx= 0;
		hyp.fr.rdwx= hyp.fr.lupx + maxLen * 6 + 6;
	MMI_SendMessage( AlertGetYesNo , MM_SETHYPER , 1 , &hyp ) ;
	// ドロー・ボタンの表示位置を変更する
		// DButton_getYESNO[]  ← 0(YES) と 1(NO)
			lupx= maxLen * 6 + 3 - ( 8 + 40 ) * 2;
			rdwx= lupx + 40;
			MMI_SendMessage( DButton_getYESNO[0] , MM_GETHYPER , 1 , &hyp );
				hyp.fr.lupx= lupx;		hyp.fr.rdwx= rdwx;
			MMI_SendMessage( DButton_getYESNO[0] , MM_SETHYPER , 1 , &hyp );
		// ドロー・ボタンの上の｢YES｣｢NO｣の表示位置を変更する
			MMI_SendMessage( GetYesNoMessage[3] , MM_GETHYPER , 1 , &hyp );
				hyp.fr.lupx= lupx;		hyp.fr.rdwx= rdwx;
			MMI_SendMessage( GetYesNoMessage[3] , MM_SETHYPER , 1 , &hyp );
		// DButton_getYESNO[]  ← 0(YES) と 1(NO)
			lupx= maxLen * 6 + 3 - ( 8 + 40 );
			rdwx= lupx + 40;
			MMI_SendMessage( DButton_getYESNO[1] , MM_GETHYPER , 1 , &hyp );
				hyp.fr.lupx= lupx;		hyp.fr.rdwx= rdwx;
			MMI_SendMessage( DButton_getYESNO[1] , MM_SETHYPER , 1 , &hyp );
		// ドロー・ボタンの上の｢YES｣｢NO｣の表示位置を変更する
			MMI_SendMessage( GetYesNoMessage[4] , MM_GETHYPER , 1 , &hyp );
				hyp.fr.lupx= lupx;		hyp.fr.rdwx= rdwx;
			MMI_SendMessage( GetYesNoMessage[4] , MM_SETHYPER , 1 , &hyp );
	// メッセージ部品の表示位置を変更する
	for ( j=0; j< MAX_GET_YESNO_LINE ; j++ ) {
		MMI_SendMessage( GetYesNoMessage[j], MM_GETHYPER , 1 , &hyp );
			hyp.fr.lupx= 3;
			hyp.fr.rdwx= hyp.fr.lupx + maxLen * 6 + 3 ;
		MMI_SendMessage( GetYesNoMessage[j], MM_SETHYPER , 1 , &hyp );
	};
	// 移動する
	MMI_SendMessage( AlertGetYesNo , MM_GETHYPER , 1 , &hyp );
		lupx= ( 640 - ( hyp.fr.rdwx - hyp.fr.lupx ) ) / 2 ;
		rdwx= lupx + ( hyp.fr.rdwx - hyp.fr.lupx );
		hyp.fr.lupx= lupx;		hyp.fr.rdwx= rdwx;
	MMI_SendMessage( AlertGetYesNo , MM_MOVE , 1 , &(hyp.fr) );


	if ( PrintMessageWindowSw == TRUE ) {
		// インアクティブ
//		MTL_setAtrObj( window[PrintMessageWindowId].windowId, MS_INACTIVEL40);
//		MMI_SendMessage( window[PrintMessageWindowId].windowId, MM_SLEEP, 0 );
		// クリップ枠の開始
//		WIN_beginUpDateObj( window[PrintMessageWindowId].windowId, &pwclp );
	};

	/* オブジェクトをダイアログに取り付ける */
	MMI_SendMessage( AlertGetYesNo, MM_ATTACH, 1, TopMenuHyperDialog);
	MMI_SendMessage( AlertGetYesNo, MM_SHOW , 0 ); 

	// 新しいループを回す
	MMI_ExecSystem( );

	MMI_SendMessage( AlertGetYesNo, MM_ERASE , 0 );
	MMI_SendMessage( AlertGetYesNo, MM_DETACH , 0 );

	if ( PrintMessageWindowSw == TRUE ) {
		// アクティブにする
//		MTL_resetAtrObj(window[PrintMessageWindowId].windowId,MS_INACTIVEL40);
//		MMI_SendMessage( window[PrintMessageWindowId].windowId, MM_WAKE, 0 );
		// クリップ枠の終了
//		WIN_endUpDateObj( pwclp );
	};

/*
	if ( YesNoSw == YES ) {		PrintMessage( " ← ＹＥＳ" );
	} else {					PrintMessage( " ← ＮＯ" );
	};
*/
	if ( YesNoSw == YES ) {		WriteCATLOGMessage( " ← ＹＥＳ" );
	} else {					WriteCATLOGMessage( " ← ＮＯ" );
	};

	return YesNoSw ;
}

/* DIVIDE_END */
