--- ray/src/rt/rtrace.c 2005/06/02 04:47:27 2.43 +++ ray/src/rt/rtrace.c 2005/06/10 20:44:00 2.46 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rtrace.c,v 2.43 2005/06/02 04:47:27 greg Exp $"; +static const char RCSid[] = "$Id: rtrace.c,v 2.46 2005/06/10 20:44:00 greg Exp $"; #endif /* * rtrace.c - program and variables for individual ray tracing. @@ -50,7 +50,9 @@ void (*trace)() = NULL; /* trace call */ char *tralist[128]; /* list of modifers to trace (or no) */ int traincl = -1; /* include == 1, exclude == 0 */ -#define MAXTSET 511 /* maximum number in trace set */ +#ifndef MAXTSET +#define MAXTSET 1024 /* maximum number in trace set */ +#endif OBJECT traset[MAXTSET+1]={0}; /* trace include/exclude set */ int hresolu = 0; /* horizontal (scan) size */ @@ -74,7 +76,7 @@ double specjitter = 1.; /* specular sampling jitter int backvis = 1; /* back face visibility */ -int maxdepth = 8; /* maximum recursion depth */ +int maxdepth = -10; /* maximum recursion depth */ double minweight = 2e-3; /* minimum ray weight */ char *ambfile = NULL; /* ambient file name */ @@ -148,7 +150,8 @@ rtrace( /* trace rays from file */ char *fname ) { - long vcount = hresolu>1 ? hresolu*vresolu : vresolu; + unsigned long vcount = (hresolu > 1) ? (unsigned long)hresolu*vresolu + : vresolu; long nextflush = hresolu; FILE *fp; double d; @@ -187,7 +190,7 @@ rtrace( /* trace rays from file */ d = normalize(direc); if (d == 0.0) { /* zero ==> flush */ bogusray(); - if (--nextflush <= 0 || vcount <= 0) { + if (--nextflush <= 0 || !vcount) { fflush(stdout); nextflush = hresolu; } @@ -199,18 +202,18 @@ rtrace( /* trace rays from file */ else rad(orig, direc, lim_dist ? d : 0.0); /* flush if time */ - if (--nextflush == 0) { + if (!--nextflush) { fflush(stdout); nextflush = hresolu; } } if (ferror(stdout)) error(SYSTEM, "write error"); - if (--vcount == 0) /* check for end */ + if (vcount && !--vcount) /* check for end */ break; } fflush(stdout); - if (vcount > 0) + if (vcount) error(USER, "unexpected EOF on input"); if (fname != NULL) fclose(fp);