1 #define	dprintf	if(dbg)printf
2 
3 #define	String	01
4 #define	Macro	02
5 #define	File	04
6 #define	Char	010
7 #define	Thru	020
8 #define	Free	040
9 
10 #define	MARGIN	0.07	/* default margin around data */
11 #define	SLOP	1.001	/* slop for limits of for loops */
12 #define	FRAMEWID 3	/* default width for boxes and ellipses */
13 #define	FRAMEHT	2	/* default height and line length */
14 #define	TICKLEN	0.1
15 
16 #define	MAXNUM	200
17 
18 #define	XFLAG	01
19 #define	YFLAG	02
20 
21 #define	INTICK	01
22 #define	OUTICK	02
23 
24 #define	BOT	01
25 #define	TOP	02
26 #define	RIGHT	04
27 #define	LEFT	010
28 
29 #define	RJUST	01
30 #define	LJUST	02
31 #define	ABOVE	04
32 #define	BELOW	010
33 
34 typedef struct infile {
35 	FILE	*fin;
36 	char	*fname;
37 	int	lineno;
38 } Infile;
39 
40 typedef struct {	/* input source */
41 	int	type;	/* Macro, String, File */
42 	char	*sp;	/* if String or Macro */
43 } Src;
44 
45 extern	Src	src[], *srcp;	/* input source stack */
46 
47 #define	MAXARGS	20
48 typedef struct {	/* argument stack */
49 	char	*argstk[MAXARGS];	/* pointers to args */
50 	char	*argval;	/* points to space containing args */
51 } Arg;
52 
53 extern	Infile	infile[10];
54 extern	Infile	*curfile;
55 
56 typedef struct {
57 	struct obj *obj;
58 	double	x, y;
59 } Point;
60 
61 typedef struct attr {	/* e.g., DASH 1.1 or "..." rjust size *.5 */
62 	short	type;
63 	double	fval;
64 	char	*sval;
65 	short	just;	/* justification, for STRING type */
66 	short	op;	/* optional operator, ditto */
67 	struct attr *next;
68 } Attr;
69 
70 typedef struct obj {	/* a name and its properties */
71 	char	*name;
72 	char	*val;	/* body of define, etc. */
73 	double	fval;	/* if a numeric variable */
74 	Point	pt;	/* usually for max and min */
75 	Point	pt1;
76 	short	type;	/* NAME, DEFNAME, ... */
77 	short	first;	/* 1 after 1st item seen */
78 	short	coord;	/* 1 if coord system specified for this name */
79 	short	log;	/* x, y, or z (= x+y) */
80 	Attr	*attr;	/* DASH, etc., for now */
81 	struct obj *next;
82 } Obj;
83 
84 typedef union {		/* the yacc stack type */
85 	int	i;
86 	char	*p;
87 	double	f;
88 	Point	pt;
89 	Obj	*op;
90 	Attr	*ap;
91 } YYSTYPE;
92 
93 extern	YYSTYPE	yylval, yyval;
94 
95 extern	int	dbg;
96 
97 extern	int	ntext;
98 extern	double	num[MAXNUM];
99 extern	int	nnum;
100 extern	int	ntick, tside;
101 
102 extern	char	*calloc(), *malloc(), *realloc(), *tostring(), *grow();
103 extern	char	*desc_str(), *ifstat(), *delimstr();
104 extern	char	*xyname(), *slprint();
105 extern	Obj	*lookup();
106 extern	Obj	*copythru();
107 extern	Obj	*objlist;
108 extern	Attr	*makeattr(), *makefattr(), *makesattr(), *addattr();
109 extern	Point	makepoint();
110 extern	double	setvar(), getvar();
111 
112 extern	int	lineno;
113 extern	int	synerr;
114 extern	int	codegen;
115 extern	char	*tempfile;
116 extern	FILE	*tfd;
117 
118 extern	Point	ptmin, ptmax;
119 
120 extern	char	*dflt_coord;
121 extern	char	*curr_coord;
122 extern	int	ncoord;
123 extern	int	auto_x;
124 extern	double	margin;
125 extern	int	autoticks;
126 extern	int	pointsize, ps_set;
127 
128 extern	char	*sizeit(), *juststr();
129 extern	double	log10(), log(), exp(), sin(), cos(), sqrt(), atof(), errcheck();
130 extern	double	fabs(), floor(), ceil(), moddouble(), modceil();
131 
132 #define	logit(x) (x) = log10(x)
133 #define	Log10(x) errcheck(log10(x), "log")
134 #define	Exp(x)	errcheck(exp(x), "exp")
135 #define	Sqrt(x)	errcheck(sqrt(x), "sqrt")
136 
137 #define	min(x,y)	(((x) <= (y)) ? (x) : (y))
138 #define	max(x,y)	(((x) >= (y)) ? (x) : (y))
139