--- ray/src/rt/rtrace.c 1989/07/10 15:21:28 1.6 +++ ray/src/rt/rtrace.c 1990/01/19 00:00:26 1.8 @@ -16,6 +16,7 @@ static char SCCSid[] = "$SunId$ LBL"; * xorg yorg zorg xdir ydir zdir * * The direction need not be normalized. Output is flexible. + * If the direction vector is (0,0,0), then the output is flushed. * All values default to ascii representation of real * numbers. Binary representations can be selected * with '-ff' for float or '-fd' for double. By default, @@ -94,14 +95,16 @@ char *fname; while (getvec(orig, inform, fp) == 0 && getvec(direc, inform, fp) == 0) { - if (normalize(direc) == 0.0) - error(USER, "zero direction vector"); + if (normalize(direc) == 0.0) { /* zero ==> flush */ + fflush(stdout); + continue; + } /* compute and print */ if (outvals[0] == 'i') irrad(orig, direc); else radiance(orig, direc); - /* flush if requested */ + /* flush if time */ if (--nextflush == 0) { fflush(stdout); nextflush = hresolu; @@ -223,12 +226,12 @@ FILE *fp; return(-1); break; case 'f': /* binary float */ - if (fread(vf, sizeof(float), 3, fp) != 3) + if (fread((char *)vf, sizeof(float), 3, fp) != 3) return(-1); vec[0] = vf[0]; vec[1] = vf[1]; vec[2] = vf[2]; break; case 'd': /* binary double */ - if (fread(vec, sizeof(double), 3, fp) != 3) + if (fread((char *)vec, sizeof(double), 3, fp) != 3) return(-1); break; } @@ -379,7 +382,7 @@ static putd(v) /* print binary double */ double v; { - fwrite(&v, sizeof(v), 1, stdout); + fwrite((char *)&v, sizeof(v), 1, stdout); } @@ -389,5 +392,5 @@ double v; { float f = v; - fwrite(&f, sizeof(f), 1, stdout); + fwrite((char *)&f, sizeof(f), 1, stdout); }