--- ray/src/gen/mkillum.c 1991/07/24 12:22:03 1.4 +++ ray/src/gen/mkillum.c 1991/07/25 15:31:30 1.9 @@ -15,7 +15,7 @@ static char SCCSid[] = "$SunId$ LBL"; #include /* default parameters */ -#define SAMPDENS 128 /* points per projected steradian */ +#define SAMPDENS 48 /* points per projected steradian */ #define NSAMPS 32 /* samples per point */ #define DFLMAT "illum_mat" /* material name */ /* selection options */ @@ -58,7 +58,7 @@ int doneheader = 0; /* printed header yet? */ int warnings = 1; /* print warnings? */ extern char *fgetline(), *fgetword(), *sskip(), - *atos(), *iskip(), *fskip(); + *atos(), *iskip(), *fskip(), *strcpy(); extern FILE *popen(); @@ -89,6 +89,7 @@ char *argv[]; rtargv[rtargc] = NULL; /* just asking for defaults? */ if (!strcmp(argv[gargc-1], "-defaults")) { + printopts(); fflush(stdout); rtpath = getpath(rtargv[0], getenv("PATH"), X_OK); if (rtpath == NULL) { eputs(rtargv[0]); @@ -103,7 +104,7 @@ char *argv[]; init(); if (gargc+1 < argc) for (i = gargc+1; i < argc; i++) { - if ((fp = fopen(argv[i], "r")) == NULL { + if ((fp = fopen(argv[i], "r")) == NULL) { sprintf(errmsg, "cannot open scene file \"%s\"", argv[i]); error(SYSTEM, errmsg); @@ -158,6 +159,8 @@ init() /* start rtrace and set up buffers */ if (rt.buf == NULL || rt.dest == NULL) error(SYSTEM, "out of memory in init"); rt.nrays = 0; + /* set up urand */ + initurand(2048); } @@ -253,6 +256,7 @@ char *nm; if (*++cp != '=') break; if (!*++cp) { + strcpy(thisillum.datafile,thisillum.matname); thisillum.flags &= ~IL_DATCLB; continue; } @@ -263,10 +267,11 @@ char *nm; continue; case 'i': /* include material */ case 'e': /* exclude material */ - matselect = (*cp == 'i') ? S_ELEM : S_COMPL; - if (*++cp != '=') + if (cp[1] != '=') break; - atos(matcheck, MAXSTR, ++cp); + matselect = (*cp == 'i') ? S_ELEM : S_COMPL; + cp += 2; + atos(matcheck, MAXSTR, cp); cp = sskip(cp); continue; case 'a': /* use everything */ @@ -282,12 +287,11 @@ char *nm; break; switch (*++cp) { case 'a': /* average */ - thisillum.flags |= IL_COLAVG; - thisillum.flags &= ~IL_COLDST; + thisillum.flags = (thisillum.flags|IL_COLAVG) + & ~IL_COLDST; break; case 'd': /* distribution */ - thisillum.flags |= IL_COLDST; - thisillum.flags &= ~IL_COLAVG; + thisillum.flags |= (IL_COLDST|IL_COLAVG); break; case 'n': /* none */ thisillum.flags &= ~(IL_COLAVG|IL_COLDST); @@ -337,6 +341,11 @@ char *nm; } doneheader = 0; continue; + case '!': /* processed file! */ + sprintf(errmsg, "(%s): already processed!", nm); + error(WARNING, errmsg); + matselect = S_NONE; + return; } opterr: /* skip faulty option */ cp = sskip(cp); @@ -358,6 +367,16 @@ char *nm; } +printopts() /* print out option default values */ +{ + printf("m=%s\t\t\t# material name\n", thisillum.matname); + printf("f=%s\t\t\t# data file name\n", thisillum.datafile); + printf("c=n\t\t\t\t# color none\n"); + printf("d=%d\t\t\t\t# density of points\n", thisillum.sampdens); + printf("s=%d\t\t\t\t# samples per point\n", thisillum.nsamps); +} + + printhead(ac, av) /* print out header */ register int ac; register char **av; @@ -367,7 +386,7 @@ register char **av; putchar(' '); fputs(*av++, stdout); } - putchar('\n'); + fputs("\n#@mkillum !\n", stdout); }