#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 20 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 */ short type; double fval; char *sval; short just; /* justification, for STRING type */ short 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; short type; /* NAME, DEFNAME, ... */ short first; /* 1 after 1st item seen */ short coord; /* 1 if coord system specified for this name */ short 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 *calloc(), *malloc(), *realloc(), *tostring(), *grow(); extern char *desc_str(), *ifstat(), *delimstr(); extern char *xyname(), *slprint(); extern Obj *lookup(); extern Obj *copythru(); extern Obj *objlist; extern Attr *makeattr(), *makefattr(), *makesattr(), *addattr(); extern Point makepoint(); extern double setvar(), getvar(); 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; extern char *sizeit(), *juststr(); extern double log10(), log(), exp(), sin(), cos(), sqrt(), atof(), errcheck(); extern double fabs(), floor(), ceil(), moddouble(), modceil(); #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))