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