ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/meta/plotout.c
Revision: 1.4
Committed: Sat Nov 15 02:13:37 2003 UTC (20 years, 5 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R6P1, rad3R6
Changes since 1.3: +31 -42 lines
Log Message:
Continued ANSIfication, and reduced other compile warnings.

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 schorsch 1.4 static const char RCSid[] = "$Id: plotout.c,v 1.3 2003/10/27 10:28:59 schorsch Exp $";
3 greg 1.1 #endif
4     /*
5     * Program to send meta-files to plot(3X) drivers
6     *
7     * cc -o plotout plotout.c mfio.o syscalls.o misc.o -lplot
8     *
9     * Plot drivers
10     */
11    
12    
13     #ifdef FORTEK
14     #define XCOM "pexpand +vOCIsm -rtpSUR %s"
15     #else
16     #define XCOM "pexpand +vOCIs -rtpSUR %s"
17     #endif
18    
19    
20     #include <fcntl.h>
21    
22 schorsch 1.3 #include "rtprocess.h"
23 greg 1.1 #include "meta.h"
24 schorsch 1.4 #include "plot.h"
25     #include "lib4014/lib4014.h"
26 greg 1.1
27    
28     char *progname;
29    
30     static short newpage = TRUE;
31    
32     static int curx = -1, /* current position */
33     cury = -1;
34    
35     static short curmod = -1; /* current line drawing mode */
36    
37     static char lmode[4][16] = {"solid", "shortdashed",
38     "dotted", "dotdashed"};
39    
40     static PRIMITIVE nextp;
41    
42 schorsch 1.4 static void doglobal(PRIMITIVE *g);
43     static void doprim(register PRIMITIVE *p);
44 greg 1.1
45    
46 schorsch 1.4 int
47     main(
48     int argc,
49     char **argv
50     )
51 greg 1.1 {
52 schorsch 1.3 FILE *fp;
53 greg 1.1 char comargs[200], command[300];
54     short condonly = FALSE, conditioned = FALSE;
55    
56     progname = *argv++;
57     argc--;
58    
59     while (argc && **argv == '-') {
60     switch (*(*argv+1)) {
61     case 'c':
62     condonly = TRUE;
63     break;
64     case 'r':
65     conditioned = TRUE;
66     break;
67     default:
68     error(WARNING, "unknown option");
69     break;
70     }
71     argv++;
72     argc--;
73     }
74    
75     if (conditioned)
76     if (argc)
77     while (argc) {
78     fp = efopen(*argv, "r");
79     plot(fp);
80     fclose(fp);
81     argv++;
82     argc--;
83     }
84     else
85     plot(stdin);
86     else {
87     comargs[0] = '\0';
88     while (argc) {
89     strcat(comargs, " ");
90     strcat(comargs, *argv);
91     argv++;
92     argc--;
93     }
94     sprintf(command, XCOM, comargs);
95     if (condonly)
96     return(system(command));
97     else {
98     if ((fp = popen(command, "r")) == NULL)
99     error(SYSTEM, "cannot execute input filter");
100     plot(fp);
101     pclose(fp);
102     }
103     }
104    
105     return(0);
106     }
107    
108    
109    
110 schorsch 1.4 void
111     plot( /* plot meta-file */
112     FILE *infp
113     )
114 greg 1.1 {
115    
116     openpl();
117     space(0, 0, XYSIZE, XYSIZE);
118    
119     do {
120     readp(&nextp, infp);
121     while (isprim(nextp.com)) {
122     doprim(&nextp);
123     fargs(&nextp);
124     readp(&nextp, infp);
125     }
126     doglobal(&nextp);
127     fargs(&nextp);
128     } while (nextp.com != PEOF);
129    
130     closepl();
131    
132     }
133    
134    
135    
136 schorsch 1.4 void
137     doglobal( /* execute a global command */
138     PRIMITIVE *g
139     )
140 greg 1.1 {
141     int tty;
142     char c;
143    
144     switch (g->com) {
145    
146     case PEOF:
147     break;
148    
149     case PDRAW:
150     fflush(stdout);
151     break;
152    
153     case PEOP:
154     newpage = TRUE;
155     if (!isatty(fileno(stdout)))
156     break;
157     /* fall through */
158    
159 greg 1.2 case PPAUS:
160 greg 1.1 fflush(stdout);
161     tty = open(TTY, O_RDWR);
162     if (g->args != NULL) {
163     write(tty, g->args, strlen(g->args));
164     write(tty, " - (hit return to continue)", 27);
165     } else
166     write(tty, "\007", 1);
167     do {
168     c = '\n';
169     read(tty, &c, 1);
170     } while (c != '\n' && c != '\r');
171     close(tty);
172     break;
173    
174     default:
175     sprintf(errmsg, "unknown command '%c' in doglobal", g->com);
176     error(WARNING, errmsg);
177     break;
178     }
179    
180     }
181    
182    
183    
184 schorsch 1.4 void
185     doprim( /* plot primitive */
186     register PRIMITIVE *p
187     )
188 greg 1.1 {
189    
190     if (newpage) {
191     erase();
192     newpage = FALSE;
193     }
194    
195     switch (p->com) {
196    
197     case PLSEG:
198     plotlseg(p);
199     break;
200    
201     case PMSTR:
202     printstr(p);
203     break;
204    
205     default:
206     sprintf(errmsg, "unknown command '%c' in doprim", p->com);
207     error(WARNING, errmsg);
208     return;
209     }
210    
211     }
212    
213    
214    
215 schorsch 1.4 void
216     printstr( /* output a string */
217     register PRIMITIVE *p
218     )
219 greg 1.1 {
220    
221     move(p->xy[XMN], p->xy[YMX]);
222     label(p->args);
223     curx = -1;
224     cury = -1;
225    
226     }
227    
228    
229 schorsch 1.4 void
230     plotlseg( /* plot a line segment */
231     register PRIMITIVE *p
232     )
233 greg 1.1 {
234     static short right = FALSE;
235     int y1, y2;
236     short lm = (p->arg0 >> 4) & 03;
237    
238     if (p->arg0 & 0100) {
239     y1 = p->xy[YMX];
240     y2 = p->xy[YMN];
241     } else {
242     y1 = p->xy[YMN];
243     y2 = p->xy[YMX];
244     }
245    
246     if (lm != curmod) {
247     linemod(lmode[lm]);
248     curmod = lm;
249     }
250    
251     if (p->xy[XMN] == curx && y1 == cury) {
252     cont(p->xy[XMX], y2);
253     curx = p->xy[XMX];
254     cury = y2;
255     } else if (p->xy[XMX] == curx && y2 == cury) {
256     cont(p->xy[XMN], y1);
257     curx = p->xy[XMN];
258     cury = y1;
259 schorsch 1.4 } else if ((right = !right)) {
260 greg 1.1 line(p->xy[XMN], y1, p->xy[XMX], y2);
261     curx = p->xy[XMX];
262     cury = y2;
263     } else {
264     line(p->xy[XMX], y2, p->xy[XMN], y1);
265     curx = p->xy[XMN];
266     cury = y1;
267     }
268     }