rationalized handling of child processes, cleaned up mail1 some more
[unix-history] / usr / src / usr.bin / plot / driver.c
CommitLineData
b0fb34bd 1#ifndef lint
248f44a0 2static char sccsid[] = "@(#)driver.c 4.4 (Berkeley) %G%";
b0fb34bd
SL
3#endif
4
5#include <stdio.h>
6
7float deltx;
8float delty;
248f44a0 9int PlotRes;
b0fb34bd 10
248f44a0
SL
11main(argc,argv)
12 int argc;
13 char *argv[];
14{
15 int std = 1;
16 char *progname;
b0fb34bd
SL
17 FILE *fin;
18
248f44a0
SL
19 progname = argv[0];
20 for (argc--, argv++; argc > 0; argc--, argv++) {
21 if (argv[0][0] == '-') {
22 switch (argv[0][1]) {
23 case 'l':
24 deltx = atoi(&argv[0][2]) - 1;
25 break;
26 case 'w':
27 delty = atoi(&argv[0][2]) - 1;
28 break;
29 case 'r':
30 PlotRes = atoi(&argv[0][2]);
31 break;
b0fb34bd 32 }
248f44a0
SL
33 continue;
34 }
35 std = 0;
36 fin = fopen(argv[0], "r");
37 if (fin == NULL) {
38 fprintf(stderr, "%s: can't open %s\n", progname,
39 argv[0]);
40 exit(1);
b0fb34bd 41 }
248f44a0
SL
42 fplt(fin);
43 fclose(fin);
44 }
b0fb34bd 45 if (std)
248f44a0 46 fplt(stdin);
b0fb34bd 47 exit(0);
248f44a0 48}
b0fb34bd 49
248f44a0
SL
50fplt(fin)
51 FILE *fin;
52{
53 register int c;
b0fb34bd
SL
54 char s[256];
55 int xi,yi,x0,y0,x1,y1,r,dx,n,i;
56 int pat[256];
57
58 openpl();
248f44a0
SL
59 while((c = getc(fin)) != EOF) {
60 switch(c) {
b0fb34bd
SL
61 case 'm':
62 xi = getsi(fin);
63 yi = getsi(fin);
64 move(xi,yi);
65 break;
66 case 'l':
67 x0 = getsi(fin);
68 y0 = getsi(fin);
69 x1 = getsi(fin);
70 y1 = getsi(fin);
71 line(x0,y0,x1,y1);
72 break;
73 case 't':
e24c105d 74 getstr(s,fin);
b0fb34bd
SL
75 label(s);
76 break;
77 case 'e':
78 erase();
79 break;
80 case 'p':
81 xi = getsi(fin);
82 yi = getsi(fin);
83 point(xi,yi);
84 break;
85 case 'n':
86 xi = getsi(fin);
87 yi = getsi(fin);
88 cont(xi,yi);
89 break;
90 case 's':
91 x0 = getsi(fin);
92 y0 = getsi(fin);
93 x1 = getsi(fin);
94 y1 = getsi(fin);
95 space(x0,y0,x1,y1);
96 break;
97 case 'a':
98 xi = getsi(fin);
99 yi = getsi(fin);
100 x0 = getsi(fin);
101 y0 = getsi(fin);
102 x1 = getsi(fin);
103 y1 = getsi(fin);
104 arc(xi,yi,x0,y0,x1,y1);
105 break;
106 case 'c':
107 xi = getsi(fin);
108 yi = getsi(fin);
109 r = getsi(fin);
110 circle(xi,yi,r);
111 break;
112 case 'f':
e24c105d 113 getstr(s,fin);
b0fb34bd
SL
114 linemod(s);
115 break;
116 case 'd':
117 xi = getsi(fin);
118 yi = getsi(fin);
119 dx = getsi(fin);
120 n = getsi(fin);
248f44a0
SL
121 for(i=0; i<n; i++)
122 pat[i] = getsi(fin);
b0fb34bd
SL
123 dot(xi,yi,dx,n,pat);
124 break;
b0fb34bd 125 }
b0fb34bd 126 }
248f44a0
SL
127 closepl();
128}
129
130/* get an integer stored in 2 ascii bytes. */
131getsi(fin)
132 register FILE *fin;
133{
b0fb34bd 134 short a, b;
248f44a0 135
b0fb34bd
SL
136 if((b = getc(fin)) == EOF)
137 return(EOF);
138 if((a = getc(fin)) == EOF)
139 return(EOF);
140 a = a<<8;
141 return(a|b);
142}
248f44a0
SL
143
144getstr(s, fin)
145 register char *s;
146 register FILE *fin;
147{
148
b0fb34bd
SL
149 for( ; *s = getc(fin); s++)
150 if(*s == '\n')
151 break;
152 *s = '\0';
b0fb34bd 153}