
char	*MACROKEY_HIGHC_CCNAME  = "HighC_ccname" ;
char	*MACROKEY_HIGHC_IPATH   = "HighC_ipath"  ;
char	*MACROKEY_HIGHC_PROFILE = "HighC_profile";
char	*MACROKEY_HIGHC_OPTION  = "HighC_option" ;

char	highc_ccname[128];
char	highc_ipath[128];
char	highc_profile[128];
char	highc_option[128];

int		_highc_set_config(char *mkey, char *var, char *ttl, char *msg)
{
	int			ret;
	char		tmp[256];
	char	   *dlg;

	dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320, msg );
	DLG_getsSetTitle( dlg, ttl);
	strcpy( tmp, var);
	ret = DLG_getsStart( dlg, 127, tmp );
	if ( ret >= 0 )
	{
		strcpy( var, tmp );
		AMAC_setKey( SysMacro, mkey, var);
	}
	DLG_getsClose(dlg);

	return (0);
}

int		highc_compile( char *pn )
{
	int			drv;
	char		cmd[512], fn[256], tmp[256];

	/* カレント変更	*/
	drv = toupper(*pn) - 'A';
	FS_chdrv(drv);
	FS_getDnamPath(tmp, pn);
	FS_chdir(tmp);

	FS_getFnamPath( fn, pn);

	sprintf( cmd, "%s %s", highc_ccname, fn);

	if ( highc_ipath[0] )
	{
		strcat( cmd, " -ipath ");
		strcat( cmd, highc_ipath);
	}

	if ( highc_profile[0] )
	{
		strcat( cmd, " -profile ");
		strcat( cmd, highc_profile);
	}

	if ( highc_option[0] )
	{
		strcat( cmd, " ");
		strcat( cmd, highc_option);
	}

	if ( strlen(cmd) >= 127 )
	{
		DLG_tmpMsgBox( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
		    C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
		    "    コマンドラインが長すぎます。  " );
		return (-1);
	}

	AplDtaInit();
	AplDtaSetStr( "$MainArg", "%s", cmd );
	AplPclExec( highc_ccname, APLPCL_SET_PCP | APLPCL_DTALIB_IGNORE);

	return (0);
}

int		highc_menu(char *pn)
{
	int			ret;
	char	   *mnu;
	char	   *obj;
	char	   *p;

	if ( *pn == '\0' )
		return (-1);

	if ( (p = AMAC_getName( SysMacro, MACROKEY_HIGHC_CCNAME)) == NULL )
	{
		p = "hcd386p.exp";
		AMAC_setKey( SysMacro, MACROKEY_HIGHC_CCNAME, p );
	}
	strcpy( highc_ccname, p );

	if ( (p = AMAC_getName( SysMacro, MACROKEY_HIGHC_IPATH)) == NULL )
	{
		p = "";
		AMAC_setKey( SysMacro, MACROKEY_HIGHC_IPATH, p );
	}
	strcpy( highc_ipath, p );

	if ( (p = AMAC_getName( SysMacro, MACROKEY_HIGHC_PROFILE)) == NULL )
	{
		p = "";
		AMAC_setKey( SysMacro, MACROKEY_HIGHC_PROFILE, p );
	}
	strcpy( highc_profile, p );

	if ( (p = AMAC_getName( SysMacro, MACROKEY_HIGHC_OPTION)) == NULL )
	{
		p = "-noobject -tpages 64 -output c.err";
		AMAC_setKey( SysMacro, MACROKEY_HIGHC_OPTION, p );
	}
	strcpy( highc_option, p );

	obj = MNU_alloc(6);
	MNU_setObj(obj, 0, MNU_NOR, 'H', "hcd386p.exp"      , NULL, 1, NULL, NULL);
	MNU_setObj(obj, 1, MNU_NOR, 'I', "Include path"     , NULL, 2, NULL, NULL);
	MNU_setObj(obj, 2, MNU_NOR, 'P', "Profile name"     , NULL, 3, NULL, NULL);
	MNU_setObj(obj, 3, MNU_NOR, 'O', "Compile Option"   , NULL, 4, NULL, NULL);
	MNU_setObj(obj, 4, MNU_BLK,  0 , NULL               , NULL, 5, NULL, NULL);
	MNU_setObj(obj, 5, MNU_NOR, 'C', "Compile"          , NULL, 6, NULL, NULL);

	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, MNUATT_EXIT,
	                                                    obj, "High C Compile" );

	for(;;)
	{
		ret = MNU_start ( mnu );
		switch ( ret )
		{
			case 1: /* hcd386p */
				_highc_set_config(MACROKEY_HIGHC_CCNAME, highc_ccname,
				    "High C compiler name","コンパイラを指定してください。");
				break;

			case 2: /* include path */
				_highc_set_config(MACROKEY_HIGHC_IPATH, highc_ipath,
				    "High C include path","include パスを入力してください。");
				break;

			case 3: /* profile */
				_highc_set_config(MACROKEY_HIGHC_PROFILE, highc_profile,
				    "High C profile","profileの名前を入力してください。");
				break;

			case 4: /* option */
				_highc_set_config(MACROKEY_HIGHC_OPTION, highc_option,
				    "High C option","hcd386p のパラメータを入力してください。");
				break;

			case 6: /* compile */
				highc_compile(pn);
				goto _RET;

			default:
				goto _RET;
		}
	}

_RET:
	MNU_close(mnu);
	MNU_free(obj);
	return (NORMAL);
}
