Blame


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