#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>

char	*guiEgbPtr ;			/*	EGB のワークアドレス	*/
char	guiSndPtr[16*1024] ;	/*	SND のワークアドレス	*/

void main()
{
	extern int APL_init() ;
	extern int startSet() ;	/* buffer確保その他の関数 */

	MMICTRL ctrl ;

	/*	致命的エラーハンドラの登録	*/
	FM_SetVector() ;

	/*	サウンドの初期化	*/
	SND_init(guiSndPtr) ;

	/*	初期化処理	*/
	ctrl.page0 = 3 ;
	ctrl.page1 = 3 ;
	ctrl.writePage = 0 ;
	ctrl.displayPage = 1 ;
	ctrl.priority = 0 ;
	ctrl.mode = 0 ;
	ctrl.width = 512 ;
	ctrl.size = 0 ;
	ctrl.ptr = NULL ;
	ctrl.asize = 0 ;
	ctrl.aptr = NULL ;
	ctrl.fr.lupx = 0 ;
	ctrl.fr.lupy = 0 ;
	ctrl.fr.rdwx = 639 ;
	ctrl.fr.rdwy = 479 ;
	ctrl.move.lupx = 0 ;
	ctrl.move.lupy = 20 ;	/*	ダイアログの移動範囲に制限を付ける(y座標)	*/
	ctrl.move.rdwx = 639 ;
	ctrl.move.rdwy = 479 ;
	ctrl.white = 15 ;
	ctrl.black = 8 ;		/*	パレット変更に伴いGUIの表示色を変更(黒)		*/
	ctrl.gray = 7 ;			/*	             〃                    (灰色)	*/
	ctrl.xor = 7 ;			/*	             〃                    (反転色)	*/
	if (MMI_Open( &ctrl ) == NOERR)
	{
		/*	初期化に成功すればメインループに入る.	*/
		if (APL_init() == NOERR)
		{

			FDG_SaveCurDir() ;		/*	カレントディレクトリ保存	*/
		    FDG_InitFileDlg() ;		/*	ファイルダイアログ初期化	*/

			if( startSet() == NOERR )
				MMI_ExecSystem() ;		/*	メインのイベントループ		*/

		    FDG_FreeFileDlg() ;		/*	ファイルダイアログ終了処理	*/
			FDG_RecovCurDir() ;		/*	カレントディレクトリ復元	*/
		}
		MMI_SendMessage( MMI_GetBaseObj(), MM_ERASE, 0 ) ;
	}

	/*	終了処理	*/
	MMI_Close() ;

	/*	サウンドの終了	*/
	SND_end() ;

	/*	致命的エラーハンドラの復帰	*/
	FM_ResetVector() ;
}

int APL_init()
{
	extern int		setPalette( char * ) ;	/*	パレット設定関数	*/
	extern int		mItemId[] ;

	extern MMIINIT	initDataIOTABOU ;
	extern MMIINIT	initDataIOTDSK ;
	extern MMIINIT	initDataIOTERR ;
	extern MMIINIT	initDataIOTMIX ;
	extern MMIINIT	initDataIOTPHA ;
	extern MMIINIT	initDataIOTREC ;
	extern MMIINIT	initDataIOTINF ;
	extern MMIINIT	initDataIOTECH ;
	extern MMIINIT	initDataIOTVIB ;
	extern MMIINIT	initDataIOTTRE ;
	extern MMIINIT	initDataIOTVOI ;
	extern MMIINIT	initDataIOTEXP ;
	extern MMIINIT	initDataIOTLEV ;
	extern MMIINIT	initDataIOTPCH ;
	extern MMIINIT	initDataIOTSMP ;
	extern MMIINIT	initDataIOTHED ;
	extern MMIINIT	initDataIOTFAD ;
	extern MMIINIT	initDataIOTHAR ;

	register int	ret ;

	/*	EGB ワークアドレスの取得.	*/
	guiEgbPtr = MMI_GetEgbPtr() ;

	/*	ハイパ型部品の初期化			*/
	if ((ret = MMI_initHyper()) < 0)
		return ret ;
	/*	ダイアログ型部品の初期化		*/
	if ((ret = MMI_initDialogL40()) < 0)
		return ret ;
	/*	アラート型部品の初期化			*/
	if ((ret = MMI_initAlertL40()) < 0)
		return ret ;
	/*	メッセージ型部品の初期化		*/
	if ((ret = MMI_initMessageL40()) < 0)
		return ret ;
	/*	メニュー型部品の初期化			*/
	if ((ret = MMI_initMenuL40()) < 0)
		return ret ;
	/*	ボタン型部品の初期化			*/
	if ((ret = MMI_initButtonL40()) < 0)
		return ret ;
	/*	ドロウボタン型部品の初期化		*/
	if ((ret = MMI_initDrawButtonL40()) < 0)
		return ret ;
	/*	アイコンボタン型部品の初期化	*/
	if ((ret = MMI_initIconL40()) < 0)
		return ret ;
	/*	メニューアイテム型部品の初期化	*/
	if ((ret = MMI_initMenuItemL40()) < 0)
		return ret ;
	/*	スクロール型部品の初期化		*/
	if ((ret = MMI_initScrollBarL40()) < 0)
		return ret ;
	/*	テキスト型部品の初期化			*/
	if ((ret = MMI_initTextL40()) < 0)
		return ret ;
	/*	リストメニュー型部品の初期化	*/
	if ((ret = MMI_initListMenuL40()) < 0)
		return ret ;
	/*	数値入力型部品の初期化			*/
	if ((ret = MMI_initNumBoxL40()) < 0)
		return ret ;

	/*	デフォルトビジュアルイフェクトの登録	*/
	MMI_SetUpVisualEffect() ;

	/*	パレット変更 */
	ret = setPalette( guiEgbPtr ) ;

	/*	背景データの初期化						*/

	/*	データの登録		*/
	if ((ret = MMI_Init(&initDataIOTABOU)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTDSK)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTERR)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTMIX)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTPHA)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTREC)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTINF)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTECH)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTVIB)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTTRE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTVOI)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTEXP)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTLEV)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTPCH)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTSMP)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTHED)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTFAD)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataIOTHAR)) < 0)
		return ret ;

	/*	SIDEWORKメニューの登録					*/
	ret = MMI_SetUpSDKMenu( mItemId[0], 2 ) ;

	/*	背景を表示する							*/
	MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;

	return NOERR ;
}

