Exemplo n.º 1
0
static long makeTermNames(long needed)
{
	long             i, k;
	long             nterms = NTERMS;
	long             nerrorterms = NERRORTERMS;
	long             nvars = NVARS;
	int              countOnly = (needed == 0);
	char            *termNames, *varName;
	modelPointer     kterm;
	WHERE("makeTermNames");
	
	if (!countOnly)
	{
		termNames = *TERMNAMES;
	}	

	for (i = 0; i < nterms; i++)
	{
		kterm = modelterm(MODEL,i);
		if (modeltermEqual(kterm,(modelPointer) NULLTERM))
		{
			varName = "CONSTANT";
			if (countOnly)
			{
				needed += strlen(varName) + 1;
			}
			else
			{
				strcpy(termNames, varName);
				termNames = skipStrings(termNames, 1);
			}			
		} /*if (modeltermEqual(kterm,(modelPointer) NULLTERM))*/
		else
		{
			/* check to see if it is an error term */
			for (k = 0; k < nerrorterms - 1; k++)
			{
				if (modeltermEqual(kterm, MODELINFO->errorterms + k))
				{
					varName = "ERROR";
					if (countOnly)
					{
						needed += strlen(varName) + ((k >= 9) ? 2 : 1) + 1;
					}
					else
					{
						strcpy(termNames, varName);
						termNames = skipStrings(termNames, 1) - 1;
						if(k >= 9)
						{
							*termNames++ = (k+1)/10 + '0';
						}
						*termNames++ = (k+1)%10 + '0';
						*termNames++  = '\0';
					}
					break;
				} /*if (modeltermEqual(kterm, MODELINFO->errorterms + k))*/
			} /*for (k = 0; k < nerrorterms - 1; k++)*/

			if (k == nerrorterms - 1)
			{/* regular (not error) term */
				for (k = 0; k < nvars; k++)
				{
					if (inTerm(k,kterm))
					{
						int      evaluated = isevaluated(VARNAMES[k+1]);
						
						varName = VARNAME(k+1);

						if (!evaluated && istempname(varName))
						{/* strip off TEMPPREFIX ('@') if temporary name */
							varName++;
						}
						if (countOnly)
						{
							needed += strlen(varName) + 1;
							if (evaluated)
							{
								needed += 2;
							}
						} /*if (countOnly)*/
						else
						{
							if (evaluated)
							{
								*termNames++ = '{';
							}
							strcpy(termNames, varName);
							termNames = skipStrings(termNames, 1) - 1;
							if (evaluated)
							{
								*termNames++ = '}';
							}
							*termNames++ = 
								(moreInTerm(k,kterm,nvars)) ? '.' : '\0';
						} /*if (countOnly){}else{}*/
					 } /*if (inTerm(k,kterm))*/
				 } /*for (k = 0; k < nvars; k++)*/
			} /*if (k == nerrorterms - 1)*/
		} /*if (modeltermEqual(kterm,(modelPointer) NULLTERM)){...}else{...}*/
	} /*for (i = 0; i < nterms; i++)*/

	varName = "ERROR";
	if (countOnly)
	{
		needed += strlen(varName) + ((nerrorterms > 9) ? 2 : 1) + 1;
	}
	else
	{
		strcpy(termNames, varName);
		termNames = skipStrings(termNames, 1) - 1;
		if(nerrorterms > 9)
		{
			*termNames++ = nerrorterms/10 + '0';
		}
		*termNames++ = nerrorterms%10 + '0';
		*termNames++ = '\0';
	} /*if (countOnly){}else{}*/
			
	return (needed);
} /*makeTermNames()*/
Exemplo n.º 2
0
unsigned int istempexpr (expr* e){
	return 		e->sym &&
				e->sym->type_scopespace == var_s &&
				istempname(e->sym->key);
}