--- ray/src/util/rad.c 1993/11/11 13:17:01 2.31 +++ ray/src/util/rad.c 1994/01/01 12:12:32 2.38 @@ -1,4 +1,4 @@ -/* Copyright (c) 1993 Regents of the University of California */ +/* Copyright (c) 1994 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -11,6 +11,7 @@ static char SCCSid[] = "$SunId$ LBL"; #include "standard.h" #include "paths.h" #include +#include typedef struct { @@ -101,18 +102,19 @@ char overfile[] = "overture.raw"; char overfile[] = "/dev/null"; #endif -extern unsigned long fdate(), time(); +extern time_t fdate(), time(); -unsigned long scenedate; /* date of latest scene or object file */ -unsigned long octreedate; /* date of octree */ -unsigned long matdate; /* date of latest material file */ -unsigned long illumdate; /* date of last illum file */ +time_t scenedate; /* date of latest scene or object file */ +time_t octreedate; /* date of octree */ +time_t matdate; /* date of latest material file */ +time_t illumdate; /* date of last illum file */ char *oct0name; /* name of pre-mkillum octree */ -unsigned long oct0date; /* date of pre-mkillum octree */ +time_t oct0date; /* date of pre-mkillum octree */ char *oct1name; /* name of post-mkillum octree */ -unsigned long oct1date; /* date of post-mkillum octree (>= matdate) */ +time_t oct1date; /* date of post-mkillum octree (>= matdate) */ +int nowarn = 0; /* no warnings */ int explicate = 0; /* explicate variables */ int silent = 0; /* do work silently */ int noaction = 0; /* don't do anything */ @@ -133,6 +135,7 @@ int argc; char *argv[]; { char ropts[512]; + char popts[64]; int i; progname = argv[0]; @@ -157,6 +160,9 @@ char *argv[]; case 'v': viewselect = argv[++i]; break; + case 'w': + nowarn++; + break; default: goto userr; } @@ -184,12 +190,12 @@ char *argv[]; /* check date on ambient file */ checkambfile(); /* run simulation */ - renderopts(ropts); + renderopts(ropts, popts); xferopts(ropts); if (rvdevice != NULL) - rview(ropts); + rview(ropts, popts); else - rpict(ropts); + rpict(ropts, popts); exit(0); userr: fprintf(stderr, @@ -252,7 +258,6 @@ setvariable(ass) /* assign variable according to stri register char *ass; { char varname[32]; - char varval[512]; int n; register char *cp; register VARIABLE *vp; @@ -273,7 +278,7 @@ register char *ass; for (n = strlen(ass); n > 0; n--) if (!isspace(ass[n-1])) break; - if (!n) { + if (!n && !nowarn) { fprintf(stderr, "%s: warning - missing value for variable '%s'\n", progname, varname); return; @@ -359,7 +364,9 @@ register VARIABLE *vp; { if (vp->nass < 2) return; - fprintf(stderr, "%s: warning - multiple assignment of variable '%s'\n", + if (!nowarn) + fprintf(stderr, + "%s: warning - multiple assignment of variable '%s'\n", progname, vp->name); do vp->value += strlen(vp->value)+1; @@ -460,12 +467,12 @@ register VARIABLE *vp; } -unsigned long +time_t checklast(fnames) /* check files and find most recent */ register char *fnames; { char thisfile[MAXPATH]; - unsigned long thisdate, lastdate = 0; + time_t thisdate, lastdate = 0; register char *cp; if (fnames == NULL) @@ -513,7 +520,7 @@ int pred; checkfiles() /* check for existence and modified times */ { - unsigned long objdate; + time_t objdate; if (!vdef(OCTREE)) { if ((vval(OCTREE) = bmalloc(strlen(radname)+5)) == NULL) @@ -641,11 +648,32 @@ setdefaults() /* set default values for unassigned v printvals() /* print variable values */ { - register int i, j; + int i, j, clipline; + register char *cp; + register int k; - for (i = 0; i < NVARS; i++) - for (j = 0; j < vdef(i); j++) - printf("%s= %s\n", vnam(i), nvalue(vv+i, j)); + for (i = 0; i < NVARS; i++) /* print each variable */ + for (j = 0; j < vdef(i); j++) { /* print each assignment */ + fputs(vnam(i), stdout); + fputs("= ", stdout); + k = clipline = ( vv[i].fixval == catvalues ? 64 : 320 ) + - strlen(vnam(i)) ; + cp = nvalue(vv+i, j); + while (*cp) { + putchar(*cp++); + if (--k <= 0) { /* line too long */ + while (*cp && !isspace(*cp)) + putchar(*cp++); /* finish this word */ + if (*cp) { /* start new line */ + putchar('\n'); + fputs(vnam(i), stdout); + putchar('='); + k = clipline; + } + } + } + putchar('\n'); + } fflush(stdout); } @@ -672,7 +700,7 @@ oconv() /* run oconv and mkillum if necessary */ unlink(vval(OCTREE)); exit(1); } - octreedate = time(0); + octreedate = time((time_t *)NULL); } if (oct1name == vval(OCTREE)) /* no mkillum? */ oct1date = octreedate > matdate ? octreedate : matdate; @@ -698,7 +726,7 @@ oconv() /* run oconv and mkillum if necessary */ unlink(oct0name); exit(1); } - oct0date = time(0); + oct0date = time((time_t *)NULL); } mkillumopts(mkopts); /* build mkillum command */ mktemp(illumtmp); @@ -726,7 +754,7 @@ oconv() /* run oconv and mkillum if necessary */ unlink(oct1name); exit(1); } - oct1date = time(0); + oct1date = time((time_t *)NULL); rmfile(illumtmp); } @@ -766,7 +794,7 @@ register char *mo; checkambfile() /* check date on ambient file */ { - unsigned long afdate; + time_t afdate; if (!vdef(AMBFILE)) return; @@ -793,29 +821,31 @@ ambval() /* compute ambient value */ } -renderopts(op) /* set rendering options */ -char *op; +renderopts(op, po) /* set rendering options */ +char *op, *po; { switch(vscale(QUALITY)) { case LOW: - lowqopts(op); + lowqopts(op, po); break; case MEDIUM: - medqopts(op); + medqopts(op, po); break; case HIGH: - lowqopts(op); + hiqopts(op, po); break; } } -lowqopts(op) /* low quality rendering options */ +lowqopts(op, po) /* low quality rendering options */ register char *op; +char *po; { double d, org[3], siz[3]; *op = '\0'; + *po = '\0'; if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], &siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) badvalue(ZONE); @@ -824,22 +854,25 @@ register char *op; d *= 3./(siz[0]+siz[1]+siz[2]); switch (vscale(DETAIL)) { case LOW: - op = addarg(op, "-ps 16 -dp 64"); + po = addarg(po, "-ps 16"); + op = addarg(op, "-dp 64"); sprintf(op, " -ar %d", (int)(4*d)); op += strlen(op); break; case MEDIUM: - op = addarg(op, "-ps 8 -dp 128"); + po = addarg(po, "-ps 8"); + op = addarg(op, "-dp 128"); sprintf(op, " -ar %d", (int)(8*d)); op += strlen(op); break; case HIGH: - op = addarg(op, "-ps 4 -dp 256"); + po = addarg(po, "-ps 4"); + op = addarg(op, "-dp 256"); sprintf(op, " -ar %d", (int)(16*d)); op += strlen(op); break; } - op = addarg(op, "-pt .16"); + po = addarg(po, "-pt .16"); if (vbool(PENUMBRAS)) op = addarg(op, "-ds .4"); else @@ -871,12 +904,14 @@ register char *op; } -medqopts(op) /* medium quality rendering options */ +medqopts(op, po) /* medium quality rendering options */ register char *op; +char *po; { double d, org[3], siz[3]; *op = '\0'; + *po = '\0'; if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], &siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) badvalue(ZONE); @@ -885,25 +920,25 @@ register char *op; d *= 3./(siz[0]+siz[1]+siz[2]); switch (vscale(DETAIL)) { case LOW: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 4" : "-ps 8"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 4" : "-ps 8"); op = addarg(op, "-dp 256"); sprintf(op, " -ar %d", (int)(8*d)); op += strlen(op); break; case MEDIUM: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 3" : "-ps 6"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 3" : "-ps 6"); op = addarg(op, "-dp 512"); sprintf(op, " -ar %d", (int)(16*d)); op += strlen(op); break; case HIGH: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 2" : "-ps 4"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 2" : "-ps 4"); op = addarg(op, "-dp 1024"); sprintf(op, " -ar %d", (int)(32*d)); op += strlen(op); break; } - op = addarg(op, "-pt .08"); + po = addarg(po, "-pt .08"); if (vbool(PENUMBRAS)) op = addarg(op, "-ds .2 -dj .5"); else @@ -938,12 +973,14 @@ register char *op; } -hiqopts(op) /* high quality rendering options */ +hiqopts(op, po) /* high quality rendering options */ register char *op; +char *po; { double d, org[3], siz[3]; *op = '\0'; + *po = '\0'; if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], &siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) badvalue(ZONE); @@ -952,25 +989,25 @@ register char *op; d *= 3./(siz[0]+siz[1]+siz[2]); switch (vscale(DETAIL)) { case LOW: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 8"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 8"); op = addarg(op, "-dp 1024"); sprintf(op, " -ar %d", (int)(16*d)); op += strlen(op); break; case MEDIUM: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 5"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 5"); op = addarg(op, "-dp 2048"); sprintf(op, " -ar %d", (int)(32*d)); op += strlen(op); break; case HIGH: - op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 3"); + po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 3"); op = addarg(op, "-dp 4096"); sprintf(op, " -ar %d", (int)(64*d)); op += strlen(op); break; } - op = addarg(op, "-pt .04"); + po = addarg(po, "-pt .04"); if (vbool(PENUMBRAS)) op = addarg(op, "-ds .1 -dj .7"); else @@ -1283,8 +1320,8 @@ register char *vopts; } -rview(opts) /* run rview with first view */ -char *opts; +rview(opts, po) /* run rview with first view */ +char *opts, *po; { char *vw; char combuf[512]; @@ -1293,7 +1330,7 @@ char *opts; return; if (sayview) printview(vw); - sprintf(combuf, "rview %s%s -R %s ", vw, opts, rifname); + sprintf(combuf, "rview %s%s%s -R %s ", vw, po, opts, rifname); if (rvdevice != NULL) sprintf(combuf+strlen(combuf), "-o %s ", rvdevice); if (vdef(EXPOSURE)) @@ -1306,8 +1343,8 @@ char *opts; } -rpict(opts) /* run rpict and pfilt for each view */ -char *opts; +rpict(opts, po) /* run rpict and pfilt for each view */ +char *opts, *po; { char combuf[1024]; char rawfile[MAXPATH], picfile[MAXPATH], rep[MAXPATH+16], res[32]; @@ -1368,8 +1405,8 @@ char *opts; /* build rpict command */ sprintf(rawfile, "%s_%s.raw", vval(PICTURE), vs); if (fdate(rawfile) >= oct1date) /* recover */ - sprintf(combuf, "rpict%s%s -ro %s %s", - rep, opts, rawfile, oct1name); + sprintf(combuf, "rpict%s%s%s -ro %s %s", + rep, po, opts, rawfile, oct1name); else { if (overture) { /* run overture calculation */ sprintf(combuf, @@ -1386,8 +1423,8 @@ char *opts; rmfile(overfile); #endif } - sprintf(combuf, "rpict%s %s %s%s %s > %s", - rep, vw, res, opts, + sprintf(combuf, "rpict%s %s %s%s%s %s > %s", + rep, vw, res, po, opts, oct1name, rawfile); } if (runcom(combuf)) { /* run rpict */