|  | extern	char	errbuf[200]; | 
|  |  | 
|  | #undef	sprintf	/* Snow Leopard */ | 
|  |  | 
|  | #define	ERROR	sprintf(errbuf, | 
|  | #define	FATAL	), yyerror(errbuf), exit(1) | 
|  | #define	WARNING	), yyerror(errbuf) | 
|  |  | 
|  | #define	dprintf	if(dbg)printf | 
|  |  | 
|  | #define	String	01 | 
|  | #define	Macro	02 | 
|  | #define	File	04 | 
|  | #define	Char	010 | 
|  | #define	Thru	020 | 
|  | #define	Free	040 | 
|  |  | 
|  | #define	MARGIN	0.07	/* default margin around data */ | 
|  | #define	SLOP	1.001	/* slop for limits of for loops */ | 
|  | #define	FRAMEWID 3	/* default width for boxes and ellipses */ | 
|  | #define	FRAMEHT	2	/* default height and line length */ | 
|  | #define	TICKLEN	0.1 | 
|  |  | 
|  | #define	MAXNUM	200 | 
|  |  | 
|  | #define	XFLAG	01 | 
|  | #define	YFLAG	02 | 
|  |  | 
|  | #define	INTICK	01 | 
|  | #define	OUTICK	02 | 
|  |  | 
|  | #define	BOT	01 | 
|  | #define	TOP	02 | 
|  | #define	RIGHT	04 | 
|  | #define	LEFT	010 | 
|  |  | 
|  | #define	RJUST	01 | 
|  | #define	LJUST	02 | 
|  | #define	ABOVE	04 | 
|  | #define	BELOW	010 | 
|  |  | 
|  | typedef struct infile { | 
|  | FILE	*fin; | 
|  | char	*fname; | 
|  | int	lineno; | 
|  | } Infile; | 
|  |  | 
|  | typedef struct {	/* input source */ | 
|  | int	type;	/* Macro, String, File */ | 
|  | char	*sp;	/* if String or Macro */ | 
|  | } Src; | 
|  |  | 
|  | extern	Src	src[], *srcp;	/* input source stack */ | 
|  |  | 
|  | #define	MAXARGS	100 | 
|  | typedef struct {	/* argument stack */ | 
|  | char	*argstk[MAXARGS];	/* pointers to args */ | 
|  | char	*argval;	/* points to space containing args */ | 
|  | } Arg; | 
|  |  | 
|  | extern	Infile	infile[10]; | 
|  | extern	Infile	*curfile; | 
|  |  | 
|  | typedef struct { | 
|  | struct obj *obj; | 
|  | double	x, y; | 
|  | } Point; | 
|  |  | 
|  | typedef struct attr {	/* e.g., DASH 1.1 or "..." rjust size *.5 */ | 
|  | int	type; | 
|  | double	fval; | 
|  | char	*sval; | 
|  | int	just;	/* justification, for STRING type */ | 
|  | int	op;	/* optional operator, ditto */ | 
|  | struct attr *next; | 
|  | } Attr; | 
|  |  | 
|  | typedef struct obj {	/* a name and its properties */ | 
|  | char	*name; | 
|  | char	*val;	/* body of define, etc. */ | 
|  | double	fval;	/* if a numeric variable */ | 
|  | Point	pt;	/* usually for max and min */ | 
|  | Point	pt1; | 
|  | int	type;	/* NAME, DEFNAME, ... */ | 
|  | int	first;	/* 1 after 1st item seen */ | 
|  | int	coord;	/* 1 if coord system specified for this name */ | 
|  | int	log;	/* x, y, or z (= x+y) */ | 
|  | Attr	*attr;	/* DASH, etc., for now */ | 
|  | struct obj *next; | 
|  | } Obj; | 
|  |  | 
|  | typedef union {		/* the yacc stack type */ | 
|  | int	i; | 
|  | char	*p; | 
|  | double	f; | 
|  | Point	pt; | 
|  | Obj	*op; | 
|  | Attr	*ap; | 
|  | } YYSTYPE; | 
|  |  | 
|  | extern	YYSTYPE	yylval, yyval; | 
|  |  | 
|  | extern	int	dbg; | 
|  |  | 
|  | extern	int	ntext; | 
|  | extern	double	num[MAXNUM]; | 
|  | extern	int	nnum; | 
|  | extern	int	ntick, tside; | 
|  |  | 
|  | extern	char	*tostring(char *); | 
|  | extern char *grow(char *, char *, int, int); | 
|  |  | 
|  | extern	int	lineno; | 
|  | extern	int	synerr; | 
|  | extern	int	codegen; | 
|  | extern	char	*tempfile; | 
|  | extern	FILE	*tfd; | 
|  |  | 
|  | extern	Point	ptmin, ptmax; | 
|  |  | 
|  | extern	char	*dflt_coord; | 
|  | extern	char	*curr_coord; | 
|  | extern	int	ncoord; | 
|  | extern	int	auto_x; | 
|  | extern	double	margin; | 
|  | extern	int	autoticks; | 
|  | extern	int	pointsize, ps_set; | 
|  |  | 
|  |  | 
|  | #define	logit(x) (x) = log10(x) | 
|  | #define	Log10(x) errcheck(log10(x), "log") | 
|  | #define	Exp(x)	errcheck(exp(x), "exp") | 
|  | #define	Sqrt(x)	errcheck(sqrt(x), "sqrt") | 
|  |  | 
|  | #define	min(x,y)	(((x) <= (y)) ? (x) : (y)) | 
|  | #define	max(x,y)	(((x) >= (y)) ? (x) : (y)) | 
|  |  | 
|  | extern	char	*unsharp(char*); | 
|  |  | 
|  | extern	void	yyerror(char *); | 
|  | extern void coord_x(Point); | 
|  | extern void coord_y(Point); | 
|  | extern void coordlog(int); | 
|  | extern void coord(Obj *); | 
|  | extern void resetcoord(Obj *); | 
|  | extern void savenum(int, double); | 
|  | extern void setjust(int); | 
|  | extern void setsize(int, double); | 
|  | extern void range(Point); | 
|  | extern void halfrange(Obj *, int, double); | 
|  | extern Obj *lookup(char *, int); | 
|  | extern double getvar(Obj *); | 
|  | extern double setvar(Obj *, double); | 
|  | extern Point makepoint(Obj *, double, double); | 
|  | extern Attr *makefattr(int, double); | 
|  | extern Attr *makesattr(char *); | 
|  | extern Attr *makeattr(int, double, char *, int, int); | 
|  | extern Attr *addattr(Attr *, Attr *); | 
|  | extern void freeattr(Attr *); | 
|  | extern char *slprint(Attr *); | 
|  | extern char *juststr(int); | 
|  | extern char *sprntf(char *, Attr *); | 
|  | extern void forloop(Obj *, double, double, int, double, char *); | 
|  | extern void nextfor(void); | 
|  | extern void endfor(void); | 
|  | extern char *ifstat(double, char *, char *); | 
|  | extern void frame(void); | 
|  | extern void frameht(double); | 
|  | extern void framewid(double); | 
|  | extern void frameside(int, Attr *); | 
|  | extern void pushsrc(int, char *); | 
|  | extern void popsrc(void); | 
|  | extern void definition(char *); | 
|  | extern char *delimstr(char *); | 
|  | extern int baldelim(int, char *); | 
|  | extern void dodef(Obj *); | 
|  | extern int getarg(char *); | 
|  | extern int input(void); | 
|  | extern int nextchar(void); | 
|  | extern void do_thru(void); | 
|  | extern int unput(int); | 
|  | extern void pbstr(char *); | 
|  | extern double errcheck(double, char *); | 
|  | extern void yyerror(char *); | 
|  | extern void eprint(void); | 
|  | extern int yywrap(void); | 
|  | extern void copyfile(char *); | 
|  | extern void copydef(Obj *); | 
|  | extern Obj *copythru(char *); | 
|  | extern char *addnewline(char *); | 
|  | extern void copyuntil(char *); | 
|  | extern void copy(void); | 
|  | extern void shell_init(void); | 
|  | extern void shell_text(char *); | 
|  | extern void shell_exec(void); | 
|  | extern void labelwid(double); | 
|  | extern void labelmove(int, double); | 
|  | extern void label(int, Attr *); | 
|  | extern void lab_adjust(void); | 
|  | extern char *sizeit(Attr *); | 
|  | extern void line(int, Point, Point, Attr *); | 
|  | extern void circle(double, Point); | 
|  | extern char *xyname(Point); | 
|  | extern void pic(char *); | 
|  | extern void numlist(void); | 
|  | extern void plot(Attr *, Point); | 
|  | extern void plotnum(double, char *, Point); | 
|  | extern void drawdesc(int, Obj *, Attr *, char *); | 
|  | extern void next(Obj *, Point, Attr *); | 
|  | #define print grapprint | 
|  | extern void print(void); | 
|  | extern void endstat(void); | 
|  | extern void graph(char *); | 
|  | extern void setup(void); | 
|  | extern void do_first(void); | 
|  | extern void reset(void); | 
|  | extern void opentemp(void); | 
|  | extern void savetick(double, char *); | 
|  | extern void dflt_tick(double); | 
|  | extern void tickside(int); | 
|  | extern void tickoff(int); | 
|  | extern void gridtickoff(void); | 
|  | extern void setlist(void); | 
|  | extern void tickdir(int, double, int); | 
|  | extern void ticks(void); | 
|  | extern double modfloor(double, double); | 
|  | extern double modceil(double, double); | 
|  | extern void do_autoticks(Obj *); | 
|  | extern void logtick(double, double, double); | 
|  | extern Obj *setauto(void); | 
|  | extern void autoside(Obj *, int); | 
|  | extern void autolog(Obj *, int); | 
|  | extern void iterator(double, double, int, double, char *); | 
|  | extern void ticklist(Obj *, int); | 
|  | extern void print_ticks(int, int, Obj *, char *, char *); | 
|  | extern void maketick(int, char *, int, int, double, char *, char *, char *); | 
|  | extern void griddesc(Attr *); | 
|  | extern void gridlist(Obj *); | 
|  | extern char *desc_str(Attr *); | 
|  | extern int sidelog(int, int); | 
|  |  | 
|  | extern	Obj	*objlist; |