--- ray/src/common/rglinst.c 2003/02/22 02:07:22 3.5 +++ ray/src/common/rglinst.c 2004/05/25 22:04:13 3.15 @@ -1,67 +1,19 @@ #ifndef lint -static const char RCSid[] = "$Id: rglinst.c,v 3.5 2003/02/22 02:07:22 greg Exp $"; +static const char RCSid[] = "$Id: rglinst.c,v 3.15 2004/05/25 22:04:13 greg Exp $"; #endif /* * Routines for reading instances and converting to OpenGL. */ -/* ==================================================================== - * The Radiance Software License, Version 1.0 - * - * Copyright (c) 1990 - 2002 The Regents of the University of California, - * through Lawrence Berkeley National Laboratory. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes Radiance software - * (http://radsite.lbl.gov/) - * developed by the Lawrence Berkeley National Laboratory - * (http://www.lbl.gov/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Radiance," "Lawrence Berkeley National Laboratory" - * and "The Regents of the University of California" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact radiance@radsite.lbl.gov. - * - * 5. Products derived from this software may not be called "Radiance", - * nor may "Radiance" appear in their name, without prior written - * permission of Lawrence Berkeley National Laboratory. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of Lawrence Berkeley National Laboratory. For more - * information on Lawrence Berkeley National Laboratory, please see - * . - */ +#include "copyright.h" +#include +#include +#include + +#include "platform.h" +#include "paths.h" +#include "resolu.h" #include "radogl.h" #include "octree.h" @@ -74,13 +26,13 @@ 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 */ @@ -109,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(); @@ -132,12 +84,14 @@ register OBJREC *o; glPopAttrib(); } rgl_checkerr("creating instance"); + return(0); } 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; @@ -164,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); @@ -177,7 +131,6 @@ static OCTINST * getoct(name) /* get/assign octree list id */ char *name; { - extern char *getpath(), *getlibpath(); char *path; register LUENT *lp; register OCTINST *op; @@ -191,7 +144,7 @@ char *name; strcpy(lp->key, name); } if ((op = (OCTINST *)lp->data) == NULL) { - path = getpath(name, getlibpath(), R_OK); + path = getpath(name, getrlibpath(), R_OK); if (path == NULL) { sprintf(errmsg, "cannot find octree \"%s\"", name); error(USER, errmsg); @@ -205,6 +158,7 @@ char *name; return(op); memerr: error(SYSTEM, "out of memory in getoct"); + return NULL; /* pro forma return */ } @@ -223,16 +177,14 @@ FVECT cent; sprintf(errmsg, "cannot open octree file \"%s\"", fname); error(SYSTEM, errmsg); } -#ifdef MSDOS - setmode(fileno(infp), O_BINARY); -#endif + SET_FILE_BINARY(infp); /* get header */ if (checkheader(infp, OCTFMT, NULL) < 0) octerror(USER, "not an octree"); /* 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)); @@ -262,9 +214,7 @@ char *fname; infn = fname; infp = fopen(fname, "r"); /* assume already checked */ -#ifdef MSDOS - setmode(fileno(infp), O_BINARY); -#endif + SET_FILE_BINARY(infp); /* skip header */ getheader(infp, NULL, NULL); /* get format */ @@ -391,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) @@ -413,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++) @@ -435,6 +385,7 @@ loadobj() /* get next object */ return(nobjects++); /* return object id */ memerr: error(SYSTEM, "out of memory in loadobj"); + return OVOID; /* pro forma return */ }