#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 <tifflib.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include "ugoku.h"
#include "mrcdef.h"

extern	int		mouseSwCheck() ;
extern	int		errorCheck( int ) ;

extern	char	*guiEgbPtr ;	/*	EGB のワークアドレス	*/
extern	char	*rbuf ;			/*	自家製のワークアドレス	*/
extern	char	*bbuf ;			/*	自家製のワークアドレス	*/

extern int	baseDialogId ;

int	edtDialogId[32] = -1 ;
int	edtNumId[14] = -1 ;
int	edtPNumId[15] = -1 ;
int	edtMesId[52] = -1 ;
int	edtScroId[15] = -1 ;
int	edtSFDialogId[10] = -1 ;
int	edtSFMesId[10] = -1 ;
int	edtBtnId[20] = -1 ;
int	edtWNumId[1] = -1 ;
int	edtRecNumId[4] = -1 ;
int	edtRecBtnId = -1 ;
int	edtOkBtnId = -1 ;
int	edtCanBtnId = -1 ;
int	edtTIconId[2] = -1 ;
int	edtSndDialogId = -1 ;
int	edtSndListId = -1 ;
int	edtSndScrId = -1 ;
int	edtSndOkBtnId = -1 ;
int	edtSndCanBtnId = -1 ;
int	edtSndMesId[3] = -1 ;

static int sndNum[14] ;
static int sndPan[15] ;
static int rect[4] ;
static int mainWait ;
static int timingMode ;
static char fileName[10][16] ;
static int setFlag ;
static char movFileName[100] ;
static int ch71Flag = 1 ;

movEdit( namemov )
char *namemov ;
{
	extern int editFrame( char *, char [][16], int ) ;

	FILE *fp;
	char head[256];
	int error ;
	int i, j, ret, temp ;
	int movframe, movx0, movy0, movx1, movy1, movwait ;
	int var, min, max, delta, ptColumn ;
	int prt, len, page ;

sv01:
	for( i=0 ; i<80 ; i++ )
	{
		movFileName[i] = namemov[i] ;
		if( namemov[i] == '\0' )break ;
	}

	ret = mov_head_read_and_dsp( namemov, &movframe, &movx0, &movy0,
	&movx1, &movy1, &movwait, 1, TL_malloc, TL_free );	/* 下の画面に表示 */
	if( ret )return ret ;

	if( ( fp = fopen( namemov, "rb" ) ) == NULL )return 1;	/* read head */
	temp = fread( head, 256, 1, fp );
	fclose( fp );
	if( temp < 1 )return 1;
	if( DWORD(head+0) != 0x32564f4d )return 58;
	if( DWORD(head+4) != 16 )return 58;
	if( DWORD(head+16) != 320 )return 58;
	if( DWORD(head+20) != 240 )return 58;
		/* read */
	for( i=0 ; i<6 ; i++ )sndNum[i] = BYTE( head + 48 + i );
	for( i=0 ; i<8 ; i++ )sndNum[ 6 + i ] = BYTE( head + 64 + i );
	for( i=0 ; i<14 ; i++ )
	{
		temp = BYTE( head + 136 + i );
		if( temp >= 128 )temp = temp - 256;
		if( temp < -64 )temp = -64;
		if( temp > 63 )temp = 63;
		sndPan[i] = temp;
	}
	sndPan[14] = sndPan[13] ;
	mainWait = DWORD( head + 28 );	/* ウエイト */
	timingMode = BYTE( head + 150 ) & 1 ;	/* timing mode */
	rect[0] = WORD( head + 32 ); rect[1] = WORD( head + 34 );	/* 座標 */
	rect[2] = WORD( head + 36 ); rect[3] = WORD( head + 38 );
	if( rect[0]==0 && rect[1]==0 && rect[2]==0 && rect[3]==0 )
	{
		rect[2] = 319;
		rect[3] = 239;
	}

	for( i=0 ; i<10 ; i++ )
	{
		for( j=0 ; j<16 ; j++ )
			fileName[i][j] = '\0' ;
	}
	for( i=0 ; i<8 ; i++ )
	{
		for( j=0 ; j<8 ; j++ )
		{
			fileName[i][j] = head[ 72 + i*8 + j ] ;
		}
	}
	for( j=0 ; j<8 ; j++ )
	{
		fileName[8][j] = head[ 40 + j ] ;
	}
	for( j=0 ; j<8 ; j++ )
	{
		fileName[9][j] = head[ 56 + j ] ;
	}
/*		元のデータを尊重するため,クリアーはやめる
	for( i=0 ; i<10 ; i++ )
	{
		if( fileName[i][0] == '\0' )
		{
			for( j=0 ; j<8 ; j++ )
				fileName[i][j] = '\0' ;
		}
	}
*/
		/* 表示パネル アタッチ */
	MMI_SendMessage( edtDialogId[0], MM_ATTACH, 1, baseDialogId ) ;
		/* 表示パネルへデータを転送 */
	for( i=0 ; i<14 ; i++ )
	{
		MMI_SendMessage( edtNumId[i], MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		MMI_SendMessage( edtNumId[i], MM_SETNUMBOX, 5,
						sndNum[i], min, max, delta, ptColumn ) ;
	}
	for( i=0 ; i<15 ; i++ )
	{
		MMI_SendMessage( edtPNumId[i], MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		MMI_SendMessage( edtPNumId[i], MM_SETNUMBOX, 5,
						sndPan[i], min, max, delta, ptColumn ) ;

		MMI_SendMessage( edtScroId[i], MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;
		MMI_SendMessage( edtScroId[i], MM_SETSCROLL, 5,
						sndPan[i], min, max,len, page ) ;
	}
	MMI_SendMessage( edtWNumId[0], MM_GETNUMBOX, 5,
					&var, &min, &max, &delta, &ptColumn ) ;
	MMI_SendMessage( edtWNumId[0], MM_SETNUMBOX, 5,
					mainWait, min, max, delta, ptColumn ) ;
	for( i=0 ; i<4 ; i++ )
	{
		MMI_SendMessage( edtRecNumId[i], MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		MMI_SendMessage( edtRecNumId[i], MM_SETNUMBOX, 5,
						rect[i], min, max, delta, ptColumn ) ;
	}
	for( i=0 ; i<2 ; i++ )	/* ボタンクリアー */
		MTL_resetFlagObj( edtTIconId[i], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
	MTL_setFlagObj( edtTIconId[timingMode+0], (MS_UNSELECT | MS_TOGGLE) ) ;
	for( i=0 ; i<10 ; i++ )
		MMI_SendMessage( edtSFMesId[i], MM_SETMSG, 1, fileName[i] );

	MMI_SendMessage( edtDialogId[21], MM_DETACH, 0 ) ;	/* ch71 detach */
	MMI_SendMessage( edtDialogId[22], MM_DETACH, 0 ) ;

	MMI_SendMessage( edtDialogId[0], MM_SHOW, 0 ) ;		/* 見せる */
														/* ch71 attach */

	ch71Flag = -1 ;
	ch71ckeck() ;			/* ch71Flag = -1のときはinit */

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	MMI_SendMessage( edtDialogId[0], MM_ERASE, 0 ) ;
	MMI_SendMessage( edtDialogId[0], MM_DETACH, 0 ) ;

	error = 0 ;
	if( setFlag == TRUE )
	{
		for( i=0 ; i<6 ; i++ )BYTE( head + 48 + i ) = sndNum[i];
		for( i=0 ; i<8 ; i++ )BYTE( head + 64 + i ) = sndNum[ 6 + i ];
		for( i=0 ; i<14 ; i++ )
		{
			temp = sndPan[i];
			if( temp < -64 )temp = -64;
			if( temp > 63 )temp = 63;
			BYTE( head + 136 + i ) = temp;
		}
		DWORD( head + 28 ) = mainWait;	/* ウエイト */
		BYTE( head + 150 ) = ( (BYTE( head + 150 ) & 0xfe) | timingMode ) ;
										/* timing mode */
		if( rect[0] > rect[2] )
		{		/* 座標 */
			temp = rect[2]; rect[2] = rect[0]; rect[0] = temp;
		}
		if( rect[1] > rect[3] )
		{
			temp = rect[3]; rect[3] = rect[1]; rect[1] = temp;
		}
		WORD( head + 32 ) = rect[0]; WORD( head + 34 ) = rect[1];
		WORD( head + 36 ) = rect[2]; WORD( head + 38 ) = rect[3];

		for( i=0 ; i<8 ; i++ )
		{
			for( j=0 ; j<8 ; j++ )
			{
				head[ 72 + i*8 + j ] = fileName[i][j] ;
			}
		}
		for( j=0 ; j<8 ; j++ )
		{
			head[ 40 + j ] = fileName[8][j] ;
		}
		for( j=0 ; j<8 ; j++ )
		{
			head[ 56 + j ] = fileName[9][j] ;
		}

		for( i=0 ; i<6 ; i++ ){ /* write protect の場合6回必要 */ 
			if(
			    ( fp = fopen( namemov, "r+b" ) ) != NULL
			)goto sv06;
		}
		error = 2 ;
		goto sv07 ;
	sv06:
		fseek( fp, 0, SEEK_SET );
		temp = fwrite( head, 256, 1, fp );
		fclose( fp );
		if( temp < 1 )error = 2;
	sv07:
		if( error == NOERR )
		{
			extern int playCheck() ;
			int frame,x0,y0,x1,y1,wsize;

			error
			 = mov_memory_play_init( namemov, playCheck,&frame,&x0,&y0,&x1,&y1,
			 &wsize );

			if( error == NOERR )
				error = editFrame( namemov, fileName, ch71Flag ) ;
		}
		if( error == NOERR )goto sv01 ;
	}
	else
	{
		return NOERR ;
	}

	if( error )
	{
		errorCheck( error ) ;
	}

	return NOERR ;
}

/* ch71(edtDialogId[21〜22])の有効無効をチェックする */
ch71ckeck()
{
	int i, n ;

	n = 0 ;
	for( i=0 ; i<8 ; i++ )
	{
		if( (DWORD( fileName[i] )!=0) || (DWORD( fileName[i]+4 )!=0) )
		{
				n = -1 ;
				break ;
		}
	}
	if( n )
	{
		if( ch71Flag != 0 )
		{
			MMI_SendMessage( edtDialogId[21], MM_ERASE, 0 ) ;
			MMI_SendMessage( edtDialogId[21], MM_DETACH, 0 ) ;

			MMI_SendMessage( edtDialogId[22], MM_ATTACH, 1, edtDialogId[3] ) ;
			MMI_SendMessage( edtDialogId[22], MM_SHOW, 0 ) ;
		}
		ch71Flag = 0 ;
	}
	else
	{
		if( ch71Flag != 1 )
		{
			MMI_SendMessage( edtDialogId[21], MM_ATTACH, 1, edtDialogId[2] ) ;
			MMI_SendMessage( edtDialogId[21], MM_SHOW, 0 ) ;

			MMI_SendMessage( edtDialogId[22], MM_ERASE, 0 ) ;
			MMI_SendMessage( edtDialogId[22], MM_DETACH, 0 ) ;
		}
		ch71Flag = 1 ;
	}
	return NOERR ;
}

/*	initDataIRCEDT:edtNumId[0〜13]:MJ_NUMBOXL40の呼び出し関数	*/
int	edtNumFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	int i ;

	for( i=0 ; i<14 ; i++ )
		if( kobj == edtNumId[i] )break ;

	if( i < 14 )
	{
		MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		sndNum[i] = var ;
	}
	return NOERR ;
}

/*	initDataIRCEDT:edtPNumId[0〜14]:MJ_NUMBOXL40の呼び出し関数	*/
int	edtPanNumFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	for( i=0 ; i<15 ; i++ )
		if( kobj == edtPNumId[i] )break ;

	if( i < 15 )
	{
		int var, min0, max0, delta, ptColumn ;
		int prt, min1, max1, len, page ;

		MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
						&var, &min0, &max0, &delta, &ptColumn ) ;
		sndPan[i] = var ;
		MMI_SendMessage( edtScroId[i], MM_GETSCROLL, 5,
						&prt, &min1, &max1, &len, &page ) ;
		MMI_SendMessage( edtScroId[i], MM_SETSCROLL, 5,
						var, min1, max1,len, page ) ;
		MMI_SendMessage( edtScroId[i], MM_SHOW, 0 ) ;

			/* 13と14は連動 */
		if( i == 14 )
		{
			MMI_SendMessage( edtPNumId[13], MM_SETNUMBOX, 5,
							var, min0, max0, delta, ptColumn ) ;
			MMI_SendMessage( edtScroId[13], MM_SETSCROLL, 5,
							var, min1, max1,len, page ) ;
			sndPan[13] = sndPan[14] ;
		}
		if( i == 13 )
		{
			MMI_SendMessage( edtPNumId[14], MM_SETNUMBOX, 5,
							var, min0, max0, delta, ptColumn ) ;
			MMI_SendMessage( edtScroId[14], MM_SETSCROLL, 5,
							var, min1, max1,len, page ) ;
			sndPan[14] = sndPan[13] ;
		}
	}
	return NOERR ;
}

/*	initDataIRCEDT:edtScroId[0〜14]:MJ_SCRLL40の呼び出し関数	*/
int	edtPanScrFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i ;

	for( i=0 ; i<15 ; i++ )
		if( kobj == edtScroId[i] )break ;

	if( i < 15 )
	{
		int prt, min1, max1, len, page ;
		int var, min0, max0, delta, ptColumn ;

		MMI_SendMessage( kobj, MM_GETSCROLL, 5,
						&prt, &min1, &max1, &len, &page ) ;
		sndPan[i] = prt ;
		MMI_SendMessage( edtPNumId[i], MM_GETNUMBOX, 5,
						&var, &min0, &max0, &delta, &ptColumn ) ;
		MMI_SendMessage( edtPNumId[i], MM_SETNUMBOX, 5,
						prt, min0, max0, delta, ptColumn ) ;
		MMI_SendMessage( edtPNumId[i], MM_SHOW, 0 ) ;

			/* 13と14は連動 */
		if( i == 14 )
		{
			MMI_SendMessage( edtPNumId[13], MM_SETNUMBOX, 5,
							prt, min0, max0, delta, ptColumn ) ;
			MMI_SendMessage( edtScroId[13], MM_SETSCROLL, 5,
							prt, min1, max1,len, page ) ;
			sndPan[13] = sndPan[14] ;
		}
		if( i == 13 )
		{
			MMI_SendMessage( edtPNumId[14], MM_SETNUMBOX, 5,
							prt, min0, max0, delta, ptColumn ) ;
			MMI_SendMessage( edtScroId[14], MM_SETSCROLL, 5,
							prt, min1, max1,len, page ) ;
			sndPan[14] = sndPan[13] ;
		}
	}
	return NOERR ;
}

/*	initDataIRCEDT:edtWNumId[0]:MJ_NUMBOXL40の呼び出し関数	*/
int	edtWaitFunc(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 ) ;
	mainWait = var ;
	return NOERR ;
}

/*	initDataIRCEDT:edtRecNumId[0]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIRCEDT:edtRecNumId[1]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIRCEDT:edtRecNumId[2]:MJ_NUMBOXL40の呼び出し関数	*/
/*	initDataIRCEDT:edtRecNumId[3]:MJ_NUMBOXL40の呼び出し関数	*/
int	edtRecFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int	var, min, max, delta, ptColumn ;
	int i ;

	for( i=0 ; i<4 ; i++ )
		if( kobj == edtRecNumId[i] )break ;

	if( i < 4 )
	{
		MMI_SendMessage( kobj, MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		rect[i] = var ;
	}
	return NOERR ;
}

static int sw = 0,cx = 0,cy = 0;	/* MOUSE data */
static int mpara[3];		/* mouse para */

/*	initDataIRCEDT:edtRecBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	edtRecFunc2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int r_mov_graph_init( int, int,int,int,int ) ;

	char	*ptr ;
	int i ;

	MG_mosDisp( 0 ) ;
	if( ptr == NULL )
		return NOERR ;

	r_mov_graph_init( 2, 0,0,319,239 ) ;
	EGB_displayPage(guiEgbPtr,0,0);
	display_scale();
	EGB_writePage(guiEgbPtr,1);		/* mode10に書き込み */
	MOS_horizon(0,319);
	MOS_vertical(0,239);
	MOS_setpos( 160, 120 );
save1:
	mouse_c(mpara,0,0,10);
	if( sw > 1 )goto save2;
	rect[0] = cx; rect[1] = cy;
	mouse_c(mpara,0,0,4);
	if( sw > 1 )goto save1;
	if( cx == rect[0] || cy == rect[1] )goto save2;
	rect[2] = cx; rect[3] = cy;
save2:
	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */
	EGB_paintMode(guiEgbPtr,0x22);
	EGB_writeMode(guiEgbPtr,0);
	MOS_horizon(0,639);
	MOS_vertical(0,479);


	EGB_displayPage(guiEgbPtr,1,2);

	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 ) ;

	MG_mosDisp( 1 ) ;
	EGB_displayPage(guiEgbPtr,0,1);

	MMI_FlushEvnt() ;
	MTL_resetAtrObj( edtDialogId[0], (~MS_DSPONLYL40) ) ;

	for( i=0 ; i<4 ; i++ )
	{
		int	var, min, max, delta, ptColumn ;

		MMI_SendMessage( edtRecNumId[i], MM_GETNUMBOX, 5,
						&var, &min, &max, &delta, &ptColumn ) ;
		MMI_SendMessage( edtRecNumId[i], MM_SETNUMBOX, 5,
						rect[i], min, max, delta, ptColumn ) ;
		MMI_SendMessage( edtRecNumId[i], MM_SHOW, 0 ) ;
	}

	return NOERR ;
}

display_scale()
{
	int i;
	char para[10];

	EGB_writePage(guiEgbPtr,0);		/* mode3に書き込み */
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen(guiEgbPtr);
	EGB_writeMode(guiEgbPtr,0);
	EGB_color(guiEgbPtr,0,1);
	for( i=32 ; i<639 ; i = i+32 ){
		WORD(para + 0) = 2;
		WORD(para + 2) = i;
		WORD(para + 4) = 0;
		WORD(para + 6) = i;
		WORD(para + 8) = 479;
		EGB_unConnect(guiEgbPtr,para);
	}
	for( i=32 ; i<479 ; i = i+32 ){
		WORD(para + 0) = 2;
		WORD(para + 2) = 0;
		WORD(para + 4) = i;
		WORD(para + 6) = 639;
		WORD(para + 8) = i;
		EGB_unConnect(guiEgbPtr,para);
	}
	EGB_displayPage(guiEgbPtr,0,3);	/* mode10,3表示 */
	return 0;
}

/* 各種カーソル付きマウス mpara[0]-[2] = back data( sw, cx, cy ) */

mouse_c(mpara,xd,yd,mmd)		/* mouse */
int mpara[];
int xd,yd,mmd;
{
	int x,y,cx0,cy0,mdsp,dspmode,backmode,dummy;

	EGB_color(guiEgbPtr,0,0x7fff);
	EGB_paintMode(guiEgbPtr,0x2);
	EGB_writeMode(guiEgbPtr,4);
	cx0 = -1; cy0 = -1; mdsp = 1; dummy = -1;
	backmode = mmd & 1;
	dspmode = mmd >> 1;
	if( mdsp ){
		MOS_rdpos(&sw,&cx0,&cy0);
		if( dspmode )mousesub(dspmode,cx,cy,cx0,cy0,xd,yd);
	}	
mouse1:	MOS_rdpos(&sw,&x,&y);
	if( sw )goto mouse2;
	if( (cx0 == x) && (cy0  == y) )goto mouse1;
	if( mdsp == 0 ){
		cx0 = x;
		cy0 = y;
	}
	if( dspmode )mousesub(dspmode,cx,cy,cx0,cy0,xd,yd);
	mdsp = mdsp ^ 1;
	goto mouse1;
mouse2:	if( mdsp && dspmode )mousesub(dspmode,cx,cy,cx0,cy0,xd,yd);
	cx = x;
	cy = y;
	if( backmode )goto mouse3;
	while( dummy ){
		MOS_rdpos(&dummy,&x,&y);
	}
mouse3:
	mpara[0] = sw;
	mpara[1] = cx;
	mpara[2] = cy;
	EGB_writeMode(guiEgbPtr,0);
	return 0;
}

mousesub(dspmode,cx,cy,cx0,cy0,xd,yd)		/* 特殊カーソル表示 */
int dspmode,cx,cy,cx0,cy0;
{
	char para[64] ;

	MOS_disp(0);
	switch( dspmode ){
		case 0: break;
		case 1: WORD(para + 0) = 2;
			WORD(para + 2) = cx;
			WORD(para + 4) = cy;
			WORD(para + 6) = cx0;
			WORD(para + 8) = cy0;
			EGB_unConnect(guiEgbPtr,para);
			break;
		case 2: WORD(para + 0) = cx;
			WORD(para + 2) = cy;
			WORD(para + 4) = cx0;
			WORD(para + 6) = cy0;
			EGB_rectangle(guiEgbPtr,para);
			break;
		case 3: WORD(para + 0) = cx0 - ( xd >> 1 );
			WORD(para + 2) = cy0 - ( yd >> 1 );
			WORD(para + 4) = cx0 - ( xd >> 1 ) + xd;
			WORD(para + 6) = cy0 - ( yd >> 1 ) + yd;
			EGB_rectangle(guiEgbPtr,para);
			break;
		case 4: WORD(para + 0) = cx0;
			WORD(para + 2) = cy0;
			WORD(para + 4) = cx0 + xd;
			WORD(para + 6) = cy0 + yd;
			EGB_rectangle(guiEgbPtr,para);
			break;
		case 5: WORD(para + 0) = 2;
			WORD(para + 2) = cx0-5;
			WORD(para + 4) = cy0;
			WORD(para + 6) = cx0+5;
			WORD(para + 8) = cy0;
			EGB_unConnect(guiEgbPtr,para);
			WORD(para + 2) = cx0;
			WORD(para + 4) = cy0-5;
			WORD(para + 6) = cx0;
			WORD(para + 8) = cy0+5;
			EGB_unConnect(guiEgbPtr,para);
			break;
		case 6: WORD(para + 0) = 2*cx-cx0;
			WORD(para + 2) = 2*cy-cy0;
			WORD(para + 4) = cx0;
			WORD(para + 6) = cy0;
			EGB_rectangle(guiEgbPtr,para);
			break;
		}
	return 0;
}

/*	initDataIRCEDT:edtOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIRCEDT:edtCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	edtOkFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == edtOkBtnId )
		setFlag = TRUE ;
	else
		setFlag = FALSE ;
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}

/*	initDataIRCEDT:edtTIconId[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIRCEDT:edtTIconId[1]:MJ_TICONL40の呼び出し関数	*/
int	edtTIconFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == edtTIconId[0] )
	{
		MTL_setFlagObj( edtTIconId[0], MS_UNSELECT ) ;
		MTL_resetFlagObj( edtTIconId[1], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( edtTIconId[1], MM_SHOW, 0 ) ;
		timingMode = 0 ;			/*	timing mode 0	*/
	}
	else
	{
		MTL_resetFlagObj( edtTIconId[0], (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MTL_setFlagObj( edtTIconId[1], MS_UNSELECT ) ;
		MMI_SendMessage( edtTIconId[0], MM_SHOW, 0 ) ;
		timingMode = 1 ;			/*	timing mode 1	*/
	}
	return NOERR ;
}

static char name[ F_MAX+8 ][20] ;
static int total ;
static int setSndFlag ;

/*	initDataIRCEDT:edtBtnId[0〜9]:MJ_DBUTTONL40の呼び出し関数	*/
int	edtFileSet(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int look_files_all( char name[][20], char *path );
	extern int look_file_seiri( int total, char name[][20] );

	int i, j, n, m ;
	int num ;
	char path[100] ;

	/* メニューとボタンを使えないようにする */
	MTL_setAtrObj( edtDialogId[0], MS_DSPONLYL40 ) ;

	MMI_SendMessage( edtSndDialogId, MM_ATTACH, 1, baseDialogId ) ;

	for( num=0 ; num<10 ; num++ )
	{
		if( edtBtnId[num] == kobj )break ;
	}
	n = 0 ;
	for( i=0 ; i<80 ; i++ )
	{
		path[i] = movFileName[i] ;
		if( path[i] == '\\' )n++ ;
		if( path[i] == '\0' )break ;
	}
	if( n > 0 )
	{
		for( i=i ; i>=0 ; i-- )
		{
			if( path[i] == '\\' )
			{
				i++ ;
				break ;
			}
		}
	}
	else
	{
		i = 0 ;
	}
	if( num < 8 )
	{
		path[i++] = '*';
		path[i++] = '.';
		path[i++] = 'S';
		path[i++] = 'N';
		path[i++] = 'D';
		path[i++] = '\0';
	}
	if( num == 8 )
	{
		path[i++] = '*';
		path[i++] = '.';
		path[i++] = 'F';
		path[i++] = 'M';
		path[i++] = 'B';
		path[i++] = '\0';
	}
	if( num == 9 )
	{
		path[i++] = '*';
		path[i++] = '.';
		path[i++] = 'P';
		path[i++] = 'M';
		path[i++] = 'B';
		path[i++] = '\0';
	}
	total = look_files_all( name, path );
	look_file_seiri( total, name );

	MTL_setAtrObj(edtSndListId, MS_SCROLLL40 ) ;
	MMI_SendMessage(edtSndListId, MM_SETMAXROWCOLUM, 2, 0, 0) ;
	MMI_SendMessage(edtSndListId, MM_SETMAXROWCOLUM, 2, total+32, 1) ;
	MMI_SendMessage(edtSndListId, MM_SETCOLUMLEN, 2, 0, 16) ;
	for (i = 0 ; i < total ; i++)
		MMI_SendMessage(edtSndListId, MM_SETROWCOLUM,
		 3, i, 0, name[i]) ;
	n = 12 ; m = total ;
	MMI_SendMessage( edtSndScrId, MM_SETSCROLL, 5,
		n-1, n-1, (m < n)?(n - 1):(m - 1), n, 4 ) ;

	MMI_SendMessage( edtSndDialogId, MM_SHOW, 0 ) ; /* 見せる */

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	if( setSndFlag == TRUE )
	{
		LISTITEML40 *plitem ;
		int maxRow, maxColum ;

		MMI_SendMessage( edtSndListId, MM_GETLMENUPTR, 3,
						&plitem, &maxRow, &maxColum ) ;

		for( i=0 ; i<8 ; i++ )
			fileName[num][i] = '\0' ;
		for( i=0 ; i<total ; i++ )
		{
			if( plitem[i].selectFlag )
			{
				for( j=0 ; j<8 ; j++ )
				{
					if( (name[i][j] == '.') || (name[i][j] =='\0') )
						break ;
					fileName[num][j] = name[i][j] ;
				}
				break ;
			}
		}
		MMI_SendMessage( edtSFMesId[num], MM_SETMSG, 1, fileName[num] );
		MMI_SendMessage( edtSFDialogId[num], MM_SHOW, 0 ) ; /* 見せる */
	}

	MMI_SendMessage( edtSndDialogId, MM_ERASE, 0 ) ;
	MMI_SendMessage( edtSndDialogId, MM_DETACH, 0 ) ;

	/* メニューとボタンを使えるように戻す */
	MTL_resetAtrObj( edtDialogId[0], (~MS_DSPONLYL40) ) ;
	ch71ckeck() ;

	return NOERR ;
}

/*	initDataIRCEDT:edtBtnId[10〜19]:MJ_DBUTTONL40の呼び出し関数	*/
int	edtFileDel(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int i, num ;

	for( num=0 ; num<10 ; num++ )
	{
		if( edtBtnId[num+10] == kobj )break ;
	}
	for( i=0 ; i<8 ; i++ )
		fileName[num][i] = '\0' ;
	MMI_SendMessage( edtSFMesId[num], MM_SETMSG, 1, fileName[num] );
	MMI_SendMessage( edtSFDialogId[num], MM_SHOW, 0 ) ; /* 見せる */
	ch71ckeck() ;

	return NOERR ;
}

/*	initDataIRCEDT:edtSndListId:MJ_LMENUL40の呼び出し関数	*/
int	edtListFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( trigger & MS_EVDRAGOUTL40 )
	{
		int prt, len, page ;
		int max, min ;
		int dy ;
		POINT *ppt ;
		HYPER hyp ;

		MMI_SendMessage( kobj, MM_GETHYPER, 1, &hyp ) ;
		ppt = ( POINT *)&( pev->info ) ;
		dy = 0 ;

		if( ppt->y < hyp.fr.lupy )
			dy = -1 ;
		if( ppt->y > hyp.fr.rdwy )
			dy = 1 ;

		if( dy )
		{
			MMI_SendMessage( edtSndScrId, MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;

			prt += dy ;

			if( (min <= prt) && (prt <= max) )
			{
				MMI_SendMessage( edtSndScrId, MM_SETSCROLL, 5,
						prt, min, max, len, page ) ;
				MMI_SendMessage( kobj, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
				MMI_SendMessage( edtSndScrId, MM_SHOW, 0 ) ;
				MMI_SendMessage( kobj, MM_SHOW, 0 ) ;
			}
		}
		return NOERR ;
	}
	return NOERR ;
}

/*	initDataIRCEDT:edtSndScrId:MJ_SCRLL40の呼び出し関数	*/
int	edtScrollFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int prt, max, min, len, page ;

	MMI_SendMessage( kobj, MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;
	MMI_SendMessage( edtSndListId, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
	MMI_SendMessage( edtSndListId, MM_SHOW, 0 ) ;
	return NOERR ;
}

/*	initDataIRCEDT:edtSndOkBtnId:MJ_DBUTTONL40の呼び出し関数	*/
/*	initDataIRCEDT:edtSndCanBtnId:MJ_DBUTTONL40の呼び出し関数	*/
int	edtSndOkFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == edtSndOkBtnId )
		setSndFlag = TRUE ;
	else
		setSndFlag = FALSE ;
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}


