--- ray/src/rt/text.c 1995/12/05 20:21:39 2.15 +++ ray/src/rt/text.c 2003/02/22 02:07:29 2.20 @@ -1,13 +1,67 @@ -/* Copyright (c) 1995 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: text.c,v 2.20 2003/02/22 02:07:29 greg Exp $"; #endif - /* * text.c - functions for text patterns and mixtures. */ +/* ==================================================================== + * 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 "ray.h" #include "otypes.h" @@ -77,16 +131,12 @@ typedef struct { TLINE tl; /* line list */ } TEXT; -extern char *getlibpath(); - -extern char *fgetword(); - TEXT *gettext(); TLINE *tlalloc(); -text(m, r) +do_text(m, r) register OBJREC *m; RAY *r; { @@ -105,7 +155,7 @@ RAY *r; char *modname = m->oargs.sarg[foreground ? 0 : 1]; if (!strcmp(modname, VOIDID)) omod = OVOID; - else if ((omod = modifier(modname)) == OVOID) { + else if ((omod = lastmod(objndx(m), modname)) == OVOID) { sprintf(errmsg, "undefined modifier \"%s\"", modname); objerror(m, USER, errmsg); } @@ -139,7 +189,6 @@ TLINE * tlalloc(s) /* allocate and assign text line */ char *s; { - extern char *strcpy(); register int siz; register TLINE *tl; @@ -159,7 +208,6 @@ register OBJREC *tm; { #define R (tm->oargs.farg+3) #define D (tm->oargs.farg+6) - extern char *strcpy(); FVECT DxR; double d; FILE *fp; @@ -179,7 +227,10 @@ register OBJREC *tm; /* compute vectors */ fcross(DxR, D, R); fcross(t->right, DxR, D); - d = DOT(D,D)/DOT(t->right,t->right); + d = DOT(t->right,t->right); + if (d <= FTINY*FTINY*FTINY*FTINY) + objerror(tm, USER, "illegal motion vector"); + d = DOT(D,D)/d; for (i = 0; i < 3; i++) t->right[i] *= d; fcross(t->down, R, DxR); @@ -255,10 +306,11 @@ OBJREC *m; return; while ((tlp = tp->tl.next) != NULL) { tp->tl.next = tlp->next; - free((char *)tlp->spc); - free((char *)tlp); + free((void *)tlp->spc); + free((void *)tlp); } - free((char *)tp); + freefont(tp->f); /* release font reference */ + free((void *)tp); m->os = NULL; }