--- ray/src/rt/rpict.c 1993/08/02 21:48:37 2.27 +++ ray/src/rt/rpict.c 1993/11/24 14:28:08 2.35 @@ -12,11 +12,21 @@ static char SCCSid[] = "$SunId$ LBL"; #include "ray.h" +#include + +#ifndef NIX #ifdef BSD #include #include +#else +#include +#include +#include #endif +#endif +extern time_t time(); + #include #include "view.h" @@ -77,10 +87,9 @@ int ralrm = 0; /* seconds between reports */ double pctdone = 0.0; /* percentage done */ -long tlastrept = 0L; /* time at last report */ +time_t tlastrept = 0L; /* time at last report */ -extern long time(); -extern long tstart; /* starting time */ +extern time_t tstart; /* starting time */ extern unsigned long nrays; /* number of rays traced */ @@ -121,32 +130,54 @@ int code; } -#ifdef BSD +#ifndef NIX report() /* report progress */ { + double u, s; +#ifdef BSD + char hostname[257]; struct rusage rubuf; - double t; +#else + struct tms tbuf; + struct utsname nambuf; + double period; +#define hostname nambuf.nodename +#endif + tlastrept = time((time_t *)NULL); +#ifdef BSD getrusage(RUSAGE_SELF, &rubuf); - t = (rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec) / 1e6; - t += rubuf.ru_utime.tv_sec + rubuf.ru_stime.tv_sec; + u = rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec/1e6; + s = rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec/1e6; getrusage(RUSAGE_CHILDREN, &rubuf); - t += (rubuf.ru_utime.tv_usec + rubuf.ru_stime.tv_usec) / 1e6; - t += rubuf.ru_utime.tv_sec + rubuf.ru_stime.tv_sec; + 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); + period = 1.0 / sysconf(_SC_CLK_TCK); + 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%% done after %5.4f CPU hours\n", - nrays, pctdone, t/3600.0); + sprintf(errmsg, + "%lu rays, %4.2f%% after %.3fu %.3fs %.3fr hours on %s\n", + nrays, pctdone, u/3600., s/3600., + (tlastrept-tstart)/3600., hostname); eputs(errmsg); - tlastrept = time((long *)0); +#ifndef BSD + signal(SIGCONT, report); +#undef hostname +#endif } #else report() /* report progress */ { - tlastrept = time((long *)0); - sprintf(errmsg, "%lu rays, %4.2f%% done after %5.4f hours\n", + tlastrept = time((time_t *)NULL); + sprintf(errmsg, "%lu rays, %4.2f%% after %5.4f hours\n", nrays, pctdone, (tlastrept-tstart)/3600.0); eputs(errmsg); - signal(SIGCONT, report); } #endif @@ -205,12 +236,19 @@ char *pout, *zout, *prvr; cp--; strcpy(cp, RFTEMPLATE); prvr = mktemp(fbuf2); - if (rename(fbuf, prvr) < 0 && errno != ENOENT) { - sprintf(errmsg, + if (rename(fbuf, prvr) < 0) + if (errno == ENOENT) { /* ghost file */ + sprintf(errmsg, + "new output file \"%s\"", + fbuf); + error(WARNING, errmsg); + prvr = NULL; + } else { /* serious error */ + sprintf(errmsg, "cannot rename \"%s\" to \"%s\"", fbuf, prvr); - error(SYSTEM, errmsg); - } + error(SYSTEM, errmsg); + } } } npicts = 0; /* render sequence */ @@ -395,7 +433,7 @@ char *zfile, *oldfile; goto writerr; /* record progress */ pctdone = 100.0*(vres-1-ypos)/vres; - if (ralrm > 0 && time((long *)0) >= tlastrept+ralrm) + if (ralrm > 0 && time((time_t *)NULL) >= tlastrept+ralrm) report(); #ifndef BSD else @@ -600,7 +638,8 @@ char *oldfile; getheader(fp, NULL, NULL); /* get picture size */ if (!fscnresolu(&x, &y, fp)) { - sprintf(errmsg, "bad recover file \"%s\"", oldfile); + sprintf(errmsg, "bad recover file \"%s\" - not removed", + oldfile); error(WARNING, errmsg); fclose(fp); return(0);