#define DEBUG 0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <snd.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <file_dlg.h>
#include "igo.h"
#include "banx.h"
#include "kifuctrl.h"
#include "kiffile.h"
#include "title.h"

char	*guiEgbPtr ;			/*	EGB のワークアドレス	*/
char	guiSndPtr[16*1024] ;	/*	SND のワークアドレス	*/

void main()
{
	extern int APL_init() ;
	

	MMICTRL	ctrl ;
#if DEBUG
	debugprint("main start !\n");
	debugprint("MMI_initHyper = %d!\n", MMI_initHyper);
#endif


	/*	ダイアログの移動範囲を設定するために､ MMI_Open関数	*/
	/*	の引数を使用します。通常の移動範囲ならば引数の指定	*/
	/*	は､ NULL で大丈夫です。								*/

	ctrl.page0 = 3 ;			/*	16色2画面に設定する		*/
	ctrl.page1 = 3 ;
	ctrl.writePage = 0 ;		/*	page0 を書き込みページ	*/
	ctrl.displayPage = 1 ;		/*	ペ−ジ０画面表示		*/
	ctrl.priority = 1 ;
	ctrl.mode = 0 ;				/*	16色モードに設定する	*/
	ctrl.width = 512 ;			/*	画面モード3 では512		*/
	ctrl.size = 0 ;				/*	メモリの初期化は 		*/
	ctrl.ptr = NULL ;			/*	GUIﾗｲﾌﾞﾗﾘに任せる		*/
	ctrl.asize = 0 ;			/*	ｱﾌﾟﾘｹｰｼｮﾝで必要とする	*/
	ctrl.aptr = NULL ;			/*	初期メモリは無し		*/
	ctrl.fr.lupx = 0 ;			/*	画面の大きさを			*/
	ctrl.fr.lupy = 0 ;			/*  (0,0)-(639,479)			*/
	ctrl.fr.rdwx = 639 ;		/*	に設定する				*/
	ctrl.fr.rdwy = 479 ;
	ctrl.move = ctrl.fr ;		/*	移動枠の Y 座標を		*/
	ctrl.move.lupy = 22 ;		/*		22 に設定する		*/
	ctrl.white = 15 ;			/*	白色は   15 番			*/
	ctrl.black = 8 ;			/*	黒色は    8 番			*/
	ctrl.gray = 7 ;				/*	灰色は    7 番			*/
	ctrl.xor = 14 ;				/*	反転色は 14 番			*/

	/*	致命的エラーハンドラの登録	*/
	FM_SetVector() ;

	/*	サウンドの初期化	*/
	SND_init(guiSndPtr) ; 

#if DEBUG
	debugprint("MMI_Open start !\n");
#endif
	/*	初期化処理	*/
	if (MMI_Open( &ctrl ) == NOERR)
	{
#if DEBUG
	debugprint("APL_init start !\n");
#endif
		/*	初期化に成功すればメインループに入る.	*/
		if (APL_init() == NOERR){
			/*	ファイルダイアログ関係の初期化処理		*/
			/*	カレントディレクトリを保存する		*/
			FDG_SaveCurDir() ;
			/*	ファイルダイアログの初期化			*/
			FDG_InitFileDlg() ;

			MMI_ExecSystem() ;

			/*	ファイルダイアログ関係の終了処理		*/
			/*	メモリ開放			*/
			FDG_FreeFileDlg() ;
			/*	カレントディレクトリを復帰する		*/
			FDG_RecovCurDir() ;
		}
	}

	/*	終了処理	*/
	MMI_Close() ;

	/*	サウンドの終了	*/
	SND_end() ;

	/*	致命的エラーハンドラの復帰	*/
	FM_ResetVector() ;
}

int APL_init()
{
	extern MMIINIT	initDataMIABOU ;
	extern MMIINIT	initDataMIHANDY ;
	extern MMIINIT	initDataMITITLE ;
	extern MMIINIT	initDataMIDESK ;
	extern MMIINIT	initDataMIAUTO ;
	extern MMIINIT	initDataMIWARN ;
	extern MMIINIT	initDataMICOMMNT ;
	extern MMIINIT	initDataMIPRINT ;
	extern MMIINIT	initDataMILINE ;
	extern MMIINIT	initDataMIFSAVE ;
	extern MMIINIT	initDataMISSAVE ;
	extern MMIINIT	initDataMIJUDGE ;

	/*	サイドワークの登録に使う部品の外部宣言	*/
	extern int mitemBarId[] ;

	register int	ret ;
	BAN_TYPE ban_type;

	/*	EGB ワークアドレスの取得.	*/
	guiEgbPtr = MMI_GetEgbPtr() ;

#if DEBUG
	debugprint("MMI_initHyper()\n");
	debugprint("MMI_initHyper = %d!\n", MMI_initHyper);
#endif
	/*	ハイパ型部品の初期化			*/
	if ((ret = MMI_initHyper()) < 0)
		return ret ;
#if DEBUG
	debugprint("MMI_initDialogL40()\n");
#endif
	/*	ダイアログ型部品の初期化		*/
	if ((ret = MMI_initDialogL40()) < 0)
		return ret ;
#if DEBUG
	debugprint("MMI_initAlertL40() start !\n");
#endif
	/*	アラート型部品の初期化			*/
	if ((ret = MMI_initAlertL40()) < 0)
		return ret ;
	/*	ウインドウ型部品の初期化		*/
	if ((ret = MMI_initWindowL40()) < 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 DEBUG
	debugprint("MMI_initDrawButtonL40() start !\n");
#endif
	/*	ドロウボタン型部品の初期化		*/
	if ((ret = MMI_initDrawButtonL40()) < 0)
		return ret ;
	/*	アイコンボタン型部品の初期化	*/
	if ((ret = MMI_initIconL40()) < 0)
		return ret ;
	/*	トグルアイコン型部品の初期化	*/
	if ((ret = MMI_initToggleIconL40()) < 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_initNumBoxL40()) < 0)
		return ret ;
	/*	ファイルダイアログを使うときはリストメニューの初期化も必要	*/
	/*	リストメニュー型部品の初期化			*/
	if ((ret = MMI_initListMenuL40()) < 0)
		return ret ;

#if DEBUG
	debugprint("MMI_SetUpVisualEffect()\n");
#endif
	/*	デフォルトビジュアルイフェクトの登録	*/
	MMI_SetUpVisualEffect() ;

	/*	デフォルトサウンドイフェクトの登録		*/
	MMI_SetUpSoundEffect() ;

	/*	データの登録		*/
	if ((ret = MMI_Init(&initDataMIABOU)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIHANDY)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMITITLE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIDESK)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIAUTO)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIWARN)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMICOMMNT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIPRINT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMILINE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIFSAVE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMISSAVE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMIJUDGE)) < 0)
		return ret ;

	/*	背景を表示する							*/
	MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;

	/*	SIDEWORKメニューを登録する				*/
	MMI_SetUpSDKMenu( mitemBarId[0] , -1 ) ;

	title_init();
	/*	背景データの初期化						*/
	ban_type.type = NORMAL;
	ban_type.size = 19;
	ban_type.size2 = 0;
	title_bantype_set( ban_type); /* この処理はban_initでやるべきか? */

	kifu_init();
	henkan_init();
	disp_init();
	title_dispFunc();
	comment_dispFunc();

	return NOERR ;
}

