1*23960Sjaap #ifndef lint
2*23960Sjaap static char sccsid[] = "@(#)coord.c	1.1 (CWI) 85/07/19";
3*23960Sjaap #endif lint
4*23960Sjaap #include <stdio.h>
5*23960Sjaap #include "grap.h"
6*23960Sjaap #include "y.tab.h"
7*23960Sjaap 
8*23960Sjaap char	*dflt_coord = "gg";
9*23960Sjaap char	*curr_coord = "gg";
10*23960Sjaap int	ncoord	= 0;	/* number of explicit coord's given */
11*23960Sjaap 
12*23960Sjaap Point	xcoord;
13*23960Sjaap Point	ycoord;
14*23960Sjaap int	xcflag	= 0;	/* 1 if xcoord set */
15*23960Sjaap int	ycflag	= 0;
16*23960Sjaap int	logcoord = 0;
17*23960Sjaap 
coord_x(pt)18*23960Sjaap coord_x(pt)	/* remember x coord */
19*23960Sjaap 	Point pt;
20*23960Sjaap {
21*23960Sjaap 	xcoord = pt;
22*23960Sjaap 	xcflag = 1;
23*23960Sjaap 	margin = 0;	/* no extra space around picture if explicit coords */
24*23960Sjaap }
25*23960Sjaap 
coord_y(pt)26*23960Sjaap coord_y(pt)
27*23960Sjaap 	Point pt;
28*23960Sjaap {
29*23960Sjaap 	ycoord = pt;
30*23960Sjaap 	ycflag = 1;
31*23960Sjaap 	margin = 0;	/* no extra space if explicit coords */
32*23960Sjaap }
33*23960Sjaap 
coordlog(n)34*23960Sjaap coordlog(n)	/* remember log scaling */
35*23960Sjaap 	int n;
36*23960Sjaap {
37*23960Sjaap 	logcoord = n;
38*23960Sjaap }
39*23960Sjaap 
coord(p)40*23960Sjaap coord(p)	/* set coord range */
41*23960Sjaap 	Obj *p;
42*23960Sjaap {
43*23960Sjaap 	static char buf[10];
44*23960Sjaap 
45*23960Sjaap 	ncoord++;
46*23960Sjaap 	if (ncoord > 1 && strcmp(p->name, dflt_coord) == 0) {
47*23960Sjaap 		/* resetting default coordinate by implication */
48*23960Sjaap 		sprintf(buf, "gg%d", ncoord);
49*23960Sjaap 		dflt_coord = buf;
50*23960Sjaap 		p = lookup(dflt_coord, 1);
51*23960Sjaap 	}
52*23960Sjaap 	if (xcflag) {
53*23960Sjaap 		p->coord |= XFLAG;
54*23960Sjaap 		p->pt.x = min(xcoord.x,xcoord.y);	/* "xcoord" is xmin, xmax */
55*23960Sjaap 		p->pt1.x = max(xcoord.x,xcoord.y);
56*23960Sjaap 		if ((logcoord&XFLAG) && p->pt.x <= 0.0)
57*23960Sjaap 			fatal("can't have log of x coord %g,%g", p->pt.x, p->pt1.x);
58*23960Sjaap 		xcflag = 0;
59*23960Sjaap 	}
60*23960Sjaap 	if (ycflag) {
61*23960Sjaap 		p->coord |= YFLAG;
62*23960Sjaap 		p->pt.y = min(ycoord.x,ycoord.y);	/* "ycoord" is ymin, ymax */
63*23960Sjaap 		p->pt1.y = max(ycoord.x,ycoord.y);
64*23960Sjaap 		if ((logcoord&YFLAG) && p->pt.y <= 0.0)
65*23960Sjaap 			fatal("can't have log of y coord %g,%g", p->pt.y, p->pt1.y);
66*23960Sjaap 		ycflag = 0;
67*23960Sjaap 	}
68*23960Sjaap 	p->log = logcoord;
69*23960Sjaap 	logcoord = 0;
70*23960Sjaap 	auto_x = 0;
71*23960Sjaap }
72*23960Sjaap 
resetcoord(p)73*23960Sjaap resetcoord(p)	/* reset current coordinate */
74*23960Sjaap 	Obj *p;
75*23960Sjaap {
76*23960Sjaap 	curr_coord = p->name;
77*23960Sjaap }
78