/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ extern char errbuf[200]; #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 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 *); 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;