ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/rcontrib.c
(Generate patch)

Comparing ray/src/rt/rcontrib.c (file contents):
Revision 2.21 by greg, Sat Jul 19 18:39:35 2014 UTC vs.
Revision 2.22 by greg, Sat Jul 19 20:03:03 2014 UTC

# Line 216 | Line 216 | rcinit()
216   /************************** MAIN CALCULATION PROCESS ***********************/
217  
218   /* Set parameters for current bin evaluation */
219 < static void
219 > void
220   set_eparams(char *prms)
221   {
222 <        char    vname[64];
223 <        double  value;
224 <        char    *cps, *cpd;
225 <                                        /* assign each variable */
226 <        for (cps = prms; *cps; cps++) {
227 <                if (isspace(*cps))
228 <                        continue;
229 <                if (!isalpha(*cps))
222 >        static char     *last_params = NULL;
223 >        char            vname[RMAXWORD];
224 >        double          value;
225 >        char            *cpd;
226 >                                        /* check if already set */
227 >        if ((prms == NULL) | (prms == last_params))
228 >                return;
229 >        if (last_params != NULL && !strcmp(prms, last_params))
230 >                return;
231 >        last_params = prms;             /* assign each variable */
232 >        while (*prms) {
233 >                if (isspace(*prms)) {
234 >                        ++prms; continue;
235 >                }
236 >                if (!isalpha(*prms))
237                          goto bad_params;
238                  cpd = vname;
239 <                while (*cps && (*cps != '=') & !isspace(*cps)) {
240 <                        if (!isid(*cps))
239 >                while (*prms && (*prms != '=') & !isspace(*prms)) {
240 >                        if (!isid(*prms))
241                                  goto bad_params;
242 <                        *cpd++ = *cps++;
242 >                        *cpd++ = *prms++;
243                  }
244                  if (cpd == vname)
245                          goto bad_params;
246                  *cpd = '\0';
247 <                while (isspace(*cps)) cps++;
248 <                if (*cps++ != '=')
247 >                while (isspace(*prms)) prms++;
248 >                if (*prms++ != '=')
249                          goto bad_params;
250 <                value = atof(cps);
251 <                if ((cps = fskip(cps)) == NULL)
250 >                value = atof(prms);
251 >                if ((prms = fskip(prms)) == NULL)
252                          goto bad_params;
253 <                while (isspace(*cps)) cps++;
254 <                cps += (*cps == ',') | (*cps == ';');
253 >                while (isspace(*prms)) prms++;
254 >                prms += (*prms == ',') | (*prms == ';');
255                  varset(vname, '=', value);
256          }
257          return;
258   bad_params:
259 <        sprintf(errmsg, "bad parameter list '%s'", prms);
259 >        sprintf(errmsg, "bad parameter list '%s'", last_params);
260          error(USER, errmsg);
261   }
262  
263 +
264   /* Our trace call to sum contributions */
265   static void
266   trace_contrib(RAY *r)
267   {
260        static char     *last_params = NULL;
268          MODCONT *mp;
269          double  bval;
270          int     bn;
# Line 275 | Line 282 | trace_contrib(RAY *r)
282                  return;
283  
284          worldfunc(RCCONTEXT, r);                /* else set context */
285 <        if ((mp->params != NULL) & (mp->params != last_params) &&
279 <                        (last_params == NULL || strcmp(mp->params, last_params)))
280 <                set_eparams(last_params = (char *)mp->params);
285 >        set_eparams((char *)mp->params);
286          if ((bval = evalue(mp->binv)) <= -.5)   /* and get bin number */
287                  return;                         /* silently ignore negatives */
288          if ((bn = (int)(bval + .5)) >= mp->nbins) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines