Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}