#include #include #include enum charclass { OTHER, OLET, ILET, DIG, LPAR, RPAR, SLASH, PLUS, ILETF, ILETJ, VBAR, NONE, LAST }; extern int class[LAST][LAST]; #define dprintf if (dbg) printf #define max(x,y) (((x) >= (y)) ? (x) : (y)) /* beware of side effects */ #define min(x,y) (((x) <= (y)) ? (x) : (y)) extern char errbuf[200]; extern char *cmdname; #define ERROR sprintf(errbuf, #define FATAL ), error(1, errbuf) #define WARNING ), error(0, errbuf) #define SYNTAX ), yyerror(errbuf) #define ROM '1' #define ITAL '2' #define BLD '3' #define BDIT '4' #define DEFGAP -999 /* default gap in piles */ extern int dbg; extern int ct; extern int lp[]; extern int used[]; /* available registers */ extern int ps; /* dflt init pt size */ extern int deltaps; /* default change in ps */ extern int dps_set; /* 1 => -p option used */ extern int gsize; /* global size */ extern int ft; /* default font */ extern int display; /* 1 => inline, 0 => .EQ/.EN */ extern int synerr; /* 1 if syntax error in this eqn */ extern char *typesetter; /* typesetter name for -T... */ extern int minsize; /* min size it can print */ extern int ttype; /* actual type of typesetter: */ #define DEVCAT 1 #define DEV202 2 #define DEVAPS 3 #define DEVPOST 4 extern double eht[]; extern double ebase[]; extern int lfont[]; extern int rfont[]; extern int lclass[]; extern int rclass[]; extern int yyval; extern int yylval; extern int eqnreg; extern double eqnht; extern int lefteq, righteq; extern int markline; /* 1 if this EQ/EN contains mark or lineup */ #define TBLSIZE 100 typedef struct s_tbl { char *name; /* e.g., "max" or "sum" */ char *cval; /* e.g., "\\f1max\\fP" */ int ival; /* or SUM */ struct s_tbl *next; } tbl; extern char *spaceval; /* use in place of normal \x (for pic) */ #define String 01 #define Macro 02 #define File 04 #define Char 010 #define Free 040 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 20 typedef struct { /* argument stack */ char *argstk[MAXARGS]; /* pointers to args */ char *argval; /* points to space containing args */ } Arg; typedef struct { /* font number and name */ int ft; char name[10]; } Font; extern Font ftstack[]; extern Font *ftp; extern int szstack[]; extern int nszstack; extern Infile infile[10]; extern Infile *curfile; extern tbl *lookup(tbl **tblp, char *name); extern void install(tbl **tblp, char *name, char *cval, int ival); extern tbl *keytbl[], *deftbl[], *restbl[], *ftunetbl[]; extern int salloc(void); extern void sfree(int); extern void nrwid(int, int, int); extern char *ABSPS(int); extern char *DPS(int, int); extern int EFFPS(int); extern double EM(double, int); extern double REL(double, int); extern char *pad(int); extern void getstr(char *, int); extern char *strsave(char *); extern int input(void); extern int unput(int); extern void pbstr(char *); extern void error(int, char *); extern void yyerror(char *); extern void diacrit(int, int); extern void eqnbox(int, int, int); extern void setfont(char *); extern void font(int, int); extern void globfont(void); extern void fatbox(int); extern void fromto(int, int, int); extern void funny(int); extern void integral(int, int, int); extern void setintegral(void); extern void pushsrc(int, char *); extern void popsrc(void); extern void putout(int); extern void text(int, char *); extern void subsup(int, int, int); extern void bshiftb(int, int, int); extern void shift2(int, int, int); extern void setsize(char *); extern void size(int, int); extern void globsize(void); extern void sqrt(int); extern void text(int, char *); extern void boverb(int, int); extern void lineup(int); extern void mark(int); extern void paren(int, int, int); extern void move(int, int, int); extern void pile(int); extern int startcol(int); extern void column(int, int); extern void matrix(int);