plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

coord.c (1559B)


      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[20];
     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 }