xref: /original-bsd/usr.bin/plot/plottoa.c (revision 5e5b7b99)
1 /*-
2  * %sccs.include.proprietary.c%
3  */
4 
5 #ifndef lint
6 static char sccsid[] = "@(#)plottoa.c	4.3 (Berkeley) 04/18/91";
7 #endif /* not lint */
8 
9 /*
10  * Convert the standard plot input into a readable form for debugging.
11  */
12 
13 #include <stdio.h>
14 
15 float deltx;
16 float delty;
17 
18 main(argc, argv)
19 char **argv;
20 {
21 	int std=1;
22 	FILE *fin;
23 
24 	while(argc-- > 1) {
25 		if(*argv[1] == '-')
26 			switch(argv[1][1]) {
27 			case 'l':
28 				deltx = atoi(&argv[1][2]) - 1;
29 				break;
30 			case 'w':
31 				delty = atoi(&argv[1][2]) - 1;
32 				break;
33 			}
34 		else {
35 			std = 0;
36 			if ((fin = fopen(argv[1], "r")) == NULL) {
37 				fprintf(stderr, "can't open %s\n", argv[1]);
38 				exit(1);
39 			}
40 			fplt(fin);
41 			fclose(fin);
42 		}
43 		argv++;
44 	}
45 	if (std)
46 		fplt( stdin );
47 	exit(0);
48 }
49 
50 
51 fplt(fin)
52 FILE *fin;
53 {
54 	int c;
55 	char s[256];
56 	int xi,yi,x0,y0,x1,y1,r,dx,n,i;
57 	int pat[256];
58 
59 	openpl();
60 	while((c = getc(fin)) != EOF){
61 		switch(c){
62 		case 'm':
63 			xi = getsi(fin);
64 			yi = getsi(fin);
65 			move(xi,yi);
66 			break;
67 		case 'l':
68 			x0 = getsi(fin);
69 			y0 = getsi(fin);
70 			x1 = getsi(fin);
71 			y1 = getsi(fin);
72 			line(x0,y0,x1,y1);
73 			break;
74 		case 't':
75 			getstr(s,fin);
76 			label(s);
77 			break;
78 		case 'e':
79 			erase();
80 			break;
81 		case 'p':
82 			xi = getsi(fin);
83 			yi = getsi(fin);
84 			point(xi,yi);
85 			break;
86 		case 'n':
87 			xi = getsi(fin);
88 			yi = getsi(fin);
89 			cont(xi,yi);
90 			break;
91 		case 's':
92 			x0 = getsi(fin);
93 			y0 = getsi(fin);
94 			x1 = getsi(fin);
95 			y1 = getsi(fin);
96 			space(x0,y0,x1,y1);
97 			break;
98 		case 'a':
99 			xi = getsi(fin);
100 			yi = getsi(fin);
101 			x0 = getsi(fin);
102 			y0 = getsi(fin);
103 			x1 = getsi(fin);
104 			y1 = getsi(fin);
105 			arc(xi,yi,x0,y0,x1,y1);
106 			break;
107 		case 'c':
108 			xi = getsi(fin);
109 			yi = getsi(fin);
110 			r = getsi(fin);
111 			circle(xi,yi,r);
112 			break;
113 		case 'f':
114 			getstr(s,fin);
115 			linemod(s);
116 			break;
117 		case 'd':
118 			xi = getsi(fin);
119 			yi = getsi(fin);
120 			dx = getsi(fin);
121 			n = getsi(fin);
122 			for(i=0; i<n; i++)pat[i] = getsi(fin);
123 			dot(xi,yi,dx,n,pat);
124 			break;
125 		}
126 	}
127 	closepl();
128 }
129 
130 /* get an integer stored in 2 ascii bytes. */
131 getsi(fin)
132 FILE *fin;
133 {
134 	short a, b;
135 	if((b = getc(fin)) == EOF)
136 		return(EOF);
137 	if((a = getc(fin)) == EOF)
138 		return(EOF);
139 	a = a<<8;
140 	return(a|b);
141 }
142 
143 getstr(s,fin)
144 char *s;
145 FILE *fin;
146 {
147 	for( ; *s = getc(fin); s++)
148 		if(*s == '\n')
149 			break;
150 	*s = '\0';
151 }
152 
153 /* Print out the arguments to plot routines. */
154 
155 space(x0,y0,x1,y1)
156 int x0,y0,x1,y1;
157 {
158 	printf( "s %d %d %d %d\n", x0, y0, x1, y1 );
159 }
160 
161 openpl()
162 {
163 }
164 
165 closepl()
166 {
167 }
168 
169 erase()
170 {
171 	printf( "e\n" );
172 }
173 
174 move(xi,yi)
175 int xi,yi;
176 {
177 	printf( "m %d %d\n", xi, yi );
178 }
179 
180 cont(xi,yi)
181 int xi,yi;
182 {
183 	printf( "n %d %d\n", xi, yi );
184 }
185 
186 line(x0,y0,x1,y1)
187 int x0,y0,x1,y1;
188 {
189 	printf( "l %d %d %d %d\n", x0, y0, x1, y1 );
190 }
191 
192 point(xi,yi)
193 int xi,yi;
194 {
195 	printf( "p %d %d\n", xi, yi );
196 }
197 
198 label(s)
199 char *s;
200 {
201 	printf( "t%s\n\n", s );
202 }
203 
204 
205 arc(xcent,ycent,xbeg,ybeg,xend,yend)
206 int xcent,ycent,xbeg,ybeg,xend,yend;
207 {
208 	printf( "a %d %d %d %d %d %d\n", xcent, ycent, xbeg, ybeg, xend, yend );
209 }
210 
211 circle (xc,yc,r)
212 int xc,yc,r;
213 {
214 	printf( "c %d %d %d\n", xc, yc, r );
215 }
216 
217 linemod( line )
218 char	*line;
219 {
220 	printf( "f%s\n\n", line );
221 }
222 
223 /* don't know what this should do */
224 dot(xi,yi,dx,n,pat)
225 int xi,yi,dx,n;
226 char *pat;
227 {
228 	printf("d %d %d %d %d %s\n\n", xi, yi, dx, n, pat);
229 }
230