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