ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calprnt.c
Revision: 2.2
Committed: Sat Feb 22 02:07:21 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.1: +70 -16 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 2.2 static const char RCSid[] = "$Id$";
3 greg 1.1 #endif
4     /*
5     * calprint.c - routines for printing calcomp expressions.
6 greg 2.2 */
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 greg 1.1 *
59 greg 2.2 * 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 greg 1.1 */
64    
65     #include <stdio.h>
66    
67     #include "calcomp.h"
68    
69    
70 greg 2.2 void
71 greg 1.1 eprint(ep, fp) /* print a parse tree */
72     register EPNODE *ep;
73     FILE *fp;
74     {
75     static EPNODE *curdef = NULL;
76     register EPNODE *ep1;
77    
78     switch (ep->type) {
79    
80     case VAR:
81     fputs(ep->v.ln->name, fp);
82     break;
83    
84     case SYM:
85     fputs(ep->v.name, fp);
86     break;
87    
88     case FUNC:
89     eprint(ep->v.kid, fp);
90 greg 2.2 fputc('(', fp);
91 greg 1.1 ep1 = ep->v.kid->sibling;
92     while (ep1 != NULL) {
93     eprint(ep1, fp);
94     if ((ep1 = ep1->sibling) != NULL)
95     fputs(", ", fp);
96     }
97 greg 2.2 fputc(')', fp);
98 greg 1.1 break;
99    
100     case ARG:
101     if (curdef == NULL || curdef->v.kid->type != FUNC ||
102     (ep1 = ekid(curdef->v.kid, ep->v.chan)) == NULL) {
103     eputs("Bad argument!\n");
104     quit(1);
105     }
106     eprint(ep1, fp);
107     break;
108    
109     case NUM:
110     fprintf(fp, "%.9g", ep->v.num);
111     break;
112    
113     case UMINUS:
114 greg 2.2 fputc('-', fp);
115 greg 1.2 eprint(ep->v.kid, fp);
116 greg 1.1 break;
117    
118     case CHAN:
119     fprintf(fp, "$%d", ep->v.chan);
120     break;
121    
122     case '=':
123     case ':':
124     ep1 = curdef;
125     curdef = ep;
126     eprint(ep->v.kid, fp);
127 greg 2.2 fputc(' ', fp);
128     fputc(ep->type, fp);
129     fputc(' ', fp);
130 greg 1.1 eprint(ep->v.kid->sibling, fp);
131     curdef = ep1;
132     break;
133    
134     case '+':
135     case '-':
136     case '*':
137     case '/':
138     case '^':
139 greg 2.2 fputc('(', fp);
140 greg 1.1 eprint(ep->v.kid, fp);
141 greg 2.2 fputc(' ', fp);
142     fputc(ep->type, fp);
143     fputc(' ', fp);
144 greg 1.1 eprint(ep->v.kid->sibling, fp);
145 greg 2.2 fputc(')', fp);
146 greg 1.1 break;
147    
148     default:
149     eputs("Bad expression!\n");
150     quit(1);
151    
152     }
153    
154     }
155    
156    
157 greg 2.2 void
158 greg 1.1 dprint(name, fp) /* print a definition (all if no name) */
159     char *name;
160     FILE *fp;
161     {
162     register EPNODE *ep;
163    
164     if (name == NULL)
165     for (ep = dfirst(); ep != NULL; ep = dnext()) {
166     eprint(ep, fp);
167     fputs(";\n", fp);
168     }
169     else if ((ep = dlookup(name)) != NULL) {
170     eprint(ep, fp);
171     fputs(";\n", fp);
172     } else {
173     wputs(name);
174     wputs(": undefined\n");
175     }
176     }