/*************************************************************************
*	"main.c"
*************************************************************************/

#define	_GENERIC_SYSTEM				/* 一般公開用			*/

#include	"ccicfg.h"
#include	"defs.h"
#include	"apl.h"
#include	"lib.h"
#include	"fdl.h"
#include	"color.h"
#include	"keycode.h"
#include	"moscur.h"
#include	"aplno.h"
#include	"aplcol.h"
#include	"txdofs.h"
#include	"txdcmd.h"
#include	"tdpcmd.h"
#include	"affcopy.h"
#include	"affrun.h"
#include	"dcncmd.h"
#include	"dcncci.h"
#ifndef		_TERM_IGN
#	include	"ntmcmd.h"
#	include	"ntmcci.h"
#endif

char	*SysMacro = NULL;	/* システムマクロ	*/
char	SYSMACRO_FN[10] = {'h','e','w','i','n','.','m','a','c','\0'};
char	MACROKEY_EXPSEARCH_PATH[16] = {'E','x','p','_','s','e','a','r','c','h','_','p','a','t','h','\0'};

#include	"lib.c"
#include	"pcl.c"
#include	"colset.c"
#include	"bgm.c"
#include	"blackout.c"
#include	"timer.c"
#include	"debug.c"
#include	"wpaper.c"
#ifndef	_EXP_SETUP_IGNORE
#	include	"expcfg.c"
#endif

/*************************************************************************
*	システム初期化
*************************************************************************/

#define	WILDCARD_TBL_NUM	5
char	*WildCardTbl[WILDCARD_TBL_NUM] = 
{
	"*.*"  ,
	"*.asm *.c   *.cci *.h"  ,
	"*.mml *.def *.h",
	"*.bgm *.eup *.mid",
	"*.doc *.hlp *.man *.txt"
};

/*************************************************************************
*	ファイルマネージャの環境設定
*************************************************************************/

int		AfmSetup()
{
	int		i;
	char	comspec[128], *s;
	char	*console;

	if ( (s = getenv("COMSPEC")) == NULL )
		strcpy( comspec, "C:\\COMMAND.COM /C" );
	else
		sprintf( comspec,"%s /C", s );
	console = "oricon";

	Afm_setRunFile(0,".exe", AFFRUN_TYP_DOS, AFFRUN_DOS_MD_NORMAL, "","");
	Afm_setRunFile(0,".com", AFFRUN_TYP_DOS, AFFRUN_DOS_MD_NORMAL, "","");
	Afm_setRunFile(0,".bat", AFFRUN_TYP_DOS, AFFRUN_DOS_MD_NORMAL, "","");
	Afm_setRunFile(0,".exp", AFFRUN_TYP_DOS, AFFRUN_DOS_MD_DSPIGN, "","");

	/* デフォルトワイルドカードの設定	--------------------------------*/
	for ( i = 0 ; i < WILDCARD_TBL_NUM; ++i )
		FdlSetWildCardList( WildCardTbl[i] );

	/* ウィンドゥの表示位置	--------------------------------------------*/
#ifdef	_TAROPYON_SYSTEM
	Afm_setWinPos(-1,-1);
#else
	Afm_setWinPos(4,28);
#endif
}

/*************************************************************************
*	[MENU]に追加する機能
*-------------------------------------------------------------------------
*	書式:	Apl_menuAppend( key, title, type, ... );
*		key   … ショートカットキー	'0'〜'9'
*		title … タイトル
*		type  … 種別	APLMA_TYP_IAP	内蔵アプリケーション
*						APLMA_TYP_CCI	CCI 作成関数
*						APLMA_TYP_DOS	DOS コマンド
*
*	内蔵アプリケーション
*		Apl_menuAppend( key, title, APLMA_TYP_IAP, aplTyp, para);
*			aplType …	アプリケーション種別
*							APL_TYPE_DCN	… DOS コンソール
*							APL_TYPE_NTM	… 通信ウィンドゥ
*							APL_TYPE_TDP	… テキストエディタ
*							APL_TYPE_TBI	… テキストバインダ
*							APL_TYPE_IDP	… TIFFビュワ
*			para	…	パラメータ
*
*	CCI 作成関数
*		Apl_menuAppend( key, title, APLMA_TYP_CCI, func, para);
*			func	…	関数名
*			para	…	パラメータ
*
*	DOS コマンド
*		Apl_menuAppend( key, title, APLMA_TYP_DOS, 0, cmd, para);
*			cmd		…	コマンド名
*			para	…	パラメータ
*************************************************************************/

int		SetAplAppendMenu()
{
	Apl_menuAppend('0',"Text editor"  ,APLMA_TYP_IAP, APL_TYPE_TDP   ,"");
	Apl_menuAppend('1',"GSPLAY"       ,APLMA_TYP_DOS, 0,"GSPLAY.EXP" ,"");
	Apl_menuAppend('2',"ZNSPLAY"      ,APLMA_TYP_DOS, 0,"ZNSPLAY.EXP","");
	Apl_menuAppend('3',"CD-DIC"       ,APLMA_TYP_CCI, "CCI_cddic"    ,"");
	Apl_menuAppend('4',"TIFF"         ,APLMA_TYP_DOS, 0,"TIFF.EXP"   ,"");
#ifndef	_LHA_IGNORE
	Apl_menuAppend('5',"LHxII"        ,APLMA_TYP_DOS, 0,"LHX2.EXP"   ,"");
#endif
#ifdef	_TAROPYON_SYSTEM
	Apl_menuAppend('8',"Change Wall papere", APLMA_TYP_CCI, "CCI_rndWallPaper"   ,"");
	Apl_menuAppend('9',"Select Wall paper" , APLMA_TYP_CCI, "CCI_selectWallPaper","");
#else
	Apl_menuAppend('8',"Wall paper"   ,APLMA_TYP_CCI, "CCI_setWallPaper","");
#endif
}

/*************************************************************************
*	HEwin 起動時の初期化
*-------------------------------------------------------------------------
*	int		HEWIN_init(int argc, char **argv)
*		argc, argv には未定義の起動時オプションが渡される
*************************************************************************/

int		HEWIN_init(int argc, char **argv)
{
	int		i, kan, kan_md;
	char	tmp[256], *s;

	if ( (SysMacro = AMAC_allocWork(0)) != NULL )
	{
		sprintf( tmp, "%s%s", AplGetStartPath(), SYSMACRO_FN );
		AMAC_load( SysMacro, tmp );
		GetAsciiTime( tmp, time(NULL) );
		AMAC_setKey( SysMacro, "Startup_time", tmp );
	}
	AfmSetup();
	SetExpSearchPath();
	SetAplAppendMenu();

	/* BGM に関する設定	*/
	SND_get_elevol_mute(&i);	/* ミュート状態の取得		*/
	i |= 3;						/* FM/PCM音源ミュート解除	*/
	SND_elevol_mute(i);			/* ミュート設定				*/
#ifdef	_RSMIDI
	MID_rs_midi_init();
	MidPortTbl[0] = 8;
#endif

#ifndef	_TAROPYON_SYSTEM
	for ( i = 0; i < argc ; ++i )
	{
		s = argv[i];
		if ( strcmpi( s, "-fep_roumaji") == 0 )
		{	/* デフォルト入力モード[ローマ字]	*/
			kan = KBF_kan_getMode();	/* 現在のかな漢動作状態		*/
			if ( kan < 0 )				/* FEP OFF状態				*/
			{							/* FEP ON にしてモード取得	*/
				KBF_kan_on();
				kan_md = KBF_kan_getMode();
			} else
				kan_md = kan;			/* 現在のモード				*/
			if ( kan_md >= 0 )
			{
				kan_md = (kan_md & 0xFFFFFF0F) | KAN_ROUMAZI;
				KBF_kan_setMode( kan_md );	/* モード設定			*/
				if ( kan < 0 )			/* かな漢動作状態を元に戻す	*/
					KBF_kan_off();
			}
		}
	}
#endif

	return (NORMAL);
}

int		HEWIN_start()
{
	CCI_rndWallPaper(0,NULL);	/* 壁紙ランダムチェンジ	*/
	return (NORMAL);
}

int		HEWIN_end(int saveFlag)
{
	return (NORMAL);
}

/*************************************************************************
*	HEwin 終了時の処理
*************************************************************************/

int		HEWIN_term(int saveFlag)
{
	char	tmp[256];

	if ( SysMacro )
	{
		GetAsciiTime( tmp, time(NULL) );
		AMAC_setKey( SysMacro, "Exit_time", tmp );

		sprintf( tmp, "%s%s", AplGetStartPath(), SYSMACRO_FN );
		AMAC_save( SysMacro, tmp, "System macro" );
	}
#ifdef	_RSMIDI
	MID_rs_midi_end();
#endif

	return (0);
}

/*************************************************************************
*	アプリケーションセレクタ、デフォルトアイテム登録
*-------------------------------------------------------------------------
*	"hewin.itm" が存在しない場合に、この関数が実行される
*************************************************************************/

int		AslUsr_setStartItem()
{
	/*                 関数名               タイトル     パラメータ	*/
	Asl_setDefCciItem("CCI_textViewer"      ,"☆読んでネ","message.doc");
	Asl_setDefCciItem("CCI_textViewer"      ,"説明"      ,"hewin.doc");
	Asl_setDefCciItem("CCI_setWallPaper"    ,"壁紙"      ,"");
	Asl_setDefCciItem("CCI_sidework"        ,"SideWork"  ,"");
	Asl_setDefCciItem("CCI_sndPlay"         ,"SND-PLAY"  ,"");
	Asl_setDefCciItem("CCI_setExpSearchPath","EXP PATH"  ,"");
#ifndef	_EXP_SETUP_IGNORE
	Asl_setDefCciItem("CCI_expSetup"       ,"EXP SETUP" ,"");
#endif

	return (NORMAL);
}

#include	"try4nif.c"
#include	"he386.c"
#include	"highc.c"
#include	"prs.c"
#include	"tdp.c"
#include	"dcn.c"
#ifndef		_TERM_IGN
#	include	"ntm.c"
#endif
#include	"tools.c"
#include	"sndplay.c"
