--- ray/src/common/lamps.c 1991/11/12 16:54:46 2.1 +++ ray/src/common/lamps.c 1995/03/01 10:40:18 2.4 @@ -12,7 +12,7 @@ static char SCCSid[] = "$SunId$ LBL"; #include extern char *eindex(), *expsave(), *malloc(); -extern FILE *fropen(); +extern FILE *frlibopen(); typedef struct lamp { char *pattern; /* search pattern */ @@ -48,7 +48,7 @@ char *file; char buf[128], str[128]; register char *cp1, *cp2; - if ((fp = fropen(file)) == NULL) + if ((fp = frlibopen(file)) == NULL) return(0); lastp = NULL; while (fgets(buf, sizeof(buf), fp) != NULL) { @@ -92,17 +92,17 @@ char *file; goto fmterr; } } else { /* or read specificaion */ - if ((lp->color=(float *)malloc(3*sizeof(float)))==NULL) + if ((lp->color=(float *)malloc(6*sizeof(float)))==NULL) goto memerr; - if (sscanf(cp1, "%f %f %f", &lp->color[0], & - lp->color[1], &lp->color[2]) != 3) { + if (sscanf(cp1, "%f %f %f", &lp->color[3], & + lp->color[4], &lp->color[5]) != 3) { cp1 = "bad lamp data"; goto fmterr; } /* convert xyY to XYZ */ - xyz[1] = lp->color[2]; - xyz[0] = lp->color[0]/lp->color[1] * xyz[1]; - xyz[2] = xyz[1]*(1./lp->color[1] - 1.) - xyz[0]; + xyz[1] = lp->color[5]; + xyz[0] = lp->color[3]/lp->color[4] * xyz[1]; + xyz[2] = xyz[1]*(1./lp->color[4] - 1.) - xyz[0]; /* XYZ to RGB */ cie_rgb(lp->color, xyz); } @@ -129,7 +129,7 @@ freelamps() /* free our lamps list */ { register LAMP *lp1, *lp2; - for (lp1 = lamps; lp1 != NULL; lp1 = lp1->next) { + for (lp1 = lamps; lp1 != NULL; lp1 = lp2) { free(lp1->pattern); if (lp1->color != NULL) { for (lp2 = lp1->next; lp2 != NULL; lp2 = lp2->next) @@ -137,6 +137,7 @@ freelamps() /* free our lamps list */ lp2->color = NULL; free((char *)lp1->color); } + lp2 = lp1->next; free((char *)lp1); } lamps = NULL;