xref: /original-bsd/usr.bin/plot/crtdriver.c (revision 2301fdfb)
1 #ifndef lint
2 static char sccsid[] = "@(#)crtdriver.c	4.2 (Berkeley) 01/09/85";
3 #endif
4 
5 /*
6 This driver is used with crtplot.c.
7 It is essentially the same driver as the one in /usr/src/cmd/plot.
8 Unfortunately, the curses library has some of the same names as does
9 as the functions that the driver calls.  These have been changed.
10 
11 Also, one of the commands has been removed since they don't make sense
12 for crt's.
13 */
14 
15 
16 #include <stdio.h>
17 
18 float deltx;
19 float delty;
20 
21 main(argc,argv)  char **argv; {
22 	int std=1;
23 	FILE *fin;
24 
25 	while(argc-- > 1) {
26 		if(*argv[1] == '-')
27 			switch(argv[1][1]) {
28 				case 'l':
29 					deltx = atoi(&argv[1][2]) - 1;
30 					break;
31 				case 'w':
32 					delty = atoi(&argv[1][2]) - 1;
33 					break;
34 				}
35 
36 		else {
37 			std = 0;
38 			if ((fin = fopen(argv[1], "r")) == NULL) {
39 				fprintf(stderr, "can't open %s\n", argv[1]);
40 				exit(1);
41 				}
42 			fplt(fin);
43 			}
44 		argv++;
45 		}
46 	if (std)
47 		fplt( stdin );
48 	exit(0);
49 	}
50 
51 
52 fplt(fin)  FILE *fin; {
53 	int c;
54 	char s[256];
55 	int xi,yi,x0,y0,x1,y1,r/*,dx,n,i*/;
56 	/*int pat[256];*/
57 
58 	openpl();
59 	while((c=getc(fin)) != EOF){
60 		switch(c){
61 		case 'm':
62 			xi = getsi(fin);
63 			yi = getsi(fin);
64 			plot_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':
74 			getstr(s,fin);
75 			label(s);
76 			break;
77 		case 'e':
78 			plot_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':
113 			getstr(s,fin);
114 			linemod(s);
115 			break;
116 		default:
117 			fprintf(stderr, "Unknown command %c (%o)\n", c, c);
118 			break;
119 			}
120 		}
121 	closepl();
122 	}
123 getsi(fin)  FILE *fin; {	/* get an integer stored in 2 ascii bytes. */
124 	short a, b;
125 	if((b = getc(fin)) == EOF)
126 		return(EOF);
127 	if((a = getc(fin)) == EOF)
128 		return(EOF);
129 	a = a<<8;
130 	return(a|b);
131 }
132 getstr(s,fin)  char *s;  FILE *fin; {
133 	for( ; *s = getc(fin); s++)
134 		if(*s == '\n')
135 			break;
136 	*s = '\0';
137 }
138