--- ray/src/common/rglinst.c 2003/06/05 19:29:34 3.9 +++ ray/src/common/rglinst.c 2011/02/18 00:40:25 3.16 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rglinst.c,v 3.9 2003/06/05 19:29:34 schorsch Exp $"; +static const char RCSid[] = "$Id: rglinst.c,v 3.16 2011/02/18 00:40:25 greg Exp $"; #endif /* * Routines for reading instances and converting to OpenGL. @@ -7,9 +7,15 @@ static const char RCSid[] = "$Id: rglinst.c,v 3.9 2003 #include "copyright.h" +#include +#include +#include + +#include "platform.h" +#include "paths.h" +#include "resolu.h" #include "radogl.h" #include "octree.h" -#include "platform.h" #define MAXLEVEL 16 /* maximum instance hierarchy level */ @@ -20,20 +26,20 @@ typedef struct { char octfile[256]; /* octree file path */ } OCTINST; /* octree to instantiate */ -static double ogetflt(); -static long ogetint(); -static char *ogetstr(); -static int loadobj(); -static void skiptree(); -static void octerror(); -static OCTINST *getoct(); +static double ogetflt(void); +static long ogetint(int); +static char *ogetstr(char *); +static int loadobj(void); +static void skiptree(void); +static void octerror(int etyp, char *msg); +static OCTINST *getoct(char *); static char *infn; /* input file name */ static FILE *infp; /* input file stream */ static int objsize; /* size of stored OBJECT's */ static short otypmap[NUMOTYPE+8]; /* object type map */ -static unsigned long imhash(mod) char *mod; {return((unsigned long)mod);} +static unsigned long imhash(const char *mod) {return((unsigned long)mod);} static LUTAB imtab = {imhash,NULL,NULL,NULL,0,NULL,0}; static LUTAB ottab = LU_SINIT(free,free); @@ -55,7 +61,7 @@ register OBJREC *o; o->oargs.nsargs-1) objerror(o, USER, "bad transform"); glPushAttrib(GL_TRANSFORM_BIT); - if (xfs.sca < 1.-FTINY | xfs.sca > 1.+FTINY) + if ((xfs.sca < 1.-FTINY) | (xfs.sca > 1.+FTINY)) glEnable(GL_NORMALIZE); glMatrixMode(GL_MODELVIEW); glPushMatrix(); @@ -83,8 +89,9 @@ register OBJREC *o; static int -buildoctlist(lp) /* build octree list */ -LUENT *lp; +buildoctlist(lp, p) /* build octree list */ +const LUENT *lp; +void *p; { int old_dolights = dolights, old_domats = domats; register OCTINST *op = (OCTINST *)lp->data; @@ -111,9 +118,9 @@ loadoctrees() /* load octrees we've saved up */ while (ottab.tsiz) { if (!levelsleft--) error(USER, "too many octree levels -- instance loop?"); - copystruct(&looptab, &ottab); + looptab = ottab; ottab.tsiz = 0; - nocts += lu_doall(&looptab, buildoctlist); + nocts += lu_doall(&looptab, buildoctlist, NULL); lu_done(&looptab); } return(nocts); @@ -151,6 +158,7 @@ char *name; return(op); memerr: error(SYSTEM, "out of memory in getoct"); + return NULL; /* pro forma return */ } @@ -176,7 +184,7 @@ FVECT cent; /* check format */ if ((objsize = ogetint(2)-OCTMAGIC) <= 0 || objsize > MAXOBJSIZ || objsize > sizeof(long)) - octerror("incompatible octree format"); + octerror(USER, "incompatible octree format"); if (cent != NULL) { /* get boundaries (compute center) */ for (i = 0; i < 3; i++) cent[i] = atof(ogetstr(sbuf)); @@ -333,7 +341,7 @@ loadobj() /* get next object */ /* get name id */ ob.oname = ogetstr(idbuf); /* get string arguments */ - if (ob.oargs.nsargs = ogetint(2)) { + if ((ob.oargs.nsargs = ogetint(2))) { ob.oargs.sarg = (char **)malloc (ob.oargs.nsargs*sizeof(char *)); if (ob.oargs.sarg == NULL) @@ -355,9 +363,9 @@ loadobj() /* get next object */ ob.oargs.iarg = NULL; #endif /* get real arguments */ - if (ob.oargs.nfargs = ogetint(2)) { - ob.oargs.farg = (FLOAT *)malloc - (ob.oargs.nfargs*sizeof(FLOAT)); + if ((ob.oargs.nfargs = ogetint(2))) { + ob.oargs.farg = (RREAL *)malloc + (ob.oargs.nfargs*sizeof(RREAL)); if (ob.oargs.farg == NULL) goto memerr; for (i = 0; i < ob.oargs.nfargs; i++) @@ -368,15 +376,16 @@ loadobj() /* get next object */ (*ofun[ob.otype].funp)(&ob); /* record material if modifier */ if (ismodifier(ob.otype)) { - if ((lep = lu_find(&imtab, (char *)nobjects)) == NULL) + if ((lep = lu_find(&imtab, (char *)(size_t)nobjects)) == NULL) goto memerr; - lep->key = (char *)nobjects; + lep->key = (char *)(size_t)nobjects; lep->data = (char *)getmatp(ob.oname); } freefargs(&ob.oargs); /* free arguments */ return(nobjects++); /* return object id */ memerr: error(SYSTEM, "out of memory in loadobj"); + return OVOID; /* pro forma return */ }