#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 "video.h"
#include "movrlf.h"

int	tifDialogId[5] = -1 ;
int	tifListMenuId0 = -1 ;
int	tifScrollBarId0 = -1 ;
int	tifMesId[16] = -1 ;
int	tifTIconId[2] = -1 ;
int	tifDButtonId[9] = -1 ;
int	tifListMenuId1 = -1 ;
int	tifNumBoxId = -1 ;
int	tifScrollBarId1 = -1 ;
int	tifWaitDialogId = -1 ;

int xtif, ytif;			/* 読み込んだtifデータ */
int tifFirstFlg = 0 ;	/* 最初は0,2回目以降は-1(tifディレクトリ変更なら0) */

static char name[ F_MAX+8 ][20] ;
static int tifCutBuf[ F_MAX+8 ] ;
static int total ;
static int cutNum = 0 ;
static int tifTMode = 0 ;
static int tifPrt0 = 0 ;	/* 登録されたtifの頭位置 */
static int tifPrt = 0 ;		/* 登録されたtifの現在位置 */
static char tifFilePath[100] ;	/* パスを保存 */

tifFileEdit( char *path )
{
	int i, j, n, m ;
	char path2[100];
	int  alertobj ;

	alertobj = MMI_GetAlertObj() ;  /*  現在のALERTOBJを退避  　  */
	MMI_SetAlertObj( tifDialogId[0] ) ;
	MMI_SendMessage( tifDialogId[0], MM_ATTACH, 1, baseDialogId ) ;
	MTL_setFlagObj( tifTIconId[tifTMode+0], (MS_UNSELECT | MS_TOGGLE) ) ;

	if( tifFirstFlg == 0 )
	{
		for( i=0 ; i<80 ; i++ )
		{
			path2[i] = path[i] ;
			tifFilePath[i] = path[i] ;
			if( path[i] == '\0' )break ;
		}
		path2[i++] = '*';
		path2[i++] = '.';
		path2[i++] = 'T';
		path2[i++] = 'I';
		path2[i++] = 'F';
		path2[i++] = '\0';

		total = look_files_all( name, path2 );
		look_file_seiri( total, name );

		/*	リストメニューの設定 */
		MTL_resetAtrObj(tifListMenuId0, ((~MS_SCROLLL40) & (~MS_MSELECTL40)) );
		if( tifTMode )
			MTL_setAtrObj(tifListMenuId0, (MS_SCROLLL40 | MS_MSELECTL40) ) ;
		else
			MTL_setAtrObj(tifListMenuId0, MS_SCROLLL40 ) ;
		MMI_SendMessage(tifListMenuId0, MM_SETMAXROWCOLUM, 2, 0, 0) ;
		MMI_SendMessage(tifListMenuId0, MM_SETMAXROWCOLUM, 2, total+32, 1) ;
		MMI_SendMessage(tifListMenuId0, MM_SETCOLUMLEN, 2, 0, 16) ;

		MTL_setAtrObj(tifListMenuId1, (MS_SCROLLL40 | MS_MSELECTL40) ) ;
		MMI_SendMessage(tifListMenuId1, MM_SETMAXROWCOLUM, 2, 0, 0) ;
		MMI_SendMessage(tifListMenuId1, MM_SETMAXROWCOLUM, 2, F_MAX+32, 1) ;
		MMI_SendMessage(tifListMenuId1, MM_SETCOLUMLEN, 2, 0, 16) ;
		tifTotal = 0 ;
		tifPrt = tifTotal ;
		tifPrt0 = 0 ;
		tifFirstFlg = -1 ;

		for (i = 0 ; i < total ; i++)
			MMI_SendMessage(tifListMenuId0, MM_SETROWCOLUM,
			 3, i, 0, name[i]) ;
		n = 24 ; m = total + 23 ;
		MMI_SendMessage( tifScrollBarId0, MM_SETSCROLL, 5,
			n-1, n-1, (m < n)?(n - 1):(m - 1), n, 4 ) ;

		for (i = 0 ; i < tifTotal ; i++)
			MMI_SendMessage(tifListMenuId1, MM_SETROWCOLUM,
			 3, i, 0, tifName[i]) ;
		n = 24 ; m = tifTotal + 23 ;
		MMI_SendMessage( tifScrollBarId1, MM_SETSCROLL, 5,
			n-1, n-1, (m < n)?(n - 1):(m - 1), n, 4 ) ;
	}

	cutNum = 0 ;

	tifFileEditButton( 0 ) ;

	MMI_SendMessage( tifDialogId[0], MM_SHOW, 0 ) ; /* 見せる */

	MMI_ExecSystem() ;		/* Dialog表示へ･･･イベントループ */

	LISTITEML40 *plitem ;
	int maxRow, maxColum ;

	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
						&plitem, &maxRow, &maxColum ) ;
	for( i=0 ; i<tifTotal ; i++ )
	{
		for( j=0 ; j<13 ; j++ )
		{
			tifName[i][j] = (plitem[i].string)[j] ;
			if( tifName[i][j] == '\0' )break ;
		}
	}

	MMI_SendMessage( tifDialogId[0], MM_ERASE, 0 ) ;
	MMI_SendMessage( tifDialogId[0], MM_DETACH, 0 ) ;
	MMI_SetAlertObj( alertobj ) ;  /*  ALERTOBJを元に戻す    　   */

	return NOERR ;
}

/* ボタンの有効･無効設定ルーチン */
tifFileEditButton( mode )	/* mode!=0ならSHOWする */
int mode ;
{
	int i, atr[6], atr2 ;

	for( i=0 ; i<6 ; i++ )
	{
		atr[i] = MS_DSPONLYL40 ;
		atr[i] = MTL_checkAtrObj( tifDButtonId[i], atr[i] ) ;
	}

	MTL_resetAtrObj( tifDButtonId[0], (~MS_DSPONLYL40) ) ;	/* 1〜2bit clear */
	MTL_resetAtrObj( tifMesId[0], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifDButtonId[2], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifMesId[2], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifDButtonId[3], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifMesId[3], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifDButtonId[4], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifMesId[4], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifDButtonId[5], (~MS_DSPONLYL40) ) ;
	MTL_resetAtrObj( tifMesId[5], (~MS_DSPONLYL40) ) ;

		/* 一括転送 */
	if( tifTMode == 0 )
	{
		MTL_setAtrObj( tifDButtonId[0], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifMesId[0], MS_INACTIVEL40 ) ;
	}
	else
	{
		MTL_setAtrObj( tifMesId[0], MS_DSPONLYL40 ) ;
	}
		/* 表示,削除,取得 */
	if( tifTotal == tifPrt )
	{
		MTL_setAtrObj( tifDButtonId[2], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifMesId[2], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifDButtonId[3], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifMesId[3], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifDButtonId[4], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifMesId[4], MS_INACTIVEL40 ) ;
	}
	else
	{
		MTL_setAtrObj( tifMesId[2], MS_DSPONLYL40 ) ;
		MTL_setAtrObj( tifMesId[3], MS_DSPONLYL40 ) ;
		MTL_setAtrObj( tifMesId[4], MS_DSPONLYL40 ) ;
	}
		/* 挿入 */
	if( cutNum == 0 )
	{
		MTL_setAtrObj( tifDButtonId[5], MS_INACTIVEL40 ) ;
		MTL_setAtrObj( tifMesId[5], MS_INACTIVEL40 ) ;
	}
	else
	{
		MTL_setAtrObj( tifMesId[5], MS_DSPONLYL40 ) ;
	}

	if( mode )
	{
		for( i=0 ; i<6 ; i++ )
		{
			atr2 = MS_DSPONLYL40 ;
			atr2 = MTL_checkAtrObj( tifDButtonId[i], atr2 ) ;
			if( atr2 != atr[i] )
			{
				MMI_SendMessage( tifDButtonId[i], MM_SHOW, 0 ) ; /* 見せる */
				MMI_SendMessage( tifMesId[i], MM_SHOW, 0 ) ;
			}
		}
	}
	return NOERR ;
}

tifFileEditList1()
{
	int n, m ;
	int prt, max, min, len, page ;

	n = 24 ; m = tifTotal + 23 ;
	MMI_SendMessage( tifScrollBarId1, MM_SETSCROLL, 5,
		n-1, n-1, (m < n)?(n - 1):(m - 1), n, 4 ) ;

	MMI_SendMessage( tifNumBoxId, MM_SETNUMBOX, 5,
							tifTotal, 0, tifTotal, 1, 0 ) ;

	MMI_SendMessage( tifScrollBarId1, MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;
	MMI_SendMessage( tifScrollBarId1, MM_SETSCROLL, 5,
						tifPrt0+min, min, max, len, page ) ;
	MMI_SendMessage( tifListMenuId1, MM_SETDSPROWCOLUM, 2, tifPrt0, 0 ) ;

	MMI_SendMessage( tifNumBoxId, MM_SHOW, 0 ) ;
	MMI_SendMessage( tifScrollBarId1, MM_SHOW, 0 ) ;
	MMI_SendMessage( tifListMenuId1, MM_SHOW, 0 ) ;

	return NOERR ;
}

/*	initDataIRCTIF:tifListMenuId0:MJ_LMENUL40の呼び出し関数	*/
int	tifListFunc0(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( tifScrollBarId0, MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;

			prt += dy ;

			if( (min <= prt) && (prt <= max) )
			{
				MMI_SendMessage( tifScrollBarId0, MM_SETSCROLL, 5,
						prt, min, max, len, page ) ;
				MMI_SendMessage( kobj, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
				MMI_SendMessage( tifScrollBarId0, MM_SHOW, 0 ) ;
				MMI_SendMessage( kobj, MM_SHOW, 0 ) ;
			}
		}
		return NOERR ;
	}

	if( tifTMode == 0 )
	{
		LISTITEML40 *plitem0, *plitem1 ;
		int maxRow0, maxColum0 ;
		int maxRow1, maxColum1 ;
		int i, j ;

		if( tifTotal >= F_MAX )
			return NOERR ;

		MMI_SendMessage( kobj, MM_GETLMENUPTR, 3,
						&plitem0, &maxRow0, &maxColum0 ) ;
		MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
						&plitem1, &maxRow1, &maxColum1 ) ;

		for( i=0 ; i<total ; i++ )
		{
			if( plitem0[i].selectFlag )
			{
				if( tifTotal > tifPrt )
				{
					for( j=tifTotal ; j>tifPrt ; j-- )
					{
						if( plitem1[j-1].string != NULL )
						{
							MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
								 3, j, 0, plitem1[j-1].string ) ;
							plitem1[j].selectFlag = plitem1[j-1].selectFlag ;
						}
					}
					MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
						 3, tifPrt, 0, plitem0[i].string ) ;
					plitem1[tifPrt].selectFlag = 0 ;
				}
				else
				{
					MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
						 3, tifPrt, 0, plitem0[i].string ) ;
				}
				tifTotal++ ;
				tifPrt++ ;
				if( tifPrt > tifPrt0 + 23 )tifPrt0 = tifPrt - 23 ;
				if( tifPrt <= tifPrt0 )tifPrt0 = tifPrt - 1 ;
				tifFileEditList1() ;
				break ;
			}
		}
	}
	return NOERR ;
}

/*	initDataIRCTIF:tifScrollBarId0:MJ_SCRLL40の呼び出し関数	*/
int	tifScrollFunc0(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( tifListMenuId0, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
	MMI_SendMessage( tifListMenuId0, MM_SHOW, 0 ) ;

	return NOERR ;
}

/*	initDataIRCTIF:tifListMenuId[1]:MJ_LMENUL40の呼び出し関数	*/
int	tifListFunc1(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( tifScrollBarId1, MM_GETSCROLL, 5,
						&prt, &min, &max, &len, &page ) ;

			prt += dy ;

			if( (min <= prt) && (prt <= max) )
			{
				MMI_SendMessage( tifScrollBarId1, MM_SETSCROLL, 5,
						prt, min, max, len, page ) ;
				MMI_SendMessage( kobj, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
				MMI_SendMessage( tifScrollBarId1, MM_SHOW, 0 ) ;
				MMI_SendMessage( kobj, MM_SHOW, 0 ) ;
			}
		}
	}

	LISTITEML40 *plitem ;
	int maxRow, maxColum ;
	int i ;

	MMI_SendMessage( kobj, MM_GETLMENUPTR, 3,
					&plitem, &maxRow, &maxColum ) ;
	tifPrt = tifTotal ;
	for( i=0 ; i<tifTotal ; i++ )
	{
		if( plitem[i].selectFlag )
		{
			tifPrt = i ;
			break ;
		}
	}
		/* ボタンの有効･無効 */
	tifFileEditButton( 1 ) ;

	return NOERR ;
}

/*	initDataIRCTIF:tifScrollBarId1:MJ_SCRLL40の呼び出し関数	*/
int	tifScrollFunc1(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( tifListMenuId1, MM_SETDSPROWCOLUM, 2, prt-min, 0 ) ;
	MMI_SendMessage( tifListMenuId1, MM_SHOW, 0 ) ;
	if( prt-min >= 0 && prt-min < tifTotal )
		tifPrt0 = prt - min ;

	return NOERR ;
}

/*	initDataIRCTIF:tifTIconId[0]:MJ_TICONL40の呼び出し関数	*/
/*	initDataIRCTIF:tifTIconId[1]:MJ_TICONL40の呼び出し関数	*/
int	tifTIconFunc0(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	int flg ;

	flg = tifTMode ;
	if( kobj == tifTIconId[0] )
	{
		MTL_setFlagObj( tifTIconId[0], MS_UNSELECT ) ;
		MTL_resetFlagObj( tifTIconId[tifTMode+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( tifTIconId[tifTMode+0], MM_SHOW, 0 ) ;
		tifTMode = 0 ;
	}
	else
	if( kobj == tifTIconId[1] )
	{
		MTL_setFlagObj( tifTIconId[1], MS_UNSELECT ) ;
		MTL_resetFlagObj( tifTIconId[tifTMode+0],
								 (~(MS_UNSELECT | MS_TOGGLE)) ) ;
		MMI_SendMessage( tifTIconId[tifTMode+0], MM_SHOW, 0 ) ;
		tifTMode = 1 ;
	}

	if( flg == tifTMode )return NOERR ;

		/* ボタンの有効･無効 */
	tifFileEditButton( 1 ) ;

		/* リスト0の再表示 */
	LISTITEML40 *plitem ;
	int maxRow, maxColum, lastRow, lastColum ;
	int i ;
	int sflg ;

	MMI_SendMessage( tifListMenuId0, MM_GETLMENUPTR, 5,
					&plitem, &maxRow, &maxColum, &lastRow, &lastColum ) ;

	/* mode0の時はlastRowを反転しておかないと動作がおかしくなる */
	if( (lastRow >= 0) && (lastRow < total) )
	{
		sflg = plitem[ lastRow ].selectFlag ;
		for( i=0 ; i<total ; i++ )
			plitem[i].selectFlag = 0 ;
		plitem[ lastRow ].selectFlag = sflg ;
	}
	else
	{
		for( i=0 ; i<total ; i++ )
			plitem[i].selectFlag = 0 ;
	}

	MTL_resetAtrObj(tifListMenuId0, ((~MS_SCROLLL40) & (~MS_MSELECTL40)) ) ;
	MMI_SendMessage(tifListMenuId0, MM_ERASE, 0 ) ;
	MMI_SendMessage(tifListMenuId0, MM_SHOW, 0 ) ;
	if( tifTMode )
		MTL_setAtrObj(tifListMenuId0, (MS_SCROLLL40 | MS_MSELECTL40) ) ;
	else
		MTL_setAtrObj(tifListMenuId0, MS_SCROLLL40 ) ;
	MMI_SendMessage( tifListMenuId0, MM_SHOW, 0 ) ;

	return NOERR ;
}

/* bind trans */
/*	initDataIRCTIF:tifDButtonId[0]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc0(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem0, *plitem1 ;
	int maxRow0, maxColum0 ;
	int maxRow1, maxColum1 ;
	int i, j ;

	if( tifTotal >= F_MAX )
		return NOERR ;

	MMI_SendMessage( tifListMenuId0, MM_GETLMENUPTR, 3,
					&plitem0, &maxRow0, &maxColum0 ) ;
	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem1, &maxRow1, &maxColum1 ) ;

	for( i=0 ; i<total ; i++ )
	{
		if( plitem0[i].selectFlag )
		{

			if( tifTotal >= F_MAX )		/* frame over */
				break ;

			if( tifTotal > tifPrt )
			{
				for( j=tifTotal ; j>tifPrt ; j-- )
				{
					if( plitem1[j-1].string != NULL )
					{
						MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
							 3, j, 0, plitem1[j-1].string ) ;
						plitem1[j].selectFlag = plitem1[j-1].selectFlag ;
					}
				}
				MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
					 3, tifPrt, 0, plitem0[i].string ) ;
				plitem1[tifPrt].selectFlag = 0 ;
			}
			else
			{
				MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
					 3, tifPrt, 0, plitem0[i].string ) ;
			}
			tifTotal++ ;
			tifPrt++ ;
			if( tifPrt > tifPrt0 + 23 )tifPrt0 = tifPrt - 23 ;
			if( tifPrt <= tifPrt0 )tifPrt0 = tifPrt - 1 ;
		}
	}
	tifFileEditList1() ;
	return NOERR ;
}

/* all trans */
/*	initDataIRCTIF:tifDButtonId[1]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc1(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem0, *plitem1 ;
	int maxRow0, maxColum0 ;
	int maxRow1, maxColum1 ;
	int i, j ;

	if( tifTotal >= F_MAX )
		return NOERR ;

	MMI_SendMessage( tifListMenuId0, MM_GETLMENUPTR, 3,
					&plitem0, &maxRow0, &maxColum0 ) ;
	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem1, &maxRow1, &maxColum1 ) ;

	for( i=0 ; i<total ; i++ )
	{

		if( tifTotal >= F_MAX )		/* frame over */
			break ;

		if( tifTotal > tifPrt )
		{
			for( j=tifTotal ; j>tifPrt ; j-- )
			{
				if( plitem1[j-1].string != NULL )
				{
					MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
						 3, j, 0, plitem1[j-1].string ) ;
					plitem1[j].selectFlag = plitem1[j-1].selectFlag ;
				}
			}
			MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
				 3, tifPrt, 0, plitem0[i].string ) ;
			plitem1[tifPrt].selectFlag = 0 ;
		}
		else
		{
			MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
				 3, tifPrt, 0, plitem0[i].string ) ;
		}
		tifTotal++ ;
		tifPrt++ ;
		if( tifPrt > tifPrt0 + 23 )tifPrt0 = tifPrt - 23 ;
		if( tifPrt <= tifPrt0 )tifPrt0 = tifPrt - 1 ;
	}
	tifFileEditList1() ;
	return NOERR ;
}

/*	initDataIRCTIF:tifDButtonId[2]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc2(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem ;
	int maxRow, maxColum ;
	int i, j, k, temp ;
	char name[100] ;

	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem, &maxRow, &maxColum ) ;

	MMI_SendMessage( tifDialogId[0], MM_ERASE, 0 ) ;
	MMI_SendMessage( tifDialogId[0], MM_DETACH, 0 ) ;

	EGB_writePage(guiEgbPtr,1);
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen(guiEgbPtr);			/* clear */
	EGB_displayStart(guiEgbPtr,3,0,0);
	EGB_displayStart(guiEgbPtr,2,1,1);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,0,0,0);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,3,320,240);
	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);			/* pageを元に戻さないと暴走 */

	r_panel_make( 0, 0, 639, 19 ) ;
	r_waku_clear2( 320, 240, 2 ) ;

	MG_mosDisp( 2 ) ;
	for( i=0 ; i<tifTotal ; i++ )
	{
		if( plitem[i].selectFlag )
		{
			for( j=0 ; j<80 ; j++ )
			{
				name[j] = tifFilePath[j] ;
				if( name[j] == '\0' )break ;
			}
			for( k=0 ; k<13 ; k++ )
				name[j+k] = (plitem[i].string)[k] ;
			loadtif( name )	;
		}
		temp = playCheck() ;
		if( temp == -1 )break ;
	}
	MG_mosDisp( 3 ) ;

	EGB_writePage(guiEgbPtr,0);
	EGB_paintMode(guiEgbPtr,0x22);
	EGB_writeMode(guiEgbPtr,0);

	r_waku_clear1( 320, 240, 2 ) ;
	r_panel_del() ;

	waitAndDisplayKakunin() ;	/* wait関数を呼ぶ(この中にflushあり) */

	r_waku_del() ;

	MMI_SendMessage( tifDialogId[0], MM_ATTACH, 1, baseDialogId ) ;
	MMI_SendMessage( tifDialogId[0], MM_SHOW, 0 ) ;

	return NOERR ;
}

/* cut */
/*	initDataIRCTIF:tifDButtonId[3]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc3(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem ;
	int maxRow, maxColum ;
	int i, j, k ;

	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem, &maxRow, &maxColum ) ;

	for( i=0 ; i<tifTotal ; i++ )
	{
		if( plitem[i].selectFlag )
		{
			j = 0 ;
			while( plitem[i+j].selectFlag )
			{
				tifCutBuf[j] = (int)( plitem[i+j].string ) ;
				j++ ;
			}
			for( k=i ; k<tifTotal-j ; k++ )
			{
				MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
					 3, k, 0, plitem[k+j].string ) ;
				plitem[k].selectFlag = plitem[k+j].selectFlag ;
			}
			for( k=tifTotal-j ; k<tifTotal ; k++ )
			{
				MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
					 3, k, 0, NULL ) ;
				plitem[k].selectFlag = 0 ;
			}
			cutNum = j ;
			tifTotal -= j ;
			tifPrt = tifTotal ;
			break ;
		}
	}
	tifFileEditList1() ;

		/* ボタンの有効･無効 */
	tifFileEditButton( 1 ) ;

	return NOERR ;
}

/* 取得 */
/*	initDataIRCTIF:tifDButtonId[4]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc4(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem ;
	int maxRow, maxColum ;
	int i, j ;

	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem, &maxRow, &maxColum ) ;

	for( i=0 ; i<tifTotal ; i++ )
	{
		if( plitem[i].selectFlag )
		{
			j = 0 ;
			while( plitem[i+j].selectFlag )
			{
				tifCutBuf[j] = (int)( plitem[i+j].string ) ;
				j++ ;
			}
			cutNum = j ;
			break ;
		}
	}

		/* ボタンの有効･無効 */
	tifFileEditButton( 1 ) ;

	return NOERR ;
}

/* 挿入 */
/*	initDataIRCTIF:tifDButtonId[5]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc5(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem0, *plitem1 ;
	int maxRow0, maxColum0 ;
	int maxRow1, maxColum1 ;
	int i, j ;

	if( tifTotal >= F_MAX )
		return NOERR ;

	MMI_SendMessage( tifListMenuId0, MM_GETLMENUPTR, 3,
					&plitem0, &maxRow0, &maxColum0 ) ;
	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem1, &maxRow1, &maxColum1 ) ;

	for( i=0 ; i<cutNum ; i++ )
	{

		if( tifTotal >= F_MAX )		/* frame over */
			break ;

		if( tifTotal > tifPrt )
		{
			for( j=tifTotal ; j>tifPrt ; j-- )
			{
				if( plitem1[j-1].string != NULL )
				{
					MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
						 3, j, 0, plitem1[j-1].string ) ;
					plitem1[j].selectFlag = plitem1[j-1].selectFlag ;
				}
			}
			MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
				 3, tifPrt, 0, (char *)( tifCutBuf[i] ) ) ;
			plitem1[tifPrt].selectFlag = 0 ;
		}
		else
		{
			MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
				 3, tifPrt, 0, (char *)( tifCutBuf[i] ) ) ;
		}
		tifTotal++ ;
		tifPrt++ ;
		if( tifPrt > tifPrt0 + 23 )tifPrt0 = tifPrt - 23 ;
		if( tifPrt <= tifPrt0 )tifPrt0 = tifPrt - 1 ;
	}
	tifFileEditList1() ;
	return NOERR ;
}

/* all cut */
/*	initDataIRCTIF:tifDButtonId[6]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc6(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	LISTITEML40 *plitem ;
	int maxRow, maxColum ;
	int i ;

	MMI_SendMessage( tifListMenuId1, MM_GETLMENUPTR, 3,
					&plitem, &maxRow, &maxColum ) ;

	for( i=0 ; i<tifTotal ; i++ )
	{
		tifCutBuf[i] = (int)( plitem[i].string ) ;
		MMI_SendMessage( tifListMenuId1, MM_SETROWCOLUM,
			 3, i, 0, NULL ) ;
		plitem[i].selectFlag = 0 ;
	}
	cutNum = tifTotal ;
	tifTotal = 0 ;
	tifPrt = tifTotal ;
	tifFileEditList1() ;

		/* ボタンの有効･無効 */
	tifFileEditButton( 1 ) ;

	return NOERR ;
}

/* end */
/*	initDataIRCTIF:tifDButtonId[7]:MJ_DBUTTONL40の呼び出し関数	*/
int	tifDButtonFunc7(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SetHaltFlag( TRUE ) ;
	return NOERR ;
}



look_file_seiri( n, name )
int n;
char name[][20];
{
	int a, b, d, i, j, k, t;

	d = 0;				/* dir 整理 */
	for( i=0 ; i<n ; i++ ){
		if( name[i][13] == (char)0x10 )goto file01;
		for( j=i ; j<n ; j++ ){
			if( name[j][13] == (char)0x10 ){
				look_file_seiri_change( name[i], name[j] );
				goto file01;
			}
		}
		goto file02;
	file01:	d++;
	}
file02:	for( i=0 ; i<d ; i++ ){
		t = i;
		for( j=i ; j<d ; j++ ){
			for( k=0 ; k<12 ; k++ ){
				a = (unsigned int)name[t][k];
				b = (unsigned int)name[j][k];
				if( a < b )goto file03;
				if( a > b ){
					t = j;
					goto file03;
				}
			}
		file03:	;
		}
		if( t != i )look_file_seiri_change( name[t], name[i] );
	}
	for( i=d ; i<n ; i++ ){
		t = i;
		for( j=i ; j<n ; j++ ){
			for( k=0 ; k<12 ; k++ ){
				a = (unsigned int)name[t][k];
				b = (unsigned int)name[j][k];
				if( a < b )goto file04;
				if( a > b ){
					t = j;
					goto file04;
				}
			}
		file04:	;
		}
		if( t != i )look_file_seiri_change( name[t], name[i] );
	}
	return 0;
}

look_file_seiri_change( name1, name2 )
char name1[20], name2[20];
{
	int i;
	char temp[20];

	for( i=0 ; i<18 ; i++ )temp[i] = name2[i];
	for( i=0 ; i<18 ; i++ )name2[i] = name1[i];
	for( i=0 ; i<18 ; i++ )name1[i] = temp[i];
	return 0;
}

/* path:path name --> name[]:個々のファイルネーム ret:個数 */

look_files_all( name, path )
char name[][20], path[];
{
	int i, k, n;
	char para[64], out[64], dta[64];
	char gwork[1024];	/* work */

	n = 0;
	DWORD(para+0) = ( unsigned int )path;
	DWORD(para+4) = ( unsigned int )out;
	DWORD(para+8) = ( unsigned int )dta;
	DWORD(para+12) = 0x30;
	DWORD(para+16) = 0;
	k = files( gwork, para );
	if( k )return n;
	for( i=0 ; i<13 ; i++ )name[n][i] = (char)0;		/* clear */
	for( i=0 ; i<13 ; i++ ){				/* f-name */
		name[n][i] = dta[ i + 0x1e ];
		if( name[n][i] == (char)0 )goto file00;
	}
file00:	name[n][13] = dta[ 0x15 ];				/* attr. */
	DWORD( name[n] + 14 ) = DWORD( dta + 0x1a );		/* size */
	if( (name[n][0] == '.') && (name[n][1] == (char)0) )goto file01;
	n++;
file01:	DWORD(para+0) = ( unsigned int )path;
	DWORD(para+4) = ( unsigned int )out;
	DWORD(para+8) = ( unsigned int )dta;
	DWORD(para+12) = 0x30;
	DWORD(para+16) = 1;
	k = files( gwork, para );
	if( k )return n;
	for( i=0 ; i<13 ; i++ )name[n][i] = (char)0;		/* clear */
	for( i=0 ; i<13 ; i++ ){				/* f-name */
		name[n][i] = dta[ i + 0x1e ];
		if( name[n][i] == (char)0 )goto file02;
	}
file02:	name[n][13] = dta[ 0x15 ];				/* attr. */
	DWORD( name[n] + 14 ) = DWORD( dta + 0x1a );		/* size */
	if( (name[n][0] == '.') && (name[n][1] == (char)0) )goto file03;
	n++;
file03:	if( n >= F_MAX )return n;				/* 怖いので */
	goto file01;
}

tiff_files_check( path, total, nbuffer, p1, p2 )
char path[], nbuffer[][16];
int total, p1, p2 ;
{
	char tiffname[100];
	int i, j, k, temp;

	temp = 0;
	if( total == 0 )return 0;

	if( p1 < 0 )p1 = 0 ;
	if( p2 > total-1 )p2 = total-1 ;

	EGB_writePage(guiEgbPtr,1);
	EGB_color( guiEgbPtr, 1, 0 ) ;
	EGB_clearScreen(guiEgbPtr);			/* clear */
	EGB_displayStart(guiEgbPtr,3,0,0);
	EGB_displayStart(guiEgbPtr,2,1,1);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,0,0,0);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,3,320,240);
	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);			/* pageを元に戻さないと暴走 */

	r_panel_make( 0, 0, 639, 19 ) ;
	r_waku_clear2( 320, 240, 2 ) ;

	MG_mosDisp( 2 ) ;
	for( k=p1 ; k<=p2 ; k++ ){
		for( i = 0 ; i<80 ; i++ ){
			tiffname[i] = path[i];
			if( tiffname[i] == (char)0 )break;
		}
//		if( tiffname[i-1] != '\\' )tiffname[i++] = '\\';
		for( j=0 ; j<13 ; j++ ){
			tiffname[i++] = nbuffer[k][j];
		}
		loadtif( tiffname ) ;
		temp = playCheck() ;
		if( temp == -1 )break ;
	}
	MG_mosDisp( 3 ) ;

	EGB_writePage(guiEgbPtr,0);
	EGB_paintMode(guiEgbPtr,0x22);
	EGB_writeMode(guiEgbPtr,0);

	r_waku_clear1( 320, 240, 2 ) ;
	r_panel_del() ;

	waitAndDisplayKakunin() ;	/* wait関数を呼ぶ(この中にflushあり) */

	r_waku_del() ;

	return NOERR ;
}

/*
	TIFF loader ( 圧縮データもサポート 1992 5/7 )
*/
	#define LOADBUFSIZE	 151	/* ファイル読み込みバッファ */
	#define EXPBUFSIZE    10	/* 展開用バッファ */
	FILE *fptif;

/* ライブラリから呼ばれる，バッファに対する操作の関数 */
loadtif_read_data( bp, size )
char *bp ;
int size ;
{
	fread( bp, 1, size, fptif ) ;
	return 0 ;
}

loadtif_put_data( buf, lofs, lines ) 
char *buf ;
int lofs, lines ;
{
	struct {
		char *bp ;
		short sel ;
		short sx,sy,ex,ey ;
	} p ;		/* EGB_putBlockのパラメータ */

	EGB_writePage(guiEgbPtr,1);
	EGB_writeMode(guiEgbPtr,0);
	p.bp = buf ;
	p.sel = 0x14 ;
	p.sx = 0 ;
	p.ex = xtif -1 ;
	p.sy = lofs ;
	p.ey = lofs + lines -1 ;
	EGB_putBlock( guiEgbPtr , 0, (char *)&p ) ;
	return 0 ;
}

loadtif( char *fullname )
{
	char *lbp, *dbp, *cbuf ;
	int lbsize, dbsize,bpp, d_line ;
	int comp,fill ;
	long strip, clut, dw ;

	lbsize = LOADBUFSIZE * 1024 ; 	/* それぞれのバッファのサイズ */
	dbsize = EXPBUFSIZE * 1024;
	lbp = bbuf;			/* ロードバッファ */
	dbp = lbp + lbsize;		/* 展開バッファ */
	cbuf = dbp + dbsize;		/* 圧縮展開用ワーク */
		/* DECOMP_WORK_SIZEがtifflib.hに定義されてるが
		lbsize+dbsize+DECOMP_WORK_SIZEがbbufの大きさを
		こえないように注意すること */
	if( ( fptif = fopen( fullname, "rb" ) ) == NULL )return 1;
					/* ファイルオープン */
	fread( lbp, 1, lbsize, fptif );	/* 最初のデータロード */
		/* lbsize程のデータが無くてもok! */
	/* ヘッダの解析 */
	if( TIFF_getHead( lbp, lbsize ) < 0 ){
		fclose( fptif );
		return 58;
	}
	/* タグの内容のチェック */
	bpp = TIFF_checkMode( &xtif,&ytif,&comp,&fill,&strip,&clut );
	if( (bpp != 16) || (clut != 0) ){
		fclose( fptif );
		return 58;
	}
	/* バッファ操作関数の登録 */
	TIFF_setLoadFunc(  loadtif_put_data, loadtif_read_data ) ;
	dw = xtif ;
	/* 16色モードの場合,横方向を8ドット単位で扱うため，一行のデータ
	   サイズを計算する際に，8ドット単位に調整しておく必要がある */
	if( bpp == 4)
		if( dw & 7 )
			dw += 8 - (dw & 7) ;
	/* 展開用バッファに何行分のデータが入るかの計算  */
	d_line = dbsize / ((dw * bpp + 7)/ 8) ;
	/* TIFFデータの表示  */
	TIFF_loadImage(
	 bpp,xtif,ytif,strip, fill, comp, dbp, dw, d_line, cbuf );
	fclose( fptif );
	EGB_writePage(guiEgbPtr,0);
	EGB_writeMode(guiEgbPtr,0);
	return 0;
}

