--- ray/src/gen/mkillum.c 1992/11/19 20:27:48 2.5 +++ ray/src/gen/mkillum.c 2003/06/27 22:27:45 2.15 @@ -1,19 +1,16 @@ -/* Copyright (c) 1991 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: mkillum.c,v 2.15 2003/06/27 22:27:45 greg Exp $"; #endif - /* * Make illum sources for optimizing rendering process */ -#include "mkillum.h" - #include - #include +#include "mkillum.h" +#include "platform.h" + /* default parameters */ #define SAMPDENS 48 /* points per projected steradian */ #define NSAMPS 32 /* samples per point */ @@ -30,7 +27,8 @@ char *rtargv[64] = { "rtrace", "-dj", ".25", "-dr", " "-ab", "2", "-ad", "256", "-as", "128", "-aa", ".15", }; int rtargc = 14; /* overriding rtrace options */ -char *myrtopts[] = { "-I-", "-i-", "-ov", "-h-", "-fff", "-y", "0", NULL }; +char *myrtopts[] = { "-I-", "-i-", "-ld-", "-ov", "-h-", + "-fff", "-y", "0", NULL }; struct rtproc rt; /* our rtrace process */ @@ -59,16 +57,11 @@ int doneheader = 0; /* printed header yet? */ int warnings = 1; /* print warnings? */ -extern char *fgetline(), *fgetword(), *sskip(), - *atos(), *iskip(), *fskip(), *strcpy(); -extern FILE *popen(); - main(argc, argv) /* compute illum distributions using rtrace */ int argc; char *argv[]; { - extern char *getenv(), *getpath(); char *rtpath; FILE *fp; register int i; @@ -76,11 +69,27 @@ char *argv[]; gargv = argv; /* set up rtrace command */ for (i = 1; i < argc; i++) { - if (argv[i][0] == '<' && !argv[i][1]) + if (argv[i][0] == '<' && argv[i][1] == '\0') break; rtargv[rtargc++] = argv[i]; if (argv[i][0] == '-' && argv[i][1] == 'w') - warnings = !warnings; + switch (argv[i][2]) { + case '\0': + warnings = !warnings; + break; + case '+': + case 'T': case 't': + case 'Y': case 'y': + case '1': + warnings = 1; + break; + case '-': + case 'F': case 'f': + case 'N': case 'n': + case '0': + warnings = 0; + break; + } } gargc = i; rtargc--; @@ -121,12 +130,13 @@ char *argv[]; } +void quit(status) /* exit with status */ int status; { int rtstat; - rtstat = close_process(rt.pd); + rtstat = close_process(&(rt.pd)); if (status == 0) if (rtstat < 0) error(WARNING, @@ -146,10 +156,12 @@ init() /* start rtrace and set up buffers */ ofun[OBJ_SPHERE].funp = o_sphere; ofun[OBJ_RING].funp = o_ring; /* set up signal handling */ +#ifdef SIGPIPE /* not present on Windows */ signal(SIGPIPE, quit); +#endif /* start rtrace process */ errno = 0; - maxbytes = open_process(rt.pd, rtargv); + maxbytes = open_process(&(rt.pd), rtargv); if (maxbytes == 0) { eputs(rtargv[0]); eputs(": command not found\n"); @@ -164,10 +176,11 @@ init() /* start rtrace and set up buffers */ error(SYSTEM, "out of memory in init"); rt.nrays = 0; /* set up urand */ - initurand(2048); + initurand(16384); } +void eputs(s) /* put string to stderr */ register char *s; { @@ -183,6 +196,7 @@ register char *s; } +void wputs(s) /* print warning if enabled */ char *s; { @@ -242,12 +256,14 @@ char *nm; case ' ': case '\t': case '\n': + case '\r': + case '\f': cp++; continue; case 'm': /* material name */ if (*++cp != '=') break; - if (!*++cp) + if (!*++cp || isspace(*cp)) break; atos(thisillum.matname, MAXSTR, cp); cp = sskip(cp); @@ -259,7 +275,7 @@ char *nm; case 'f': /* data file name */ if (*++cp != '=') break; - if (!*++cp) { + if (!*++cp || isspace(*cp)) { strcpy(thisillum.datafile,thisillum.matname); thisillum.dfnum = 0; thisillum.flags &= ~IL_DATCLB; @@ -309,7 +325,7 @@ char *nm; case 'd': /* point sample density */ if (*++cp != '=') break; - if (!isintd(++cp, " \t\n")) + if (!isintd(++cp, " \t\n\r")) break; thisillum.sampdens = atoi(cp); cp = sskip(cp); @@ -317,7 +333,7 @@ char *nm; case 's': /* point super-samples */ if (*++cp != '=') break; - if (!isintd(++cp, " \t\n")) + if (!isintd(++cp, " \t\n\r")) break; thisillum.nsamps = atoi(cp); cp = sskip(cp); @@ -335,7 +351,7 @@ char *nm; case 'b': /* brightness */ if (*++cp != '=') break; - if (!isfltd(++cp, " \t\n")) + if (!isfltd(++cp, " \t\n\r")) break; thisillum.minbrt = atof(cp); if (thisillum.minbrt < 0.) @@ -345,7 +361,7 @@ char *nm; case 'o': /* output file */ if (*++cp != '=') break; - if (!*++cp) + if (!*++cp || isspace(*cp)) break; atos(buf, sizeof(buf), cp); cp = sskip(cp); @@ -363,7 +379,8 @@ char *nm; return; } opterr: /* skip faulty option */ - cp = sskip(cp); + while (*cp && !isspace(*cp)) + cp++; nerrs++; } /* print header? */ @@ -429,10 +446,10 @@ char *nm; if (fgetword(str, MAXSTR, fp) == NULL) goto readerr; /* is it an alias? */ - if (!strcmp(str, ALIASID)) { + if (!strcmp(str, ALIASKEY)) { if (fgetword(str, MAXSTR, fp) == NULL) goto readerr; - printf("\n%s %s %s", thisillum.altmat, ALIASID, str); + printf("\n%s %s %s", thisillum.altmat, ALIASKEY, str); if (fgetword(str, MAXSTR, fp) == NULL) goto readerr; printf("\t%s\n", str);