|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  | #include <stdlib.h> | 
|  | #include "grap.h" | 
|  | #include "y.tab.h" | 
|  |  | 
|  | char	*dflt_coord = "gg"; | 
|  | char	*curr_coord = "gg"; | 
|  | int	ncoord	= 0;	/* number of explicit coord's given */ | 
|  |  | 
|  | Point	xcoord; | 
|  | Point	ycoord; | 
|  | int	xcflag	= 0;	/* 1 if xcoord set */ | 
|  | int	ycflag	= 0; | 
|  | int	logcoord = 0; | 
|  |  | 
|  | void coord_x(Point pt)	/* remember x coord */ | 
|  | { | 
|  | xcoord = pt; | 
|  | xcflag = 1; | 
|  | margin = 0;	/* no extra space around picture if explicit coords */ | 
|  | } | 
|  |  | 
|  | void coord_y(Point pt) | 
|  | { | 
|  | ycoord = pt; | 
|  | ycflag = 1; | 
|  | margin = 0;	/* no extra space if explicit coords */ | 
|  | } | 
|  |  | 
|  | void coordlog(int n)	/* remember log scaling */ | 
|  | { | 
|  | logcoord = n; | 
|  | } | 
|  |  | 
|  | void coord(Obj *p)	/* set coord range */ | 
|  | { | 
|  | static char buf[10]; | 
|  |  | 
|  | ncoord++; | 
|  | if (ncoord > 1 && strcmp(p->name, dflt_coord) == 0) { | 
|  | /* resetting default coordinate by implication */ | 
|  | sprintf(buf, "gg%d", ncoord); | 
|  | dflt_coord = buf; | 
|  | p = lookup(dflt_coord, 1); | 
|  | } | 
|  | if (xcflag) { | 
|  | p->coord |= XFLAG; | 
|  | p->pt.x = min(xcoord.x,xcoord.y);	/* "xcoord" is xmin, xmax */ | 
|  | p->pt1.x = max(xcoord.x,xcoord.y); | 
|  | if ((logcoord&XFLAG) && p->pt.x <= 0.0) | 
|  | ERROR "can't have log of x coord %g,%g", p->pt.x, p->pt1.x FATAL; | 
|  | xcflag = 0; | 
|  | } | 
|  | if (ycflag) { | 
|  | p->coord |= YFLAG; | 
|  | p->pt.y = min(ycoord.x,ycoord.y);	/* "ycoord" is ymin, ymax */ | 
|  | p->pt1.y = max(ycoord.x,ycoord.y); | 
|  | if ((logcoord&YFLAG) && p->pt.y <= 0.0) | 
|  | ERROR "can't have log of y coord %g,%g", p->pt.y, p->pt1.y FATAL; | 
|  | ycflag = 0; | 
|  | } | 
|  | p->log = logcoord; | 
|  | logcoord = 0; | 
|  | auto_x = 0; | 
|  | } | 
|  |  | 
|  | void resetcoord(Obj *p)	/* reset current coordinate */ | 
|  | { | 
|  | curr_coord = p->name; | 
|  | } |