xref: /plan9/sys/src/cmd/grap/grap.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier extern	char	errbuf[200];
23e12c5d1SDavid du Colombier #define	ERROR	sprintf(errbuf,
33e12c5d1SDavid du Colombier #define	FATAL	), yyerror(errbuf), exit(1)
43e12c5d1SDavid du Colombier #define	WARNING	), yyerror(errbuf)
53e12c5d1SDavid du Colombier 
63e12c5d1SDavid du Colombier #define	dprintf	if(dbg)printf
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier #define	String	01
93e12c5d1SDavid du Colombier #define	Macro	02
103e12c5d1SDavid du Colombier #define	File	04
113e12c5d1SDavid du Colombier #define	Char	010
123e12c5d1SDavid du Colombier #define	Thru	020
133e12c5d1SDavid du Colombier #define	Free	040
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier #define	MARGIN	0.07	/* default margin around data */
163e12c5d1SDavid du Colombier #define	SLOP	1.001	/* slop for limits of for loops */
173e12c5d1SDavid du Colombier #define	FRAMEWID 3	/* default width for boxes and ellipses */
183e12c5d1SDavid du Colombier #define	FRAMEHT	2	/* default height and line length */
193e12c5d1SDavid du Colombier #define	TICKLEN	0.1
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier #define	MAXNUM	200
223e12c5d1SDavid du Colombier 
233e12c5d1SDavid du Colombier #define	XFLAG	01
243e12c5d1SDavid du Colombier #define	YFLAG	02
253e12c5d1SDavid du Colombier 
263e12c5d1SDavid du Colombier #define	INTICK	01
273e12c5d1SDavid du Colombier #define	OUTICK	02
283e12c5d1SDavid du Colombier 
293e12c5d1SDavid du Colombier #define	BOT	01
303e12c5d1SDavid du Colombier #define	TOP	02
313e12c5d1SDavid du Colombier #define	RIGHT	04
323e12c5d1SDavid du Colombier #define	LEFT	010
333e12c5d1SDavid du Colombier 
343e12c5d1SDavid du Colombier #define	RJUST	01
353e12c5d1SDavid du Colombier #define	LJUST	02
363e12c5d1SDavid du Colombier #define	ABOVE	04
373e12c5d1SDavid du Colombier #define	BELOW	010
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier typedef struct infile {
403e12c5d1SDavid du Colombier 	FILE	*fin;
413e12c5d1SDavid du Colombier 	char	*fname;
423e12c5d1SDavid du Colombier 	int	lineno;
433e12c5d1SDavid du Colombier } Infile;
443e12c5d1SDavid du Colombier 
453e12c5d1SDavid du Colombier typedef struct {	/* input source */
463e12c5d1SDavid du Colombier 	int	type;	/* Macro, String, File */
473e12c5d1SDavid du Colombier 	char	*sp;	/* if String or Macro */
483e12c5d1SDavid du Colombier } Src;
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier extern	Src	src[], *srcp;	/* input source stack */
513e12c5d1SDavid du Colombier 
523e12c5d1SDavid du Colombier #define	MAXARGS	100
533e12c5d1SDavid du Colombier typedef struct {	/* argument stack */
543e12c5d1SDavid du Colombier 	char	*argstk[MAXARGS];	/* pointers to args */
553e12c5d1SDavid du Colombier 	char	*argval;	/* points to space containing args */
563e12c5d1SDavid du Colombier } Arg;
573e12c5d1SDavid du Colombier 
583e12c5d1SDavid du Colombier extern	Infile	infile[10];
593e12c5d1SDavid du Colombier extern	Infile	*curfile;
603e12c5d1SDavid du Colombier 
613e12c5d1SDavid du Colombier typedef struct {
623e12c5d1SDavid du Colombier 	struct obj *obj;
633e12c5d1SDavid du Colombier 	double	x, y;
643e12c5d1SDavid du Colombier } Point;
653e12c5d1SDavid du Colombier 
663e12c5d1SDavid du Colombier typedef struct attr {	/* e.g., DASH 1.1 or "..." rjust size *.5 */
67*7dd7cddfSDavid du Colombier 	int	type;
683e12c5d1SDavid du Colombier 	double	fval;
693e12c5d1SDavid du Colombier 	char	*sval;
70*7dd7cddfSDavid du Colombier 	int	just;	/* justification, for STRING type */
71*7dd7cddfSDavid du Colombier 	int	op;	/* optional operator, ditto */
723e12c5d1SDavid du Colombier 	struct attr *next;
733e12c5d1SDavid du Colombier } Attr;
743e12c5d1SDavid du Colombier 
753e12c5d1SDavid du Colombier typedef struct obj {	/* a name and its properties */
763e12c5d1SDavid du Colombier 	char	*name;
773e12c5d1SDavid du Colombier 	char	*val;	/* body of define, etc. */
783e12c5d1SDavid du Colombier 	double	fval;	/* if a numeric variable */
793e12c5d1SDavid du Colombier 	Point	pt;	/* usually for max and min */
803e12c5d1SDavid du Colombier 	Point	pt1;
81*7dd7cddfSDavid du Colombier 	int	type;	/* NAME, DEFNAME, ... */
82*7dd7cddfSDavid du Colombier 	int	first;	/* 1 after 1st item seen */
83*7dd7cddfSDavid du Colombier 	int	coord;	/* 1 if coord system specified for this name */
84*7dd7cddfSDavid du Colombier 	int	log;	/* x, y, or z (= x+y) */
853e12c5d1SDavid du Colombier 	Attr	*attr;	/* DASH, etc., for now */
863e12c5d1SDavid du Colombier 	struct obj *next;
873e12c5d1SDavid du Colombier } Obj;
883e12c5d1SDavid du Colombier 
893e12c5d1SDavid du Colombier typedef union {		/* the yacc stack type */
903e12c5d1SDavid du Colombier 	int	i;
913e12c5d1SDavid du Colombier 	char	*p;
923e12c5d1SDavid du Colombier 	double	f;
933e12c5d1SDavid du Colombier 	Point	pt;
943e12c5d1SDavid du Colombier 	Obj	*op;
953e12c5d1SDavid du Colombier 	Attr	*ap;
963e12c5d1SDavid du Colombier } YYSTYPE;
973e12c5d1SDavid du Colombier 
983e12c5d1SDavid du Colombier extern	YYSTYPE	yylval, yyval;
993e12c5d1SDavid du Colombier 
1003e12c5d1SDavid du Colombier extern	int	dbg;
1013e12c5d1SDavid du Colombier 
1023e12c5d1SDavid du Colombier extern	int	ntext;
1033e12c5d1SDavid du Colombier extern	double	num[MAXNUM];
1043e12c5d1SDavid du Colombier extern	int	nnum;
1053e12c5d1SDavid du Colombier extern	int	ntick, tside;
1063e12c5d1SDavid du Colombier 
1073e12c5d1SDavid du Colombier extern	char	*tostring(char *);
1083e12c5d1SDavid du Colombier extern char *grow(char *, char *, int, int);
1093e12c5d1SDavid du Colombier 
1103e12c5d1SDavid du Colombier extern	int	lineno;
1113e12c5d1SDavid du Colombier extern	int	synerr;
1123e12c5d1SDavid du Colombier extern	int	codegen;
1133e12c5d1SDavid du Colombier extern	char	tempfile[];
1143e12c5d1SDavid du Colombier extern	FILE	*tfd;
1153e12c5d1SDavid du Colombier 
1163e12c5d1SDavid du Colombier extern	Point	ptmin, ptmax;
1173e12c5d1SDavid du Colombier 
1183e12c5d1SDavid du Colombier extern	char	*dflt_coord;
1193e12c5d1SDavid du Colombier extern	char	*curr_coord;
1203e12c5d1SDavid du Colombier extern	int	ncoord;
1213e12c5d1SDavid du Colombier extern	int	auto_x;
1223e12c5d1SDavid du Colombier extern	double	margin;
1233e12c5d1SDavid du Colombier extern	int	autoticks;
1243e12c5d1SDavid du Colombier extern	int	pointsize, ps_set;
1253e12c5d1SDavid du Colombier 
1263e12c5d1SDavid du Colombier 
1273e12c5d1SDavid du Colombier #define	logit(x) (x) = log10(x)
1283e12c5d1SDavid du Colombier #define	Log10(x) errcheck(log10(x), "log")
1293e12c5d1SDavid du Colombier #define	Exp(x)	errcheck(exp(x), "exp")
1303e12c5d1SDavid du Colombier #define	Sqrt(x)	errcheck(sqrt(x), "sqrt")
1313e12c5d1SDavid du Colombier 
1323e12c5d1SDavid du Colombier #define	min(x,y)	(((x) <= (y)) ? (x) : (y))
1333e12c5d1SDavid du Colombier #define	max(x,y)	(((x) >= (y)) ? (x) : (y))
1343e12c5d1SDavid du Colombier 
1353e12c5d1SDavid du Colombier extern	void	yyerror(char *);
1363e12c5d1SDavid du Colombier extern void coord_x(Point);
1373e12c5d1SDavid du Colombier extern void coord_y(Point);
1383e12c5d1SDavid du Colombier extern void coordlog(int);
1393e12c5d1SDavid du Colombier extern void coord(Obj *);
1403e12c5d1SDavid du Colombier extern void resetcoord(Obj *);
1413e12c5d1SDavid du Colombier extern void savenum(int, double);
1423e12c5d1SDavid du Colombier extern void setjust(int);
1433e12c5d1SDavid du Colombier extern void setsize(int, double);
1443e12c5d1SDavid du Colombier extern void range(Point);
1453e12c5d1SDavid du Colombier extern void halfrange(Obj *, int, double);
1463e12c5d1SDavid du Colombier extern Obj *lookup(char *, int);
1473e12c5d1SDavid du Colombier extern double getvar(Obj *);
1483e12c5d1SDavid du Colombier extern double setvar(Obj *, double);
1493e12c5d1SDavid du Colombier extern Point makepoint(Obj *, double, double);
1503e12c5d1SDavid du Colombier extern Attr *makefattr(int, double);
1513e12c5d1SDavid du Colombier extern Attr *makesattr(char *);
1523e12c5d1SDavid du Colombier extern Attr *makeattr(int, double, char *, int, int);
1533e12c5d1SDavid du Colombier extern Attr *addattr(Attr *, Attr *);
1543e12c5d1SDavid du Colombier extern void freeattr(Attr *);
1553e12c5d1SDavid du Colombier extern char *slprint(Attr *);
1563e12c5d1SDavid du Colombier extern char *juststr(int);
1573e12c5d1SDavid du Colombier extern char *sprntf(char *, Attr *);
1583e12c5d1SDavid du Colombier extern void forloop(Obj *, double, double, int, double, char *);
1593e12c5d1SDavid du Colombier extern void nextfor(void);
1603e12c5d1SDavid du Colombier extern void endfor(void);
1613e12c5d1SDavid du Colombier extern char *ifstat(double, char *, char *);
1623e12c5d1SDavid du Colombier extern void frame(void);
1633e12c5d1SDavid du Colombier extern void frameht(double);
1643e12c5d1SDavid du Colombier extern void framewid(double);
1653e12c5d1SDavid du Colombier extern void frameside(int, Attr *);
1663e12c5d1SDavid du Colombier extern void pushsrc(int, char *);
1673e12c5d1SDavid du Colombier extern void popsrc(void);
1683e12c5d1SDavid du Colombier extern void definition(char *);
1693e12c5d1SDavid du Colombier extern char *delimstr(char *);
1703e12c5d1SDavid du Colombier extern int baldelim(int, char *);
1713e12c5d1SDavid du Colombier extern void dodef(Obj *);
1723e12c5d1SDavid du Colombier extern int getarg(char *);
1733e12c5d1SDavid du Colombier extern int input(void);
1743e12c5d1SDavid du Colombier extern int nextchar(void);
1753e12c5d1SDavid du Colombier extern void do_thru(void);
1763e12c5d1SDavid du Colombier extern int unput(int);
1773e12c5d1SDavid du Colombier extern void pbstr(char *);
1783e12c5d1SDavid du Colombier extern double errcheck(double, char *);
1793e12c5d1SDavid du Colombier extern void yyerror(char *);
1803e12c5d1SDavid du Colombier extern void eprint(void);
1813e12c5d1SDavid du Colombier extern int yywrap(void);
1823e12c5d1SDavid du Colombier extern void copyfile(char *);
1833e12c5d1SDavid du Colombier extern void copydef(Obj *);
1843e12c5d1SDavid du Colombier extern Obj *copythru(char *);
1853e12c5d1SDavid du Colombier extern char *addnewline(char *);
1863e12c5d1SDavid du Colombier extern void copyuntil(char *);
1873e12c5d1SDavid du Colombier extern void copy(void);
1883e12c5d1SDavid du Colombier extern void shell_init(void);
1893e12c5d1SDavid du Colombier extern void shell_text(char *);
1903e12c5d1SDavid du Colombier extern void shell_exec(void);
1913e12c5d1SDavid du Colombier extern void labelwid(double);
1923e12c5d1SDavid du Colombier extern void labelmove(int, double);
1933e12c5d1SDavid du Colombier extern void label(int, Attr *);
1943e12c5d1SDavid du Colombier extern void lab_adjust(void);
1953e12c5d1SDavid du Colombier extern char *sizeit(Attr *);
1963e12c5d1SDavid du Colombier extern void line(int, Point, Point, Attr *);
1973e12c5d1SDavid du Colombier extern void circle(double, Point);
1983e12c5d1SDavid du Colombier extern char *xyname(Point);
1993e12c5d1SDavid du Colombier extern void pic(char *);
2003e12c5d1SDavid du Colombier extern void numlist(void);
2013e12c5d1SDavid du Colombier extern void plot(Attr *, Point);
2023e12c5d1SDavid du Colombier extern void plotnum(double, char *, Point);
2033e12c5d1SDavid du Colombier extern void drawdesc(int, Obj *, Attr *, char *);
2043e12c5d1SDavid du Colombier extern void next(Obj *, Point, Attr *);
2053e12c5d1SDavid du Colombier extern void print(void);
2063e12c5d1SDavid du Colombier extern void endstat(void);
2073e12c5d1SDavid du Colombier extern void graph(char *);
2083e12c5d1SDavid du Colombier extern void setup(void);
2093e12c5d1SDavid du Colombier extern void do_first(void);
2103e12c5d1SDavid du Colombier extern void reset(void);
2113e12c5d1SDavid du Colombier extern void opentemp(void);
2123e12c5d1SDavid du Colombier extern void savetick(double, char *);
2133e12c5d1SDavid du Colombier extern void dflt_tick(double);
2143e12c5d1SDavid du Colombier extern void tickside(int);
2153e12c5d1SDavid du Colombier extern void tickoff(int);
2163e12c5d1SDavid du Colombier extern void gridtickoff(void);
2173e12c5d1SDavid du Colombier extern void setlist(void);
2183e12c5d1SDavid du Colombier extern void tickdir(int, double, int);
2193e12c5d1SDavid du Colombier extern void ticks(void);
2203e12c5d1SDavid du Colombier extern double modfloor(double, double);
2213e12c5d1SDavid du Colombier extern double modceil(double, double);
2223e12c5d1SDavid du Colombier extern void do_autoticks(Obj *);
2233e12c5d1SDavid du Colombier extern void logtick(double, double, double);
2243e12c5d1SDavid du Colombier extern Obj *setauto(void);
2253e12c5d1SDavid du Colombier extern void autoside(Obj *, int);
2263e12c5d1SDavid du Colombier extern void autolog(Obj *, int);
2273e12c5d1SDavid du Colombier extern void iterator(double, double, int, double, char *);
2283e12c5d1SDavid du Colombier extern void ticklist(Obj *, int);
2293e12c5d1SDavid du Colombier extern void print_ticks(int, int, Obj *, char *, char *);
2303e12c5d1SDavid du Colombier extern void maketick(int, char *, int, int, double, char *, char *, char *);
2313e12c5d1SDavid du Colombier extern void griddesc(Attr *);
2323e12c5d1SDavid du Colombier extern void gridlist(Obj *);
2333e12c5d1SDavid du Colombier extern char *desc_str(Attr *);
2343e12c5d1SDavid du Colombier extern int sidelog(int, int);
2353e12c5d1SDavid du Colombier 
2363e12c5d1SDavid du Colombier extern	Obj	*objlist;
237