237 lines
5.9 KiB
C
237 lines
5.9 KiB
C
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;
|