123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- /*
- * 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;
|