ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/meta/tbar.c
Revision: 1.1
Committed: Sat Feb 22 02:07:26 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #endif
4 /*
5 * PROGRAM TO PLOT TEL-A-GRAF POINTS TO METAFILE
6 *
7 * Greg Ward
8 * 12/12/84
9 *
10 * cc -o ../tbar tbar.c tgraph.o primout.o mfio.o syscalls.o misc.o -lm
11 */
12
13 #include "tgraph.h"
14
15
16 #define XLEGEND (XBEG+XSIZ+4*TSIZ) /* x start of legend */
17
18 #define YLEGEND (YBEG+2*YSIZ/3) /* y start of legend */
19
20 #define MAXBAR 1000 /* maximum bar width */
21
22 short usecurve[NCUR]; /* booleans for curve usage */
23
24 double xmin, ymin, xmax, ymax; /* domain */
25
26 double xsize, ysize; /* axis dimensions */
27
28 double xmnset = -FHUGE, xmxset = FHUGE, /* domain settings */
29 ymnset = -FHUGE, ymxset = FHUGE;
30
31 short logx = FALSE, logy = FALSE; /* flags for log plots */
32
33 short polar = FALSE; /* flag for polar plots */
34
35 short grid = FALSE; /* flag for grid */
36
37 int curtype[NCUR] = {0, 04, 010, 014, 01, 05, 011, 015,
38 02, 06, 012, 016, 03, 07, 013, 017};
39
40 int ncurves;
41
42 int xlegend,
43 ylegend; /* current legend position */
44
45 int symrad = SYMRAD; /* symbol radius */
46
47 char *progname;
48
49
50
51
52
53 main(argc, argv)
54
55 int argc;
56 char **argv;
57
58 /*
59 * Take Tel-A-Graf runnable files and convert them to
60 * metafile primitives to send to standard output
61 */
62
63 {
64 char tfname[MAXFNAME];
65 FILE *fp;
66 int axflag;
67
68 #ifdef CPM
69 fixargs("tbar", &argc, &argv);
70 #endif
71
72 progname = *argv++;
73 argc--;
74
75 initialize();
76
77 for (; argc && (**argv == '-' || **argv == '+'); argc--, argv++)
78 option(*argv);
79
80 polar = FALSE; /* override stupid choices */
81 logx = FALSE;
82 axflag = BOX|ORIGIN|YTICS|YNUMS;
83 if (grid)
84 axflag |= YGRID;
85
86 if (argc)
87
88 for ( ; argc--; argv++) {
89
90 fp = efopen(*argv, "r");
91 normalize(fp, NULL);
92 if (ymin > 0)
93 ymin = 0;
94 else if (ymax < 0)
95 ymax = 0;
96 xmax++;
97 makeaxis(axflag);
98 fseek(fp, 0L, 0);
99 plot(fp);
100 fclose(fp);
101 }
102 else {
103
104 sprintf(tfname, "%stb%d", TDIR, getpid());
105 fp = efopen(tfname, "w+");
106 normalize(stdin, fp);
107 if (ymin > 0)
108 ymin = 0;
109 else if (ymax < 0)
110 ymax = 0;
111 xmax++;
112 makeaxis(axflag);
113 fseek(fp, 0L, 0);
114 plot(fp);
115 fclose(fp);
116 unlink(tfname);
117 }
118
119 pglob(PEOF, 0200, NULL);
120
121 return(0);
122 }
123
124
125
126
127
128 plot(fp) /* read file and generate plot */
129
130 FILE *fp;
131
132 {
133 int ncur = 0; /* curves seen so far */
134 char line[255], *s;
135 double x, y;
136
137 xlegend = XLEGEND;
138 ylegend = YLEGEND;
139
140 if (ncurves > 0) {
141 pprim(PMSTR, 0100, xlegend, ylegend+800, xlegend, ylegend+800, "Legend:");
142 pprim(PMSTR, 0100, xlegend, ylegend+800, xlegend, ylegend+800, "______");
143 }
144
145 while (fgets(line, sizeof line, fp) != NULL)
146
147 if (istitle(line)) {
148 s = snagquo(line);
149 boxstring(0, 0, YBEG+YSIZ+1000, XYSIZE-1, YBEG+YSIZ+1500, s);
150 }
151
152 else if (isdivlab(line)) {
153 s = line;
154 x = 1;
155 while ((s = snagquo(s)) != NULL) {
156 if (x >= xmin && x <= xmax)
157 boxstring(0, XCONV(x), YBEG-750, XCONV(x+0.66), YBEG-400, s);
158 s += strlen(s)+1;
159 x++;
160 }
161 }
162
163 else if (isxlabel(line)) {
164 s = snagquo(line);
165 boxstring(0, XBEG, YBEG-1250, XBEG+XSIZ, YBEG-900, s);
166 }
167
168 else if (isylabel(line)) {
169 s = snagquo(line);
170 boxstring(020, XBEG-1900, YBEG, XBEG-1550, YBEG+YSIZ, s);
171 }
172
173 else if (islabel(line)) {
174 if (++ncur < NCUR && usecurve[ncur]) {
175 boxout(curtype[ncur], xlegend-200, ylegend, xlegend+200, ylegend+250);
176 pprim(PMSTR, 020, xlegend+400, ylegend+200,
177 xlegend+400, ylegend+200, snagquo(line));
178 ylegend -= 500;
179 }
180 }
181
182 else if (usecurve[ncur] && isdata(line)) {
183
184 if (getdata(line, &x, &y) >= 0)
185 barout(ncur, x, y);
186
187 }
188
189 pglob(PEOP, 0200, NULL);
190
191 }
192
193
194
195 barout(cn, x, y) /* output bar for curve cn, value (x,y) */
196
197 int cn;
198 double x, y;
199
200 {
201 int barleft, barwidth;
202 int barlower, barheight;
203
204 barwidth = XSIZ/xsize/(ncurves+1)*0.66;
205 if (barwidth > MAXBAR)
206 barwidth = MAXBAR;
207
208 barleft = XCONV(x) + cn*barwidth;
209
210 if (y < 0.0) {
211 barlower = YCONV(y);
212 barheight = YCONV(0.0) - barlower;
213 } else {
214 barlower = YCONV(0.0);
215 barheight = YCONV(y) - barlower;
216 }
217 boxout(curtype[cn], barleft, barlower,
218 barleft+barwidth, barlower+barheight);
219
220 }
221
222
223
224 boxout(a0, xmn, ymn, xmx, ymx) /* output a box */
225
226 int a0;
227 int xmn, ymn, xmx, ymx;
228
229 {
230
231 pprim(PRFILL, a0, xmn, ymn, xmx, ymx, NULL);
232 plseg(0, xmn, ymn, xmx, ymn);
233 plseg(0, xmn, ymn, xmn, ymx);
234 plseg(0, xmn, ymx, xmx, ymx);
235 plseg(0, xmx, ymn, xmx, ymx);
236
237 }