/* DIVIDE_START=topmenu.c */
#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	<file_dlg.h>

#include	"var.h"

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int	DeleteFileFunc( )
{
	unsigned	int		MSIctCnt;
				int		ret;

	// ファイルダイヤログを表示する
	while (
		(	ret=FDG_DspFileDlg(TopMenuHyperDialog,FDG_TEXT,NULL,ExtStrAll,&MSIctCnt)
		)
		> 0 
	) {
		FDG_GetPathName( str, &ret, 0 );
		sprintf( strSub, "%s\nを削除してもよろしいですか？", str );
		if ( get_yesno( strSub ) == YES )		remove( str );
	};
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int		showAbout( )
{
	/*	サウンドメッセージの指定 */
	if ( OutSoundMes == YES ) {
		MMI_SendMessage( GUIAboutId , MM_SOUNDEFFECT , 1 , 200 );
		MMI_SendMessage( GUIAboutId , MM_VISUALEFFECT , 1 , 100 );
	} else {
		MMI_SendMessage( GUIAboutId , MM_SOUNDEFFECT , 1 , 0 );
		MMI_SendMessage( GUIAboutId , MM_VISUALEFFECT , 1 , 0 );
	};

	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( GUIAboutId , MM_ATTACH , 1 , TopMenuHyperDialog );
	MMI_SendMessage( GUIAboutId , MM_SHOW , 0 ); 
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:deskTopBtnId[1]:MJ_ICONL40の呼び出し関数	*/
int	CATLOGExit_main( )
{
	/*	オブジェクトをダイアログに取り付ける	*/
	MMI_SendMessage( Alert_EXIT , MM_ATTACH , 1 , TopMenuHyperDialog );

	/*	サウンドメッセージの指定 */
	if ( OutSoundMes == YES ) {
		MMI_SendMessage( Alert_EXIT , MM_SOUNDEFFECT , 1 , 1000 );
		MMI_SendMessage( Alert_EXIT , MM_VISUALEFFECT , 1 , 807 );
	} else {
		MMI_SendMessage( Alert_EXIT , MM_SOUNDEFFECT , 1 , 0 );
		MMI_SendMessage( Alert_EXIT , MM_VISUALEFFECT , 1 , 0 );
	};

	/*	About画面を表示する						*/
	MMI_SendMessage( Alert_EXIT , MM_SHOW , 0 ); 

	return NOERR ;
}

static	void	RunCheckMain( char *Dir, char *mes )
{
	char	*p;

	DetailsSubSw = NO;
	sprintf( str, "\n%sを指定して下さい。", mes);
	PrintMessage( str );
	strcat( str, "「,」で区切って複数指定が可能です。フロッピィ・アイコンをクリックするとファイル・ダイヤログが表示されます。なお、ここでの変更は一時的な変更です。恒久的な変更は「詳細設定」で行い、詳細設定を CATLOG2.DEF ファイルに書き出して下さい。"
	);
	SetLineHelpAlert( str );

	p= GetPathName( Dir );
	if ( GetPathNameSubSw == YES ) {
		int		storeLZHSw ;

		PrintMessage( "\n" );
		print_now_time();
		PrintMessage( "処理を開始します" );
		if ( DeleteOldFileSw == YES ) {
			storeLZHSw= StoreLZHSw;
			StoreLZHSw= YES;
		};

		if ( Display != YES ) {
			PrintMessage( "\n右クリックか空白キーで中断します" );
		};

		// PrintMessage の Window を小さくする
		ResizePrintMessageWindow( YES );

		MMI_SendMessage( window[PrintMessageWindowId].textId, MM_SLEEP, 0 );

		CheckMain( p );			// ..\common.c

		MMI_SendMessage( window[PrintMessageWindowId].windowId, MM_WAKE, 0 );

		// PrintMessage の Window を元の大きさに戻す
		ResizePrintMessageWindow( NO );

		print_now_time();
		PrintMessage( "処理を終了しました\n" );
		StoreLZHSw= storeLZHSw ;
	};
	if ( DetailsSubSw == YES ) {
		if ( get_yesno( "\n DEF ファイルを書き出しますか？" ) == YES ) {
			SaveDefFile( );		// ..\common.c
		};
		DetailsSubSw= NO;
	};
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int		CheckFAPXFile_main( )
{
	// TopMenuSubMenuBarId をインアクティブにする
	MTL_setAtrObj( TopMenuSubMenuBarId , MS_INACTIVEL40);

	RunCheckMain( InDir, "生ログ・ファイルか、それがあるディレクトリ" );

	// TopMenuSubMenuBarId をアクティブにする
	MTL_resetAtrObj( TopMenuSubMenuBarId , (~MS_INACTIVEL40));
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int	CheckFile_main( )
{
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int	CheckCATLOGFile_main( )
{
	// TopMenuSubMenuBarId をインアクティブにする
	MTL_setAtrObj( TopMenuSubMenuBarId , MS_INACTIVEL40);

	RunCheckMain( OutDir, "ＣＡＴＬＯＧ整理済ファイルがあるディレクトリ" );

	// TopMenuSubMenuBarId をアクティブにする
	MTL_resetAtrObj( TopMenuSubMenuBarId , (~MS_INACTIVEL40));
	return NOERR ;
}

/*	initDataTOPMENU:mitemBarId[2]:MJ_MITEML40の呼び出し関数	*/
int	ReadLogFunc( )
{
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[0]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[1]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[2]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[3]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[4]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[5]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[6]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[7]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[8]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[9]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[10]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[11]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[12]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[13]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[14]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[15]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[16]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[17]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[18]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[19]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[20]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[21]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[22]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[23]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[24]:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:mitem2Id[25]:MJ_MITEML40の呼び出し関数	*/
int	ReadLogMain( )
{
	return NOERR ;
}

void	SaveDefFile()
{
				int		ret;
	unsigned	int		cnt;
				FILE	*fpi;
				char	*p1, *p2 ;
				char	fileName[ 128 ];

SaveDefFileJump:
	forever {
		PrintMessage( 
"\n"
"\n定義ファイルとして、書き出すファイルを指定して下さい。"
"\n　　ファイルの拡張子は .DEF になります。"
		);
		// ファイルダイヤログを表示してパスを入力する
		strcpy( fileName, CatlogDefFileName );
		if ( ( fpi= fopen( CatlogDefFileName, "r" ) ) != NULL ) {
			fclose( fpi );
			p1= last_yen( fileName );
			FDG_SetFileText( p1 + 1 );
			if ( p1 != fileName ) {
				if ( *(p1-1) == ':' ) {		*++p1 = '\0';
				} else {					*p1++ = '\0';
				};
			} else {
				// \\ がない場合
				if ( *(p1+1) == ':' )		FDG_SetFileText( p1 + 2 );
			};
			p1= fileName;
		} else {
			FDG_SetFileText( "CATLOG2.DEF" );
			if ( *fileName == '\0' ) {
				p1= NULL;
			} else {
				// ファイルが存在しない場合
				p1= last_yen( fileName );
				FDG_SetFileText( p1 + 1 );
				if ( p1 != fileName ) {
					if ( *(p1-1) == ':' ) {		*++p1 = '\0';
					} else {					*p1++ = '\0';
					};
				} else {
					// \\ がない場合
					if ( *(p1+1) == ':' )		FDG_SetFileText( p1 + 2 );
				};
				p1= fileName;
			};
		};
		ret=FDG_DspFileDlg(TopMenuHyperDialog,FDG_TEXT,p1,ExtStrDef,&cnt);
		if ( ret > 0 ) {
			FDG_GetPathName( str, &ret, 0 );
			p1= last_yen( str );
			p2= last_comma( p1 );
			if ( p2 != p1 ) {
				// 拡張子がある場合
				*p2= '\0';
			};
			strcat( str, ".DEF" );
			strcpy( CatlogDefFileName, str);
			if ( (fpi=fopen(CatlogDefFileName, "r")) != NULL ) {
				fclose( fpi );
			};
			break;
		};
		if ( get_yesno("\n DEF ファイルに書き出すのは止めますか？" ) == YES ) {
			return;
		};
	};

	sprintf(str, "\n<%s>でDeFileを書き出します", CatlogDefFileName );
	PrintMessage( str );

	if ( WriteCatlogDef( CatlogDefFileName ) == NO ) {
		sprintf( str, "\n<%s>に書き出せませんでした", CatlogDefFileName );
		PrintMessage( str );
		goto	SaveDefFileJump;
	};
	DetailsSubSw= NO;
}

/************************************/
/* 定義ファイルからデータを読み取る */
/************************************/
int		LoadDefFile( int fileLoadSw )
{
				int		ret;
	unsigned	int		cnt;
				FILE	*fpi;

	if ( fileLoadSw == YES ) {
		PrintMessage( "\nＤＥＦファイルを指定して下さい" );
		for ( ; ; ) {
			// ファイルダイヤログを表示してパスを入力する
			ret=FDG_DspFileDlg(
					TopMenuHyperDialog,
					FDG_TEXT,
					NULL,
					ExtStrDef,
					&cnt
			);
			if ( ret > 0 ) {
				FDG_GetPathName( str, &ret, 0 );
				if ( (fpi=fopen( str, "r")) != NULL ) {
					strcpy( CatlogDefFileName, str);
					break;
				};
			};
			if ( (fpi=fopen(CatlogDefFileName, "r")) != NULL ) {
					fclose( fpi );
					break;
			};
			if( get_yesno("\n DEF ファイルから読み出すのは止めますか？")==YES) {
				return( NO );
			};
		};
	};

	return ( ReadCatlogDef( CatlogDefFileName ) );
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int	LoadDefFileFunc( )
{
	LoadDefFile( YES );
	return NOERR ;
}

void	RunExeProgram( const char *prg )
{
	char	*pWork, *ptr;
	FRAME	fr = { 0, 0, 639, 479 };
	extern	char	*guiEgbPtr ;			/*	EGB のワークアドレス	*/

	// 画面情報を保存する
		// EGBのワークの退避
		if ( MG_pushEgbWork( guiEgbPtr, &pWork) <0 ) {
			error_bug( "メモリーが足りません guiEgbPtr" );
		};
		// マウスの消去
		MG_mosDisp( 2 );
		// 画面の退避
		ptr = MG_SaveRect( &fr );
	// システムの停止
		FM_ResetVector();				// INT 23H/24H終了
		MMI_pauseSystem( );
	// 画面モードを変更する
/*
		EGB_resolution( guiEgbPtr, 0, 1 );
		EGB_resolution( guiEgbPtr, 1, 1 );
		EGB_writePage(guiEgbPtr, 1);	EGB_clearScreen( guiEgbPtr );
		EGB_writePage(guiEgbPtr, 0);	EGB_clearScreen( guiEgbPtr );
*/
	// コ・プロセスを起動する
		system( prg );

	// 画面モードを復帰する
		EGB_resolution( guiEgbPtr, 0, 3 );
		EGB_resolution( guiEgbPtr, 1, 3 );
	// システムの再開
		MMI_continueSystem( );
		FM_SetVector();					// INT 23H/24H設定
	// 画面情報を復帰する
		MG_popEgbWork( guiEgbPtr, pWork);	// EGBのワークの復帰
		// 画面の復帰
		MG_RecovRect( &fr, ptr, TRUE );
		// マウスの表示
		MG_mosDisp( 3 );
}

/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
int	RunEditer_main( )
{
	if ( get_yesno( "\n エディタを起動していいですか？" ) == YES ) {
		RunExeProgram( EditorCommand );
	};
	return NOERR ;
}


/*	initDataTOPMENU:NULL:MJ_MITEML40の呼び出し関数	*/
/*	initDataTOPMENU:IconHelp:MJ_ICONL40の呼び出し関数	*/
int	HelpFunc_main( )
{
	return NOERR ;
}

/*	initDataTOPMENU:deskTopBtnId[0]:MJ_ICONL40の呼び出し関数	*/
int	DspSkbFunc( )
{
	MMI_DspSkb();
	return NOERR ;
}

/*	initDataTOPMENU:NULL:MJ_ICONL40の呼び出し関数	*/
int	GetDetailsFunc( )
{
	CopyInside2Details();				// 内部変数を GUI 変数に転送する
	PrintMessage( "\nＣＡＴＬＯＧ２の動作に関する詳細を設定します。" );
	GetDetails();
	return NOERR ;
}

/* DIVIDE_END */
