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