--- ray/src/hd/rholo3.c 2003/02/22 02:07:25 3.34 +++ ray/src/hd/rholo3.c 2004/06/08 19:48:30 3.42 @@ -1,12 +1,11 @@ #ifndef lint -static const char RCSid[] = "$Id: rholo3.c,v 3.34 2003/02/22 02:07:25 greg Exp $"; +static const char RCSid[] = "$Id: rholo3.c,v 3.42 2004/06/08 19:48:30 greg Exp $"; #endif /* * Routines for tracking beam compuatations */ #include "rholo.h" -#include "view.h" #ifndef NFRAG2CHUNK #define NFRAG2CHUNK 4096 /* number of fragments to start chunking */ @@ -21,8 +20,6 @@ static const char RCSid[] = "$Id: rholo3.c,v 3.34 2003 #define rchunk(n) (((n)+(RPACKSIZ/2))/RPACKSIZ) -extern time_t time(); - int chunkycmp = 0; /* clump beams together on disk */ static PACKHEAD *complist=NULL; /* list of beams to compute */ @@ -30,8 +27,16 @@ static int complen=0; /* length of complist */ static int listpos=0; /* current list position for next_packet */ static int lastin= -1; /* last ordered position in list */ +static void sortcomplist(void); +static void mergeclists(PACKHEAD *cdest, PACKHEAD *cl1, int n1, PACKHEAD *cl2, int n2); +static void view_list(FILE *fp); +static void ambient_list(void); +static double beamvolume(HOLO *hp, int bi); +static void dispbeam(BEAM *b, HDBEAMI *hb); -int + + +static int beamcmp(b0, b1) /* comparison for compute order */ register PACKHEAD *b0, *b1; { @@ -75,10 +80,11 @@ register PACKHEAD *b0, *b1; } -int -dispbeam(b, hb) /* display a holodeck beam */ -register BEAM *b; -register HDBEAMI *hb; +static void +dispbeam( /* display a holodeck beam */ + register BEAM *b, + register HDBEAMI *hb +) { static int n = 0; static PACKHEAD *p = NULL; @@ -88,11 +94,11 @@ register HDBEAMI *hb; if (b->nrm > n) { /* (re)allocate packet holder */ n = b->nrm; if (p == NULL) p = (PACKHEAD *)malloc(packsiz(n)); - else p = (PACKHEAD *)realloc((char *)p, packsiz(n)); + else p = (PACKHEAD *)realloc((void *)p, packsiz(n)); CHECK(p==NULL, SYSTEM, "out of memory in dispbeam"); } /* assign packet fields */ - bcopy((char *)hdbray(b), (char *)packra(p), b->nrm*sizeof(RAYVAL)); + memcpy((void *)packra(p), (void *)hdbray(b), b->nrm*sizeof(RAYVAL)); p->nr = p->nc = b->nrm; for (p->hd = 0; hdlist[p->hd] != hb->h; p->hd++) if (hdlist[p->hd] == NULL) @@ -106,10 +112,12 @@ register HDBEAMI *hb; } -bundle_set(op, clist, nents) /* bundle set operation */ -int op; -PACKHEAD *clist; -int nents; +extern void +bundle_set( /* bundle set operation */ + int op, + PACKHEAD *clist, + int nents +) { int oldnr, n; HDBEAMI *hbarr; @@ -118,9 +126,9 @@ int nents; /* search for common members */ for (csm = clist+nents; csm-- > clist; ) csm->nc = -1; - qsort((char *)clist, nents, sizeof(PACKHEAD), beamidcmp); + qsort((void *)clist, nents, sizeof(PACKHEAD), beamidcmp); for (i = 0; i < complen; i++) { - csm = (PACKHEAD *)bsearch((char *)(complist+i), (char *)clist, + csm = (PACKHEAD *)bsearch((void *)(complist+i), (void *)clist, nents, sizeof(PACKHEAD), beamidcmp); if (csm == NULL) continue; @@ -166,7 +174,7 @@ int nents; complist = (PACKHEAD *)malloc(nents*sizeof(PACKHEAD)); if (complist == NULL) goto memerr; - bcopy((char *)clist, (char *)complist, nents*sizeof(PACKHEAD)); + memcpy((void *)complist, (void *)clist, nents*sizeof(PACKHEAD)); break; case BS_ADD: /* add to computation set */ case BS_MAX: /* maximum of quantities */ @@ -174,7 +182,7 @@ int nents; if (nents <= 0) return; sortcomplist(); /* sort updated list & new entries */ - qsort((char *)clist, nents, sizeof(PACKHEAD), beamcmp); + qsort((void *)clist, nents, sizeof(PACKHEAD), beamcmp); /* what can't we satisfy? */ for (i = nents, csm = clist; i-- && csm->nr > csm->nc; csm++) ; @@ -225,14 +233,15 @@ memerr: } -double -beamvolume(hp, bi) /* compute approximate volume of a beam */ -HOLO *hp; -int bi; +static double +beamvolume( /* compute approximate volume of a beam */ + HOLO *hp, + int bi +) { GCOORD gc[2]; FVECT cp[4], edgeA, edgeB, cent[2]; - FVECT v, crossp[2], diffv; + FVECT crossp[2], diffv; double vol[2]; register int i; /* get grid coordinates */ @@ -258,9 +267,10 @@ int bi; } -ambient_list() /* compute ambient beam list */ +static void +ambient_list(void) /* compute ambient beam list */ { - int4 wtotal, minrt; + int32 wtotal, minrt; double frac; int i; register int j, k; @@ -299,8 +309,10 @@ ambient_list() /* compute ambient beam list */ } -view_list(fp) /* assign beam priority from view list */ -FILE *fp; +static void +view_list( /* assign beam priority from view list */ + FILE *fp +) { double pa = 1.; VIEW curview; @@ -308,7 +320,7 @@ FILE *fp; char *err; BEAMLIST blist; - copystruct(&curview, &stdview); + curview = stdview; while (nextview(&curview, fp) != EOF) { if ((err = setview(&curview)) != NULL) { error(WARNING, err); @@ -323,9 +335,9 @@ FILE *fp; } -init_global() /* initialize global ray computation */ +extern void +init_global(void) /* initialize global ray computation */ { - register int k; /* free old list and empty queue */ if (complen > 0) { free((void *)complist); @@ -343,10 +355,14 @@ init_global() /* initialize global ray computation * } -mergeclists(cdest, cl1, n1, cl2, n2) /* merge two sorted lists */ -register PACKHEAD *cdest; -register PACKHEAD *cl1, *cl2; -int n1, n2; +static void +mergeclists( /* merge two sorted lists */ + register PACKHEAD *cdest, + register PACKHEAD *cl1, + int n1, + register PACKHEAD *cl2, + int n2 +) { register int cmp; @@ -355,10 +371,10 @@ int n1, n2; else if (!n2) cmp = -1; else cmp = beamcmp(cl1, cl2); if (cmp > 0) { - copystruct(cdest, cl2); + *cdest = *cl2; cl2++; n2--; } else { - copystruct(cdest, cl1); + *cdest = *cl1; cl1++; n1--; } cdest++; @@ -366,7 +382,8 @@ int n1, n2; } -sortcomplist() /* fix our list order */ +static void +sortcomplist(void) /* fix our list order */ { PACKHEAD *list2; int listlen; @@ -387,12 +404,12 @@ sortcomplist() /* fix our list order */ #endif } if (lastin < 0 || listpos*4 >= complen*3) - qsort((char *)complist, complen, sizeof(PACKHEAD), beamcmp); + qsort((void *)complist, complen, sizeof(PACKHEAD), beamcmp); else if (listpos) { /* else sort and merge sublist */ list2 = (PACKHEAD *)malloc(listpos*sizeof(PACKHEAD)); CHECK(list2==NULL, SYSTEM, "out of memory in sortcomplist"); - bcopy((char *)complist,(char *)list2,listpos*sizeof(PACKHEAD)); - qsort((char *)list2, listpos, sizeof(PACKHEAD), beamcmp); + memcpy((void *)list2,(void *)complist,listpos*sizeof(PACKHEAD)); + qsort((void *)list2, listpos, sizeof(PACKHEAD), beamcmp); mergeclists(complist, list2, listpos, complist+listpos, complen-listpos); free((void *)list2); @@ -405,7 +422,7 @@ sortcomplist() /* fix our list order */ complist = NULL; complen = 0; } else if (i < complen-1) { - list2 = (PACKHEAD *)realloc((char *)complist, + list2 = (PACKHEAD *)realloc((void *)complist, (i+1)*sizeof(PACKHEAD)); if (list2 != NULL) complist = list2; @@ -424,12 +441,12 @@ sortcomplist() /* fix our list order */ * list and start again from the beginning. Since * a merge sort is used, the sorting costs are minimal. */ -next_packet(p, n) /* prepare packet for computation */ -register PACKET *p; -int n; +extern int +next_packet( /* prepare packet for computation */ + register PACKET *p, + int n +) { - register int i; - if (listpos > lastin) /* time to sort the list */ sortcomplist(); if (complen <= 0)