static  char    sccsid[]="%Z% %M% %I% %E% %U%";
/*************************************************/
/*  Program name                                 */
/*       int       col_mn_tr_define              */
/* --------------------------------------------- */
/*  (I/O)                                        */
/*       Out        0   :Normal                  */
/*                 -1   :AbNormal                */
/* --------------------------------------------- */
/*  Function :                                   */
/*     Paragraph タグの処理を行う。              */
/* --------------------------------------------- */
/*************************************************/
/* */

#include "colmn.h"          /* 構造体定義 */

extern GlobalCt *pGlobTable;
extern condList  CLcList;  /* 情報リスト */

/*********************************************/
/*                                           */
/*********************************************/
int cl_tr_get_def_is(scno)
int scno;
{
	int is;

	if (scno == CS_TYPE) is = 3;
/*	else if (scno == CS_MAPPEDARRAY) is = 1;	*/
	else if (scno == CS_VAR) is = 1;
	else if (scno == CS_OPTION) is = -1;
	else is = 0;

	return is;
}

/*********************************************/
/*                                           */
/*********************************************/
int col_mn_tr_define()
{
	int  rc,m,scno,is,no_def_node;
	char *name;
	qSubCommand *sc;
	parmList *pL;

	if (CLcList.cmd.cid == C_DIM) {
		name = "col_mn_tr_dim";
		m = 1;
#if 1
		if (cl_nest_tag(1) == SysError)
			/* PROCの外側 */
			no_def_node = 0;
		else
			no_def_node = 1;
#else
		no_def_node = cl_search_not_on();
#endif
	}
	else if (CLcList.cmd.cid == C_REDEFINE) {
		name = "col_mn_tr_re_define";
		m = 1;
		no_def_node = 1;
	}
	else {
		if (CLcList.cmd.cid == C_DEFINE) {
			name = "col_mn_tr_define";
			m = 1;
			no_def_node = 0;
		}
		else if (CLcList.cmd.cid == C_IMPORT) {
			name = "col_mn_tr_import";
			m = 1;
#if 1
			no_def_node = 0;
#else
			if (no_def_node=cl_search_not_on()) {
				ERROROUT1(FORMAT(61),name);	/* %s: 先頭以外には、指定できません。 */
				return ECL_TR_DEFINE;
			}
#endif
		}
		else return -1;
#if 0
		if (no_def_node=cl_search_not_on()) {
			ERROROUT1(FORMAT(61),name);	/* %s: 先頭以外には、指定できません。 */
			return ECL_TR_DEFINE;
		}
#endif
	}
	rc = 0;
	if (CLcList.cmd.prmnum < m) {
		ERROROUT1(FORMAT(42),name);	/* %s: パラメータが足りません。 */
		rc = ECL_TR_DEFINE;
	}
	else if (CLcList.cmd.cid==C_IMPORT && CLcList.cmd.prmnum > 3) {
		/* %s: 余分なパラメータ[%s]があります。 */
		ERROROUT2(FORMAT(43),name,CLcList.cmd.prmp[3]->prp);
		rc = ECL_TR_DEFINE;
	}

	if (!rc) {
		if (CLcList.cmd.cid==C_DEFINE || CLcList.cmd.cid==C_REDEFINE) {
			scno = cl_tr_set_scno(CS_ARRAY,0x01,0xfe);
			if (scno == CS_TYPE) {
				if (!stricmp(CLcList.cmd.prmp[1]->prp,"STRUCT")) is = 3;
				else is = 2;
				CLcList.cmd.prmp[0]->prp[4] = '\0';
				CLcList.cmd.prmp[0]->prmlen = 4;
			}
			else is = cl_tr_get_def_is(scno);
			if (is >= 0) {
				if ((rc=cl_tr_gather(is)) > 0) rc = 0;
			}
			if (scno==CS_OPTION || scno==CS_OPTIONS) {
DEBUGOUTL1(100,"[ %s ]",cl_get_pcmdc_line(&CLcList.cmd));
				if (scno == CS_OPTION)
					rc = let_option(CLcList.cmd.prmnum,CLcList.cmd.prmp,NULL);
				else
					rc = let_options(CLcList.cmd.prmnum,CLcList.cmd.prmp,NULL);
				if (rc < 0) return rc;
			}
		}
		else if (CLcList.cmd.cid == C_DIM) {
			if ((rc=cl_tr_gather(0)) > 0) rc = 0;
		}
	}

	if (!rc) {
		if (!(rc=cl_make_leaf())) {
			if (no_def_node)
				rc = cl_push();
			else
				rc = cl_pushd();
		}
	}

	return rc;
}

int col_mn_tr_re_define()
{
	int rc,scno;
	qSubCommand *sc;
	parmList *pL;
#if 1
	return col_mn_tr_define();
#else
	if (CLcList.cmd.prmnum < 2) {
		ERROROUT1(FORMAT(42),"col_mn_tr_re_define");	/* %s: パラメータが足りません。 */
		rc = ECL_TR_DEFINE;
	}
	else if (!(rc = cl_make_leaf())) rc = cl_push();

	if (!rc) cl_tr_set_scno(CS_ARRAY,0x01,0xfe);

	return rc;
#endif
}

int col_mn_tr_un_define()
{
	int rc;

	if (!CLcList.cmd.prmnum) {
		ERROROUT1(FORMAT(42),"col_mn_tr_un_define");	/* %s: パラメータが足りません。 */
		rc = ECL_TR_DEFINE;
	}
	else if (!(rc = cl_make_leaf())) rc = cl_push();
	return rc;
}
