ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/meta/tbar.c
Revision: 1.3
Committed: Mon Jul 14 20:02:29 2003 UTC (20 years, 9 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 1.2: +3 -6 lines
Log Message:
Moved some more platform dependencies to common header files.
Included a few necessary system headers.

File Contents

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