| 33 |  | time_t  endtime;                /* time we should end by */ | 
| 34 |  | time_t  reporttime;             /* time for next report */ | 
| 35 |  |  | 
| 36 | + | long    maxdisk;                /* maximum file space (bytes) */ | 
| 37 | + |  | 
| 38 |  | int     rtargc = 1;             /* rtrace command */ | 
| 39 |  | char    *rtargv[128] = {"rtrace", NULL}; | 
| 40 |  |  | 
| 134 |  | disp_open(outdev); | 
| 135 |  | else if (ncprocs > 0)                   /* else use global ray feed */ | 
| 136 |  | init_global(); | 
| 137 | + | /* record disk space limit */ | 
| 138 | + | if (!vdef(DISKSPACE)) | 
| 139 | + | maxdisk = 0; | 
| 140 | + | else | 
| 141 | + | maxdisk = 1024.*1024.*vflt(DISKSPACE); | 
| 142 |  | /* record end time */ | 
| 143 |  | if (!vdef(TIME) || vflt(TIME) <= FTINY) | 
| 144 |  | endtime = 0; | 
| 205 |  | if (ncprocs <= 0) | 
| 206 |  | return(1); | 
| 207 |  | /* check file size */ | 
| 208 | < | if ((l = 1024.*1024.*vflt(DISKSPACE)) > 0 && | 
| 209 | < | hdfiluse(hdlist[0]->fd, 0) + hdmemuse(0) >= l) | 
| 208 | > | if (maxdisk > 0 && hdfilen(hdlist[0]->fd) >= maxdisk) { | 
| 209 | > | error(WARNING, "file limit exceeded"); | 
| 210 |  | return(0); | 
| 211 | + | } | 
| 212 |  | /* check time */ | 
| 213 |  | if (endtime > 0 || reporttime > 0) | 
| 214 |  | t = time(NULL); | 
| 215 | < | if (endtime > 0 && t >= endtime) | 
| 215 | > | if (endtime > 0 && t >= endtime) { | 
| 216 | > | error(WARNING, "time limit exceeded"); | 
| 217 |  | return(0); | 
| 218 | + | } | 
| 219 |  | if (reporttime > 0 && t >= reporttime) | 
| 220 |  | report(t); | 
| 221 |  | /* get packets to process */ | 
| 300 |  | sprintf(vval(OCTREE), "%s.oct", froot); | 
| 301 |  | vdef(OCTREE)++; | 
| 302 |  | } | 
| 293 | – | if (!vdef(DISKSPACE)) { | 
| 294 | – | sprintf(errmsg, | 
| 295 | – | "no %s setting, assuming 100 Mbytes available", | 
| 296 | – | vnam(DISKSPACE)); | 
| 297 | – | error(WARNING, errmsg); | 
| 298 | – | vval(DISKSPACE) = "100"; | 
| 299 | – | vdef(DISKSPACE)++; | 
| 300 | – | } | 
| 303 |  | if (!vdef(OBSTRUCTIONS)) { | 
| 304 |  | vval(OBSTRUCTIONS) = "T"; | 
| 305 |  | vdef(OBSTRUCTIONS)++; | 
| 401 |  | (char *)hdnewrays(hdlist[p->hd],p->bi,p->nr), | 
| 402 |  | p->nr*sizeof(RAYVAL)); | 
| 403 |  | if (outdev != NULL)     /* display it */ | 
| 404 | < | disp_packet(p); | 
| 404 | > | disp_packet((PACKHEAD *)p); | 
| 405 |  | else | 
| 406 |  | nunflushed += p->nr; | 
| 407 | + | nraysdone += p->nr; | 
| 408 | + | npacksdone++; | 
| 409 |  | } | 
| 406 | – | nraysdone += p->nr; | 
| 407 | – | npacksdone++; | 
| 410 |  | p->nr = 0;                      /* push onto free list */ | 
| 411 |  | p->next = freepacks; | 
| 412 |  | freepacks = p; | 
| 421 |  | getradfile(rfargs)              /* run rad and get needed variables */ | 
| 422 |  | char    *rfargs; | 
| 423 |  | { | 
| 424 | < | static short    mvar[] = {VIEW,OCTREE,EXPOSURE,-1}; | 
| 424 | > | static short    mvar[] = {OCTREE,EXPOSURE,-1}; | 
| 425 |  | static char     tf1[] = TEMPLATE; | 
| 426 |  | char    tf2[64]; | 
| 427 |  | char    combuf[256]; | 
| 530 |  | if (vdef(REPORT)) { | 
| 531 |  | long    fsiz, fuse; | 
| 532 |  | report(0); | 
| 533 | < | fsiz = lseek(hdlist[0]->fd, 0L, 2); | 
| 533 | > | fsiz = hdfilen(hdlist[0]->fd); | 
| 534 |  | fuse = hdfiluse(hdlist[0]->fd, 1); | 
| 535 |  | fprintf(stderr, | 
| 536 |  | "%s: %.1f Mbyte holodeck file, %.1f%% fragmentation\n", |