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

Comparing ray/src/rt/mkpmap.c (file contents):
Revision 2.9 by rschregle, Tue Mar 20 19:55:33 2018 UTC vs.
Revision 2.10 by rschregle, Fri Aug 7 01:21:13 2020 UTC

# Line 9 | Line 9 | static const char RCSid[] = "$Id$";
9    
10     Roland Schregle (roland.schregle@{hslu.ch, gmail.com})
11     (c) Fraunhofer Institute for Solar Energy Systems,
12 <       Lucerne University of Applied Sciences & Arts
12 >       supported by the German Research Foundation (DFG)
13 >       under the FARESYS project.
14     (c) Lucerne University of Applied Sciences and Arts,
15 <       supported by the Swiss National Science Foundation (SNSF, #147053)
15 >       supported by the Swiss National Science Foundation (SNSF #147053).
16 >   (c) Tokyo University of Science,
17 >       supported by the JSPS KAKENHI Grant Number JP19KK0115.
18     ======================================================================
19    
20     $Id$    
# Line 97 | Line 100 | void printdefaults()
100     printf("-apD %f\t\t\t\t# predistribution factor\n", preDistrib);
101     printf("-apM %d\t\t\t\t\t# max predistrib passes\n", maxPreDistrib);
102   #if 1
103 <   /* Kept for backwards compat, will be gradually phased out by -lD, -lr */
103 >   /* Kept for backwards compat, will be gradually phased out by -ld, -lr */
104     printf("-apm %ld\t\t\t\t# limit photon bounces\n", photonMaxBounce);
105   #endif
106 <   puts("-apo mod\t\t\t\t# photon port modifier");
107 <   puts("-apO file\t\t\t\t# photon ports from file");
106 >   puts("-apo+ mod\t\t\t\t# photon port modifier");
107 >   puts("-apO+ file\t\t\t\t# photon ports from file");
108     printf("-apP %f\t\t\t\t# precomputation factor\n", finalGather);
109     printf("-apr %d\t\t\t\t\t# random seed\n", randSeed);
110     puts("-aps mod\t\t\t\t# antimatter sensor modifier");
# Line 115 | Line 118 | void printdefaults()
118     printf(clobber ? "-fo+\t\t\t\t\t# force overwrite\n"
119                    : "-fo-\t\t\t\t\t# do not overwrite\n");
120   #ifdef PMAP_EKSPERTZ
121 <   /* NU STUFF for Ze Exspertz! */      
121 >   /* (Formerly) NU STUFF for Ze Exspertz! */      
122     printf("-ld %.1f\t\t\t\t\t# limit photon distance\n", photonMaxDist);
123     printf("-lr %ld\t\t\t\t# limit photon bounces\n", photonMaxBounce);  
124   #endif  
# Line 126 | Line 129 | void printdefaults()
129            colval(cextinction,BLU));          
130     printf("-mg  %.2f\t\t\t\t# scattering eccentricity\n", seccg);
131   #if NIX  
132 <   /* Multiprocessing on NIX only */
132 >   /* Multiprocessing on NIX only; so tuff luck, Windoze Weenies! */
133     printf("-n   %d\t\t\t\t\t# number of parallel processes\n", nproc);
134   #endif  
135     printf("-t   %-9d\t\t\t\t# time between reports\n", photonRepTime);
# Line 137 | Line 140 | void printdefaults()
140  
141   int main (int argc, char* argv [])
142   {
143 <   #define check(ol, al) if (argv [i][ol] || \
144 <                             badarg(argc - i - 1,argv + i + 1, al)) \
145 <                            goto badopt
146 <                            
143 >   #define check(ol, al) if ( \
144 >      argv [i][ol] || badarg(argc - i - 1,argv + i + 1, al) \
145 >   ) goto badopt
146 >  
147 >   /* Evaluate boolean option, setting var accordingly */                        
148     #define check_bool(olen, var) switch (argv [i][olen]) { \
149 <                             case '\0': var = !var; break; \
150 <                             case 'y': case 'Y': case 't': case 'T': \
151 <                             case '+': case '1': var = 1; break; \
152 <                             case 'n': case 'N': case 'f': case 'F': \
153 <                             case '-': case '0': var = 0; break; \
154 <                             default: goto badopt; \
155 <                          }  
149 >      case '\0': \
150 >         var = !var; break; \
151 >      case 'y': case 'Y': case 't': case 'T': case '+': case '1': \
152 >         var = 1; break; \
153 >      case 'n': case 'N': case 'f': case 'F': case '-': case '0': \
154 >         var = 0; break; \
155 >      default: \
156 >         goto badopt; \
157 >   }
158 >  
159 >   /* Evaluate trinary option, setting bits v1 and v2 in var accordingly */
160 >   #define check_tri(olen, v1, v2, var) switch (argv [i][olen]) { \
161 >      case '\0': case '+': \
162 >         var = v1; break; \
163 >      case '-': \
164 >         var = v2; break;\
165 >      case '0': \
166 >         var = v1 | v2; break; \
167 >      default: \
168 >         goto badopt; \
169 >   }
170  
171 <   int loadflags = IO_CHECK | IO_SCENE | IO_TREE | IO_BOUNDS, rval, i, j, n;
172 <   char **portLp = photonPortList, **sensLp = photonSensorList,
173 <        **amblp = NULL;
174 <   struct stat pmstat;
171 >   int      loadflags = IO_CHECK | IO_SCENE | IO_TREE | IO_BOUNDS,
172 >            rval, i, j, n;
173 >   char     **portLp = photonPortList, **sensLp = photonSensorList,
174 >            **amblp = NULL, sbuf [MAXSTR], portFlags [2] = "\0\0";
175 >   struct   stat pmstat;
176  
177     /* Global program name */
178     progname = fixargv0(argv [0]);
# Line 362 | Line 381 | int main (int argc, char* argv [])
381                      
382                       case 'o': /* Photon port */
383                       case 'O':
384 <                        check(4, "s");
384 >                        /* Check for bad arg and length, taking into account
385 >                         * default forward orientation if none specified, in
386 >                         * order to maintain previous behaviour */
387 >                        check(argv [i][4] ? 5 : 4, "s");
388 >                        /* Get port orientation flags */
389 >                        check_tri(
390 >                           4, PMAP_PORTFWD, PMAP_PORTBWD, portFlags [0]
391 >                        );
392 >                        
393                          if (argv [i][3] == 'O') {      
394                             /* Add port modifiers from file */
395 <                           rval = wordfile(portLp,
396 <                                           MAXSET - (portLp - photonPortList),
397 <                                           getpath(argv [++i],
398 <                                           getrlibpath(), R_OK));
395 >                           rval = wordfile(
396 >                              portLp, MAXSET - (portLp - photonPortList),
397 >                              getpath(argv [++i], getrlibpath(), R_OK)
398 >                           );
399                             if (rval < 0) {
400 <                               sprintf(errmsg,
401 <                                       "cannot open photon port file %s",
402 <                                       argv [i]);
400 >                               sprintf(
401 >                                  errmsg, "cannot open photon port file %s",
402 >                                  argv [i]
403 >                               );
404                                 error(SYSTEM, errmsg);
405                             }
406 <                           portLp += rval;
406 >                           /* HACK: append port orientation flags to every
407 >                            * modifier; note this requires reallocation */
408 >                           for (; rval--; portLp++) {
409 >                              j = strlen(*portLp);
410 >                              if (!(*portLp = realloc(*portLp, j + 2))) {
411 >                                  sprintf(
412 >                                     errmsg,
413 >                                     "cannot allocate photon port modifiers"
414 >                                     " from file %s", argv [i]
415 >                                  );
416 >                                  error(SYSTEM, errmsg);
417 >                              }
418 >                              strcat(*portLp, portFlags);
419 >                           }
420                          }
421                          else {
422 <                           /* Add port modifier from next arg, mark end with
423 <                            * NULL */
424 <                           *portLp++ = savqstr(argv [++i]);
422 >                           /* Append port flags to port modifier, add to
423 >                            * port list and mark of end list with NULL */
424 >                           strcpy(sbuf, argv [++i]);
425 >                           strcat(sbuf, portFlags);
426 >                           *portLp++ = savqstr(sbuf);
427                             *portLp = NULL;
428                          }
429                          break;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines