#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 "sftlib.h"
#include <egb.h>
#include <dos.h>

char	*guiEgbPtr ;			/*	EGB のワークアドレス	*/
char	guiSndPtr[16*1024] ;	/*	SND のワークアドレス	*/
char    *sftlibp="sftlib.sft";

void main( int argc, char **argv )
{
	AMI_PATH_t ps;
	char path[_MAX_PATH], cpath[_MAX_PATH];
	extern int APL_init() ;
	MMICTRL ctrl;
	int i;

	strcpy( DB_startp, argv[0] );
	_getcwd( cpath, _MAX_PATH );
	AMI_pathsplit( &ps, argv[0]);
	strcpy( path, ps.drive);
	strcat( path, ps.dir);
	AMI_cd( path );

	for( i=1; i< argc; i++ ) {
		sftlibp=argv[i];
	}

	/*	致命的エラーハンドラの登録	*/
	FM_SetVector() ;

	/*	サウンドの初期化	*/
	SND_init(guiSndPtr) ;


	ctrl.page0=3;
	ctrl.page1=3;
	ctrl.writePage=DB_page;
	ctrl.displayPage=2;
	ctrl.priority=1;
	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=26;
	ctrl.move.rdwx=639;
	ctrl.move.rdwy=463;
	ctrl.white=15;
	ctrl.black=1;
	ctrl.gray=7;
	ctrl.xor=15;
	
	/*	初期化処理	*/
	if (MMI_Open( &ctrl ) == NOERR)
	{
		/*	初期化に成功すればメインループに入る.	*/
		if (APL_init() == NOERR){
				extern int DB_init();
				if( DB_init( sftlibp ) == 0 )
	 			MMI_ExecSystem() ;
				EGB_writePage( guiEgbPtr, 0 );
				EGB_palette( guiEgbPtr, 1, palette0_old);
				EGB_writePage( guiEgbPtr, 1 );
				EGB_palette( guiEgbPtr, 1, palette1_old);
		}
	}

	/*	終了処理	*/
	MMI_Close() ;

	/* 画面消去する　*/
	{
		_far char *p;
		int i;
		FP_SEG(p)=0x1c;
		FP_OFF(p)=0;
		for( i=512*1024-1;i>=256*1024; --i) p[i]=0; 
	}
	/*	サウンドの終了	*/
	SND_end() ;

	/*	致命的エラーハンドラの復帰	*/
	FM_ResetVector() ;
	AMI_pathsplit( &ps, cpath);
	strcpy( path, ps.drive);
	strcat( path, ps.dir);
	strcat( path, ps.fname);
	strcat( path, ps.ext);
	AMI_cd( path );
}

int APL_init()
{
	extern MMIINIT	initDataALERT ;
	extern MMIINIT	initDataFOUT ;
	extern MMIINIT	initDataMDFY ;
	extern MMIINIT	initDataMENU ;
	extern MMIINIT	initDataMESAG ;
	extern MMIINIT	initDataPMODE ;
	extern MMIINIT	initDataQUIT ;
	extern MMIINIT	initDataROOT ;
	extern MMIINIT	initDataSCOND ;
	extern MMIINIT	initDataTYPED ;
	extern MMIINIT	initDataWORK ;
	extern MMIINIT	initDataINFO;
	extern MMIINIT	initDataPLT;
	extern MMIINIT	initDataPTGL;

	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_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_initListMenuL40()) < 0)
		return ret ;
	/*	数値入力型部品の初期化			*/
	if ((ret = MMI_initNumBoxL40()) < 0)
		return ret ;

	/*	デフォルトビジュアルイフェクトの登録	*/
	MMI_SetUpVisualEffect() ;

	/*	デフォルトサウンドイフェクトの登録		*/
	MMI_SetUpSoundEffect() ;

	/*	背景データの初期化						*/

	/*	データの登録		*/
	if ((ret = MMI_Init(&initDataMENU)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataALERT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataFOUT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMDFY)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataMESAG)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataPMODE)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataQUIT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataROOT)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataSCOND)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataTYPED)) < 0)
		return ret ;

	if ((ret = MMI_Init(&initDataWORK)) < 0)
		return ret ;

	if (( MMI_Init(&initDataINFO)) < 0) 
		return ret; 

	if (( MMI_Init(&initDataPLT)) < 0) 
		return ret; 

	if (( MMI_Init(&initDataPTGL)) < 0) 
		return ret; 

	
	/*	背景を表示する							*/
	MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;

	return NOERR ;
}

