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

Comparing ray/src/common/lamps.c (file contents):
Revision 1.1 by greg, Sat Dec 8 09:28:16 1990 UTC vs.
Revision 2.6 by greg, Sat Feb 22 02:07:22 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1990 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Load lamp data.
6   */
7  
8 + /* ====================================================================
9 + * The Radiance Software License, Version 1.0
10 + *
11 + * Copyright (c) 1990 - 2002 The Regents of the University of California,
12 + * through Lawrence Berkeley National Laboratory.   All rights reserved.
13 + *
14 + * Redistribution and use in source and binary forms, with or without
15 + * modification, are permitted provided that the following conditions
16 + * are met:
17 + *
18 + * 1. Redistributions of source code must retain the above copyright
19 + *         notice, this list of conditions and the following disclaimer.
20 + *
21 + * 2. Redistributions in binary form must reproduce the above copyright
22 + *       notice, this list of conditions and the following disclaimer in
23 + *       the documentation and/or other materials provided with the
24 + *       distribution.
25 + *
26 + * 3. The end-user documentation included with the redistribution,
27 + *           if any, must include the following acknowledgment:
28 + *             "This product includes Radiance software
29 + *                 (http://radsite.lbl.gov/)
30 + *                 developed by the Lawrence Berkeley National Laboratory
31 + *               (http://www.lbl.gov/)."
32 + *       Alternately, this acknowledgment may appear in the software itself,
33 + *       if and wherever such third-party acknowledgments normally appear.
34 + *
35 + * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
36 + *       and "The Regents of the University of California" must
37 + *       not be used to endorse or promote products derived from this
38 + *       software without prior written permission. For written
39 + *       permission, please contact [email protected].
40 + *
41 + * 5. Products derived from this software may not be called "Radiance",
42 + *       nor may "Radiance" appear in their name, without prior written
43 + *       permission of Lawrence Berkeley National Laboratory.
44 + *
45 + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
46 + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48 + * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
49 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51 + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
52 + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
53 + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
54 + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
55 + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56 + * SUCH DAMAGE.
57 + * ====================================================================
58 + *
59 + * This software consists of voluntary contributions made by many
60 + * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
61 + * information on Lawrence Berkeley National Laboratory, please see
62 + * <http://www.lbl.gov/>.
63 + */
64 +
65   #include  <stdio.h>
66 + #include  <stdlib.h>
67   #include  <ctype.h>
68 + #include  "color.h"
69  
70 < extern char     *eindex(), *expsave(), *malloc();
71 < extern FILE     *fropen();
70 > extern char     *eindex(), *expsave();
71 > extern FILE     *frlibopen();
72  
73   typedef struct lamp {
74          char    *pattern;                       /* search pattern */
# Line 48 | Line 104 | char   *file;
104          char    buf[128], str[128];
105          register char   *cp1, *cp2;
106  
107 <        if ((fp = fropen(file)) == NULL)
107 >        if ((fp = frlibopen(file)) == NULL)
108                  return(0);
109          lastp = NULL;
110          while (fgets(buf, sizeof(buf), fp) != NULL) {
# Line 92 | Line 148 | char   *file;
148                                  goto fmterr;
149                          }
150                  } else {                        /* or read specificaion */
151 <                        if ((lp->color=(float *)malloc(3*sizeof(float)))==NULL)
151 >                        if ((lp->color=(float *)malloc(6*sizeof(float)))==NULL)
152                                  goto memerr;
153 <                        if (sscanf(cp1, "%f %f %f", &lp->color[0], &
154 <                                        lp->color[1], &lp->color[2]) != 3) {
153 >                        if (sscanf(cp1, "%f %f %f", &lp->color[3], &
154 >                                        lp->color[4], &lp->color[5]) != 3) {
155                                  cp1 = "bad lamp data";
156                                  goto fmterr;
157                          }
158                                                  /* convert xyY to XYZ */
159 <                        xyz[1] = lp->color[2];
160 <                        xyz[0] = lp->color[0]/lp->color[1] * xyz[1];
161 <                        xyz[2] = xyz[1]*(1./lp->color[1] - 1.) - xyz[0];
159 >                        xyz[1] = lp->color[5];
160 >                        xyz[0] = lp->color[3]/lp->color[4] * xyz[1];
161 >                        xyz[2] = xyz[1]*(1./lp->color[4] - 1.) - xyz[0];
162                                                  /* XYZ to RGB */
163                          cie_rgb(lp->color, xyz);
164                  }
# Line 114 | Line 170 | char   *file;
170                  lastp = lp;
171          }
172          fclose(fp);
173 <        return(1);
173 >        return(lastp != NULL);
174   memerr:
175          fputs("Out of memory in loadlamps\n", stderr);
176          return(-1);
# Line 122 | Line 178 | fmterr:
178          fputs(buf, stderr);
179          fprintf(stderr, "%s: %s\n", file, cp1);
180          return(-1);
181 + }
182 +
183 +
184 + freelamps()                     /* free our lamps list */
185 + {
186 +        register LAMP   *lp1, *lp2;
187 +        
188 +        for (lp1 = lamps; lp1 != NULL; lp1 = lp2) {
189 +                free(lp1->pattern);
190 +                if (lp1->color != NULL) {
191 +                        for (lp2 = lp1->next; lp2 != NULL; lp2 = lp2->next)
192 +                                if (lp2->color == lp1->color)
193 +                                        lp2->color = NULL;
194 +                        free((void *)lp1->color);
195 +                }
196 +                lp2 = lp1->next;
197 +                free((void *)lp1);
198 +        }
199 +        lamps = NULL;
200   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines