#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 "vdsysx.h"

#define V00TYPE 0		/* V00関係の処理 */
#define MVBTYPE 1		/* MVB関係の処理 */
#define V02TYPE 2		/* V00関係の処理 */
#define DIRTYPE 3		/* 瞬間圧縮 */
#define AFRECTYPE 4		/* アフレコ */

extern	char	*guiEgbPtr ;	/*	EGB のワークアドレス	*/

/* dsk */
int	baseDialogId = -1 ;
int	menubarId = -1 ;
int	menuId = -1 ;
int	mItemId[3] = -1 ;
int	SDKmenuId = -1 ;
int	SDKmItemId[3] = -1 ;
int	fileMenuId = -1 ;
int	fileMItemId[15] = -1 ;
int	editMenuId = -1 ;
int	editMItemId[5] = -1 ;
int	quitIconId = -1 ;
int	wakuDialogId = -1 ;
int	tableSetDialogId = -1 ;
int	tableSetMesId[3] = -1 ;
/* alou */
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 ;
/* rec */
int	recDialogId = -1 ;
int	recSubDialogId = -1 ;
int	recFrameNumId = -1 ;
int	recMemoryNumId = -1 ;
int	recBtnId[15] = -1 ;
int	recVolumeId = -1 ;
int	recMesId[30] = -1 ;
int	recOkBtnId = -1 ;
int	recCanBtnId = -1 ;
int	recSndDialogId = -1 ;
int	recSndSubDialogId = -1 ;
int	recSndVolumeId = -1 ;
int	recSndOkBtnId = -1 ;
int	recSndCanBtnId = -1 ;
/* org */
int	orgDialogId = -1 ;
int	orgMesId[8] = -1 ;
int	orgOkBtnId = -1 ;
int	orgCanBtnId = -1 ;
int	orgSubDialogId = -1 ;
int	orgFrameNumId = -1 ;
int	orgSoundNumId = -1 ;
int	orgSoundBtnId = -1 ;
/* pac */
int	pacDialogId = -1 ;
int	pacSubDialogId = -1 ;
int	pacFilterBar = -1 ;
int	pacSoftBar = -1 ;
int	pacFilterNumId = -1 ;
int	pacSoftNumId = -1 ;
int	pacMesId[5] = -1 ;
int	pacOKBtnId = -1 ;
int	pacCanBtnId = -1 ;
int	pacWaitDialogId = -1 ;
int	pacWaitMesId[2] = -1 ;
int	pacWaitNumId[2] = -1 ;
/* ply */
int	plyDialogId = -1 ;
int	plySubDialogId = -1 ;
int	plyWaitNumId = -1 ;
int	plyBtnId[4] = -1 ;
int	plyMesId[12] = -1 ;
int	plyFrameNumId = -1 ;
int	plyOkBtnId = -1 ;
int	plyCanBtnId = -1 ;
/* edit */
int	editDialogId = -1 ;
int	editSubDialogId = -1 ;
int	editMinDialogId[10] = -1 ;
int	editMsgId[24] = -1 ;
int	editNumBoxId[2][3] = -1 ;
int	editFileMsgId[3] = -1 ;
int	editBtnId[8] = -1 ;
int	editOkBtnId = -1 ;
int	editCanBtnId = -1 ;
int	editWaitDialogId = -1 ;
int	editWaitMsgId[1] = -1 ;
int	editMosDialogId = -1 ;
int	editMosMsgId[2] = -1 ;

int		v02TableFlag ;			/* v02 table flag */
char	*v02Table ;				/* v02 table */

int	setFlag ;					/*	表示設定のフラグ		*/
int	wait ;						/*	ウェイト設定用ワーク	*/
int	scnMode ;					/*	画面モード設定用ワーク	*/
int	zoom ;						/*	倍率設定用ワーク		*/
int	playMode ;					/*	再生モード設定用ワーク	*/
int	playFlag ;					/*	再生中かどうかのフラグ	*/
int	loop ;						/*	ループ再生のフラグ		*/

char	v00Path[80] = '\0' ;
char	mvbPath[80] = '\0' ;
char	v02Path[80] = '\0' ;
char	v02Path2[80] = '\0' ;


/*
		IVDREC用基本セット
*/

static	recType ;	/* V00TYPE, MVBTYPE, DIRTYPE, AFRECTYPE */

static int	recFlag ;					/*	表示設定のフラグ		*/
static int	recVol = 127 ;				/*	volume					*/
static int	recFrame = 160 ;			/*	frame数					*/
static int	recMemory = 0 ;				/*	メモリ依存度			*/
static int	recMode = 0 ;				/*	画面モード設定用ワーク	*/
static int	recSpeed = 1 ;				/*	録画速度				*/
static int	recSize = 1 ;				/*	frame size				*/
static int	recFreq = 0 ;				/*	Sount freq				*/

/* frame数を設定 */
/*	initDataIVDREC:recFrameNumId:MJ_NUMBOXL40の呼び出し関数	*/
int	recFrameSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
								&var, &min, &max, &delta, &ptColumn ) ;
	recFrame = var ;
	return NOERR ;
}

/* Memory Mode */
/*	initDataIVDREC:recMemoryNumId:MJ_NUMBOXL40の呼び出し関数	*/
int	recMemorySet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
										&var, &min, &max, &delta, &ptColumn ) ;
	recMemory = var ;
	return NOERR ;
}

/*	録画モードを設定（ラジオボタン）	*/
/*	initDataIVDREC:recBtnId[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDREC:recBtnId[1]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDREC:recBtnId[2]:MJ_TICONL40の呼び出し関数	*/
int	recModeSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == recBtnId[0] )
	{
		MTL_setFlagObj( recBtnId[0], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recMode+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recMode+0], MM_SHOW, 0 ) ;
		recMode = 0 ;
	}
	else
	if( kobj == recBtnId[1] )
	{
		MTL_setFlagObj( recBtnId[1], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recMode+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recMode+0], MM_SHOW, 0 ) ;
		recMode = 1 ;
	}
	else
	if( kobj == recBtnId[2] )
	{
		MTL_setFlagObj( recBtnId[2], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recMode+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recMode+0], MM_SHOW, 0 ) ;
		recMode = 2 ;
	}

		/* memoryNumを有効にしたり無効にする特別処理 */

	if( (recType == V00TYPE) || (recType == MVBTYPE) )
	{
		HYPER hyp ;
		WINCLIP *pwclp ;

		if( recMode != 1 )
		{
			MTL_resetAtrObj( recMemoryNumId, (~MS_DSPONLYL40) ) ;
			MTL_resetAtrObj( recMesId[1], (~MS_DSPONLYL40) ) ;
			MTL_resetAtrObj( recMesId[2], (~MS_DSPONLYL40) ) ;
			MTL_setAtrObj( recMemoryNumId, MS_INACTIVEL40 ) ;
			MTL_setAtrObj( recMesId[1], MS_INACTIVEL40 ) ;
			MTL_setAtrObj( recMesId[2], MS_INACTIVEL40 ) ;
		}
		else
		{
			MTL_resetAtrObj( recMemoryNumId, (~MS_DSPONLYL40) ) ;	/* 正常 */
			MTL_resetAtrObj( recMesId[1], (~MS_DSPONLYL40) ) ;
			MTL_resetAtrObj( recMesId[2], (~MS_DSPONLYL40) ) ;
		}
//		MMI_SendMessage( recMemoryNumId, MM_SHOW, 0 ) ;

		MMI_SendMessage( recMemoryNumId, MM_GETHYPER, 1, &hyp ) ;
		pwclp = WIN_getClipMemory( &(hyp.fr), NULL ) ;
		MMI_SendMessage( recMemoryNumId, MM_UPDATE, 1, pwclp ) ;
		WIN_freeClipMemory( pwclp ) ;

		MMI_SendMessage( recMesId[1], MM_SHOW, 0 ) ;
		MMI_SendMessage( recMesId[2], MM_SHOW, 0 ) ;
	}

	return NOERR ;
}

/*	speedを設定（ラジオボタン）	*/
/*	initDataIVDREC:recBtnId[3]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDREC:recBtnId[4]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDREC:recBtnId[5]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDREC:recBtnId[6]:MJ_TICONL40の呼び出し関数	*/
int	recSpeedSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == recBtnId[3] )
	{
		MTL_setFlagObj( recBtnId[3], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSpeed+3],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSpeed+3], MM_SHOW, 0 ) ;
		recSpeed = 0 ;
	}
	else
	if( kobj == recBtnId[4] )
	{
		MTL_setFlagObj( recBtnId[4], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSpeed+3],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSpeed+3], MM_SHOW, 0 ) ;
		recSpeed = 1 ;
	}
	else
	if( kobj == recBtnId[5] )
	{
		MTL_setFlagObj( recBtnId[5], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSpeed+3],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSpeed+3], MM_SHOW, 0 ) ;
		recSpeed = 2 ;
	}
	else
	if( kobj == recBtnId[6] )
	{
		MTL_setFlagObj( recBtnId[6], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSpeed+3],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSpeed+3], MM_SHOW, 0 ) ;
		recSpeed = 3 ;
	}
	return NOERR ;
}

/*	frame size を設定（ラジオボタン）	*/
/*	initDataIVDREC:recBtnId[7〜11]:MJ_TICONL40の呼び出し関数	*/
int	recFrameSizeSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == recBtnId[7] )
	{
		MTL_setFlagObj( recBtnId[7], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSize+7],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSize+7], MM_SHOW, 0 ) ;
		recSize = 0 ;
	}
	else
	if( kobj == recBtnId[8] )
	{
		MTL_setFlagObj( recBtnId[8], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSize+7],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSize+7], MM_SHOW, 0 ) ;
		recSize = 1 ;
	}
	else
	if( kobj == recBtnId[9] )
	{
		MTL_setFlagObj( recBtnId[9], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSize+7],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSize+7], MM_SHOW, 0 ) ;
		recSize = 2 ;
	}
	else
	if( kobj == recBtnId[10] )
	{
		MTL_setFlagObj( recBtnId[10], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSize+7],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSize+7], MM_SHOW, 0 ) ;
		recSize = 3 ;
	}
	else
	if( kobj == recBtnId[11] )
	{
		MTL_setFlagObj( recBtnId[11], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recSize+7],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recSize+7], MM_SHOW, 0 ) ;
		recSize = 4 ;
	}
	return NOERR ;
}

/* sampling feq. 設定（ラジオボタン）	*/
/*	initDataIVDREC:recBtnId[12〜14]:MJ_TICONL40の呼び出し関数	*/
int	recFreqSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == recBtnId[12] )
	{
		MTL_setFlagObj( recBtnId[12], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recFreq+12],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recFreq+12], MM_SHOW, 0 ) ;
		recFreq = 0 ;
	}
	else
	if( kobj == recBtnId[13] )
	{
		MTL_setFlagObj( recBtnId[13], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recFreq+12],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recFreq+12], MM_SHOW, 0 ) ;
		recFreq = 1 ;
	}
	else
	if( kobj == recBtnId[14] )
	{
		MTL_setFlagObj( recBtnId[14], MS_UNSELECT ) ;
		MTL_resetFlagObj( recBtnId[recFreq+12],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( recBtnId[recFreq+12], MM_SHOW, 0 ) ;
		recFreq = 2 ;
	}
	return NOERR ;
}

/* volumeセット */
/*	initDataIVDREC:recVolumeId:MJ_SCRLL40の呼び出し関数	*/
int	recVolumeSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, len, page, s ;
	MMI_SendMessage( kobj, MM_GETSCROLL, 5,
										&var, &min, &max, &len, &page ) ;
	recVol = var ;

	if( recVol )		/* line volume set */
		SND_elevol_set( 0, recVol, recVol );
	else
	{
		SND_get_elevol_mute( &s ) ;
		SND_elevol_mute( s & 0xfffffff3 ) ;
	}
	return NOERR ;
}

/*	設定するか、取り消すか？	*/
/*	initDataIVDREC:recOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDREC:recCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	recOkchk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( (kobj == recOkBtnId) || (kobj == recSndOkBtnId) )
		recFlag = TRUE ;
	else
		recFlag = FALSE ;
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}


/*
		IVDORG基本セット
*/

static	int		orgFlag ;			/* OK or NO */
static	int		orgSndOfst ;		/* Sound Offset */
static	char	*orgPath ;			/* file name */

/*	設定するか、取り消すか？	*/
/*	initDataIVDORG:orgOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDORG:orgCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	orgOkchk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == orgOkBtnId )
		orgFlag = TRUE ;
	else
		orgFlag = FALSE ;
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/* Sound offset を設定 */
/*	initDataIVDORG:orgSoundNumId:MJ_NUMBOXL40の呼び出し関数	*/
int	orgSoundSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
										&var, &min, &max, &delta, &ptColumn ) ;
	orgSndOfst = var ;
	return NOERR ;
}

/* Sound offset 書き込み */
/*	initDataIVDORG:orgSoundBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	orgSoundwriteOK(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	FILE *fp ;
	char names[100], buf[8] ;

	/* Sound offset の 書き込み */
	if( file_kakuchousi_set( names, orgPath, ".SND" ) )
	{
		errorCheck( 2 ) ;
		return NOERR;
	}
	if( ( fp = fopen( names, "r+b" ) ) == NULL )
	{
		errorCheck( 2 ) ;
		return NOERR;
	}
	fseek( fp, 16, SEEK_SET );
	DWORD( buf ) = orgSndOfst ;
	DWORD( buf+4 ) = 0 ;
	if( fwrite( buf, 8, 1, fp ) < 1 )
	{
		fclose(fp) ;
		errorCheck( 2 ) ;
		return NOERR;
	}
	fclose(fp) ;

	return NOERR ;
}


/*
		IVDPAC基本セット
*/

static int pacFlag ;			/* YES or NO */
static int pacFilter = 3 ;		/* filer */
static int pacSoft = 5 ;		/* soft */

/*	filter */
/*	initDataIVDPAC:pacFilterBar:MJ_SCRLL40の呼び出し関数	*/
int	pacFilterSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, len, page ;
	MMI_SendMessage( kobj, MM_GETSCROLL, 5,
										&var, &min, &max, &len, &page ) ;
	pacFilter = var*3 / 16 ;	/* var * 値の初期値 / バーの初期値 */
	MMI_SendMessage( pacFilterNumId, MM_SETNUMBOX, 5,
					 pacFilter, 0, pacFilter, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */
	MMI_SendMessage( pacFilterNumId, MM_SHOW, 0 ) ;

	return NOERR ;
}

/* soft */
/*	initDataIVDPAC:pacSoftBar:MJ_SCRLL40の呼び出し関数	*/
int	pacSoftSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, len, page ;
	MMI_SendMessage( kobj, MM_GETSCROLL, 5,
										&var, &min, &max, &len, &page ) ;
	pacSoft = var*3 / 16 ;	/* var * 値の初期値 / バーの初期値 */
	MMI_SendMessage( pacSoftNumId, MM_SETNUMBOX, 5,
					 pacSoft, 0, pacSoft, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */
	MMI_SendMessage( pacSoftNumId, MM_SHOW, 0 ) ;

	return NOERR ;
}

/*	設定するか、取り消すか？	*/
/*	initDataIVDPAC:pacOKBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDPAC:pacCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	pacOKchk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == pacOKBtnId )
		pacFlag = TRUE ;
	else
		pacFlag = FALSE ;
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}


/*
		IVDPLY基本セット
*/

static	int		plyFlag ;			/* YES or NO */
static	int		plyWait = 0 ;		/* wait */
static	int		plyMul = 1 ;		/* mul */

/*	initDataIVDPLY:plyWaitNumId:MJ_NUMBOXL40の呼び出し関数	*/
int	plyWaitSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
										&var, &min, &max, &delta, &ptColumn ) ;
	plyWait = var ;
	return NOERR ;
}

/*	frameSize設定（ラジオボタン）	*/
/*	initDataIVDPLY:plyBtnId[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDPLY:plyBtnId[1]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDPLY:plyBtnId[2]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIVDPLY:plyBtnId[3]:MJ_TICONL40の呼び出し関数	*/
int	plyMulSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == plyBtnId[0] )
	{
		MTL_setFlagObj( plyBtnId[0], MS_UNSELECT ) ;
		MTL_resetFlagObj( plyBtnId[plyMul+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( plyBtnId[plyMul+0], MM_SHOW, 0 ) ;
		plyMul = 0 ;
	}
	else
	if( kobj == plyBtnId[1] )
	{
		MTL_setFlagObj( plyBtnId[1], MS_UNSELECT ) ;
		MTL_resetFlagObj( plyBtnId[plyMul+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( plyBtnId[plyMul+0], MM_SHOW, 0 ) ;
		plyMul = 1 ;
	}
	else
	if( kobj == plyBtnId[2] )
	{
		MTL_setFlagObj( plyBtnId[2], MS_UNSELECT ) ;
		MTL_resetFlagObj( plyBtnId[plyMul+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( plyBtnId[plyMul+0], MM_SHOW, 0 ) ;
		plyMul = 2 ;
	}
	else
	if( kobj == plyBtnId[3] )
	{
		MTL_setFlagObj( plyBtnId[3], MS_UNSELECT ) ;
		MTL_resetFlagObj( plyBtnId[plyMul+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( plyBtnId[plyMul+0], MM_SHOW, 0 ) ;
		plyMul = 3 ;
	}
	return NOERR ;
}

/*	設定するか、取り消すか？	*/
/*	initDataIVDPLY:plyOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDPLY:plyCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	plyPlaychk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == plyOkBtnId )
		plyFlag = TRUE ;
	else
		plyFlag = FALSE ;

	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}


/*
		IVDEDT基本セット
*/

static	int		editType ;			/* V00TYPE, MVBTYPE */
static	int		editFlag ;			/* YES or NO */
static	char	v00EditPath[3][100] = '\0' ;	/* file */
static	char	mvbEditPath[3][100] = '\0' ;	/* file */
static	char	v02EditPath[3][100] = '\0' ;	/* file */
static	char	dummyEditPath[3][100] = '\0' ;	/* 表示用(字数over等に対応) */
static	int		v00EditNum[2][3] = 0 ;			/* file data number */
static	int		mvbEditNum[2][3] = 0 ;			/* file data number */
static	int		v02EditNum[2][3] = 0 ;			/* file data number */

/*	ファイル設定	*/
/*	initDataIVDEDT:editBtnId[0]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDEDT:editBtnId[1]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDEDT:editBtnId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	editFileInput(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char			*ExtStr0[] = { "*.V00", NULL } ;
	char			*ExtStr1[] = { "*.MVB", NULL } ;
	char			*ExtStr2[] = { "*.V02", NULL } ;
	char			path[100] ;
	int 			i, type ;	/* 第１,第２,合成の区別 */
	int				ret ;

	for( i=0 ; i<3 ; i++ )
	{
		if( kobj == editBtnId[i] )
		{
			type = i ;
			break ;
		}
	}
	if( type >= 3 )return NOERR ;

	MTL_setAtrObj( editDialogId, MS_DSPONLYL40 ) ;

	if( editType == V00TYPE )
	{
		ret = fileSelecter(v00EditPath[ type ], ExtStr0,
					 "ＶＯＯファイル", "選  択", "取  消");
		if(	ret == NOERR )
		{
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, v00EditPath[ type ], ".V00" ) ;
			for( i=0 ; i<80 ; i++ )
				v00EditPath[ type ][ i ] = path[i] ;
			setDummyPath( v00EditPath[type], dummyEditPath[type] ) ;
		}
	}

	if( editType == MVBTYPE )
	{
		ret = fileSelecter(mvbEditPath[ type ], ExtStr1,
					 "ＭＶＢファイル", "選  択", "取  消");
		if(	ret == NOERR )
		{
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, mvbEditPath[ type ], ".MVB" ) ;
			for( i=0 ; i<80 ; i++ )
				mvbEditPath[ type ][ i ] = path[i] ;
			setDummyPath( mvbEditPath[type], dummyEditPath[type] ) ;
		}
	}

	if( editType == V02TYPE )
	{
		ret = fileSelecter(v02EditPath[ type ], ExtStr2,
					 "ＶＯ２ファイル", "選  択", "取  消");
		if(	ret == NOERR )
		{
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, v02EditPath[ type ], ".V02" ) ;
			for( i=0 ; i<80 ; i++ )
				v02EditPath[ type ][ i ] = path[i] ;
			setDummyPath( v02EditPath[type], dummyEditPath[type] ) ;
		}
	}

	if( ret == NOERR )
	{
		editDialogSet( type, 0 ) ;
		MMI_SendMessage( editMinDialogId[type], MM_SHOW, 0 ) ;
		if( type <= 1 )
		{
			for( i=0 ; i<3 ; i++ )
				MMI_SendMessage( editNumBoxId[type][i], MM_SHOW, 0 ) ;
			MMI_SendMessage( editMinDialogId[type+3], MM_SHOW, 0 ) ;
		}
	}

	MTL_resetAtrObj( editDialogId, (~MS_DSPONLYL40) ) ;

	return NOERR ;
}

/*	再生	*/
/*	initDataIVDEDT:editBtnId[3]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDEDT:editBtnId[4]:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDEDT:editBtnId[5]:MJ_DBUTTONL40の呼び出し関数	*/
int	editPlaychk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int 			i, type ;	/* 第１,第２,合成の区別 */
	int				ret ;

	for( i=3 ; i<6 ; i++ )
	{
		if( kobj == editBtnId[i] )
		{
			type = i - 3 ;
			break ;
		}
	}
	if( type >= 3 )return NOERR ;

	MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;

	if( editType == V00TYPE )
	{
		int frame, x, y, wt ;
		int dummy ;

		if( type <= 1 )
			ret = v00_head_read_skip( v00EditPath[type],
							 &frame, &x, &y, &wt, v00EditNum[type][1] ) ;
		else				 								/* data収集 */
			ret = v00_head_read( v00EditPath[type], &frame, &x, &y, &wt ) ;

		if( ret == NOERR )
		{
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */

			MG_mosDisp( 0 ) ;
			if( type <= 1 )
				ret = v00_play2( v00EditPath[type],
					 v00EditNum[type][1], v00EditNum[type][2], &dummy, 0 );
			else
				ret = v00_play2( v00EditPath[type], 0, 0x7fffffff, &dummy, 0 );

			MG_mosDisp( 1 ) ;
		}
	}

	if( editType == MVBTYPE )
	{
		int frame, x, y, wt ;

		if( type <= 1 )
			ret = mvb_head_read_skip( mvbEditPath[type],
							 &frame, &x, &y, &wt, mvbEditNum[type][1] ) ;
		else				 								/* data収集 */
			ret = mvb_head_read( mvbEditPath[type],
							 &frame, &x, &y, &wt ) ;
		if( ret == NOERR )
		{
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */

			MG_mosDisp( 0 ) ;
			if( type <= 1 )
				ret = mvb_play2( mvbEditPath[type],
					 mvbEditNum[type][1], mvbEditNum[type][2], 0 );
			else
				ret = mvb_play2( mvbEditPath[type], 0, 0x7fffffff, 0 );

			MG_mosDisp( 1 ) ;
		}
	}

	if( editType == V02TYPE )
	{
		int frame, x, y, wt, koma, freq, sndpack ;

		if( type <= 1 )
		{
			ret = v02_head_read_only( v02EditPath[type],
						 &frame, &x, &y, &wt, &koma, &freq, &sndpack ) ;
			if( ret == NOERR )
			{
				v02_graph_init( 2, x, y ) ;	/* 倍率にあわせて画面設定 */
				MG_mosDisp( 0 ) ;
				ret = v02_play2( v02EditPath[type], 2, 0,
					 v02EditNum[type][1], v02EditNum[type][2] );
				MG_mosDisp( 1 ) ;
				v_waku_clear( x, y, 2 ) ;		/* 枠抜きしたことにする */
			}			/* 本当は既に枠抜けてるが,閉めるためのだまし効果 */
		}
		else
		{
			ret = v02_wide_head_read_and_dsp( v02EditPath[type],
						 &frame, &x, &y, &wt, 1, TL_malloc, TL_free ) ;
			if( ret == NOERR )
			{
				v02_graph_init( 2, x, y ) ;	/* 倍率にあわせて画面設定 */
				v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
				MG_mosDisp( 0 ) ;
				ret = v02_play( v02EditPath[type], 2, 0 ) ;
				MG_mosDisp( 1 ) ;
			}
		}
	}

	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	if( ret == NOERR )
	{
		MMI_SendMessage( editMosDialogId, MM_ATTACH, 1, MMI_GetBaseObj());
		MMI_SendMessage( editMosDialogId, MM_SHOW, 0 ) ;

		MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

		MMI_SendMessage( editMosDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editMosDialogId, MM_DETACH, 0 ) ;
	}

	r_waku_del() ; /* 枠を閉める */

	MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;		/* 全体を見せる */

	if( ret )
		errorCheck( ret ) ;

	return NOERR ;
}

/* 	再生終了確認 */
/*	initDataIVDEDT:editBtnId[7]:MJ_DBUTTONL40の呼び出し関数	*/
int	editPlayEnd(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	数値設定	*/
/*	initDataIVDEDT:editNumBoxId[0][1]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIVDEDT:editNumBoxId[0][2]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIVDEDT:editNumBoxId[1][1]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIVDEDT:editNumBoxId[1][2]:MJ_NUMBOXL40の呼び出し関数	*/
int	editFileNumSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, j, type, num ;
	int	var, min, max, delta, ptColumn ;

	type = -1 ;
	for( i=0 ; i<2 ; i++ )
	{
		for( j=1 ; j<3 ; j++ )
		{
			if( kobj == editNumBoxId[i][j] )
			{
				type = i ;
				num = j ;
			}
		}
	}
	if( type == -1 )return NOERR ;

	MMI_SendMessage(kobj, MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);

	if( editType == V00TYPE )
		v00EditNum[type][num] = var ;

	if( editType == MVBTYPE )
		mvbEditNum[type][num] = var ;

	if( editType == V02TYPE )
		v02EditNum[type][num] = var ;

	return NOERR ;
}

/*	ファイル消去 */
/*	initDataIVDEDT:editBtnId[6]:MJ_DBUTTONL40の呼び出し関数	*/
int	editFileDel(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	if( editType == V00TYPE )
		v00EditPath[1][0] = '\0' ;
	if( editType == MVBTYPE )
		mvbEditPath[1][0] = '\0' ;
	if( editType == V02TYPE )
		v02EditPath[1][0] = '\0' ;
	dummyEditPath[1][0] = '\0' ;	/* 表示用も消す */

	editDialogSet( 1, 0 ) ;
	MMI_SendMessage( editMinDialogId[1], MM_SHOW, 0 ) ;
	for( i=0 ; i<3 ; i++ )
		MMI_SendMessage( editNumBoxId[1][i], MM_SHOW, 0 ) ;
	MMI_SendMessage( editMinDialogId[4], MM_SHOW, 0 ) ;

	return NOERR ;
}

/*	設定するか、取り消すか？	*/
/*	initDataIVDEDT:editOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIVDEDT:editCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	editOkchk(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == editOkBtnId )
		editFlag = TRUE ;
	else
		editFlag = FALSE ;

	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	各種セッティング	*/
int editDialogSet( t, m )		/* t:type(0〜2) 第１,第２,合成の区別 */
int t, m ;						/* m:mode 0ならframeClear 1ならframe変更なし */
{
	int ret ;

	static char speed[][20] = { 	"毎秒8.6フレーム",
									"毎秒 10フレーム",
									"毎秒 12フレーム",
									"毎秒 15フレーム"
						} ;
	static char waku[][20] = { 		"128× 96ドット",
						 			"160×120ドット",
						 			"192×144ドット",
						 			"256×192ドット",
						 			"320×240ドット"
					   } ;
	static char non[4] = "\0" ;


	if( editType == V00TYPE )
	{

		int frame, x, y, wt ;

		setDummyPath( v00EditPath[t], dummyEditPath[t] ) ;
		MMI_SendMessage( editFileMsgId[t], MM_SETMSG, 1, dummyEditPath[t] );
		if( t <= 1 )
		{
			int	var, min, max, delta, ptColumn ;

			ret = v00_head_read_only( v00EditPath[t], &frame, &x, &y, &wt ) ;
			if( ret )
			{
				frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
			}

			if( frame >= 0 )
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;
			else
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						-1, -1, 0, 1, 0 ) ;
			if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
				MMI_SendMessage(editMsgId[t*2+1],MM_SETMSG,1,speed[7-wt]);
			else
				MMI_SendMessage(editMsgId[t*2+1], MM_SETMSG, 1, non );
			if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[0]);
			else if( x == 160 && y == 120 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[1]);
			else if( x == 192 && y == 144 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[2]);
			else if( x == 256 && y == 192 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[3]);
			else if( x == 320 && y == 240 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[4]);
			else
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, non) ;

			if( m == 0 )
			{
				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				if( frame < 0 )max = 99999 ;
				var = min ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v00EditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				if( frame < 0 )max = 99999 ;
				var = max ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v00EditNum[t][2] = var ;
			}
			else
			{

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				if( frame < 0 )max = 99999 ;
				var = v00EditNum[t][1] ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v00EditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				if( frame < 0 )max = 99999 ;
				var = v00EditNum[t][2] ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v00EditNum[t][2] = var ;

			}
		}
	}

	if( editType == MVBTYPE )
	{

		int frame, x, y, wt ;

		setDummyPath( mvbEditPath[t], dummyEditPath[t] ) ;
		MMI_SendMessage( editFileMsgId[t], MM_SETMSG, 1, dummyEditPath[t] );
		if( t <= 1 )
		{
			int	var, min, max, delta, ptColumn ;

			ret = mvb_head_read_only( mvbEditPath[t], &frame, &x, &y, &wt ) ;
			if( ret )
			{
				frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
			}

			if( frame >= 0 )
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;
			else
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						-1, -1, 0, 1, 0 ) ;
			if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
				MMI_SendMessage(editMsgId[t*2+1],MM_SETMSG,1,speed[7-wt]);
			else
				MMI_SendMessage(editMsgId[t*2+1], MM_SETMSG, 1, non );
			if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[0]);
			else if( x == 160 && y == 120 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[1]);
			else if( x == 192 && y == 144 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[2]);
			else if( x == 256 && y == 192 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[3]);
			else if( x == 320 && y == 240 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[4]);
			else
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, non) ;

			if( m == 0 )
			{
				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = min ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				mvbEditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = max ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				mvbEditNum[t][2] = var ;
			}
			else
			{

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = mvbEditNum[t][1] ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				mvbEditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = mvbEditNum[t][2] ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				mvbEditNum[t][2] = var ;
			}
		}
	}

	if( editType == V02TYPE )
	{

		int frame, x, y, wt ;

		setDummyPath( v02EditPath[t], dummyEditPath[t] ) ;
		MMI_SendMessage( editFileMsgId[t], MM_SETMSG, 1, dummyEditPath[t] );
		if( t <= 1 )
		{
			int	var, min, max, delta, ptColumn, koma, freq, sndpack ;

			ret = v02_head_read_only( v02EditPath[t], &frame, &x, &y, &wt,
										&koma, &freq, &sndpack ) ;
			if( ret )
			{
				frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
			}

			if( frame >= 0 )
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;
			else
				MMI_SendMessage( editNumBoxId[t][0], MM_SETNUMBOX, 5,
						-1, -1, 0, 1, 0 ) ;
			if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
				MMI_SendMessage(editMsgId[t*2+1],MM_SETMSG,1,speed[7-wt]);
			else
				MMI_SendMessage(editMsgId[t*2+1], MM_SETMSG, 1, non );
			if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[0]);
			else if( x == 160 && y == 120 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[1]);
			else if( x == 192 && y == 144 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[2]);
			else if( x == 256 && y == 192 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[3]);
			else if( x == 320 && y == 240 )
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, waku[4]);
			else
				MMI_SendMessage(editMsgId[t*2+2], MM_SETMSG, 1, non) ;

			if( m == 0 )
			{
				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = min ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v02EditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = max ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v02EditNum[t][2] = var ;
			}
			else
			{

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = v02EditNum[t][1] ;
				MMI_SendMessage(editNumBoxId[t][1], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][1], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v02EditNum[t][1] = var ;

				min = 0 ; max = frame -1 ; delta = 1 ; ptColumn = 0 ;
				if( max < min )max = min ;
				var = v02EditNum[t][2] ;
				MMI_SendMessage(editNumBoxId[t][2], MM_SETNUMBOX,
					 5, var, min, max, delta, ptColumn);
				MMI_SendMessage(editNumBoxId[t][2], MM_GETNUMBOX,
					 5, &var, &min, &max, &delta, &ptColumn);
				v02EditNum[t][2] = var ;
			}
		}
	}

	return NOERR ;
}

/*	各種セッティングのサブ(pathを字数オーバしなようにdummyにセットする) */

setDummyPath( path, dummy )
char *path ;
char *dummy ;
{
	int i, j ;

	for( i=0 ; i<80 ; i++ )
	{
		dummy[i] = path[i] ;
		if( path[i] == '\0' )break ;
	}
	if( i <= 40 )return NOERR ;

	i -= 40 ;
	for( j=0 ; j<40 ; j++ )
	{
		dummy[j] = path[i++] ;
		if( dummy[j] == '\0' )break ;
		if( j < 5 )dummy[j] = '.' ;
	}
	if( j == 40 )dummy[j] = '\0' ;
	return NOERR ;
}



/*	v00録画ダイアログ表示	*/
int	selectFunc0(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char path[100] ;
	char			*ExtStr[] = { "*.V00", NULL } ;
	int i, ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( recFrameNumId, MM_SETNUMBOX, 5, /* 録画フレーム数変更 */
							recFrame, 0, 999999, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */

	ret = fileSelecter(v00Path, ExtStr, "ＶＯＯファイル", "選  択", "取  消");
	if(	ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v00Path, ".V00" ) ;
		for( i=0 ; i<80 ; i++ )
			v00Path[i] = path[i] ;
	}

	recType = V00TYPE ;			/* IVDREC基本セットがrecTypeを参照する */
	MMI_SendMessage( recMesId[0], MM_SETMSG, 1, "ＶＯＯ 録 画" ) ;

	MMI_SendMessage( recDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;

	MTL_setFlagObj( recBtnId[recMode+0], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSpeed+3], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSize+7], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recFreq+12], (MS_UNSELECT | MS_TOGGLE) ) ;

	MTL_resetAtrObj( recMemoryNumId, (~MS_DSPONLYL40) ) ;	/* 1〜2bit clear */
	MTL_resetAtrObj( recMesId[1], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[2], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[3], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[4], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[5], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[6], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[12], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[13], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[14], (~MS_DSPONLYL40) ) ;
	if( recMode != 1 )
	{
		MTL_setAtrObj( recMemoryNumId, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( recMesId[1], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( recMesId[2], MS_INACTIVEL40 ) ;
	}
	MTL_setAtrObj( recMesId[3], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recMesId[4], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recMesId[5], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recMesId[6], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recBtnId[12], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recBtnId[13], MS_INACTIVEL40 ) ;
	MTL_setAtrObj( recBtnId[14], MS_INACTIVEL40 ) ;
	MMI_SendMessage( recDialogId, MM_SHOW, 0 ) ;			/* 全体を見せる */

	SND_elevol_set( 0, recVol, recVol );

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( recDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( recDialogId, MM_DETACH, 0 ) ;

	if( recFlag == TRUE )
	{
		r_waku_del() ; /* 枠を閉める */

		MG_mosDisp( 0 ) ;

		switch( recMode )
		{
		case 0:	ret = v00_digit_snd_save( v00Path, recFrame, recSize+1,
															7-recSpeed ) ;
				break ;
		case 1:	if( recMemory == 0 )
					ret = v00_digit_save_0( v00Path, recFrame, recSize+1,
															7-recSpeed ) ;
				if( recMemory > 0 && recMemory < 100 )
					ret = v00_digit_save_2( v00Path, recFrame, recSize+1,
															7-recSpeed ) ;
				if( recMemory == 100 )
					ret = v00_digit_save_3( v00Path, recFrame, recSize+1,
															7-recSpeed ) ;
				break ;
		case 2:	ret = file_kakuchousi_set( path, v00Path, ".SND" ) ;
				if( ret == NOERR )
					ret = v00_pcm_snd_save( path, recFrame, 7-recSpeed ) ;
				break ;
		}
		displayClearAndReset() ;
		setPalette( guiEgbPtr ) ;
		diplayRecov() ;

		if( ret == NOERR )
		{
			int frame, x, y, wt ;

			ret = v00_head_read( v00Path, &frame, &x, &y, &wt ) ;
			if( ret == NOERR )
				v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
			else
				ret = NOERR ; /* 録音のみの場合,原画がﾅｸﾃﾓERRORにできない */
		}

		MG_mosDisp( 1 ) ;

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret )
			errorCheck( ret ) ;
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	int s ;						/* なくてもいいけど念のため */
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	return NOERR ;
}

/*	v00再生ダイアログ表示	*/
int	selectFunc1(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret ;
	char path[100] ;
	char			*ExtStr[] = { "*.V00", NULL } ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret = fileSelecter(v00Path, ExtStr, "ＶＯＯファイル", "再  生", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v00Path, ".V00" ) ;
		for( i=0 ; i<80 ; i++ )
		{
			v00Path[i] = path[i] ;
			orgPath = v00Path ;		/* recPathは基本セットが参照する */
		}
	}

	MMI_SendMessage( orgMesId[0], MM_SETMSG, 1, "ＶＯＯ 再 生" ) ;

	if(	ret == NOERR )
	{
		int fdummy, frame, x, y, wt, max ;
		char names[100], head[32] ;
		char speed[][20] = { 	"毎秒8.6フレーム",
								"毎秒 10フレーム",
								"毎秒 12フレーム",
								"毎秒 15フレーム"
						} ;
		char waku[][20] = { 	"128× 96ドット",
					 			"160×120ドット",
					 			"192×144ドット",
					 			"256×192ドット",
					 			"320×240ドット"
					   } ;
		char non[4] = "\0" ;
		FILE *fp ;

		r_waku_del() ; /* 枠を閉める */
		ret = v00_head_read( v00Path, &frame, &x, &y, &wt ) ;	/* data収集 */
		if( ret )
		{
			frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
		}

		if( frame >= 0 )
			MMI_SendMessage( orgFrameNumId, MM_SETNUMBOX, 5,
							frame, 0, frame, 1, 0 ) ;
		else
			MMI_SendMessage( orgFrameNumId, MM_SETNUMBOX, 5,
							-1, -1, 0, 1, 0 ) ;
			/*	var, min, max, delta, ptColumn フレーム数表示 */

		if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
			MMI_SendMessage( orgMesId[1], MM_SETMSG, 1, speed[7-wt] ) ;
		else
			MMI_SendMessage( orgMesId[1], MM_SETMSG, 1, non ) ;

		if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[0] ) ;
		else if( x == 160 && y == 120 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[1] ) ;
		else if( x == 192 && y == 144 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[2] ) ;
		else if( x == 256 && y == 192 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[3] ) ;
		else if( x == 320 && y == 240 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[4] ) ;
		else
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, non ) ;

		/* Sound offset の 取得 */
		orgSndOfst = 0 ;
		max = 99999 ;
		if( file_kakuchousi_set( names, v00Path, ".SND" ) )goto vd00 ;
		if( ( fp = fopen( names, "rb" ) ) == NULL )goto vd00 ;
		if( fread( head, 32, 1, fp ) < 1 )
		{
			fclose(fp);
			goto vd00;
		}
		max = DWORD( head+12 ) ;
		orgSndOfst = DWORD( head+16 ) ;
		fclose(fp);
vd00:	MMI_SendMessage( orgSoundNumId, MM_SETNUMBOX, 5,
							orgSndOfst, 0, max, 1, 0 ) ;
						/*	var, min, max, delta, ptColumn */

		if( ret == NOERR )
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
org01:	MG_mosDisp( 0 ) ;
		if( ret == NOERR )
		{
			ret = v00_play( v00Path, orgSndOfst, &fdummy, 0 );
			/* 名前, 音ずれ, フレーム数をバック, wait */
		}

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
//		if( mouseSwCheck() )TL_setInvalidMosFlag() ; /* ﾎﾞﾀﾝｦ放ｼﾃ終ﾜﾙｶﾗｲﾗﾅｲ */

		if( ret == NOERR )
		{
			MMI_SendMessage( orgDialogId, MM_ATTACH, 1,
											 MMI_GetBaseObj() ) ;
			MMI_SendMessage( orgDialogId, MM_SHOW, 0 ) ;	/* 見せる */
			MG_mosDisp( 1 ) ;
			MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

			MMI_SendMessage( orgDialogId, MM_ERASE, 0 ) ;
			MMI_SendMessage( orgDialogId, MM_DETACH, 0 ) ;

			if( orgFlag == TRUE )
				goto org01 ;
		}
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}

/*		V00圧縮ダイアログ表示	*/
int	selectFunc2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret, packmode ;
	char path[100] ;
	char			*ExtStr0[] = { "*.V00", NULL } ;
	char			*ExtStr1[] = { "*.V02", NULL } ;

	if( kobj == fileMItemId[13] )
		packmode = 1 ;
	else
		packmode = 0 ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret = fileSelecter(v00Path, ExtStr0, "ＶＯＯファイル", "選  択", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v00Path, ".V00" ) ;
		for( i=0 ; i<80 ; i++ )
			v00Path[i] = path[i] ;
	}

	if( packmode )
	{
		MMI_SendMessage( pacMesId[0], MM_SETMSG, 1, "ＶＯＯ 瞬 間 圧 縮" ) ;
		MTL_setAtrObj( pacFilterBar, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacSoftBar, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacFilterNumId, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacSoftNumId, MS_INACTIVEL40 ) ;
		MTL_resetAtrObj( pacMesId[1], (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[1], MS_INACTIVEL40 ) ;
		MTL_resetAtrObj( pacMesId[2], (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[2], MS_INACTIVEL40 ) ;
	}
	else
	{
		MMI_SendMessage( pacMesId[0], MM_SETMSG, 1, "ＶＯＯ 圧 縮" ) ;
		MTL_resetAtrObj( pacFilterBar, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacSoftBar, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacFilterNumId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacSoftNumId, (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[1], MS_DSPONLYL40 ) ;
		MTL_setAtrObj( pacMesId[2], MS_DSPONLYL40 ) ;
	}

	if(	ret == NOERR )
	{
		int frame, x, y, wt ;

		r_waku_del() ; /* 枠を閉める */
		ret = v00_head_read( v00Path, &frame, &x, &y, &wt ) ;

		if( ret == NOERR )
		{
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */

			ret = fileSelecter( v02Path, ExtStr1,
				"ＶＯ２ファイル名", "選  択", "取  消" );
			if( ret )
			{				/* 中止する */
				/* メニューとボタンを使えるように戻す */
				MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
				MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
				return NOERR ;
			}
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, v02Path, ".V02" ) ;
			for( i=0 ; i<80 ; i++ )
				v02Path[i] = path[i] ;
		}
		else goto v10 ;

		MMI_SendMessage( pacDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( pacDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

		MMI_SendMessage( pacDialogId, MM_ERASE, 0 ) ;	/* 消す */
		MMI_SendMessage( pacDialogId, MM_DETACH, 0 ) ;

		if( pacFlag == TRUE )
		{
			MMI_SendMessage( pacWaitNumId[0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;	/* 原画フレーム数設定 */
					/*	var, min, max, delta, ptColumn */
			MMI_SendMessage( pacWaitNumId[1], MM_SETNUMBOX, 5,
						0, 0, frame, 1, 0 ) ;		/* 圧縮フレーム数設定 */
					/*	var, min, max, delta, ptColumn */

			MMI_SendMessage( pacWaitDialogId, MM_ATTACH,
											 1, MMI_GetBaseObj() ) ;
			MMI_SendMessage( pacWaitDialogId, MM_SHOW, 0 ) ;	/* 見せる */

			SetMouse16( 81, 0xf, 0x8 ) ;	/* マウスカーソルをウエイト表示 */

			if( v02TableFlag )
				ret = v00_to_v02_t( v00Path, v02Path,
					pacFilter, pacSoft, 6, 0, v02Table, packmode ) ;
			else
				ret = v00_to_v02( v00Path, v02Path,
					pacFilter, pacSoft, 6, 0, packmode ) ;

			SetMouse16( 80, 0xf, 0x8 ) ;	/* マウスカーソルを元に */

			MMI_SendMessage( pacWaitDialogId, MM_ERASE, 0 ) ;	/* 消す */
			MMI_SendMessage( pacWaitDialogId, MM_DETACH, 0 ) ;
		}
	}

	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	/* メニューとボタンを使えるように戻す */
v10:
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}

	/*	mvb録画ダイアログ表示	*/
int	selectFunc3(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char path[100] ;
	char			*ExtStr[] = { "*.MVB", NULL } ;
	int i, ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage( recFrameNumId, MM_SETNUMBOX, 5, /* 録画フレーム数変更 */
							recFrame, 0, 999999, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */

	ret = fileSelecter(mvbPath, ExtStr, "ＭＶＢファイル", "選  択", "取  消");
	if(	ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, mvbPath, ".MVB" ) ;
		for( i=0 ; i<80 ; i++ )
			mvbPath[i] = path[i] ;
	}

	recType = MVBTYPE ;			/* IVDREC基本セットがrecTypeを参照する */
	MMI_SendMessage( recMesId[0], MM_SETMSG, 1, "ＭＶＢ 録 画" ) ;

	MMI_SendMessage( recDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;

	MTL_setFlagObj( recBtnId[recMode+0], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSpeed+3], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSize+7], (MS_UNSELECT | MS_TOGGLE) ) ;

	MTL_resetFlagObj( recBtnId[12], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
	MTL_resetFlagObj( recBtnId[13], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
	MTL_resetFlagObj( recBtnId[14], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
	if( recFreq >= 2 )recFreq = 0 ;
	MTL_setFlagObj( recBtnId[recFreq+12], (MS_UNSELECT | MS_TOGGLE) ) ;

	MTL_resetAtrObj( recMemoryNumId, (~MS_DSPONLYL40) ) ;	/* 1〜2bit clear */
	MTL_resetAtrObj( recMesId[1], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[2], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recMesId[3], (~MS_DSPONLYL40) ) ;

	MTL_resetAtrObj( recMesId[4], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[4], MS_DSPONLYL40 ) ;

	MTL_resetAtrObj( recMesId[5], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[5], MS_DSPONLYL40 ) ;

	MTL_resetAtrObj( recMesId[6], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[6], MS_INACTIVEL40 ) ;

	MTL_resetAtrObj( recBtnId[12], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[13], (~MS_DSPONLYL40) ) ;

	MTL_resetAtrObj( recBtnId[14], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recBtnId[14], MS_INACTIVEL40 ) ;

	if( recMode != 1 )
	{
		MTL_setAtrObj( recMemoryNumId, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( recMesId[1], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( recMesId[2], MS_INACTIVEL40 ) ;
	}

	MMI_SendMessage( recDialogId, MM_SHOW, 0 ) ;			/* 全体を見せる */

	SND_elevol_set( 0, recVol, recVol );

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( recDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( recDialogId, MM_DETACH, 0 ) ;

	if( recFlag == TRUE )
	{
		r_waku_del() ; /* 枠を閉める */

		MG_mosDisp( 0 ) ;

		switch( recMode )
		{
		case 0:	ret = mvb_digit_snd_save( mvbPath, recFrame, recSize+1,
													recFreq, 7-recSpeed ) ;
				break ;
		case 1:	if( recMemory == 0 )
					ret = mvb_digit_save_0( mvbPath, recFrame, recSize+1,
															7-recSpeed ) ;
				if( recMemory > 0 && recMemory < 100 )
					ret = mvb_digit_save_2( mvbPath, recFrame, recSize+1,
															7-recSpeed ) ;
				if( recMemory == 100 )
					ret = mvb_digit_save_3( mvbPath, recFrame, recSize+1,
															7-recSpeed ) ;
				break ;
		case 2:	ret = file_kakuchousi_set( path, mvbPath, ".SND" ) ;
				if( ret == NOERR )
					ret = mvb_pcm_snd_save( path, recFrame,
												 7-recSpeed, recFreq ) ;
				break ;
		}
		displayClearAndReset() ;
		setPalette( guiEgbPtr ) ;
		diplayRecov() ;

		if( ret == NOERR )
		{
			int frame, x, y, wt ;

			ret = mvb_head_read( mvbPath, &frame, &x, &y, &wt ) ;

			if( ret == NOERR )
				v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
			else
				ret = NOERR ; /* 録音のみの場合,原画がﾅｸﾃﾓERRORにできない */
		}

		MG_mosDisp( 1 ) ;

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret )
			errorCheck( ret ) ;
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	int s ;						/* なくてもいいけど念のため */
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	return NOERR ;
}

/*	mvb再生ダイアログ表示	*/
int	selectFunc4(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret ;
	char path[100] ;
	char			*ExtStr[] = { "*.MVB", NULL } ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret = fileSelecter(mvbPath, ExtStr, "ＭＶＢファイル", "再  生", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, mvbPath, ".MVB" ) ;
		for( i=0 ; i<80 ; i++ )
		{
			mvbPath[i] = path[i] ;
			orgPath = mvbPath ;		/* orgPathは基本セットが参照する */
		}
	}

	MMI_SendMessage( orgMesId[0], MM_SETMSG, 1, "ＭＶＢ 再 生" ) ;

	if(	ret == NOERR )
	{
		int frame, x, y, wt, max ;
		char names[100], head[32] ;
		char speed[][20] = { 	"毎秒8.6フレーム",
								"毎秒 10フレーム",
								"毎秒 12フレーム",
								"毎秒 15フレーム"
						} ;
		char waku[][20] = { 	"128× 96ドット",
					 			"160×120ドット",
					 			"192×144ドット",
					 			"256×192ドット",
					 			"320×240ドット"
					   } ;
		char non[4] = "\0" ;
		FILE *fp ;

		r_waku_del() ; /* 枠を閉める */
		ret = mvb_head_read( mvbPath, &frame, &x, &y, &wt ) ;	/* data収集 */
		if( ret )
		{
			frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
		}

		if( frame >= 0 )
			MMI_SendMessage( orgFrameNumId, MM_SETNUMBOX, 5,
							frame, 0, frame, 1, 0 ) ;
		else
			MMI_SendMessage( orgFrameNumId, MM_SETNUMBOX, 5,
							-1, -1, 0, 1, 0 ) ;
			/*	var, min, max, delta, ptColumn フレーム数表示 */

		if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
			MMI_SendMessage( orgMesId[1], MM_SETMSG, 1, speed[7-wt] ) ;
		else
			MMI_SendMessage( orgMesId[1], MM_SETMSG, 1, non ) ;

		if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[0] ) ;
		else if( x == 160 && y == 120 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[1] ) ;
		else if( x == 192 && y == 144 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[2] ) ;
		else if( x == 256 && y == 192 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[3] ) ;
		else if( x == 320 && y == 240 )
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, waku[4] ) ;
		else
			MMI_SendMessage( orgMesId[2], MM_SETMSG, 1, non ) ;

		/* Sound offset の 取得 */
		orgSndOfst = 0 ;
		max = 99999 ;
		if( file_kakuchousi_set( names, mvbPath, ".SND" ) )goto vd00 ;
		if( ( fp = fopen( names, "rb" ) ) == NULL )goto vd00 ;
		if( fread( head, 32, 1, fp ) < 1 )
		{
			fclose(fp);
			goto vd00;
		}
		max = DWORD( head+12 ) ;
		orgSndOfst = DWORD( head+16 ) ;
		fclose(fp);
vd00:	MMI_SendMessage( orgSoundNumId, MM_SETNUMBOX, 5,
							orgSndOfst, 0, max, 1, 0 ) ;
						/*	var, min, max, delta, ptColumn */

		if( ret == NOERR )
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
org01:	MG_mosDisp( 0 ) ;
		if( ret == NOERR )
		{
			ret = mvb_play( mvbPath, orgSndOfst, 0 );
			/* 名前, 音ずれ, wait */
		}

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
//		if( mouseSwCheck() )TL_setInvalidMosFlag() ; /* ﾎﾞﾀﾝｦ放ｼﾃ終ﾜﾙｶﾗｲﾗﾅｲ */

		if( ret == NOERR )
		{
			MMI_SendMessage( orgDialogId, MM_ATTACH, 1,
											 MMI_GetBaseObj() ) ;
			MMI_SendMessage( orgDialogId, MM_SHOW, 0 ) ;	/* 見せる */
			MG_mosDisp( 1 ) ;
			MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

			MMI_SendMessage( orgDialogId, MM_ERASE, 0 ) ;
			MMI_SendMessage( orgDialogId, MM_DETACH, 0 ) ;

			if( orgFlag == TRUE )
				goto org01 ;
		}
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}

	/*	mvb圧縮ダイアログ表示	*/
int	selectFunc5(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret, packmode ;
	char path[100] ;
	char			*ExtStr0[] = { "*.MVB", NULL } ;
	char			*ExtStr1[] = { "*.V02", NULL } ;

	if( kobj == fileMItemId[14] )
		packmode = 1 ;
	else
		packmode = 0 ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret = fileSelecter(mvbPath, ExtStr0, "ＭＶＢファイル", "選  択", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, mvbPath, ".MVB" ) ;
		for( i=0 ; i<80 ; i++ )
			mvbPath[i] = path[i] ;
	}

	if( packmode )
	{
		MMI_SendMessage( pacMesId[0], MM_SETMSG, 1, "ＭＶＢ 瞬 間 圧 縮" ) ;
		MTL_setAtrObj( pacFilterBar, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacSoftBar, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacFilterNumId, MS_INACTIVEL40 ) ;
		MTL_setAtrObj( pacSoftNumId, MS_INACTIVEL40 ) ;
		MTL_resetAtrObj( pacMesId[1], (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[1], MS_INACTIVEL40 ) ;
		MTL_resetAtrObj( pacMesId[2], (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[2], MS_INACTIVEL40 ) ;
	}
	else
	{
		MMI_SendMessage( pacMesId[0], MM_SETMSG, 1, "ＭＶＢ 圧 縮" ) ;
		MTL_resetAtrObj( pacFilterBar, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacSoftBar, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacFilterNumId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( pacSoftNumId, (~MS_DSPONLYL40) ) ;
		MTL_setAtrObj( pacMesId[1], MS_DSPONLYL40 ) ;
		MTL_setAtrObj( pacMesId[2], MS_DSPONLYL40 ) ;
	}

	if(	ret == NOERR )
	{
		int frame, x, y, wt ;

		r_waku_del() ; /* 枠を閉める */
		ret = mvb_head_read( mvbPath, &frame, &x, &y, &wt ) ;

		if( ret == NOERR )
		{
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */

			ret = fileSelecter( v02Path, ExtStr1,
				"ＶＯ２ファイル名", "選  択", "取  消" );
			if( ret )
			{				/* 中止する */
				/* メニューとボタンを使えるように戻す */
				MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
				MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
				return NOERR ;
			}
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, v02Path, ".V02" ) ;
			for( i=0 ; i<80 ; i++ )
				v02Path[i] = path[i] ;
		}
		else goto v10 ;

		MMI_SendMessage( pacDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( pacDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

		MMI_SendMessage( pacDialogId, MM_ERASE, 0 ) ;	/* 消す */
		MMI_SendMessage( pacDialogId, MM_DETACH, 0 ) ;

		if( pacFlag == TRUE )
		{
			MMI_SendMessage( pacWaitNumId[0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;	/* 原画フレーム数設定 */
					/*	var, min, max, delta, ptColumn */
			MMI_SendMessage( pacWaitNumId[1], MM_SETNUMBOX, 5,
						0, 0, frame, 1, 0 ) ;		/* 圧縮フレーム数設定 */
					/*	var, min, max, delta, ptColumn */

			MMI_SendMessage( pacWaitDialogId, MM_ATTACH,
											 1, MMI_GetBaseObj() ) ;
			MMI_SendMessage( pacWaitDialogId, MM_SHOW, 0 ) ;	/* 見せる */

			SetMouse16( 81, 0xf, 0x8 ) ;	/* マウスカーソルをウエイト表示 */

			if( v02TableFlag )
				ret = mvb_to_v02_t( mvbPath, v02Path,
					pacFilter, pacSoft, 6, 0, v02Table, packmode ) ;
			else
				ret = mvb_to_v02( mvbPath, v02Path,
					pacFilter, pacSoft, 6, 0, packmode ) ;

			SetMouse16( 80, 0xf, 0x8 ) ;	/* マウスカーソルを元に */

			MMI_SendMessage( pacWaitDialogId, MM_ERASE, 0 ) ;	/* 消す */
			MMI_SendMessage( pacWaitDialogId, MM_DETACH, 0 ) ;
		}
	}

	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	/* メニューとボタンを使えるように戻す */
v10:
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}

/*		瞬間圧縮ダイアログ表示		*/
int	selectFunc6(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char path[100] ;
	char			*ExtStr[] = { "*.V02", NULL } ;
	int i, ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage(recFrameNumId, MM_SETNUMBOX, 5, /* 録画フレーム数変更 */
							recFrame, 0, 999999, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */

	ret = fileSelecter(v02Path, ExtStr, "ＶＯ２ファイル", "選  択", "取  消");
	if(	ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v02Path, ".V02" ) ;
		for( i=0 ; i<80 ; i++ )
			v02Path[i] = path[i] ;
	}

	recType = DIRTYPE ;
	MMI_SendMessage( recMesId[0], MM_SETMSG, 1, "瞬 間 圧 縮" ) ;

	MMI_SendMessage( recDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;

	MTL_setFlagObj( recBtnId[recMode+0], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSpeed+3], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recSize+7], (MS_UNSELECT | MS_TOGGLE) ) ;
	MTL_setFlagObj( recBtnId[recFreq+12], (MS_UNSELECT | MS_TOGGLE) ) ;

	MTL_resetAtrObj( recMemoryNumId, (~MS_DSPONLYL40) ) ;	/* 1〜2bit clear */
	MTL_setAtrObj( recMemoryNumId, MS_INACTIVEL40 ) ;	/* 使用不可 */

	MTL_resetAtrObj( recMesId[1], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[1], MS_INACTIVEL40 ) ;

	MTL_resetAtrObj( recMesId[2], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[2], MS_INACTIVEL40 ) ;

	MTL_resetAtrObj( recMesId[3], (~MS_DSPONLYL40) ) ;

	MTL_resetAtrObj( recMesId[4], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[4], MS_DSPONLYL40 ) ;

	MTL_resetAtrObj( recMesId[5], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[5], MS_DSPONLYL40 ) ;

	MTL_resetAtrObj( recMesId[6], (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( recMesId[6], MS_DSPONLYL40 ) ;

	MTL_resetAtrObj( recBtnId[12], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[13], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( recBtnId[14], (~MS_DSPONLYL40) ) ;

	MMI_SendMessage( recDialogId, MM_SHOW, 0 ) ;			/* 全体を見せる */

	SND_elevol_set( 0, recVol, recVol );
	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( recDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( recDialogId, MM_DETACH, 0 ) ;

	if( recFlag == TRUE )
	{
		char	*buf, *ytab, *yytoy, *ctab, *v02tab, *point ;
		int		d ;

		r_waku_del() ; /* 枠を閉める */

		MG_mosDisp( 0 ) ;

		if( (buf = (char *)TL_malloc( 32768+16384+32768 )) == NULL	)
			ret = 7 ;

		if( ret == NOERR )
		{
			ytab = buf ;
			yytoy = ytab + 32768 ;
			ctab = yytoy + 16384 ;
			v02tab = v02Table ;

			point = v02Table + 32768 + 512 ;
			for( i=0 ; i<32768 ; i++ )
			{
				d = WORD( point + (i<<1) ) ;
				BYTE( ctab + i ) = d & 0xff ;
				BYTE( ytab + i ) = d >> 8 ;
			}
			point = v02Table + 32768 + 512 + 65536 ;
			for( i=0 ; i<4096 ; i++ )
			{
				WORD( yytoy + ( (i << 2) & 0x3f00 ) + (i & 0x3f) )
				 = BYTE( point + i ) ;
			}

			switch( recMode )
			{
			case 0:	
				if( recFreq == 2 )
					ret = v02_digit_snd_save( v02Path, recFrame,
							 recSize+1,	7-recSpeed, ytab, ctab, v02tab );
				else
					ret = v02_digit_snd_save2( v02Path, recFrame,
						 recSize+1,	recFreq, 7-recSpeed, ytab, ctab, v02tab );
				break ;
			case 1:	
				if( recFreq == 2 )
					ret = v02_digit_save_0( v02Path, recFrame,
							 recSize+1,	7-recSpeed, ytab, ctab, v02tab );
				else
					ret = v02_digit_save_0_2( v02Path, recFrame,
						 recSize+1,	recFreq, 7-recSpeed, ytab, ctab, v02tab );
				break ;
			case 2:	
				ret = v02_snd_save_0( v02Path ) ;
				break ;
			}

			TL_free( buf ) ;
		}

		displayClearAndReset() ;
		setPalette( guiEgbPtr ) ;
		diplayRecov() ;

		if( ret == NOERR )
		{
			int frame, x, y, wt ;

			ret = v02_wide_head_read_and_dsp( v02Path, &frame, &x, &y, &wt, 1, 
													TL_malloc, TL_free ) ;
			v02_graph_init( 2, x, y ) ;	/* 倍率にあわせて画面設定 */
			if( ret == NOERR )
				v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
		}

		MG_mosDisp( 1 ) ;

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret )
			errorCheck( ret ) ;
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	int s ;						/* なくてもいいけど念のため */
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	return NOERR ;
}

/*		アフレコダイアログ表示	*/
int	selectFunc7(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	char path[100] ;
	char			*ExtStr[] = { "*.V02", NULL } ;
	int i, ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	MMI_SendMessage(recFrameNumId, MM_SETNUMBOX, 5, /* 録画フレーム数変更 */
							recFrame, 0, 999999, 1, 0 ) ;
					/*	var, min, max, delta, ptColumn */

	ret = fileSelecter(v02Path, ExtStr, "ＶＯ２ファイル", "選  択", "取  消");
	if(	ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v02Path, ".V02" ) ;
		for( i=0 ; i<80 ; i++ )
			v02Path[i] = path[i] ;
	}

	recType = AFRECTYPE ;

	MMI_SendMessage( recSndDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;

	MMI_SendMessage( recSndDialogId, MM_SHOW, 0 ) ;			/* 全体を見せる */

	SND_elevol_set( 0, recVol, recVol );
	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( recSndDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( recSndDialogId, MM_DETACH, 0 ) ;

	if( recFlag == TRUE )
	{
		r_waku_del() ; /* 枠を閉める */

		MG_mosDisp( 0 ) ;

		ret = v02_snd_save_0( v02Path ) ;

		displayClearAndReset() ;
		setPalette( guiEgbPtr ) ;
		diplayRecov() ;

		if( ret == NOERR )
		{
			int frame, x, y, wt ;

			ret = v02_wide_head_read_and_dsp( v02Path, &frame, &x, &y, &wt, 1, 
													TL_malloc, TL_free ) ;
			v02_graph_init( 2, x, y ) ;	/* 倍率にあわせて画面設定 */
			if( ret == NOERR )
				v_waku_clear( x, y, 2 ) ;		/* 枠抜き */
		}

		MG_mosDisp( 1 ) ;

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret )
			errorCheck( ret ) ;
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	int s ;						/* なくてもいいけど念のため */
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	return NOERR ;
}

/*		V02再生ダイアログ表示		*/
int	selectFunc8(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret ;
	char path[100] ;
	char			*ExtStr[] = { "*.V02", NULL } ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret = fileSelecter(v02Path, ExtStr, "ＶＯ２ファイル", "再  生", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v02Path, ".V02" ) ;
		for( i=0 ; i<80 ; i++ )
			v02Path[i] = path[i] ;
	}

	MMI_SendMessage( plyMesId[0], MM_SETMSG, 1, "ＶＯ２ 再 生" ) ;

	if(	ret == NOERR )
	{
		int frame, x, y, wt ;
		int sizememo ;
		char speed[][20] = { 	"毎秒8.6フレーム",
								"毎秒 10フレーム",
								"毎秒 12フレーム",
								"毎秒 15フレーム"
						} ;
		char waku[][20] = { 	"128× 96ドット",
					 			"160×120ドット",
					 			"192×144ドット",
					 			"256×192ドット",
					 			"320×240ドット"
					   } ;
		char non[4] = "\0" ;

		r_waku_del() ; /* 枠を閉める */

		ret = v02_wide_head_read_and_dsp( v02Path, &frame, &x, &y, &wt, 1, 
												TL_malloc, TL_free ) ;
		/* ファイル名,フレーム数,xd,yd,wait */
		if( ret )
		{
			frame = 0 ; x= -1 ; y = -1 ; wt = -1 ;
		}
		else
			v02_graph_init( plyMul+1, x, y ) ;	/* 倍率にあわせて画面設定 */

		if( frame >= 0 )
			MMI_SendMessage( plyFrameNumId, MM_SETNUMBOX, 5,
							frame, 0, frame, 1, 0 ) ;
		else
			MMI_SendMessage( plyFrameNumId, MM_SETNUMBOX, 5,
							-1, -1, 0, 1, 0 ) ;
			/*	var, min, max, delta, ptColumn フレーム数表示 */

		if( wt >= 4 && wt <= 7 )			/* 毎秒フレーム数表示 */
			MMI_SendMessage( plyMesId[1], MM_SETMSG, 1, speed[7-wt] ) ;
		else
			MMI_SendMessage( plyMesId[1], MM_SETMSG, 1, non ) ;

		if( x == 128 && y == 96 )			/* 画面の大きさ表示 */
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, waku[0] ) ;
		else if( x == 160 && y == 120 )
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, waku[1] ) ;
		else if( x == 192 && y == 144 )
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, waku[2] ) ;
		else if( x == 256 && y == 192 )
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, waku[3] ) ;
		else if( x == 320 && y == 240 )
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, waku[4] ) ;
		else
			MMI_SendMessage( plyMesId[2], MM_SETMSG, 1, non ) ;

ply00:	if( ret == NOERR )
		{
			sizememo = plyMul ;
			v_waku_clear( x, y, plyMul+1 ) ;		/* 枠抜き */
		}
ply01:	MG_mosDisp( 0 ) ;
		if( ret == NOERR )
		{
			ret = v02_play( v02Path, plyMul+1, plyWait ) ;
		}

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
//		if( mouseSwCheck() )TL_setInvalidMosFlag() ; /* ﾎﾞﾀﾝｦ放ｼﾃ終ﾜﾙｶﾗｲﾗﾅｲ */

		if( ret == NOERR )
		{
			MMI_SendMessage( plyDialogId, MM_ATTACH, 1,
											 MMI_GetBaseObj() ) ;

			MTL_setFlagObj( plyBtnId[plyMul+0],
									 (MS_UNSELECT | MS_TOGGLE) ) ;

			MMI_SendMessage( plyDialogId, MM_SHOW, 0 ) ;	/* 見せる */
			MG_mosDisp( 1 ) ;
			MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

			MMI_SendMessage( plyDialogId, MM_ERASE, 0 ) ;
			MMI_SendMessage( plyDialogId, MM_DETACH, 0 ) ;

			if( plyFlag == TRUE )
			{
				if( sizememo == plyMul )
				{
					v02_wide_head_read_and_dsp(v02Path, &frame, &x, &y, &wt, 1,
												 TL_malloc, TL_free ) ;
						/* ファイル名,フレーム数,xd,yd,wait */
					goto ply01 ;
				}
				else
				{
					r_waku_del(); /* 枠閉め */

					v02_wide_head_read_and_dsp(v02Path, &frame, &x, &y, &wt, 1,
												 TL_malloc, TL_free ) ;
						/* ファイル名,フレーム数,xd,yd,wait */
					v02_graph_init( plyMul+1, x, y ) ;
											/* 倍率にあわせて画面設定 */
					goto ply00 ;
				}
			}
		}
	}

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}

/*		V02→V02再圧縮ダイアログ表示	*/
int	selectFunc9(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	i, ret ;
	char path[100] ;
	char			*ExtStr0[] = { "*.V02", NULL } ;
	char			*ExtStr1[] = { "*.V02", NULL } ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	ret= fileSelecter(v02Path2, ExtStr0, "ＶＯ２ファイル", "選  択", "取  消");
	if( ret )
	{
		/* メニューとボタンを使えるように戻す */
		MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
		MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
		return NOERR ;
	}
	else
	{
		/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
		file_kakuchousi_set( path, v02Path2, ".V02" ) ;
		for( i=0 ; i<80 ; i++ )
			v02Path2[i] = path[i] ;
	}

	MMI_SendMessage( pacMesId[0], MM_SETMSG, 1, "再 圧 縮" ) ;
	MTL_resetAtrObj( pacFilterBar, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( pacSoftBar, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( pacFilterNumId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( pacSoftNumId, (~MS_DSPONLYL40) ) ;
	MTL_setAtrObj( pacMesId[1], MS_DSPONLYL40 ) ;
	MTL_setAtrObj( pacMesId[2], MS_DSPONLYL40 ) ;

	if(	ret == NOERR )
	{
		int frame, x, y, wt ;

		r_waku_del() ; /* 枠を閉める */
		ret = v02_wide_head_read_and_dsp( v02Path2, &frame, &x, &y, &wt, 1,
									 TL_malloc, TL_free ) ;

		if( ret == NOERR )
		{
			v02_graph_init( 2, x, y ) ;	/* 倍率にあわせて画面設定 */
			v_waku_clear( x, y, 2 ) ;		/* 枠抜き */

			ret = fileSelecter( v02Path, ExtStr1,
				"ＶＯ２ファイル名", "選  択", "取  消" );
			if( ret )
			{				/* 中止する */
				/* メニューとボタンを使えるように戻す */
				MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
				MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;
				return NOERR ;
			}
			/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */
			file_kakuchousi_set( path, v02Path, ".V02" ) ;
			for( i=0 ; i<80 ; i++ )
				v02Path[i] = path[i] ;
		}
		else goto v10 ;

		if( _strcmpi( v02Path2, v02Path ) == 0 )
		{
			ret = 52 ;
			goto v10 ;	/* file name 重複 */
		}

		MMI_SendMessage( pacDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( pacDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

		MMI_SendMessage( pacDialogId, MM_ERASE, 0 ) ;	/* 消す */
		MMI_SendMessage( pacDialogId, MM_DETACH, 0 ) ;

		if( pacFlag == TRUE )
		{
			MMI_SendMessage( pacWaitNumId[0], MM_SETNUMBOX, 5,
						frame, 0, frame, 1, 0 ) ;	/* 原画フレーム数設定 */
					/*	var, min, max, delta, ptColumn */
			MMI_SendMessage( pacWaitNumId[1], MM_SETNUMBOX, 5,
						0, 0, frame, 1, 0 ) ;		/* 圧縮フレーム数設定 */
					/*	var, min, max, delta, ptColumn */

			MMI_SendMessage( pacWaitDialogId, MM_ATTACH,
											 1, MMI_GetBaseObj() ) ;
			MMI_SendMessage( pacWaitDialogId, MM_SHOW, 0 ) ;	/* 見せる */

			SetMouse16( 81, 0xf, 0x8 ) ;	/* マウスカーソルをウエイト表示 */

			if( v02TableFlag )
				ret = v02_to_v02_t( v02Path2, v02Path,
					pacFilter, pacSoft, 6, 0, v02Table ) ;
			else
				ret = v02_to_v02( v02Path2, v02Path,
					pacFilter, pacSoft, 6, 0 ) ;

			SetMouse16( 80, 0xf, 0x8 ) ;	/* マウスカーソルを元に */

			MMI_SendMessage( pacWaitDialogId, MM_ERASE, 0 ) ;	/* 消す */
			MMI_SendMessage( pacWaitDialogId, MM_DETACH, 0 ) ;
		}
	}

	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	/* メニューとボタンを使えるように戻す */
v10:
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	if( ret )
			errorCheck( ret ) ;
	return NOERR ;
}


/*		V00編集ダイアログ表示		*/
int	editFunc0(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	r_waku_del() ; /* 枠を閉める */

	MMI_SendMessage( editMsgId[0], MM_SETMSG, 1, "ＶＯＯ 編 集" ) ;
	editType = V00TYPE ;
	editDialogSet( 0, 1 ) ;
	editDialogSet( 1, 1 ) ;
	editDialogSet( 2, 1 ) ;

	MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

ed01:	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	if( editFlag == TRUE )
	{
		MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editWaitDialogId, MM_SHOW, 0 ) ;

		ret = v00_merge( v00EditPath[2],
						v00EditPath[0], v00EditNum[0][1], v00EditNum[0][2],
				   		v00EditPath[1], v00EditNum[1][1], v00EditNum[1][2] );

		MMI_SendMessage( editWaitDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret > 1 )	/* 1以下のerrorは見逃す */
			errorCheck( ret ) ;
		goto ed01 ;
	}

	MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*		MVB編集ダイアログ表示		*/
int	editFunc1(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	r_waku_del() ; /* 枠を閉める */

	MMI_SendMessage( editMsgId[0], MM_SETMSG, 1, "ＭＶＢ 編 集" ) ;
	editType = MVBTYPE ;
	editDialogSet( 0, 1 ) ;
	editDialogSet( 1, 1 ) ;
	editDialogSet( 2, 1 ) ;

	MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

ed01:	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	if( editFlag == TRUE )
	{
		MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editWaitDialogId, MM_SHOW, 0 ) ;

		ret = mvb_merge( mvbEditPath[2],
						mvbEditPath[0], mvbEditNum[0][1], mvbEditNum[0][2],
				   		mvbEditPath[1], mvbEditNum[1][1], mvbEditNum[1][2] );

		MMI_SendMessage( editWaitDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret > 1 )	/* 1以下のerrorは見逃す */
			errorCheck( ret ) ;
		goto ed01 ;
	}

	MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*		V02編集ダイアログ表示		*/
int	editFunc2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	r_waku_del() ; /* 枠を閉める */

	MMI_SendMessage( editMsgId[0], MM_SETMSG, 1, "ＶＯ２ 編 集" ) ;
	editType = V02TYPE ;
	editDialogSet( 0, 1 ) ;
	editDialogSet( 1, 1 ) ;
	editDialogSet( 2, 1 ) ;

	MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

ed01:	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	if( editFlag == TRUE )
	{
		MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editWaitDialogId, MM_SHOW, 0 ) ;

		ret = v02_merge( v02EditPath[2],
						v02EditPath[0], v02EditNum[0][1], v02EditNum[0][2],
				   		v02EditPath[1], v02EditNum[1][1], v02EditNum[1][2] );

		MMI_SendMessage( editWaitDialogId, MM_ERASE, 0 ) ;
		MMI_SendMessage( editWaitDialogId, MM_DETACH, 0 ) ;
		MMI_SendMessage( editDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( editDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MMI_FlushEvnt() ;	/* イベントをフラッシュ */
		/* マウスが押されていれば次のイベントを無視 */
		if( mouseSwCheck() )TL_setInvalidMosFlag() ;

		if( ret > 1 )	/* 1以下のerrorは見逃す */
			errorCheck( ret ) ;
		goto ed01 ;
	}

	MMI_SendMessage( editDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( editDialogId, MM_DETACH, 0 ) ;

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}

/*		ビデオチェック	*/
/*	initDataIVDDSK:editMItemId[3]:MJ_MITEML40の呼び出し関数	*/
int	editFunc3(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int ret ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( menubarId, MS_DSPONLYL40 ) ;
	MTL_setAtrObj( SDKmItemId[2], MS_INACTIVEL40 ) ;

	r_waku_del() ; /* 枠を閉める */

	MG_mosDisp( 0 ) ;
	ret = video_snd_check() ;

	displayClearAndReset() ;
	setPalette( guiEgbPtr ) ;
	diplayRecov() ;
	MG_mosDisp( 1 ) ;

	MMI_FlushEvnt() ;	/* イベントをフラッシュ */
	/* マウスが押されていれば次のイベントを無視 */
	if( mouseSwCheck() )TL_setInvalidMosFlag() ;

	if( ret )
		errorCheck( ret ) ;

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( menubarId, (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( SDKmItemId[2], (~MS_INACTIVEL40) ) ;

	return NOERR ;
}


/*

		ここからは 汎用サブルーチン

*/

/* 画面を消して､画面モードを標準状態(& writePage=0)にして､表示する */

int displayClearAndReset()
{
	EGB_displayPage(guiEgbPtr,0,0);
	EGB_resolution(guiEgbPtr,0,3);		/* モード3,10合成 */
	EGB_resolution(guiEgbPtr,1,10);
	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */
	EGB_paintMode(guiEgbPtr,0x22);
	EGB_writeMode(guiEgbPtr,0);
	EGB_displayPage(guiEgbPtr,0,3);

	return 0;
}

/* 画面復帰 */

int diplayRecov()
{
	WINCTRL *pctrl ;			/* 画面復帰 */
	WINCLIP *pwclp ;

	EGB_displayPage(guiEgbPtr,0,0);

	MMI_GetControl( &pctrl ) ;
	pwclp = WIN_getClipMemory( &pctrl->bound, NULL ) ;
	MMI_SendMessage( MMI_GetBaseObj(), MM_UPDATE, 1, pwclp ) ;
	WIN_freeClipMemory( pwclp ) ;
	setPalette( guiEgbPtr ) ;

	EGB_displayPage(guiEgbPtr,0,3);

	return NOERR ;
}

/* name , kakuchou[拡張子(.***)] → fullname = name + kakuchou */

file_kakuchousi_set( fullname, name, kakuchou )
char fullname[], name[], 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;
}

/* マウス */

mouse(mmd)
int mmd;
{
	static int s, x, y;

	do{
		MOS_rdpos(&s,&x,&y);
	}while( s == 0 );
	if( mmd == 0 ){
		do{
			MOS_rdpos(&s,&x,&y);
		}while( s );
	}
	return 0;
}

/* マウスボタンチェック */

mouseSwCheck()
{
	int sw ;

	int x, y ;

	MOS_rdpos( &sw, &x, &y ) ;
	return sw ;
}

/* 圧縮中に途中経過(圧縮済フレーム数)を表示するルーチン */

v_cmp_frame_dsp( frame )
int frame ;
{
	MMI_SendMessage( pacWaitNumId[1], MM_SETNUMBOX, 5,
				frame+1, 0, frame+1, 1, 0 ) ;	/* 原画フレーム数設定 */
		/*	var, min, max, delta, ptColumn */

	MMI_SendMessage( pacWaitNumId[1], MM_SHOW, 0 ) ;	/* 見せる */

	return 0 ;
}

/* 制限つき枠くり抜き */

v_waku_clear( xd, yd, zoom )
int xd, yd, 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 0 ;
}

r_waku_del()
{
	MMI_SendMessage( wakuDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( wakuDialogId, MM_DETACH, 0 ) ;
	return NOERR ;
}

/*	ファイル選択	*/
int	fileSelecter( 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 ;
	int    alertobj ;      /*   現在のALERTOBJを退避する変数　　  */

	ret2 = NOERR ;

	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 ;
}

/*	パレット設定 (パレットが設定されてなければgreen系に固定)	*/
int	setPalette( char *ework )
{
	char	para[16*8+4] ;
	int		ptr, 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, 15, 0, 15 ) ;
		set1Pal( 14, 0, 15, 13 ) ;
		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 ;
}

/* v02 table set */
int initV02Table( ac, av, k, name )
char ac,*av[];
char *name ;
int k ;					/* 色の濃さ */
{
	FILE *fp ;
	char head[256] ;
	char path[100] ;
	int i, j, ret ;
	char s ;

	if( ac >= 2 )
	{
	    for( j=1 ; j<ac ; j++ )
	    {
			if( av[j][0] == '-' )
			{
				s = av[j][1] ;
				if( s >= 0x61 && s <= 0x7a )s = s & 0xdf;

				if( s == 'C' )
				k = atoi( av[j] + 2 ) ;
			}
		}
	}
	if( k < 0 ) k = 0 ;
	if( k > 12 ) k = 12 ;

	/* v02tableの用意 */

	ret = 0 ;
//	if( ac < 1 )
//	{
//		v02TableFlag = 0;			/* tableのpathの取得ができない */
//		return NOERR ;
//	}
	if( (v02Table = (char *)TL_malloc( 32768 + 512 + 65536 + 4096 )) == NULL )
	{
		v02TableFlag = 0;			/* out of memory */
		return NOERR ;
	}
	else
		v02TableFlag = -1;

	file_kakuchousi_set( path, name, ".TAB" ) ;

	if( ( fp = fopen( path, "rb" ) ) == NULL )
		ret = 1 ;
	else
	{
		if( fread( head, 256, 1, fp ) < 1 )
			ret = 1 ;
		else
		{
			if( DWORD( head ) != 0x42544456 )	/* 0x42544456 = VDTB */
				ret = 1 ;
			else
			{
				if( fread( v02Table, 32768 + 512 + 65536 + 4096, 1, fp ) < 1 )
					ret = 1 ;
			}
		}
		fclose(fp) ;
	}
	if( ret )
	{
		EGB_displayPage(guiEgbPtr,0,0);
		EGB_resolution(guiEgbPtr,1,5);			/* page1 mode5 */
		EGB_writePage(guiEgbPtr,1);
		EGB_displayStart(guiEgbPtr,1,0,0);
		EGB_displayStart(guiEgbPtr,2,2,2);
		EGB_displayStart(guiEgbPtr,3,256,192);
		EGB_displayStart(guiEgbPtr,0,32,24);
		EGB_writePage(guiEgbPtr,0);
		setPalette( guiEgbPtr ) ;

		MMI_SendMessage( tableSetDialogId, MM_ATTACH,
											 1, MMI_GetBaseObj() ) ;
		MMI_SendMessage( tableSetDialogId, MM_SHOW, 0 ) ;	/* 見せる */

		MG_mosDisp( 0 ) ;

		EGB_displayPage(guiEgbPtr,1,3);
		direct_v02_table( k, v02Table ) ;	/* 色の濃さはk */
		if( ( fp = fopen( path, "wb" ) ) != NULL )
		{
			for( i=0 ; i<256 ; i += 4 )
				DWORD( head + i ) = 0 ;
			DWORD( head ) = 0x42544456 ;
			DWORD( head+4 ) = k ;
			fwrite( head, 256, 1, fp ) ;
			fwrite( v02Table, 32768 + 512 + 65536 + 4096, 1, fp ) ;
			fclose(fp) ;
		}
		displayClearAndReset() ;
		setPalette( guiEgbPtr ) ;

		MMI_SendMessage( tableSetDialogId, MM_ERASE, 0 ) ;	/* 消す */
		MMI_SendMessage( tableSetDialogId, MM_DETACH, 0 ) ;

		MG_mosDisp( 1 ) ;
	}

	return NOERR ;
}

/*	２画面合成のためのマウス表示関数	*/
int	mouseDsp( int num )
{
	SetMouse16( num, 0xf, 0x8 ) ;	/* マウスカーソルが透けないように */
	return	NOERR ;
}

/* 起こされた時のセット */

int wakeSet()
{
	r_waku_del() ;

/*
	WINCTRL *pctrl ;
	WINCLIP *pwclp ;

	MMI_GetControl( &pctrl ) ;
	pwclp = WIN_getClipMemory( &pctrl->bound, NULL ) ;
	MMI_SendMessage( MMI_GetBaseObj(), MM_UPDATE, 1, pwclp ) ;
	WIN_freeClipMemory( pwclp ) ;
	setPalette( guiEgbPtr ) ;
*/

//	EGB_writePage(guiEgbPtr,1);
//	EGB_color(guiEgbPtr,1,0x8000);
//	EGB_clearScreen(guiEgbPtr);
//	EGB_writePage(guiEgbPtr,0);

	return NOERR ;
}

/* スリープの前のセット */

int sleepSet()
{
//	r_waku_del() ;
	return NOERR ;
}

/*	終了処理	*/
int	quitFunc()
{
	if( v02TableFlag )
		TL_free( v02Table ) ;

	EGB_displayPage( guiEgbPtr, 0, 0 );

	EGB_writePage( guiEgbPtr, 1 );
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen( guiEgbPtr ) ;		/*	ページをきれいにしよう	*/

	EGB_writePage( guiEgbPtr, 0 );
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen( guiEgbPtr ) ;		/*	ページをきれいにしよう	*/

	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	終了可能なら終了する処理	*/
int	quitFunc2()
{
	/* menubarId が MS_DSPONLYL40 なら何かの作業中で終了不可 */

	if( (MTL_checkAtrObj( menubarId, MS_DSPONLYL40 ) == 0) )
	{
		if( v02TableFlag )
			TL_free( v02Table ) ;

		EGB_writePage( guiEgbPtr, 1 );
		EGB_color( guiEgbPtr, 1, 0 ) ;
		EGB_clearScreen( guiEgbPtr ) ;		/*	ページをきれいにしよう	*/

		EGB_writePage( guiEgbPtr, 0 );
		EGB_color( guiEgbPtr, 1, 0 ) ;
		EGB_clearScreen( guiEgbPtr ) ;		/*	ページをきれいにしよう	*/

		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(number)
int number;
{
	MG_mosDisp( 1 ) ;

	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 == 1000 )
		MMI_SendMessage( errormessage[0], MM_SETMSG, 1,
		 "データの形式がそろってません｡" ) ;

	MMI_SendMessage( errorId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
	MMI_SendMessage( errorId, MM_SHOW, 0 ) ;

	MMI_ExecSystem() ;

	MMI_SendMessage( errorId, MM_ERASE, 0 ) ;
	MMI_SendMessage( errorId, MM_DETACH, 0 ) ;

	return NOERR;
}

/*	エラー表示確認	*/
int	errorOKFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

