xref: /csrg-svn/usr.bin/plot/driver.c (revision 48286)
1*48286Sbostic /*-
2*48286Sbostic  * %sccs.include.proprietary.c%
3*48286Sbostic  */
4*48286Sbostic 
514501Ssam #ifndef lint
6*48286Sbostic static char sccsid[] = "@(#)driver.c	4.5 (Berkeley) 04/18/91";
7*48286Sbostic #endif /* not lint */
814501Ssam 
914501Ssam #include <stdio.h>
1014501Ssam 
1114501Ssam float deltx;
1214501Ssam float delty;
1325017Ssam int PlotRes;
1414501Ssam 
main(argc,argv)1525017Ssam main(argc,argv)
1625017Ssam 	int argc;
1725017Ssam 	char *argv[];
1825017Ssam {
1925017Ssam 	int std = 1;
2025017Ssam 	char *progname;
2114501Ssam 	FILE *fin;
2214501Ssam 
2325017Ssam 	progname = argv[0];
2425017Ssam 	for (argc--, argv++; argc > 0; argc--, argv++) {
2525017Ssam 		if (argv[0][0] == '-') {
2625017Ssam 			switch (argv[0][1]) {
2725017Ssam 			case 'l':
2825017Ssam 				deltx = atoi(&argv[0][2]) - 1;
2925017Ssam 				break;
3025017Ssam 			case 'w':
3125017Ssam 				delty = atoi(&argv[0][2]) - 1;
3225017Ssam 				break;
3325017Ssam 			case 'r':
3425017Ssam 				PlotRes = atoi(&argv[0][2]);
3525017Ssam 				break;
3614501Ssam 			}
3725017Ssam 			continue;
3814501Ssam 		}
3925017Ssam 		std = 0;
4025017Ssam 		fin = fopen(argv[0], "r");
4125017Ssam 		if (fin == NULL) {
4225017Ssam 			fprintf(stderr, "%s: can't open %s\n", progname,
4325017Ssam 			    argv[0]);
4425017Ssam 			exit(1);
4525017Ssam 		}
4625017Ssam 		fplt(fin);
4725017Ssam 		fclose(fin);
4825017Ssam 	}
4914501Ssam 	if (std)
5025017Ssam 		fplt(stdin);
5114501Ssam 	exit(0);
5225017Ssam }
5314501Ssam 
fplt(fin)5425017Ssam fplt(fin)
5525017Ssam 	FILE *fin;
5625017Ssam {
5725017Ssam 	register int c;
5814501Ssam 	char s[256];
5914501Ssam 	int xi,yi,x0,y0,x1,y1,r,dx,n,i;
6014501Ssam 	int pat[256];
6114501Ssam 
6214501Ssam 	openpl();
6325017Ssam 	while((c = getc(fin)) != EOF) {
6425017Ssam 		switch(c) {
6514501Ssam 		case 'm':
6614501Ssam 			xi = getsi(fin);
6714501Ssam 			yi = getsi(fin);
6814501Ssam 			move(xi,yi);
6914501Ssam 			break;
7014501Ssam 		case 'l':
7114501Ssam 			x0 = getsi(fin);
7214501Ssam 			y0 = getsi(fin);
7314501Ssam 			x1 = getsi(fin);
7414501Ssam 			y1 = getsi(fin);
7514501Ssam 			line(x0,y0,x1,y1);
7614501Ssam 			break;
7714501Ssam 		case 't':
7817674Sralph 			getstr(s,fin);
7914501Ssam 			label(s);
8014501Ssam 			break;
8114501Ssam 		case 'e':
8214501Ssam 			erase();
8314501Ssam 			break;
8414501Ssam 		case 'p':
8514501Ssam 			xi = getsi(fin);
8614501Ssam 			yi = getsi(fin);
8714501Ssam 			point(xi,yi);
8814501Ssam 			break;
8914501Ssam 		case 'n':
9014501Ssam 			xi = getsi(fin);
9114501Ssam 			yi = getsi(fin);
9214501Ssam 			cont(xi,yi);
9314501Ssam 			break;
9414501Ssam 		case 's':
9514501Ssam 			x0 = getsi(fin);
9614501Ssam 			y0 = getsi(fin);
9714501Ssam 			x1 = getsi(fin);
9814501Ssam 			y1 = getsi(fin);
9914501Ssam 			space(x0,y0,x1,y1);
10014501Ssam 			break;
10114501Ssam 		case 'a':
10214501Ssam 			xi = getsi(fin);
10314501Ssam 			yi = getsi(fin);
10414501Ssam 			x0 = getsi(fin);
10514501Ssam 			y0 = getsi(fin);
10614501Ssam 			x1 = getsi(fin);
10714501Ssam 			y1 = getsi(fin);
10814501Ssam 			arc(xi,yi,x0,y0,x1,y1);
10914501Ssam 			break;
11014501Ssam 		case 'c':
11114501Ssam 			xi = getsi(fin);
11214501Ssam 			yi = getsi(fin);
11314501Ssam 			r = getsi(fin);
11414501Ssam 			circle(xi,yi,r);
11514501Ssam 			break;
11614501Ssam 		case 'f':
11717674Sralph 			getstr(s,fin);
11814501Ssam 			linemod(s);
11914501Ssam 			break;
12014501Ssam 		case 'd':
12114501Ssam 			xi = getsi(fin);
12214501Ssam 			yi = getsi(fin);
12314501Ssam 			dx = getsi(fin);
12414501Ssam 			n = getsi(fin);
12525017Ssam 			for(i=0; i<n; i++)
12625017Ssam 				pat[i] = getsi(fin);
12714501Ssam 			dot(xi,yi,dx,n,pat);
12814501Ssam 			break;
12914501Ssam 		}
13025017Ssam 	}
13114501Ssam 	closepl();
13225017Ssam }
13325017Ssam 
13425017Ssam /* get an integer stored in 2 ascii bytes. */
getsi(fin)13525017Ssam getsi(fin)
13625017Ssam 	register FILE *fin;
13725017Ssam {
13814501Ssam 	short a, b;
13925017Ssam 
14014501Ssam 	if((b = getc(fin)) == EOF)
14114501Ssam 		return(EOF);
14214501Ssam 	if((a = getc(fin)) == EOF)
14314501Ssam 		return(EOF);
14414501Ssam 	a = a<<8;
14514501Ssam 	return(a|b);
14614501Ssam }
14725017Ssam 
getstr(s,fin)14825017Ssam getstr(s, fin)
14925017Ssam 	register char *s;
15025017Ssam 	register FILE *fin;
15125017Ssam {
15225017Ssam 
15314501Ssam 	for( ; *s = getc(fin); s++)
15414501Ssam 		if(*s == '\n')
15514501Ssam 			break;
15614501Ssam 	*s = '\0';
15714501Ssam }
158