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

Comparing ray/src/hd/rhoptimize.c (file contents):
Revision 3.6 by gwlarson, Sat Jan 9 09:23:49 1999 UTC vs.
Revision 3.17 by greg, Wed Oct 22 02:06:34 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1999 Silicon Graphics, Inc. */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ SGI";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Optimize holodeck for quick access.
6   *
7   *      11/4/98         Greg Ward Larson
8   */
9  
13 #include "holo.h"
14
10   #include <signal.h>
11 + #include <string.h>
12  
13 + #include "platform.h"
14 + #include "rtprocess.h" /* getpid() */
15 + #include "holo.h"
16 +
17   #ifndef BKBSIZE
18   #define BKBSIZE         256             /* beam clump size (kilobytes) */
19   #endif
# Line 22 | Line 22 | char   *progname;
22   char    tempfile[128];
23   int     dupchecking = 0;
24  
25 extern char     *rindex();
26 extern int      quit();
25   extern long     rhinitcopy();
26  
27  
# Line 41 | Line 39 | char   *argv[];
39                  dupchecking++;
40                  argv++; argc--;
41          }
42 <        if (argc < 1 | argc > 2) {
42 >        if ((argc < 1) | (argc > 2)) {
43                  fprintf(stderr, "Usage: %s [-u] input.hdk [output.hdk]\n",
44                                  progname);
45                  exit(1);
# Line 56 | Line 54 | char   *argv[];
54                          error(SYSTEM, errmsg);
55                  }
56                  strcpy(tempfile, inpname);
57 <                if ((outname = rindex(tempfile, '/')) != NULL)
57 >                if ((outname = strrchr(tempfile, '/')) != NULL)
58                          outname++;
59                  else
60                          outname = tempfile;
# Line 68 | Line 66 | char   *argv[];
66          lastopos = 0L;                  /* copy sections one by one */
67          while (nextipos != 0L) {
68                                          /* set input position; get next */
69 <                lseek(hdfd[0], nextipos, 0);
69 >                lseek(hdfd[0], (off_t)nextipos, SEEK_SET);
70                  read(hdfd[0], (char *)&nextipos, sizeof(nextipos));
71                                          /* get output position; set last */
72 <                thisopos = lseek(hdfd[1], 0L, 2);
72 >                thisopos = lseek(hdfd[1], (off_t)0, SEEK_END);
73                  if (lastopos > 0L) {
74 <                        lseek(hdfd[1], lastopos, 0);
74 >                        lseek(hdfd[1], (off_t)lastopos, SEEK_SET);
75                          write(hdfd[1], (char *)&thisopos, sizeof(thisopos));
76 <                        lseek(hdfd[1], 0L, 2);
76 >                        lseek(hdfd[1], (off_t)0, SEEK_END);
77                  }
78                  lastopos = thisopos;
79                  thisopos = 0L;          /* write place holder */
# Line 107 | Line 105 | char   *infn, *outfn;
105                  sprintf(errmsg, "cannot open \"%s\" for reading", infn);
106                  error(SYSTEM, errmsg);
107          }
108 +        if (access(outfn, F_OK) == 0) {
109 +                sprintf(errmsg, "output file \"%s\" already exists!", outfn);
110 +                error(USER, errmsg);
111 +        }
112          if ((outfp = fopen(outfn, "w+")) == NULL) {
113                  sprintf(errmsg, "cannot open \"%s\" for writing", outfn);
114                  error(SYSTEM, errmsg);
# Line 157 | Line 159 | int    n;
159                                          rva[i].r[1][0]==rva[j].r[1][0] &&
160                                          rva[i].r[1][1]==rva[j].r[1][1] ) {
161                                  n--;            /* swap duplicate with end */
162 <                                copystruct(&rtmp, rva+n);
163 <                                copystruct(rva+n, rva+i);
164 <                                copystruct(rva+i, &rtmp);
162 >                                rtmp = *(rva+n);
163 >                                *(rva+n) = *(rva+i);
164 >                                *(rva+i) = rtmp;
165                                  i--;            /* recheck one we swapped */
166                          }
167          return(n);
# Line 172 | Line 174 | static int
174   bpcmp(b1p, b2p)                 /* compare beam positions on disk */
175   int     *b1p, *b2p;
176   {
177 <        register long   pdif = beamdir[*b1p].fo - beamdir[*b2p].fo;
177 >        register off_t  pdif = beamdir[*b1p].fo - beamdir[*b2p].fo;
178  
179          if (pdif < 0L) return(-1);
180          return(pdif > 0L);
# Line 190 | Line 192 | int    *bq, nb;
192          int     n;
193  
194          beamdir = hp->bi;               /* sort based on file position */
195 <        qsort((char *)bq, nb, sizeof(*bq), bpcmp);
195 >        qsort((void *)bq, nb, sizeof(*bq), bpcmp);
196                                          /* transfer and free each beam */
197          for (i = 0; i < nb; i++) {
198                  bp = hdgetbeam(hp, bq[i]);
199                  DCHECK(bp==NULL, CONSISTENCY, "empty beam in xferclump");
200                  n = dupchecking ? nuniq(hdbray(bp),bp->nrm) : bp->nrm;
201 <                bcopy((char *)hdbray(bp), (char *)hdnewrays(hout,bq[i],n),
201 >                memcpy((void *)hdnewrays(hout,bq[i],n),(void *)hdbray(bp),
202                                  n*sizeof(RAYVAL));
203                  hdfreebeam(hp, bq[i]);
204          }
205 <        hdflush(hout);                  /* write & free clump */
205 >        hdfreebeam(hout, 0);            /* write & free clump */
206          return(0);
207   }
208  
# Line 220 | Line 222 | int    ifd, ofd;
222   }
223  
224  
225 + void
226   eputs(s)                        /* put error message to stderr */
227   register char  *s;
228   {
# Line 239 | Line 242 | register char  *s;
242   }
243  
244  
245 + void
246   quit(code)                      /* exit the program gracefully */
247   int     code;
248   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines