ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/rholo.c
(Generate patch)

Comparing ray/src/hd/rholo.c (file contents):
Revision 3.62 by schorsch, Tue Oct 21 19:19:28 2003 UTC vs.
Revision 3.70 by greg, Thu Dec 15 16:47:16 2005 UTC

# Line 5 | Line 5 | static const char      RCSid[] = "$Id$";
5   * Radiance holodeck generation controller
6   */
7  
8 + #include <stdio.h>
9 + #include <time.h>
10   #include <signal.h>
11   #include <sys/stat.h>
12   #include <string.h>
13  
12 #include "rholo.h"
14   #include "platform.h"
15 + #include "rterror.h"
16 + #include "resolu.h"
17 + #include "rholo.h"
18   #include "random.h"
19  
20   #ifndef FRAGWARN
# Line 65 | Line 69 | char  *sigerr[NSIG];           /* signal error messages */
69  
70   extern int      nowarn;         /* turn warnings off? */
71  
72 < extern time_t   time();
72 > static void onsig(int  signo);
73 > static void sigdie(int  signo, char  *msg);
74 > static int resfmode(int fd, int mod);
75 > static void initrholo(void);
76 > static int rholo(void);
77 > static void setdefaults(HDGRID  *gp);
78 > static void creatholo(HDGRID    *gp);
79 > static gethfunc headline;
80 > static void loadholo(void);
81 > static void rootname(char       *rn, char       *fn);
82 > static void badvalue(int        vc);
83  
84  
85 < main(argc, argv)
86 < int     argc;
87 < char    *argv[];
85 > int
86 > main(
87 >        int     argc,
88 >        char    *argv[]
89 > )
90   {
91          int     i;
92  
77        initurand(16384);                       /* initialize urand */
93          progname = argv[0];                     /* get arguments */
94          for (i = 1; i < argc && argv[i][0] == '-'; i++)
95                  switch (argv[i][1]) {
# Line 152 | Line 167 | userr:
167   "Usage: %s [-n nprocs][-o disp][-w][-r|-f] output.hdk [control.hif|+|- [VAR=val ..]]\n",
168                          progname);
169          quit(1);
170 +        return 1; /* pro forma return */
171   }
172  
173  
174 < void
175 < onsig(signo)                            /* fatal signal */
176 < int  signo;
174 > static void
175 > onsig(                          /* fatal signal */
176 >        int  signo
177 > )
178   {
179          static int  gotsig = 0;
180  
# Line 175 | Line 192 | int  signo;
192   }
193  
194  
195 < sigdie(signo, msg)                      /* set fatal signal */
196 < int  signo;
197 < char  *msg;
195 > static void
196 > sigdie(                 /* set fatal signal */
197 >        int  signo,
198 >        char  *msg
199 > )
200   {
201          if (signal(signo, onsig) == SIG_IGN)
202                  signal(signo, SIG_IGN);
# Line 185 | Line 204 | char  *msg;
204   }
205  
206  
207 < int
208 < resfmode(fd, mod)               /* restrict open file access mode */
209 < int     fd, mod;
207 > static int
208 > resfmode(               /* restrict open file access mode */
209 >        int     fd,
210 >        int     mod
211 > )
212   {
213          struct stat     stbuf;
214                                          /* get original mode */
# Line 205 | Line 226 | int    fd, mod;
226   }
227  
228  
229 < initrholo()                     /* get our holodeck running */
229 > static void
230 > initrholo(void)                 /* get our holodeck running */
231   {
232          extern int      global_packet();
233          register int    i;
# Line 294 | Line 316 | memerr:
316   }
317  
318  
319 < rholo()                         /* holodeck main loop */
319 > static int
320 > rholo(void)                             /* holodeck main loop */
321   {
322 <        static long     nextfragwarn = 100*(1L<<20);
322 >        static long     nextfragwarn = 100L<<20;
323          static int      idle = 0;
324          PACKET  *pl = NULL, *plend;
325          off_t   fsiz;
# Line 315 | Line 338 | rholo()                                /* holodeck main loop */
338                  return(0);              /* all done */
339          fsiz = hdfilen(hdlist[0]->fd);  /* check file size */
340          if (maxdisk > 0 && fsiz >= maxdisk) {
341 <                error(WARNING, "file limit exceeded");
341 >                error(USER, "file limit exceeded");
342                  done_rtrace();
343                  return(1);      /* comes back */
344          }
345   #if FRAGWARN
346 <        if (fsiz >= nextfragwarn &&
347 <                (fsiz-hdfiluse(hdlist[0]->fd,0))/(fsiz/100) > FRAGWARN) {
348 <                sprintf(errmsg, "holodeck file fragmentation is %.0f%%",
349 <                                100.*(fsiz-hdfiluse(hdlist[0]->fd,1))/fsiz);
350 <                error(WARNING, errmsg);
351 <                nextfragwarn = fsiz + (fsiz>>2);        /* decent interval */
346 >        if (fsiz >= nextfragwarn) {
347 >                double  pctfrag = 100.*(fsiz-hdfiluse(hdlist[0]->fd))/fsiz;
348 >                if (pctfrag >= (double)FRAGWARN) {
349 >                        sprintf(errmsg, "holodeck file fragmentation is %.0f%%",
350 >                                        pctfrag);
351 >                        error(WARNING, errmsg);
352 >                        nextfragwarn = fsiz + (fsiz>>2);
353 >                } else
354 >                        nextfragwarn = fsiz + (10L<<20);
355          }
356   #endif
357          t = time(NULL);                 /* check time */
358          if (endtime > 0 && t >= endtime) {
359 <                error(WARNING, "time limit exceeded");
359 >                error(USER, "time limit exceeded");
360                  done_rtrace();
361                  return(1);      /* comes back */
362          }
# Line 363 | Line 389 | rholo()                                /* holodeck main loop */
389   }
390  
391  
392 < setdefaults(gp)                 /* set default values */
393 < register HDGRID *gp;
392 > static void
393 > setdefaults(                    /* set default values */
394 >        register HDGRID *gp
395 > )
396   {
397          extern char     *atos();
398          register int    i;
399          int     n;
400          double  len[3], d;
373        char    buf[64];
401  
402          if (!vdef(SECTION)) {
403                  sprintf(errmsg, "%s must be defined", vnam(SECTION));
# Line 420 | Line 447 | register HDGRID        *gp;
447   }
448  
449  
450 < creatholo(gp)                   /* create a holodeck output file */
451 < HDGRID  *gp;
450 > static void
451 > creatholo(                      /* create a holodeck output file */
452 >        HDGRID  *gp
453 > )
454   {
455          extern char     VersionID[];
456          int32   lastloc, nextloc;
# Line 459 | Line 488 | HDGRID *gp;
488   }
489  
490  
491 < int
492 < headline(s)                     /* process information header line */
493 < char    *s;
491 > static int
492 > headline(                       /* process information header line */
493 >        char    *s,
494 >        void    *p
495 > )
496   {
497          extern char     FMTSTR[];
498          register char   *cp;
# Line 485 | Line 516 | char   *s;
516   }
517  
518  
519 < loadholo()                      /* start loading a holodeck from fname */
519 > static void
520 > loadholo(void)                  /* start loading a holodeck from fname */
521   {
522          FILE    *fp;
523          int     fd;
# Line 533 | Line 565 | loadholo()                     /* start loading a holodeck from fname */
565   }
566  
567  
568 < done_packets(pl)                /* handle finished packets */
569 < PACKET  *pl;
568 > extern void
569 > done_packets(           /* handle finished packets */
570 >        PACKET  *pl
571 > )
572   {
573          static int      n2flush = 0;
574          register PACKET *p;
# Line 566 | Line 600 | PACKET *pl;
600   }
601  
602  
603 < rootname(rn, fn)                /* remove tail from end of fn */
604 < register char   *rn, *fn;
603 > static void
604 > rootname(               /* remove tail from end of fn */
605 >        register char   *rn,
606 >        register char   *fn
607 > )
608   {
609          char    *tp, *dp;
610  
# Line 582 | Line 619 | register char  *rn, *fn;
619   }
620  
621  
622 < badvalue(vc)                    /* report bad variable value and exit */
623 < int     vc;
622 > static void
623 > badvalue(                       /* report bad variable value and exit */
624 >        int     vc
625 > )
626   {
627          sprintf(errmsg, "bad value for variable '%s'", vnam(vc));
628          error(USER, errmsg);
# Line 622 | Line 661 | int    ec;
661                  if ((ncprocs > 0) & (force >= 0) && vdef(REPORT)) {
662                          off_t   fsiz, fuse;
663                          fsiz = hdfilen(hdlist[0]->fd);
664 <                        fuse = hdfiluse(hdlist[0]->fd, 1);
664 >                        fuse = hdfiluse(hdlist[0]->fd);
665                          fprintf(stderr,
666                          "%s: %.1f Mbyte holodeck file, %.1f%% fragmentation\n",
667                                          hdkfile, fsiz/(1024.*1024.),

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines