--- ray/src/util/rad.c 1993/08/24 22:14:21 2.21 +++ ray/src/util/rad.c 1993/09/15 15:11:47 2.25 @@ -117,6 +117,7 @@ char *viewselect = NULL; /* specific view only */ int overture = 0; /* overture calculation needed */ char *progname; /* global argv[0] */ +char *rifname; /* global rad input file name */ char radname[MAXPATH]; /* root Radiance file name */ @@ -155,10 +156,11 @@ char *argv[]; } if (i >= argc) goto userr; + rifname = argv[i]; /* assign Radiance root file name */ - rootname(radname, argv[i]); + rootname(radname, rifname); /* load variable values */ - load(argv[i]); + load(rifname); /* get any additional assignments */ for (i++; i < argc; i++) setvariable(argv[i]); @@ -206,6 +208,9 @@ register char *rn, *fn; } +#define NOCHAR 127 /* constant for character to delete */ + + load(rfname) /* load Radiance simulation file */ char *rfname; { @@ -221,8 +226,7 @@ char *rfname; for (cp = buf; *cp; cp++) { switch (*cp) { case '\\': - case '\n': - *cp = ' '; + *cp++ = NOCHAR; continue; case '#': *cp = '\0'; @@ -242,10 +246,11 @@ setvariable(ass) /* assign variable according to stri register char *ass; { char varname[32]; + char varval[512]; + int n; register char *cp; register VARIABLE *vp; register int i; - int n; while (isspace(*ass)) /* skip leading space */ ass++; @@ -259,11 +264,9 @@ register char *ass; /* trim value */ while (isspace(*ass) || *ass == '=') ass++; - cp = ass + strlen(ass); - do - *cp-- = '\0'; - while (cp >= ass && isspace(*cp)); - n = cp - ass + 1; + for (n = strlen(ass); n > 0; n--) + if (!isspace(ass[n-1])) + break; if (!n) { fprintf(stderr, "%s: warning - missing value for variable '%s'\n", progname, varname); @@ -288,7 +291,17 @@ register char *ass; vp->value = malloc(n+1); if (vp->value == NULL) syserr(progname); - strcpy(vp->value+i, ass); + cp = vp->value+i; /* copy value, squeezing spaces */ + *cp = *ass; + for (i = 1; i <= n; i++) { + if (ass[i] == NOCHAR) + continue; + if (isspace(*cp)) + while (isspace(ass[i])) + i++; + *++cp = ass[i]; + } + *++cp = '\0'; vp->nass++; } @@ -610,17 +623,17 @@ register char *op; d *= 3./(siz[0]+siz[1]+siz[2]); switch (vscale(DETAIL)) { case LOW: - op = addarg(op, "-ps 16 -dp 16"); + op = addarg(op, "-ps 16 -dp 64"); sprintf(op, " -ar %d", (int)(4*d)); op += strlen(op); break; case MEDIUM: - op = addarg(op, "-ps 8 -dp 32"); + op = addarg(op, "-ps 8 -dp 128"); sprintf(op, " -ar %d", (int)(8*d)); op += strlen(op); break; case HIGH: - op = addarg(op, "-ps 4 -dp 64"); + op = addarg(op, "-ps 4 -dp 256"); sprintf(op, " -ar %d", (int)(16*d)); op += strlen(op); break; @@ -672,19 +685,19 @@ register char *op; switch (vscale(DETAIL)) { case LOW: op = addarg(op, vbool(PENUMBRAS) ? "-ps 4" : "-ps 8"); - op = addarg(op, "-dp 64"); + 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"); - op = addarg(op, "-dp 128"); + 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"); - op = addarg(op, "-dp 256"); + op = addarg(op, "-dp 1024"); sprintf(op, " -ar %d", (int)(32*d)); op += strlen(op); break; @@ -739,19 +752,19 @@ register char *op; switch (vscale(DETAIL)) { case LOW: op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 8"); - op = addarg(op, "-dp 256"); + 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"); - op = addarg(op, "-dp 512"); + 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"); - op = addarg(op, "-dp 1024"); + op = addarg(op, "-dp 4096"); sprintf(op, " -ar %d", (int)(64*d)); op += strlen(op); break; @@ -1013,7 +1026,7 @@ char *vn; /* returned view name */ printview(vopts) /* print out selected view */ register char *vopts; { - extern char *atos(); + extern char *atos(), *getenv(); char buf[256]; FILE *fp; register char *cp; @@ -1048,8 +1061,18 @@ register char *vopts; while (isspace(*vopts)) vopts++; putchar(' '); - while (*vopts && !isspace(*vopts)) - putchar(*vopts++); +#ifdef MSDOS + if (*vopts == '$') { /* expand env. var. */ + if (!*atos(buf, sizeof(buf), vopts+1)) + return(-1); + if ((cp = getenv(buf)) == NULL) + return(-1); + fputs(cp, stdout); + vopts = sskip(vopts); + } else +#endif + while (*vopts && !isspace(*vopts)) + putchar(*vopts++); } } while (*vopts++); putchar('\n'); @@ -1067,7 +1090,7 @@ char *opts; return; if (sayview) printview(vw); - sprintf(combuf, "rview %s%s ", vw, opts); + sprintf(combuf, "rview %s%s -R %s ", vw, opts, rifname); if (rvdevice != NULL) sprintf(combuf+strlen(combuf), "-o %s ", rvdevice); strcat(combuf, vval(OCTREE));