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