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.9 by greg, Tue May 13 17:58:33 2003 UTC vs.
Revision 3.18 by schorsch, Thu Jan 1 11:21:55 2004 UTC

# Line 7 | Line 7 | static const char      RCSid[] = "$Id$";
7   *      11/4/98         Greg Ward Larson
8   */
9  
10 #include "holo.h"
11
10   #include <signal.h>
11 + #include <string.h>
12 + #include <stdio.h>
13  
14 + #include "platform.h"
15 + #include "rterror.h"
16 + #include "resolu.h"
17 + #include "rtprocess.h" /* getpid() */
18 + #include "holo.h"
19 +
20   #ifndef BKBSIZE
21   #define BKBSIZE         256             /* beam clump size (kilobytes) */
22   #endif
# Line 19 | Line 25 | char   *progname;
25   char    tempfile[128];
26   int     dupchecking = 0;
27  
28 < extern char     *rindex();
29 < extern long     rhinitcopy();
28 > static long rhinitcopy(int hfd[2], char *infn, char *outfn);
29 > static int nuniq(RAYVAL *rva, int n);
30 > static int bpcmp(const void *b1p, const void *b2p);
31 > static int xferclump(HOLO *hp, int *bq, int nb);
32 > static void copysect(int ifd, int ofd);
33  
34  
35 < main(argc, argv)
36 < int     argc;
37 < char    *argv[];
35 > int
36 > main(
37 >        int     argc,
38 >        char    *argv[]
39 > )
40   {
41          char    *inpname, *outname;
42          int     hdfd[2];
# Line 37 | Line 48 | char   *argv[];
48                  dupchecking++;
49                  argv++; argc--;
50          }
51 <        if (argc < 1 | argc > 2) {
51 >        if ((argc < 1) | (argc > 2)) {
52                  fprintf(stderr, "Usage: %s [-u] input.hdk [output.hdk]\n",
53                                  progname);
54                  exit(1);
# Line 52 | Line 63 | char   *argv[];
63                          error(SYSTEM, errmsg);
64                  }
65                  strcpy(tempfile, inpname);
66 <                if ((outname = rindex(tempfile, '/')) != NULL)
66 >                if ((outname = strrchr(tempfile, '/')) != NULL)
67                          outname++;
68                  else
69                          outname = tempfile;
# Line 64 | Line 75 | char   *argv[];
75          lastopos = 0L;                  /* copy sections one by one */
76          while (nextipos != 0L) {
77                                          /* set input position; get next */
78 <                lseek(hdfd[0], (off_t)nextipos, 0);
78 >                lseek(hdfd[0], (off_t)nextipos, SEEK_SET);
79                  read(hdfd[0], (char *)&nextipos, sizeof(nextipos));
80                                          /* get output position; set last */
81 <                thisopos = lseek(hdfd[1], (off_t)0L, 2);
81 >                thisopos = lseek(hdfd[1], (off_t)0, SEEK_END);
82                  if (lastopos > 0L) {
83 <                        lseek(hdfd[1], (off_t)lastopos, 0);
83 >                        lseek(hdfd[1], (off_t)lastopos, SEEK_SET);
84                          write(hdfd[1], (char *)&thisopos, sizeof(thisopos));
85 <                        lseek(hdfd[1], (off_t)0L, 2);
85 >                        lseek(hdfd[1], (off_t)0, SEEK_END);
86                  }
87                  lastopos = thisopos;
88                  thisopos = 0L;          /* write place holder */
# Line 87 | Line 98 | char   *argv[];
98                                  outname, inpname);
99                  error(SYSTEM, errmsg);
100          }
101 <        exit(0);
101 >        return 0;
102   }
103  
104  
105 < long
106 < rhinitcopy(hfd, infn, outfn)    /* open files and copy header */
107 < int     hfd[2];                 /* returned file descriptors */
108 < char    *infn, *outfn;
105 > static long
106 > rhinitcopy(     /* open files and copy header */
107 >        int     hfd[2],                 /* returned file descriptors */
108 >        char    *infn,
109 >        char    *outfn
110 > )
111   {
112          FILE    *infp, *outfp;
113          long    ifpos;
# Line 141 | Line 154 | char   *infn, *outfn;
154   }
155  
156  
157 < int
158 < nuniq(rva, n)                   /* sort unique rays to front of beam list */
159 < register RAYVAL *rva;
160 < int     n;
157 > static int
158 > nuniq(                  /* sort unique rays to front of beam list */
159 >        register RAYVAL *rva,
160 >        int     n
161 > )
162   {
163          register int    i, j;
164          RAYVAL  rtmp;
# Line 157 | Line 171 | int    n;
171                                          rva[i].r[1][0]==rva[j].r[1][0] &&
172                                          rva[i].r[1][1]==rva[j].r[1][1] ) {
173                                  n--;            /* swap duplicate with end */
174 <                                copystruct(&rtmp, rva+n);
175 <                                copystruct(rva+n, rva+i);
176 <                                copystruct(rva+i, &rtmp);
174 >                                rtmp = *(rva+n);
175 >                                *(rva+n) = *(rva+i);
176 >                                *(rva+i) = rtmp;
177                                  i--;            /* recheck one we swapped */
178                          }
179          return(n);
# Line 169 | Line 183 | int    n;
183   static BEAMI    *beamdir;
184  
185   static int
186 < bpcmp(b1p, b2p)                 /* compare beam positions on disk */
187 < int     *b1p, *b2p;
186 > bpcmp(                  /* compare beam positions on disk */
187 >        const void      *b1p,
188 >        const void      *b2p
189 > )
190   {
191 <        register long   pdif = beamdir[*b1p].fo - beamdir[*b2p].fo;
191 >        register off_t  pdif = beamdir[*(int*)b1p].fo - beamdir[*(int*)b2p].fo;
192  
193          if (pdif < 0L) return(-1);
194          return(pdif > 0L);
# Line 181 | Line 197 | int    *b1p, *b2p;
197   static HOLO     *hout;
198  
199   static int
200 < xferclump(hp, bq, nb)           /* transfer the given clump to hout and free */
201 < HOLO    *hp;
202 < int     *bq, nb;
200 > xferclump(              /* transfer the given clump to hout and free */
201 >        HOLO    *hp,
202 >        int     *bq,
203 >        int     nb
204 > )
205   {
206          register int    i;
207          register BEAM   *bp;
# Line 196 | Line 214 | int    *bq, nb;
214                  bp = hdgetbeam(hp, bq[i]);
215                  DCHECK(bp==NULL, CONSISTENCY, "empty beam in xferclump");
216                  n = dupchecking ? nuniq(hdbray(bp),bp->nrm) : bp->nrm;
217 <                bcopy((void *)hdbray(bp), (void *)hdnewrays(hout,bq[i],n),
217 >                memcpy((void *)hdnewrays(hout,bq[i],n),(void *)hdbray(bp),
218                                  n*sizeof(RAYVAL));
219                  hdfreebeam(hp, bq[i]);
220          }
# Line 204 | Line 222 | int    *bq, nb;
222          return(0);
223   }
224  
225 < copysect(ifd, ofd)              /* copy holodeck section from ifd to ofd */
226 < int     ifd, ofd;
225 > static void
226 > copysect(               /* copy holodeck section from ifd to ofd */
227 >        int     ifd,
228 >        int     ofd
229 > )
230   {
231          HOLO    *hinp;
232                                          /* load input section directory */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines