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