#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 <egb.h>
#include <mos.h>
#include <snd.h>
//#include "ugoku.h"
#include "movrlf.h"

/* dsk */
int	baseDialogId = -1 ;
int	menubarId = -1 ;
int	menuId = -1 ;
int	mItemId[1] = -1 ;
int	SDKmenuId = -1 ;
int	SDKmItemId[3] = -1 ;
int	quitIconId = -1 ;
int	wakuDialogId = -1 ;
int	wakuDialogId2 = -1 ;
/* dsk2 */
int	baseDialogId2 = -1 ;
int	base2MesId[6] = -1 ;
int	baseDialogId3 = -1 ;
int	base3BtnId[3] = -1 ;
int	base3MesId[3] = -1 ;
int	baseMovDialogId = -1 ;
int	baseMovBtnId[4] = -1 ;
int	baseMovMesId[7] = -1 ;
int	baseMovInputDialogId[2] = -1 ;
int	baseMovInputMesId[2] = -1 ;
int	base2BtnId[3] = -1 ;
int	baseDialogId4 = -1 ;
int	base4BtnId[3] = -1 ;
int	base4MesId[3] = -1 ;
int	baseColorDialogId = -1 ;
int	baseColorNumId[3] = -1 ;
int	baseColorMesId[1] = -1 ;
int	baseColorInputDialogId = -1 ;
int	baseDialogId5 = -1 ;
int	effTIconId[12] = -1 ;
int	base5MesId[12] = -1 ;
/* dsk3 */
int	baseV00DialogId = -1 ;
int	baseV00BtnId[3] = -1 ;
int	baseV00InputDialogId[2] = -1 ;
int	baseV00InputMesId[2] = -1 ;
int	baseV00MesId[5] = -1 ;
int	baseUnderTifDialogId = -1 ;
int	baseUnderTifBtnId[1] = -1 ;
int	baseUnderMesId[1] = -1 ;
int	baseUnderInputDialogId = -1 ;
int	baseUnderInputMesId = -1 ;
int	baseSetupDialogId = -1 ;
int	baseSetupDialogId2 = -1 ;
int	baseSetupNumId[6] = -1 ;
int	baseSetupMesId[15] = -1 ;
int	baseSDBtnId[2] = -1 ;
int	setupTIconId[2] = -1 ;
int	setupTIconId2[4] = -1 ;
int	baseWaitDialogId = -1 ;
int	baseWDBtnId[1] = -1 ;
int	baseWMesId[2] = -1 ;
/* abou */
int	alertId = -1 ;
int	messageId[3] = -1 ;
int	dspIconId = -1 ;
int	aboutOKBtnId = -1 ;
/* err */
int	errorId = -1 ;
int	errorOKBtnId = -1 ;
int	errorIconId = -1 ;
int	errormessage[2] = -1 ;
/* file 部品 */
int	fileSubDialogId = -1 ;
int	fileBtnId = -1 ;
int	fileMesId = -1 ;

char *bbuf;		/* 汎用buffer */

char *transBuf1 ;
char *transBuf2 ;
char *transBuf3 ;
char *orgBuf ;
char *underBuf ;

int		dataTypeMode = 0 ;	/* 0:mov 1:v00 2:mvb */
int		underTypeMode = 0 ;	/* 0:単色 1:tiff指定 2:原画  */
int		effectMode = 0 ;	/* effect mode */

int		 tiffSaveCompMode = 0 ;	/*  tiff save mode 0:normal, 1:comp. */

char	tifPath[100] = 0 ;
static char	tifPathDummy[100] = 0 ;
char	tifName[ F_MAX ][16] ;
int		tifTotal = 0 ;
char	tifOutPath[100] = 0 ;
static char	tifOutPathDummy[100] = 0 ;
int		tifOutTotal = 0 ;

char	v00Path[100] = 0 ;
static char	v00PathDummy[100] = 0 ;
char	v00OutPath[100] = 0 ;
static char	v00OutPathDummy[100] = 0 ;

char	mvbPath[100] = 0 ;
static char	mvbPathDummy[100] = 0 ;
char	mvbOutPath[100] = 0 ;
static char	mvbOutPathDummy[100] = 0 ;

char	underTifPath[100] = 0 ;
static char	underTifPathDummy[100] = 0 ;
int underColor[3] = { 16, 16, 16 } ;

int setupNum[12][8] = {
						{ 10,  0,  0, 20, 10,  0, 1, 0},
						{ 10,  0,  0,  0,  0,  0, 1, 0},
						{ 10,  0,  0,  0,  0,  0, 1, 0},
						{ 10, 40,  0,  0,  0,255, 1, 0},
						{ 10, 40,  0,  0,  0,255, 1, 0},
						{  0,  0,  0,100,100,128, 1, 0},

						{ 15, 10, 20, 10, 10,  0, 1, 0},
						{ 10,  0,  0,  0,  0,  0, 1, 0},
						{ 10,  0,  0,  0,  0,  0, 1, 0},
						{ 10, 40,  0,  0, 50, 32, 1, 0},
						{ 10, 40,  0,  0, 50, 32, 1, 0},
						{  0,  0,  0, 25, 25,  0, 1, 0}
					  }	;

/*
		基本ルーチン
*/

/*	initDataIMEDSK2:base3BtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIMEDSK2:base3BtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIMEDSK2:base3BtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncBase(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i, md ;

	md = dataTypeMode ;
	for( i=0 ; i<3 ; i++ )
	{
		if( kobj == base3BtnId[i] )break ;
	}
	if( i >= 3 )i = 0 ;
	dataTypeMode = i ;

	for( i=0 ; i<3 ; i++ )
	{
		if( dataTypeMode == i )
			setMsgColor( base3MesId[i], 14 ) ;
		else
			setMsgColor( base3MesId[i], 8 ) ;
	}

	if( md == dataTypeMode )
		return NOERR ;

	switch( md )
	{
	case 0:
		MMI_SendMessage( baseMovDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( baseMovDialogId, MM_DETACH, 0 ) ;
		break ;
	case 1:
	case 2:
		MMI_SendMessage( baseV00DialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( baseV00DialogId, MM_DETACH, 0 ) ;
		break ;
	}

	switch( dataTypeMode )
	{
	case 0:
		MMI_SendMessage( baseMovInputMesId[0], MM_SETMSG, 1, tifPathDummy ) ;
		MMI_SendMessage( baseMovInputMesId[1], MM_SETMSG, 1, tifOutPathDummy );
		MMI_SendMessage( baseMovDialogId, MM_ATTACH, 1, baseDialogId3 ) ;
		MMI_SendMessage( baseMovDialogId, MM_SHOW, 0 ) ; /* 見せる */
		break ;
	case 1:
		MMI_SendMessage( baseV00InputMesId[0], MM_SETMSG, 1, v00PathDummy ) ;
		MMI_SendMessage( baseV00InputMesId[1], MM_SETMSG, 1, v00OutPathDummy );
		MMI_SendMessage( baseV00DialogId, MM_ATTACH, 1, baseDialogId3 ) ;
		MMI_SendMessage( baseV00DialogId, MM_SHOW, 0 ) ; /* 見せる */
		break ;
	case 2:
		MMI_SendMessage( baseV00InputMesId[0], MM_SETMSG, 1, mvbPathDummy ) ;
		MMI_SendMessage( baseV00InputMesId[1], MM_SETMSG, 1, mvbOutPathDummy );
		MMI_SendMessage( baseV00DialogId, MM_ATTACH, 1, baseDialogId3 ) ;
		MMI_SendMessage( baseV00DialogId, MM_SHOW, 0 ) ; /* 見せる */
		break ;
	}

	return NOERR ;
}

/*	initDataIMEDSK2:baseMovBtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncMovDir(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int tifFirstFlg ;

	char *ExtStr[] = { "*.TIF", NULL } ;
	int ret, error ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	error = NOERR ;
	ret = directorySelector(tifPath, "dummy.tif", ExtStr,
								 "ディレクトリ", "指  定", "取  消");
	if(	ret )
		goto v10 ;

	if( error == NOERR )
	{
		tifFirstFlg = 0 ;	/* tiff editor リフレッシュ */

		setDummyFile( tifPath, tifPathDummy, 39 ) ;

		MMI_SendMessage( baseMovInputMesId[0], MM_SETMSG, 1, tifPathDummy ) ;
		MMI_SendMessage( baseMovInputDialogId[0], MM_SHOW, 0 ) ; /* 見せる */
	}

v10:
	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
	if( error )
		errorCheck( error ) ;
	return NOERR ;
}

/*	initDataIMEDSK2:baseMovBtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncMovTif(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;

	tifFileEdit( tifPath ) ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*	initDataIMEDSK2:baseMovBtnId[3]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncMovPly(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int tiff_files_check( char *, int, char b[][16], int, int ) ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;

	tiff_files_check( tifPath, tifTotal, tifName, 0, tifTotal-1 ) ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*	initDataIMEDSK2:baseMovBtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncMovOut(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char *ExtStr[] = { "*.TIF", NULL } ;
	char path[100], path2[100] ;
	int i, ret, error ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	error = NOERR ;
	ret = fileSelector2(tifOutPath, ExtStr,
								 "出力ファイル", "設  定", "取  消");
	if(	ret )
		goto v10 ;
	else
	{
		for( i=0 ; i<80 ; i++ )
		{
			if( tifOutPath[i] == 0 || tifOutPath[i] == '.' )
			{
				tifOutPath[i] = 0 ;
				break ;
			}
		}
		for( i=i ; i>=0 ; i-- )
		{
			if( tifOutPath[i] == '\\' )
			{
				break ;
			}
		}
		tifOutPath[i+5] = 0 ;

		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		error = file_kakuchousi_set( path, tifOutPath, "****" ) ;
		if( error == NOERR )
		{
			error = file_kakuchousi_set( path2, path, ".TIF" ) ;
		}

		setDummyFile( path2, tifOutPathDummy, 39 ) ;
	}

	if( error == NOERR )
	{
		MMI_SendMessage( baseMovInputMesId[1], MM_SETMSG, 1, tifOutPathDummy );
		MMI_SendMessage( baseMovInputDialogId[1], MM_SHOW, 0 ) ; /* 見せる */
	}

v10:
	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
	if( error )
		errorCheck( error ) ;
	return NOERR ;
}

/*	initDataIMEDSK3:baseV00BtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncV00Org(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char **ExtStr ;
	char *ExtStrV00[] = { "*.V00", NULL } ;
	char *ExtStrMvb[] = { "*.MVB", NULL } ;
	char kakuV00[] = ".V00" ;
	char kakuMvb[] = ".MVB" ;
	char *path, *dummy, *kakuchousi ;
	char path2[100] ;
	int i, ret, error ;

	switch( dataTypeMode )
	{
	case 1:
		ExtStr = ExtStrV00 ;
		path = v00Path ;
		dummy = v00PathDummy ;
		kakuchousi = kakuV00 ;
		break ;
	case 2:
		ExtStr = ExtStrMvb ;
		path = mvbPath ;
		dummy = mvbPathDummy ;
		kakuchousi = kakuMvb ;
		break ;
	}

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	error = NOERR ;
	ret = fileSelector( path, ExtStr,
								 "原画ファイル", "設  定", "取  消");
	if(	ret )
		goto v10 ;
	else
	{
		error = file_kakuchousi_set( path2, path, kakuchousi ) ;
		for( i=0 ; i<80 ; i++ )
			path[i] = path2[i] ;
		setDummyFile( path, dummy, 39 ) ;
	}

	if( error == NOERR )
	{
		MMI_SendMessage( baseV00InputMesId[0], MM_SETMSG, 1, dummy ) ;
		MMI_SendMessage( baseV00InputDialogId[0], MM_SHOW, 0 ) ; /* 見せる */
	}

v10:
	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
	if( error )
		errorCheck( error ) ;
	return NOERR ;
}

/*	initDataIMEDSK3:baseV00BtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncV00Ply(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int error ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;

	error = NOERR ;
	switch( dataTypeMode )
	{
	case 1:
		error = v00WakuClearPlay( v00Path ) ;
		break ;
	case 2:
		error = mvbWakuClearPlay( mvbPath ) ;
		break ;
	}

	if( error )
		errorCheck( error ) ;
	else
		waitAndDisplayKakunin() ;

	r_waku_del() ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*	initDataIMEDSK3:baseV00BtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncV00Out(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char **ExtStr ;
	char *ExtStrV00[] = { "*.V00", NULL } ;
	char *ExtStrMvb[] = { "*.MVB", NULL } ;
	char kakuV00[] = ".V00" ;
	char kakuMvb[] = ".MVB" ;
	char *path, *dummy, *kakuchousi ;
	char path2[100] ;
	int i, ret, error ;

	switch( dataTypeMode )
	{
	case 1:
		ExtStr = ExtStrV00 ;
		path = v00OutPath ;
		dummy = v00OutPathDummy ;
		kakuchousi = kakuV00 ;
		break ;
	case 2:
		ExtStr = ExtStrMvb ;
		path = mvbOutPath ;
		dummy = mvbOutPathDummy ;
		kakuchousi = kakuMvb ;
		break ;
	}

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	error = NOERR ;
	ret = fileSelector( path, ExtStr,
								 "出力ファイル", "設  定", "取  消");
	if(	ret )
		goto v10 ;
	else
	{
		error = file_kakuchousi_set( path2, path, kakuchousi ) ;
		for( i=0 ; i<80 ; i++ )
			path[i] = path2[i] ;
		setDummyFile( path, dummy, 39 ) ;
	}

	if( error == NOERR )
	{
		MMI_SendMessage( baseV00InputMesId[1], MM_SETMSG, 1, dummy ) ;
		MMI_SendMessage( baseV00InputDialogId[1], MM_SHOW, 0 ) ; /* 見せる */
	}

v10:
	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
	if( error )
		errorCheck( error ) ;
	return NOERR ;
}

/*	initDataIMEDSK2:base4BtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIMEDSK2:base4BtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIMEDSK2:base4BtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncUnder(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i, md ;

	md = underTypeMode ;
	for( i=0 ; i<3 ; i++ )
	{
		if( kobj == base4BtnId[i] )break ;
	}
	if( i >= 3 )i = 0 ;
	underTypeMode = i ;

	for( i=0 ; i<3 ; i++ )
	{
		if( underTypeMode == i )
			setMsgColor( base4MesId[i], 14 ) ;
		else
			setMsgColor( base4MesId[i], 8 ) ;
	}

	if( md == underTypeMode )
		return NOERR ;

	switch( md )
	{
	case 0:
		MMI_SendMessage( baseColorDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( baseColorDialogId, MM_DETACH, 0 ) ;
		break ;
	case 1:
		MMI_SendMessage( baseUnderTifDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( baseUnderTifDialogId, MM_DETACH, 0 ) ;
		break ;
	}

	switch( underTypeMode )
	{
	case 0:
		MMI_SendMessage( baseColorDialogId, MM_ATTACH, 1, baseDialogId4 ) ;
		MMI_SendMessage( baseColorDialogId, MM_SHOW, 0 ) ; /* 見せる */
		break ;
	case 1:
		MMI_SendMessage( baseUnderTifDialogId, MM_ATTACH, 1, baseDialogId4 ) ;
		MMI_SendMessage( baseUnderTifDialogId, MM_SHOW, 0 ) ; /* 見せる */
		break ;
	case 2:
		break ;
	}

	return NOERR ;
}

/*	initDataIMEDSK3:baseUnderTifBtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncUnderTif(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char *ExtStr[] = { "*.TIF", NULL } ;
	char path[100] ;
	int i, ret, error ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	error = NOERR ;
	ret = fileSelector( underTifPath, ExtStr,
								 "ＴＩＦファイル", "設  定", "取  消");
	if(	ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		if( error )
			errorCheck( error ) ;
		return NOERR ;
	}
	else
	{
		error = file_kakuchousi_set( path, underTifPath, ".TIF" ) ;
		for( i=0 ; i<80 ; i++ )
			underTifPath[i] = path[i] ;
		setDummyFile( underTifPath, underTifPathDummy, 39 ) ;
	}

	if( error == NOERR )
	{
		MMI_SendMessage( baseUnderInputMesId, MM_SETMSG, 1,
													underTifPathDummy ) ;
		MMI_SendMessage( baseUnderInputDialogId, MM_SHOW, 0 ) ; /* 見せる */
	}

	/* 消す */
	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;
	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId, (~MS_DSPONLYL40) ) ;
	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	EGB_writePage(guiEgbPtr,1);
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen(guiEgbPtr);			/* clear */
	EGB_displayStart(guiEgbPtr,3,0,0);
	EGB_displayStart(guiEgbPtr,2,1,1);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,0,0,0);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,3,320,240);
	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);			/* pageを元に戻さないと暴走 */

	error = loadtif( underTifPath ) ;

	if( error == NOERR )
	{
		r_panel_make( 0, 0, 639, 19 ) ;
		r_waku_clear2( 320, 240, 2 ) ;

		waitAndDisplayKakunin() ;

		r_waku_clear1( 320, 240, 2 ) ;
		r_panel_del() ;
		r_waku_del() ;
	}
	if( error )
		errorCheck( error ) ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/* ファイルネームをダミーにセットする sub */
static int setDummyFile( char *path, char *dummy, int max )
{
	int i, k ;

	for( i=0 ; i<80 ; i++ )
	{
		dummy[i] = path[i] ;
		if( dummy[i] == 0 )break ;
	}
	if( i>max )	/* tifPathが長すぎたときの処理 */
	{
		dummy[0] = '･' ;
		dummy[1] = '･' ;
		dummy[2] = '･' ;
		dummy[3] = '･' ;
		dummy[4] = '･' ;
		k = i - (max-6) ;
		for( i=0 ; i<(max-5) ; i++ )
		{
			dummy[5+i] = path[k+i] ;
			if( dummy[i] == 0 )break ;
		}
	}
	return NOERR ;
}


/*	initDataIMEDSK2:baseColorNumId[0]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK2:baseColorNumId[1]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK2:baseColorNumId[2]:MJ_NUMBOXL40の呼び出し関数	*/
int	baseColorNumSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char para[16] ;
	int i ;
	int var, min, max, delta, ptColumn ;

	for( i=0 ; i<3 ; i++ )
	{
		if( kobj == baseColorNumId[i] )
		{
			MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
			underColor[i] = var ;
		}
	}
	DWORD( para + 0 ) = 1 ;
	DWORD( para + 4 ) = 13 ;
	BYTE( para + 8 ) = underColor[2] * 8 ;
	BYTE( para + 9 ) = underColor[0] * 8 ;
	BYTE( para + 10 ) = underColor[1] * 8 ;
	BYTE( para + 11 ) = 0 ;
	EGB_palette( guiEgbPtr, 1, para ) ;

	return NOERR ;
}

/*	initDataIMEDSK2:effTIconId[0〜12]:MJ_TICONL40の呼び出し関数	*/
int	effTIconFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	for( i=0 ; i<12 ; i++ )
	{
		if( kobj == effTIconId[i] )
			break ;
	}
	if( i < 12 )
	{
		MTL_setFlagObj( effTIconId[i], MS_UNSELECT ) ;
		MTL_resetFlagObj( effTIconId[effectMode],
							(~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( effTIconId[effectMode], MM_SHOW, 0 ) ;
		effectMode = i ;
	}
	return NOERR ;
}

/*	initDataIMEDSK2:base2BtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncAdj(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int 			alertobj ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( baseDialogId2, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	if( (effectMode == 5) || (effectMode == 11) )
		MMI_SendMessage( baseSetupMesId[5], MM_SETMSG, 1,
						"輝度の基準値（0〜255）" ) ;
	else
		MMI_SendMessage( baseSetupMesId[5], MM_SETMSG, 1,
						"２値の間隔（0〜255）" ) ;

	selectFuncAdj_sub() ;

	alertobj = MMI_GetAlertObj() ;  /*  現在のALERTOBJを退避  　  */
	MMI_SetAlertObj( baseSetupDialogId ) ;
	MMI_SendMessage( baseSetupDialogId, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseSetupDialogId, MM_SHOW, 0 ) ; /* 見せる */

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( baseSetupDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseSetupDialogId, MM_DETACH, 0 ) ;
	MMI_SetAlertObj( alertobj ) ;  /*  ALERTOBJを元に戻す    　   */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( baseDialogId2, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

static int	selectFuncAdj_sub()
{
	int max[] = { 100, 255, 100, 100, 100, 255 } ;
	int sw[12][8] = {
						{ 1, 1, 1, 1, 1, 0, 1, 1 },
						{ 1, 1, 1, 1, 1, 0, 1, 0 },
						{ 1, 1, 1, 1, 1, 0, 1, 0 },
						{ 1, 1, 1, 1, 1, 1, 1, 0 },
						{ 1, 1, 1, 1, 1, 1, 1, 0 },
						{ 0, 0, 1, 1, 1, 1, 0, 0 },

						{ 1, 1, 1, 1, 1, 0, 1, 1 },
						{ 1, 1, 1, 1, 1, 0, 1, 0 },
						{ 1, 1, 1, 1, 1, 0, 1, 0 },
						{ 1, 1, 1, 1, 1, 1, 1, 0 },
						{ 1, 1, 1, 1, 1, 1, 1, 0 },
						{ 0, 0, 1, 1, 1, 1, 0, 0 }
					} ;
	int i ;

	for( i=0 ; i<2 ; i++ )
		MTL_resetFlagObj( setupTIconId[i],
							(~(MS_UNSELECT | MS_TOGGLE)) ) ;
	for( i=0 ; i<4 ; i++ )
		MTL_resetFlagObj( setupTIconId2[i],
							(~(MS_UNSELECT | MS_TOGGLE)) ) ;
	MTL_setFlagObj( setupTIconId[ setupNum[effectMode][6] ],
			(MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( setupTIconId2[ setupNum[effectMode][7] ],
			(MS_UNSELECT | MS_TOGGLE) ) ;

	for( i=0 ; i<6 ; i++ )
	{
		MMI_SendMessage( baseSetupNumId[i], MM_SETNUMBOX, 5,
					 setupNum[effectMode][i], 0, max[i], 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */
	}

	for( i=0 ; i<6 ; i++ )
	{
			/* 1〜2bit clear */
		MTL_resetAtrObj( baseSetupNumId[i], (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( baseSetupMesId[i], (~MS_DSPONLYL40) ) ;

		if( sw[effectMode][i] )
		{
			MTL_setAtrObj( baseSetupMesId[i], MS_DSPONLYL40 ) ;
		}
		else
		{
			MTL_setAtrObj( baseSetupNumId[i], MS_INACTIVEL40 ) ;
			MTL_setAtrObj( baseSetupMesId[i], MS_INACTIVEL40 ) ;
		}
	}

	for( i=11 ; i<14 ; i++ )
	{
			/* 1〜2bit clear */
		MTL_resetAtrObj( baseSetupMesId[i], (~MS_DSPONLYL40) ) ;

		if( sw[effectMode][6] )
		{
			MTL_setAtrObj( baseSetupMesId[i], MS_DSPONLYL40 ) ;
		}
		else
		{
			MTL_setAtrObj( baseSetupMesId[i], MS_INACTIVEL40 ) ;
		}
	}

	for( i=0 ; i<2 ; i++ )
	{
			/* 1〜2bit clear */
		MTL_resetAtrObj( setupTIconId[i], (~MS_DSPONLYL40) ) ;

		if( sw[effectMode][6] == 0 )
		{
			MTL_setAtrObj( setupTIconId[i], MS_INACTIVEL40 ) ;
		}
	}

	for( i=6 ; i<11 ; i++ )
	{
			/* 1〜2bit clear */
		MTL_resetAtrObj( baseSetupMesId[i], (~MS_DSPONLYL40) ) ;

		if( sw[effectMode][7] )
		{
			MTL_setAtrObj( baseSetupMesId[i], MS_DSPONLYL40 ) ;
		}
		else
		{
			MTL_setAtrObj( baseSetupMesId[i], MS_INACTIVEL40 ) ;
		}
	}

	for( i=0 ; i<4 ; i++ )
	{
			/* 1〜2bit clear */
		MTL_resetAtrObj( setupTIconId2[i], (~MS_DSPONLYL40) ) ;

		if( sw[effectMode][7] == 0 )
		{
			MTL_setAtrObj( setupTIconId2[i], MS_INACTIVEL40 ) ;
		}
	}

	return NOERR ;
}

/*	initDataIMEDSK3:baseSetupNumId[0]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK3:baseSetupNumId[1]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK3:baseSetupNumId[2]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK3:baseSetupNumId[3]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK3:baseSetupNumId[4]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIMEDSK3:baseSetupNumId[5]:MJ_NUMBOXL40の呼び出し関数	*/
int	baseSetupNumFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;
	int var, min, max, delta, ptColumn ;

	for( i=0 ; i<6 ; i++ )
	{
		if( kobj == baseSetupNumId[i] )
		{
			MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
			setupNum[effectMode][i] = var ;
		}
	}
	return NOERR ;
}

/*	initDataIMEDSK3:setupTIconId[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIMEDSK3:setupTIconId[1]:MJ_TICONL40の呼び出し関数	*/
int	setupTIconFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	for( i=0 ; i<2 ; i++ )
	{
		if( kobj == setupTIconId[i] )
			break ;
	}
	if( i < 2 )
	{
		MTL_setFlagObj( setupTIconId[i], MS_UNSELECT ) ;
		MTL_resetFlagObj( setupTIconId[ setupNum[effectMode][6] ],
							(~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( setupTIconId[ setupNum[effectMode][6] ],
							MM_SHOW, 0 ) ;
		setupNum[effectMode][6] = i ;
	}
	return NOERR ;
}

/*	initDataIMEDSK3:setupTIconId2[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIMEDSK3:setupTIconId2[1]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIMEDSK3:setupTIconId2[2]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIMEDSK3:setupTIconId2[3]:MJ_TICONL40の呼び出し関数	*/
int	setupTIconFunc2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	for( i=0 ; i<4 ; i++ )
	{
		if( kobj == setupTIconId2[i] )
			break ;
	}
	if( i < 4 )
	{
		MTL_setFlagObj( setupTIconId2[i], MS_UNSELECT ) ;
		MTL_resetFlagObj( setupTIconId2[ setupNum[effectMode][7] ],
							(~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( setupTIconId2[ setupNum[effectMode][7] ],
							MM_SHOW, 0 ) ;
		setupNum[effectMode][7] = i ;
	}
	return NOERR ;
}

/*	initDataIMEDSK3:baseSDBtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	baseSDOkFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	initDataIMEDSK2:base2BtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncOk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int error ;

	error = NOERR ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;

	setupSens = setupNum[effectMode][0] ;
	setupCutoff = setupNum[effectMode][1] ;
	setupSoft = setupNum[effectMode][2] ;
	setupY = setupNum[effectMode][3] ;
	setupC = setupNum[effectMode][4] ;
	setupP = setupNum[effectMode][5] ;
	setupBibun = setupNum[effectMode][6] ;
	setupRay = setupNum[effectMode][7] ;

	switch( dataTypeMode )
	{
	case 0:
		error = tiffRelief() ;
		break ;
	case 1:
		error = v00Relief() ;
		break ;
	case 2:
		error = mvbRelief() ;
		break ;
	}

	if( error )
		errorCheck( error ) ;

	MMI_FlushEvnt() ;
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*	initDataIMEDSK2:base2BtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	selectFuncPly(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int error ;

	error = NOERR ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( baseDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseDialogId2, MM_DETACH, 0 ) ;

	switch( dataTypeMode )
	{
	case 0:
		error = tiffPlay() ;
		break ;
	case 1:
		error = v00WakuClearPlay( v00OutPath ) ;
		break ;
	case 2:
		error = mvbWakuClearPlay( mvbOutPath ) ;
		break ;
	}

	if( error )
		errorCheck( error ) ;
	else
		waitAndDisplayKakunin() ;

	r_waku_del() ;

	MMI_SendMessage( baseDialogId2, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseDialogId2, MM_SHOW, 0 ) ; /* 見せる */

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}



/*

		ここからは 汎用サブルーチン

*/


/* ウエイト 確認してください */
waitAndDisplayKakunin()
{
	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	MMI_SendMessage( baseWaitDialogId, MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( baseWaitDialogId, MM_SHOW, 0 ) ;
	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */
	MMI_SendMessage( baseWaitDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( baseWaitDialogId, MM_DETACH, 0 ) ;

	r_waku_del() ;

	return NOERR ;
}

/*	initDataIMEDSK3:baseWDBtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	baseWDOkFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/* init */
initEtc()
{
	if( (bbuf = (char *)TL_malloc( 998400+153600 )) == NULL )
	{					/* 153600はクッション */
		return -1 ;
	}
	transBuf1 = bbuf ;	/* transBuf1〜2(y, cb, cr buffer)はloadatif等で
								汎用ワークに使われることもあり */
	transBuf2 = transBuf1 + 320*240*3 ;
	transBuf3 = transBuf2 + 320*240*3 ;
	orgBuf = transBuf3 + 320*240*3 ;
	underBuf = orgBuf + 153600 ;

	MTL_setFlagObj( effTIconId[0], (MS_UNSELECT | MS_TOGGLE) ) ;
	MMI_SendMessage( effTIconId[0], MM_SHOW, 0 ) ;

	return NOERR ;
}

/* 制限つき枠くり抜き */

r_waku_clear1( int xd, int yd, int zoom )
{
	HYPER hyp ;
	int x0, y0, x1, y1 ;

		/* 続けて呼ばれてもいいように一端DETACHする */
	MMI_SendMessage( wakuDialogId, MM_DETACH, 0 ) ;
	MMI_SendMessage( wakuDialogId, MM_ATTACH, 1, baseDialogId ) ;

	MMI_SendMessage( wakuDialogId, MM_GETHYPER, 1, &hyp ) ;

	x0 = (640/zoom - xd) / 2 * zoom ;
	y0 = (480/zoom - yd) / 2 * zoom ;
	x1 = x0 + xd*zoom - 1 ;
	y1 = y0 + yd*zoom - 1 ;
	if( x0 < 0 )x0 = 0 ;
	if( y0 < 20 )y0 = 20 ;
	if( x1 > 639 )x1 = 639 ;
	if( y1 > 479 )y1 = 479 ;

	hyp.fr.lupx = x0 ;
	hyp.fr.lupy = y0 ;
	hyp.fr.rdwx = x1 ;
	hyp.fr.rdwy = y1 ;
	hyp.clr.fr = 0 ;
	hyp.clr.back = 0 ;
	hyp.clr.ch = 0 ;
	hyp.atrm = 0 ;

	MMI_SendMessage( wakuDialogId, MM_SETHYPER, 1, &hyp ) ;
	MTL_setAtrObj( wakuDialogId, MS_DSPONLYL40 ) ;
	MMI_SendMessage( wakuDialogId, MM_SHOW, 0 ) ;

	return NOERR ;
}

/* 制限なし枠くり抜き */

r_waku_clear2( int xd, int yd, int zoom )
{
	HYPER hyp ;
	int x0, y0, x1, y1 ;

		/* 続けて呼ばれてもいいように一端DETACHする */
	MMI_SendMessage( wakuDialogId, MM_DETACH, 0 ) ;
	MMI_SendMessage( wakuDialogId, MM_ATTACH, 1, baseDialogId ) ;

	MMI_SendMessage( wakuDialogId, MM_GETHYPER, 1, &hyp ) ;

	x0 = (640/zoom - xd) / 2 * zoom ;
	y0 = (480/zoom - yd) / 2 * zoom ;
	x1 = x0 + xd*zoom - 1 ;
	y1 = y0 + yd*zoom - 1 ;
	if( x0 < 0 )x0 = 0 ;
	if( y0 < 0 )y0 = 0 ;
	if( x1 > 639 )x1 = 639 ;
	if( y1 > 479 )y1 = 479 ;

	hyp.fr.lupx = x0 ;
	hyp.fr.lupy = y0 ;
	hyp.fr.rdwx = x1 ;
	hyp.fr.rdwy = y1 ;
	hyp.clr.fr = 0 ;
	hyp.clr.back = 0 ;
	hyp.clr.ch = 0 ;
	hyp.atrm = 0 ;

	MMI_SendMessage( wakuDialogId, MM_SETHYPER, 1, &hyp ) ;
	MTL_setAtrObj( wakuDialogId, MS_DSPONLYL40 ) ;
	MMI_SendMessage( wakuDialogId, MM_SHOW, 0 ) ;

	return NOERR ;
}

/* 制限つき枠くり抜き */

v_waku_clear( int xd, int yd, int zoom )
{
	HYPER hyp ;
	int x0, y0, x1, y1 ;

	MMI_SendMessage( wakuDialogId, MM_GETHYPER, 1, &hyp ) ;

	x0 = (640/zoom - xd) / 2 * zoom ;
	y0 = (480/zoom - yd) / 2 * zoom ;
	x1 = x0 + xd*zoom - 1 ;
	y1 = y0 + yd*zoom - 1 ;
	if( x0 < 0 )x0 = 0 ;
	if( y0 < 20 )y0 = 20 ;
	if( x1 > 639 )x1 = 639 ;
	if( y1 > 479 )y1 = 479 ;

	hyp.fr.lupx = x0 ;
	hyp.fr.lupy = y0 ;
	hyp.fr.rdwx = x1 ;
	hyp.fr.rdwy = y1 ;
	hyp.clr.fr = 0 ;
	hyp.clr.back = 0 ;
	hyp.clr.ch = 0 ;
	hyp.atrm = 0 ;

	MMI_SendMessage( wakuDialogId, MM_SETHYPER, 1, &hyp ) ;
	MTL_setAtrObj( wakuDialogId, MS_DSPONLYL40 ) ;
	MMI_SendMessage( wakuDialogId, MM_SHOW, 0 ) ;

	return 0 ;
}

r_waku_del()
{
	MMI_SendMessage( wakuDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( wakuDialogId, MM_DETACH, 0 ) ;
	return NOERR ;
}

/* パネル */

r_panel_make( int x0, int y0, int x1, int y1 )
{
	HYPER hyp ;

		/* 続けて呼ばれてもいいように一端DETACHする */
	MMI_SendMessage( wakuDialogId2, MM_DETACH, 0 ) ;
	MMI_SendMessage( wakuDialogId2, MM_ATTACH, 1, baseDialogId ) ;

	MMI_SendMessage( wakuDialogId2, MM_GETHYPER, 1, &hyp ) ;

	hyp.fr.lupx = x0 ;
	hyp.fr.lupy = y0 ;
	hyp.fr.rdwx = x1 ;
	hyp.fr.rdwy = y1 ;

	MMI_SendMessage( wakuDialogId2, MM_SETHYPER, 1, &hyp ) ;
	MTL_setAtrObj( wakuDialogId2, MS_DSPONLYL40 ) ;
	MMI_SendMessage( wakuDialogId2, MM_SHOW, 0 ) ;

	return NOERR ;
}

r_panel_del()
{
	MMI_SendMessage( wakuDialogId2, MM_ERASE, 0 ) ;
	MMI_SendMessage( wakuDialogId2, MM_DETACH, 0 ) ;
	return NOERR ;
}

/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */

file_kakuchousi_set( char *fullname, char *name, char *kakuchou )
{
	int i;

	for( i=0 ; i<76 ; i++ ){
		fullname[i] = name[i];
		if( name[i] == '.' || name[i] == (char)0 )goto mov01;
	}
	return 55;		/* bad file name */
mov01:	if( i == 0 )return 55;
	if( name[i-1] == '\\' )return 55;
	DWORD( fullname + i ) = DWORD( kakuchou );
	fullname[i+4] = (char)0;
	return 0;
}

/* ディレクトリ選択 */
int	directorySelector( path, dummy, ExtStr, title, exec, cncl )
char	*path ;
char	*dummy ;
char	**ExtStr ;
char	*title ;
char	*exec ;
char	*cncl ;
{
	char pathName[100], name[20] ;
	int				 i, j, n ;
	unsigned int	MSlctCnt ;
	int		  Atr, ret, ret2 ;
	FRAME			     Frm ;
	int 			alertobj ;

	ret2 = NOERR ;

	FDG_GetFrame( &Frm ) ;	/* センタリング */
	Frm.lupx = 256 - ( Frm.rdwx - Frm.lupx ) / 2 ;
	Frm.lupy = 240 - ( Frm.rdwy - Frm.lupy ) / 2 ;
	FDG_SetFrame( Frm ) ;
	/* センタリングの後fileSubDialogIdをデタッチすると,位置がずれない */
	MMI_SendMessage( fileSubDialogId, MM_DETACH, 0 ) ;

	n = 0 ;
	for( i=0 ; i<79 ; i++ )
	{
		pathName[i] = path[i] ;
		if( path[i] == '\\' )
			n++ ;
		if( path[i] == '\0' )
			break ;
	}
	if( n <= 1 )
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				i++ ;
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+j] ;
		}
	}
	else
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+1+j] ;
		}
	}

	ret = FDG_SetFileText( dummy ) ;
	ret = FDG_SetTitle( title, exec, cncl ) ;

	alertobj = MMI_GetAlertObj() ;  /*  現在のALERTOBJを退避  　  */
	MMI_SetAlertObj( FDG_GetMainID() ) ;
	ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
		 pathName, ExtStr,	&MSlctCnt) ;
	if( ret < 0 )	/* PATHが間違ってる場合はカレントディレクトリで */
	{
		name[0] = '\0' ;
		ret = FDG_SetFileText( name ) ;
		ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
			 NULL, ExtStr,	&MSlctCnt) ;
	}
	MMI_SetAlertObj( alertobj ) ;  /*  ALERTOBJを元に戻す    　   */

	if( (ret == 1) && (MSlctCnt > 0) )	/*	正しくファイル名を収得したか？	*/
	{
		FDG_GetPathName( path, &Atr, 0 ) ;

		n = 0 ;
		for( i=0 ; i<79 ; i++ )
		{
			if( path[i] == '\\' )
				n++ ;
			if( path[i] == '\0' )
				break ;
		}
		if( n > 0 )
		{
			for( i=i ; i>=0 ; i-- )
			{
				if( path[i] == '\\' )
				{
					i++ ;
					path[i] = '\0' ;
					break ;
				}
			}
		}
		else
		{
			path[0] = '\0' ;
			ret2 = 1 ;
		}
	}
	else
	{
		ret2 = 1 ;
	}
	ret = FDG_RecovCurDir() ;
	return ret2 ;
}

/*	ファイル選択	*/
int	fileSelector( path, ExtStr, title, exec, cncl )
char	*path ;
char	**ExtStr ;
char	*title ;
char	*exec ;
char	*cncl ;
{
	char pathName[100], name[20] ;
	int				 i, j, n ;
	unsigned int	MSlctCnt ;
	int		  Atr, ret, ret2 ;
	FRAME			     Frm ;
	int 			alertobj ;

	ret2 = NOERR ;

	FDG_GetFrame( &Frm ) ;	/* センタリング */
	Frm.lupx = 256 - ( Frm.rdwx - Frm.lupx ) / 2 ;
	Frm.lupy = 240 - ( Frm.rdwy - Frm.lupy ) / 2 ;
	FDG_SetFrame( Frm ) ;
	/* センタリングの後fileSubDialogIdをデタッチすると,位置がずれない */
	MMI_SendMessage( fileSubDialogId, MM_DETACH, 0 ) ;

	n = 0 ;
	for( i=0 ; i<79 ; i++ )
	{
		pathName[i] = path[i] ;
		if( path[i] == '\\' )
			n++ ;
		if( path[i] == '\0' )
			break ;
	}
	if( n <= 1 )
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				i++ ;
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+j] ;
		}
	}
	else
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+1+j] ;
		}
	}

	ret = FDG_SetFileText( name ) ;
	ret = FDG_SetTitle( title, exec, cncl ) ;

	alertobj = MMI_GetAlertObj() ;  /*  現在のALERTOBJを退避  　  */
	MMI_SetAlertObj( FDG_GetMainID() ) ;
	ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
		 pathName, ExtStr,	&MSlctCnt) ;
	if( ret < 0 )	/* PATHが間違ってる場合はカレントディレクトリで */
	{
		name[0] = '\0' ;
		ret = FDG_SetFileText( name ) ;
		ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
			 NULL, ExtStr,	&MSlctCnt) ;
	}
	MMI_SetAlertObj( alertobj ) ;  /*  ALERTOBJを元に戻す    　   */

	if( (ret == 1) && (MSlctCnt > 0) )	/*	正しくファイル名を収得したか？	*/
	{
		FDG_GetPathName( path, &Atr, 0 ) ;
	}
	else
	{
		ret2 = 1 ;
	}
	ret = FDG_RecovCurDir() ;
	return ret2 ;
}

/*	ファイル選択オプション付き	*/
int	fileSelector2( path, ExtStr, title, exec, cncl )
char	*path ;
char	**ExtStr ;
char	*title ;
char	*exec ;
char	*cncl ;
{
	char pathName[100], name[20] ;
	int				 i, j, n ;
	unsigned int	MSlctCnt ;
	int		  Atr, ret, ret2 ;
	FRAME 				 Frm ;
	int 			  baseId ;
	int 			alertobj ;

	ret2 = NOERR ;

	FDG_GetFrame( &Frm ) ;	/* センタリング */
	Frm.lupx = 256 - ( Frm.rdwx - Frm.lupx ) / 2 ;
	Frm.lupy = 240 - ( Frm.rdwy - Frm.lupy ) / 2 ;
	FDG_SetFrame( Frm ) ;
	/* センタリングの後fileSubDialogIdをアタッチすると,位置がずれない */
	baseId = FDG_GetMainID() ;
	MMI_SendMessage( fileSubDialogId, MM_ATTACH, 1, baseId ) ;
	if( tiffSaveCompMode )
		MTL_setFlagObj( fileBtnId, MS_TOGGLE ) ;
	else
		MTL_resetFlagObj( fileBtnId, (~MS_TOGGLE) ) ;

	n = 0 ;
	for( i=0 ; i<79 ; i++ )
	{
		pathName[i] = path[i] ;
		if( path[i] == '\\' )
			n++ ;
		if( path[i] == '\0' )
			break ;
	}
	if( n <= 1 )
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				i++ ;
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+j] ;
		}
	}
	else
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				pathName[i] = '\0' ;
				break ;
			}
		}
		for( j=0 ; j<13 ; j++ )
		{
			name[j] = path[i+1+j] ;
		}
	}

	ret = FDG_SetFileText( name ) ;
	ret = FDG_SetTitle( title, exec, cncl ) ;

	alertobj = MMI_GetAlertObj() ;  /*  現在のALERTOBJを退避  　  */
	MMI_SetAlertObj( FDG_GetMainID() ) ;
	ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
		 pathName, ExtStr,	&MSlctCnt) ;
	if( ret < 0 )	/* PATHが間違ってる場合はカレントディレクトリで */
	{
		name[0] = '\0' ;
		ret = FDG_SetFileText( name ) ;
		ret = FDG_DspFileDlg(MMI_GetBaseObj(), FDG_FILEONLY | FDG_TEXT,
			 NULL, ExtStr,	&MSlctCnt) ;
	}
	MMI_SetAlertObj( alertobj ) ;  /*  ALERTOBJを元に戻す    　   */

	if( (ret == 1) && (MSlctCnt > 0) )	/*	正しくファイル名を収得したか？	*/
	{
		FDG_GetPathName( path, &Atr, 0 ) ;
	}
	else
	{
		ret2 = 1 ;
	}
	return ret2 ;
}

/*	initDataIMEFILE:fileBtnId:MJ_TICONL40の呼び出し関数	*/
int	fileCompModeSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( MTL_checkFlagObj( kobj, MS_TOGGLE ) )
		tiffSaveCompMode = 1 ;
	else
		tiffSaveCompMode = 0 ;
	return NOERR ;
}

/* マウスボタンチェック */

mouseSwCheck()
{
	int sw ;

	SND_joy_in_1( 0x01, &sw );
	sw = ((sw ^ 0xff) & 0x30) >> 4 ;
	return sw ;
}

playCheck()
{
	int sw;

/*	注意:sw 押されているとbit off 押されてないとbit on 	*/

	SND_joy_in_1( 0xff, &sw );		/* end check */
	sw = (sw ^ 0xff) & 0x30;
	if( sw == 0 )return 0;
c01:	SND_joy_in_1( 0xff, &sw );
	sw = (sw ^ 0xff) & 0x30;
	if( sw & 0x10 ){
		while( sw == 0x30 ){
			SND_joy_in_1( 0xff, &sw );
			sw = (sw ^ 0xff) & 0x30;
		}
		if( sw == 0x20 )goto c02;
		while( sw ){
			SND_joy_in_1( 0xff, &sw );
			sw = (sw ^ 0xff) & 0x30;
			if( sw == 0x30 )break;
		}
		return 1;
	}
c02:	if( sw )goto c01;
	return -1;
}

/*	パレット設定 (パレットが設定されてなければgreen系に固定)	*/
int	setPalette( char *ework )
{
	char	para[16*8+4] ;
	int		ptr = 0, colnum ;

	void 	set1Pal( int col, int b, int r, int g )
	{
		DWORD(para + ptr) = col ;
		BYTE(para + ptr + 4) = b * 16 ;
		BYTE(para + ptr + 5) = r * 16 ;
		BYTE(para + ptr + 6) = g * 16 ;
		BYTE(para + ptr + 7) = 0 ;
		ptr += 8 ;
	}

//	EGB_getTmenuPalette( para ) ;
//	colnum = DWORD(para) ;

	colnum = 0 ;		/* 強制的に色設定にしてしまう 1993 12 */

	if( colnum == 6 )	ptr = 52 ;
	else				ptr = 4 ;
	if( colnum != 16 )
	{
		set1Pal( 2, 4, 12, 6 ) ;
		set1Pal( 3, 5, 5, 5 ) ;		// 		set1Pal( 3, 10, 15, 12 ) ;
		set1Pal( 4, 9, 9, 9 ) ;
		set1Pal( 5, 7, 0, 12 ) ;
		set1Pal( 10, 0, 13, 0 ) ;
		set1Pal( 11, 10, 0, 0 ) ;
		set1Pal( 12, 0, 0, 15 ) ;
		set1Pal( 13, 8, 8, 8 ) ; // set1Pal( 13, 15, 0, 15 ) ; ﾊﾟﾚｯﾄ表示のため
		set1Pal( 14, 0, 15, 14 ) ;
		if( colnum != 6 )
		{		/* メニュー色(green系) */
			set1Pal( 1, 4, 4, 8 ) ;
			set1Pal( 6, 12, 12, 12 ) ;
			set1Pal( 7, 7, 7, 7 ) ;
			set1Pal( 8, 2, 2, 2 ) ;
			set1Pal( 9, 8, 10, 12 ) ;	/* file selector */
			set1Pal( 15, 15, 15, 15 ) ;
		}
		DWORD(para + 0) = 15 ;
	}
	else
		DWORD(para + 0) = colnum ;
	EGB_palette( ework, 1, para ) ;

	return NOERR ;
}

/*	２画面合成のためのマウス表示関数	*/
int	mouseDsp( int num )
{
	SetMouse16( num, 0xf, 0x8 ) ;	/* マウスカーソルが透けないように */
	return	NOERR ;
}

/*	終了処理	*/
int	quitFunc()
{
	extern int tifListMenuId0 ;		/* tiflistリストobj0 */
	extern int tifListMenuId1 ;		/* tiflistリストobj1 */
	extern int tifFirstFlg ;		/* tiflist初期化時に0にするべき値 */

	EGB_displayPage( guiEgbPtr, 0, 0 );
	EGB_resolution(guiEgbPtr,1,10);		/* モード10 */
	EGB_resolution(guiEgbPtr,0,3);		/* モード3 */

	EGB_writePage(guiEgbPtr,1);
	EGB_color(guiEgbPtr,1,0x8000);
	EGB_clearScreen(guiEgbPtr);
	EGB_writePage(guiEgbPtr,0);

	MMI_SendMessage(tifListMenuId0, MM_SETMAXROWCOLUM, 2, 0, 0) ;
	MMI_SendMessage(tifListMenuId1, MM_SETMAXROWCOLUM, 2, 0, 0) ;
	tifFirstFlg = 0 ;

	if( bbuf != NULL )
		TL_free( bbuf ) ;

	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	終了可能なら終了する処理	*/
int	quitFunc2()
{
	/* menubarId が MS_DSPONLYL40 なら何かの作業中で終了不可 */

	if( MTL_checkAtrObj( menubarId, MS_DSPONLYL40 ) == 0 )
	{
		extern int tifListMenuId0 ;		/* tiflistリストobj0 */
		extern int tifListMenuId1 ;		/* tiflistリストobj1 */
		extern int tifFirstFlg ;		/* tiflist初期化時に0にするべき値 */

		EGB_displayPage( guiEgbPtr, 0, 0 );
		EGB_resolution(guiEgbPtr,1,10);		/* モード10 */
		EGB_resolution(guiEgbPtr,0,3);		/* モード3 */

		EGB_writePage(guiEgbPtr,1);
		EGB_color(guiEgbPtr,1,0x8000);
		EGB_clearScreen(guiEgbPtr);
		EGB_writePage(guiEgbPtr,0);

		MMI_SendMessage(tifListMenuId0, MM_SETMAXROWCOLUM, 2, 0, 0) ;
		MMI_SendMessage(tifListMenuId1, MM_SETMAXROWCOLUM, 2, 0, 0) ;
		tifFirstFlg = 0 ;

		if( bbuf != NULL )
			TL_free( bbuf ) ;

		MMI_SetHaltFlag( TRUE ) ;
		return NOERR ;
	}
	return ILLEGAL_FUNCTION ;
}

/*	あばうと表示	*/
int	aboutFunc()
{
	MMI_SendMessage( alertId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( alertId, MM_SHOW, 0 ) ;
	return NOERR ;
}

/*	あばうと表示確認	*/
int	aboutOKFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SendMessage( alertId, MM_ERASE, 0 ) ;
	MMI_SendMessage( alertId, MM_DETACH, 0 ) ;
	return NOERR ;
}

/* error 表示ルーチン */
int errorCheck( int number )
{
	MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "エラーが発生しました｡" ) ;
	if( number == 4 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "データが見つかりません｡" ) ;
	if( number == 7 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "メモリオーバーです。" ) ;
	if( number == 52 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "ファイル名が重複しています｡" ) ;
	if( number == 54 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "フレームオーバーです｡" ) ;
	if( number == 55 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "ファイル名が正しくありません｡" ) ;
	if( number == 58 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "データ形式が正しくありません｡" ) ;
	if( number == 1 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "ロードできませんでした｡" ) ;
	if( number == 2 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "セーブできませんでした｡" ) ;
	if( number == BASEERR )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "基本設定が正しく行われていません｡" ) ;
	if( number == UNDERERR )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "下地のＴＩＦＦがロードできません｡" ) ;

	MMI_SendMessage( errorId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( errorId, MM_SHOW, 0 ) ;

	MMI_FlushEvnt() ;
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	return NOERR;
}

/*	エラー表示確認	*/
int	errorOKFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SendMessage( errorId, MM_ERASE, 0 ) ;
	MMI_SendMessage( errorId, MM_DETACH, 0 ) ;

	MMI_SetHaltFlag( TRUE ) ;

	return NOERR ;
}

/* メッセージのカラーを変えて表示する */

setMsgColor( int kobj, int color )
{
	OBJECT *pobj ;
	MSGL40 *data ;

	pobj = TL_getObjectPtr( kobj ) ;
	data = (MSGL40 *)(pobj->data) ;
	data->clr.ch = color ;
	MMI_SendMessage( kobj, MM_SHOW, 0 ) ;	/* 見せる */

	return NOERR ;
}

