--- ray/src/rt/rpict.c 1995/12/08 18:49:20 2.41 +++ ray/src/rt/rpict.c 1996/02/14 15:18:05 2.44 @@ -20,7 +20,6 @@ static char SCCSid[] = "$SunId$ LBL"; #include #else #include -#include #include #endif #endif @@ -78,6 +77,7 @@ int maxdepth = 6; /* maximum recursion depth */ double minweight = 5e-3; /* minimum ray weight */ COLOR ambval = BLKCOLOR; /* ambient value */ +int ambvwt = 0; /* initial weight for ambient value */ double ambacc = 0.2; /* ambient accuracy */ int ambres = 32; /* ambient resolution */ int ambdiv = 128; /* ambient divisions */ @@ -140,15 +140,13 @@ int code; #ifndef NIX report() /* report progress */ { + extern char *myhostname(); double u, s; #ifdef BSD - char hostname[257]; struct rusage rubuf; #else struct tms tbuf; - struct utsname nambuf; double period; -#define hostname nambuf.nodename #endif tlastrept = time((time_t *)NULL); @@ -159,7 +157,6 @@ report() /* report progress */ getrusage(RUSAGE_CHILDREN, &rubuf); u += rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec/1e6; s += rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec/1e6; - gethostname(hostname, sizeof(hostname)); #else times(&tbuf); #ifdef _SC_CLK_TCK @@ -169,17 +166,15 @@ report() /* report progress */ #endif u = ( tbuf.tms_utime + tbuf.tms_cutime ) * period; s = ( tbuf.tms_stime + tbuf.tms_cstime ) * period; - uname(&nambuf); #endif sprintf(errmsg, "%lu rays, %4.2f%% after %.3fu %.3fs %.3fr hours on %s\n", nrays, pctdone, u/3600., s/3600., - (tlastrept-tstart)/3600., hostname); + (tlastrept-tstart)/3600., myhostname()); eputs(errmsg); #ifndef BSD signal(SIGCONT, report); -#undef hostname #endif } #else @@ -398,6 +393,8 @@ char *zfile, *oldfile; fprtresolu(hres, vres, stdout); /* recover file and compute first */ i = salvage(oldfile); + if (i >= vres) + goto alldone; if (zfd != -1 && i > 0 && lseek(zfd, (long)i*hres*sizeof(float), 0) == -1) error(SYSTEM, "z-file seek error in render"); @@ -453,18 +450,19 @@ char *zfile, *oldfile; } /* clean up */ signal(SIGCONT, SIG_IGN); - if (zfd != -1) { - if (write(zfd, (char *)zbar[0], hres*sizeof(float)) + if (zfd != -1 && write(zfd, (char *)zbar[0], hres*sizeof(float)) < hres*sizeof(float)) - goto writerr; + goto writerr; + fwritescan(scanbar[0], hres, stdout); + if (fflush(stdout) == EOF) + goto writerr; +alldone: + if (zfd != -1) { if (close(zfd) == -1) goto writerr; for (i = 0; i <= psample; i++) free((char *)zbar[i]); } - fwritescan(scanbar[0], hres, stdout); - if (fflush(stdout) == EOF) - goto writerr; for (i = 0; i <= psample; i++) free((char *)scanbar[i]); if (sampdens != NULL)