| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <errno.h> |
| #include <inttypes.h> |
| |
| #undef sqrt |
| #define sqrt p9_sqrt |
| #define YYSTYPE uintptr_t /* DEC v. GNU garbage */ |
| |
| 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)) |
| |
| #undef sprintf /* Snow Leopard */ |
| |
| 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 YYSTYPE yyval; /* DEC cc wants long */ |
| extern YYSTYPE yylval; /* DEC cc wants long */ |
| 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); |