Ultrix-3.1/src/libplot/tregis/driver.c

Compare this file to the similar file:
Show the results in this format:

/*
 * SCCSID: @(#)driver.c	3.0	4/22/86 
 */

/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

/*

 Facility:	Part of the Plot package for the REGIS terminals

 Calls: 	move(), line(), label(), point(), cont(), space(), arc()
		circle(), linemod(), dot(), color(), map()

 Abstract:	This is the main() function for plot.

		Plotting commands are read from standard input. A big
		case statement is used to select the appropriate action
		routine.

 Modified by:

 Date:		By:		Reason:

 ??-Feb-1984	David Roberts.	Add debugging statements.

 ??-Apr-1984	David Roberts.	Add extra plot command to select colour - j

 ??-Apr-1984	David Roberts.	Add extra plot command - k to load a colour
				register.

 06-Jun-1984	David Roberts. Comment code!

 01-Aug-1984	Kevin J. Dunlap, change call to colour to color.

 02-Apr-1985	Kevin J. Dunlap, Modify for REGIS terminals

*/

#include <stdio.h>
#define DEBUG 0 	
float deltx;
float delty;

main(argc,argv)  char **argv; {
	int std=1;
	FILE *fin;
#if DEBUG
#include "bitmap.h"
extern struct btregs *bitmap;
#endif
	while(argc-- > 1) {
		if(*argv[1] == '-')
			switch(argv[1][1]) {
				case 'l':
					deltx = atoi(&argv[1][2]) - 1;
					break;
				case 'w':
					delty = atoi(&argv[1][2]) - 1;
					break;
				}

		else {
			std = 0;
			if ((fin = fopen(argv[1], "r")) == NULL) {
				fprintf(stderr, "can't open %s\n", argv[1]);
				exit(1);
				}
			fplt(fin);
			}
		argv++;
		}
	if (std)
		fplt( stdin );
	exit(0);
	}


fplt(fin)  FILE *fin; {
	int c;
	char s[256];
	int xi,yi,x0,y0,x1,y1,r,dx,n,i;
	int pat[256];

	openpl();
	while((c=getc(fin)) != EOF){
#if DEBUG
		fprintf(stderr,"DRIVER: command is %c ( %o octal)\n",c,c);
#endif
		switch(c){
		case 'm':			/* m - move */
			xi = getsi(fin);	/* get the x coordinate */
			yi = getsi(fin);	/* and the y coordinate */
			move(xi,yi);		/* move to the new point */
			break;
		case 'l':			/* l - line */
			x0 = getsi(fin);	/* get the start x */
			y0 = getsi(fin);	/* and start y */
			x1 = getsi(fin);	/* then end x */
			y1 = getsi(fin);	/* and end y */
			line(x0,y0,x1,y1);	/* draw the line */
			break;
		case 't':			/* l - label */
			gets(s,fin);		/* read the string */
			label(s);		/* write the label */
			break;
		case 'e':			/* e - erase */
			erase();		/* clear the screen */
			break;
		case 'p':			/* p - point */
			xi = getsi(fin);	/* get the x */
			yi = getsi(fin);	/* and y coordinates */
			point(xi,yi);		/* make the point */
			break;
		case 'n':			/* n - cont */
			xi = getsi(fin);	/* destination x */
			yi = getsi(fin);	/* and y. Then draw a line */
			cont(xi,yi);		/* from current place to x,y*/
			break;
		case 's':			/* s - space */
			x0 = getsi(fin);	/* lower left corner x */
			y0 = getsi(fin);	/* lower left corner y */
			x1 = getsi(fin);	/* upper right corner x */
			y1 = getsi(fin);	/* upper right corner y */
			space(x0,y0,x1,y1);	/* set the new spacing */
			break;
		case 'a':			/* a - arc */
			xi = getsi(fin);	/* x coordinate of centre */
			yi = getsi(fin);	/* y coordinate of centre */
			x0 = getsi(fin);	/* start point x */
			y0 = getsi(fin);	/* start point y */
			x1 = getsi(fin);	/* end point x */
			y1 = getsi(fin);	/* end point y */
			arc(xi,yi,x0,y0,x1,y1); /* draw the arc */
			break;
		case 'c':			/* c - circle */
			xi = getsi(fin);	/* x coordinate of centre */
			yi = getsi(fin);	/* y coordinate of centre */
			r = getsi(fin); 	/* radius */
			circle(xi,yi,r);	/* draw the circle */
			break;
		case 'f':			/* f - linemod */
			gets(s,fin);		/* get the linemode */
			linemod(s);		/* and set it */
			break;
		case 'd':			/* d - dot */
			xi = getsi(fin);	/* x coordinate? */
			yi = getsi(fin);	/* y coordinate? */
			dx = getsi(fin);	/* increment in x?
			n = getsi(fin); 	/* get the pattern? */
			for(i=0; i<n; i++)pat[i] = getsi(fin);
			dot(xi,yi,dx,n,pat);	/* do dot...*/
			break;
		case 'j':
			xi = getsi(fin);	/* get the colour no */
			color(xi);		/* select it */
			break;
		case 'k':
			xi = getsi(fin);	/* the colour register no */
			yi = getsi(fin);	/* the value to load */
			map(xi,yi);		/* load it */
			break;
			}
		}
	closepl();
	}
getsi(fin)  FILE *fin; {	/* get an integer stored in 2 ascii bytes. */
	short a, b;
	if((b = getc(fin)) == EOF)
		return(EOF);
	if((a = getc(fin)) == EOF)
		return(EOF);
	a = a<<8;
	return(a|b);
}
gets(s,fin)  char *s;  FILE *fin; {
	for( ; *s = getc(fin); s++)
		if(*s == '\n')
			break;
	*s = '\0';
	return;
}