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

Comparing src/gen/mkillum.c (file contents):
Revision 2.37 by greg, Mon Aug 15 19:48:06 2011 UTC vs.
Revision 2.45 by greg, Tue Apr 22 04:45:25 2025 UTC

# Line 8 | Line 8 | static const char RCSid[] = "$Id$";
8   #include  <signal.h>
9   #include  <ctype.h>
10  
11 + #include  "paths.h"             /* win_popen() */
12   #include  "mkillum.h"
13  
14                                  /* default parameters */
# Line 23 | Line 24 | static const char RCSid[] = "$Id$";
24  
25   struct illum_args  thisillum = {        /* our illum and default values */
26                  0,
26                UDzpos,
27                0.,
27                  DFLMAT,
28                  DFLDAT,
29                  0,
30                  VOIDID,
31                  SAMPDENS,
32                  NSAMPS,
34                NULL,
33                  0.,
34          };
35  
# Line 47 | Line 45 | int    doneheader = 0;         /* printed header yet? */
45   int     warnings = 1;           /* print warnings? */
46  
47   void init(char *octnm, int np);
48 < void filter(register FILE       *infp, char     *name);
48 > void filter(FILE        *infp, char     *name);
49   void xoptions(char      *s, char        *nm);
50   void printopts(void);
51 < void printhead(register int  ac, register char  **av);
51 > void printhead(int  ac, char  **av);
52   void xobject(FILE  *fp, char  *nm);
53  
54  
# Line 63 | Line 61 | main(          /* compute illum distributions using rtrace */
61          int     nprocs = 1;
62          FILE    *fp;
63          int     rval;
64 <        register int    i;
64 >        int     i;
65                                  /* set global arguments */
66          gargv = argv;
67          progname = gargv[0];
# Line 150 | Line 148 | init(char *octnm, int np)              /* start rendering process(
148  
149   void
150   eputs(                          /* put string to stderr */
151 <        register char  *s
151 >        const char  *s
152   )
153   {
154          static int  midline = 0;
# Line 166 | Line 164 | eputs(                         /* put string to stderr */
164  
165  
166   void
167 < wputs(s)                        /* print warning if enabled */
170 < char  *s;
167 > wputs(const char *s)                    /* print warning if enabled */
168   {
169          if (warnings)
170                  eputs(s);
# Line 175 | Line 172 | char  *s;
172  
173  
174   void
175 < quit(ec)                        /* make sure exit is called */
179 < int     ec;
175 > quit(int ec)                    /* make sure exit is called */
176   {
177          if (ray_pnprocs > 0)    /* close children if any */
178 <                ray_pclose(0);          
178 >                ray_pclose(0);
179 >        else if (ray_pnprocs < 0)
180 >                _exit(ec);      /* avoid flush() in child */
181          exit(ec);
182   }
183  
184  
185   void
186   filter(         /* process stream */
187 <        register FILE   *infp,
187 >        FILE    *infp,
188          char    *name
189   )
190   {
191          char    buf[512];
192          FILE    *pfp;
193 <        register int    c;
193 >        int     c;
194  
195          while ((c = getc(infp)) != EOF) {
196                  if (isspace(c))
# Line 209 | Line 207 | filter(                /* process stream */
207                                  error(SYSTEM, errmsg);
208                          }
209                          filter(pfp, buf);
210 <                        pclose(pfp);
210 >                        if (pclose(pfp) != 0) {
211 >                                sprintf(errmsg, "bad status from \"%s\"", buf);
212 >                                error(USER, errmsg);
213 >                        }
214                  } else {                                /* object */
215                          ungetc(c, infp);
216                          xobject(infp, name);
# Line 224 | Line 225 | xoptions(                      /* process options in string s */
225          char    *nm
226   )
227   {
227        extern FILE     *freopen();
228          char    buf[64];
229          int     negax;
230          int     nerrs = 0;
231 <        register char   *cp;
231 >        char    *cp;
232  
233          if (strncmp(s, "#@mkillum", 9) || !isspace(s[9])) {
234                  fputs(s, stdout);               /* not for us */
# Line 306 | Line 306 | xoptions(                      /* process options in string s */
306                          }
307                          cp = sskip(cp);
308                          continue;
309 <                case 'd':                       /* sample density / BSDF data */
309 >                case 'd':                       /* sample density */
310                          if (*++cp != '=')
311                                  break;
312                        if (thisillum.sd != NULL) {
313                                free_BSDF(thisillum.sd);
314                                thisillum.sd = NULL;
315                        }
312                          if (!*++cp || isspace(*cp))
313                                  continue;
314                          if (isintd(cp, " \t\n\r")) {
315                                  thisillum.sampdens = atoi(cp);
316                          } else {
317 <                                atos(buf, sizeof(buf), cp);
318 <                                thisillum.sd = load_BSDF(buf);
323 <                                if (thisillum.sd == NULL)
324 <                                        break;
317 >                                error(WARNING, "direct BSDF input unsupported");
318 >                                goto opterr;
319                          }
320                          cp = sskip(cp);
321                          continue;
# Line 367 | Line 361 | xoptions(                      /* process options in string s */
361                          }
362                          doneheader = 0;
363                          continue;
370                case 'u':                       /* up direction */
371                        if (*++cp != '=')
372                                break;
373                        if (!*++cp || isspace(*cp)) {
374                                thisillum.udir = UDunknown;
375                                continue;
376                        }
377                        negax = 0;
378                        if (*cp == '+')
379                                cp++;
380                        else if (*cp == '-') {
381                                negax++;
382                                cp++;
383                        }
384                        switch (*cp++) {
385                        case 'x':
386                        case 'X':
387                                thisillum.udir = negax ? UDxneg : UDxpos;
388                                break;
389                        case 'y':
390                        case 'Y':
391                                thisillum.udir = negax ? UDyneg : UDypos;
392                                break;
393                        case 'z':
394                        case 'Z':
395                                thisillum.udir = negax ? UDzneg : UDzpos;
396                                break;
397                        default:
398                                thisillum.udir = UDunknown;
399                                break;
400                        }
401                        if (thisillum.udir == UDunknown || !isspace(*cp))
402                                break;
403                        continue;
404                case 't':                       /* object thickness */
405                        if (*++cp != '=')
406                                break;
407                        if (!isfltd(++cp, " \t\n\r"))
408                                break;
409                        thisillum.thick = atof(cp);
410                        if (thisillum.thick < .0)
411                                thisillum.thick = .0;
412                        cp = sskip(cp);
413                        continue;
364                  case '!':                       /* processed file! */
365                          sprintf(errmsg, "(%s): already processed!", nm);
366                          error(WARNING, errmsg);
# Line 456 | Line 406 | printopts(void)                        /* print out option default values *
406          printf("d=%d\t\t\t\t# density of directions\n", thisillum.sampdens);
407          printf("s=%d\t\t\t\t# samples per direction\n", thisillum.nsamps);
408          printf("b=%f\t\t\t# minimum average brightness\n", thisillum.minbrt);
459        switch (thisillum.udir) {
460        case UDzneg:
461                fputs("u=-Z\t\t\t\t# up is negative Z\n", stdout);
462                break;
463        case UDyneg:
464                fputs("u=-Y\t\t\t\t# up is negative Y\n", stdout);
465                break;
466        case UDxneg:
467                fputs("u=-X\t\t\t\t# up is negative X\n", stdout);
468                break;
469        case UDxpos:
470                fputs("u=+X\t\t\t\t# up is positive X\n", stdout);
471                break;
472        case UDypos:
473                fputs("u=+Y\t\t\t\t# up is positive Y\n", stdout);
474                break;
475        case UDzpos:
476                fputs("u=+Z\t\t\t\t# up is positive Z\n", stdout);
477                break;
478        case UDunknown:
479                break;
480        }
481        printf("t=%f\t\t\t# object thickness\n", thisillum.thick);
409   }
410  
411  
412   void
413   printhead(                      /* print out header */
414 <        register int  ac,
415 <        register char  **av
414 >        int  ac,
415 >        char  **av
416   )
417   {
418          putchar('#');

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines