| 2075 | // Also update the command line position to point after the parameter. |
| 2076 | |
| 2077 | CONST char *PchGetParameter(CONST char *pchCur, PAR *rgpar, int ifun, |
| 2078 | int iParam, flag fEval) |
| 2079 | { |
| 2080 | char sz[cchSzMax*2], szT[cchSzMax], ch1, ch, *pchEdit; |
| 2081 | CONST char *rgpchEval[2], *pchParam, *pchT; |
| 2082 | int ifunT, iParamT, cch, n; |
| 2083 | real r; |
| 2084 | PAR rgpar2[4+1]; |
| 2085 | flag fSkipEval; |
| 2086 | |
| 2087 | // Skip whitespace. |
| 2088 | while (*pchCur == ' ') |
| 2089 | pchCur++; |
| 2090 | if (*pchCur == chNull) { |
| 2091 | if (ifun >= 0) { |
| 2092 | sprintf(szT, " (%d required) of function %s", rgfun[ifun].nParam, |
| 2093 | rgfun[ifun].szName); |
| 2094 | } else |
| 2095 | *szT = chNull; |
| 2096 | sprintf(sz, "Couldn't get parameter %d%s due to end of line.\n", iParam, |
| 2097 | szT); |
| 2098 | PrintWarning(sz); |
| 2099 | goto LError; |
| 2100 | } |
| 2101 | |
| 2102 | // Get parameter string. |
| 2103 | for (pchParam = pchCur; *pchCur && *pchCur != ' '; pchCur++) |
| 2104 | ; |
| 2105 | cch = (int)(pchCur - pchParam); |
| 2106 | ch1 = *pchParam; |
| 2107 | |
| 2108 | // Evaluate the parameter. First check for integer or real number. |
| 2109 | if (FNumCh(ch1) || ((ch1 == '-' || ch1 == '#') && cch > 1)) { |
| 2110 | for (pchT = pchParam; pchT < pchCur; pchT++) |
| 2111 | if (*pchT == '.') { |
| 2112 | rgpar[0].r = atof(pchParam); |
| 2113 | rgpar[0].fReal = fTrue; |
| 2114 | goto LDone; |
| 2115 | } |
| 2116 | |
| 2117 | CopyRgchToSz(pchParam, cch, szT, cchSzMax); |
| 2118 | rgpar[0].n = NFromSz(szT); |
| 2119 | rgpar[0].fReal = fFalse; |
| 2120 | goto LDone; |
| 2121 | } |
| 2122 | |
| 2123 | // Check for variable name. |
| 2124 | if (ch1 == '%') { |
| 2125 | ch = ChCap(pchParam[1]); |
| 2126 | if (FCapCh(ch)) { |
| 2127 | rgpar[0].n = ch - '@'; |
| 2128 | rgpar[0].fReal = fFalse; |
| 2129 | goto LDone; |
| 2130 | } |
| 2131 | if (FNumCh(ch)) { |
| 2132 | rgpar[0].n = atoi(pchParam + 1); |
| 2133 | rgpar[0].fReal = fFalse; |
| 2134 | goto LDone; |
no test coverage detected