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()*/
unsigned int istempexpr (expr* e){ return e->sym && e->sym->type_scopespace == var_s && istempname(e->sym->key); }