1*3e12c5d1SDavid du Colombier #include <stdio.h> 2*3e12c5d1SDavid du Colombier #include <stdlib.h> 3*3e12c5d1SDavid du Colombier #include <string.h> 4*3e12c5d1SDavid du Colombier 5*3e12c5d1SDavid du Colombier enum charclass { 6*3e12c5d1SDavid du Colombier OTHER, OLET, ILET, DIG, LPAR, RPAR, SLASH, PLUS, ILETF, ILETJ, VBAR, 7*3e12c5d1SDavid du Colombier NONE, LAST 8*3e12c5d1SDavid du Colombier }; 9*3e12c5d1SDavid du Colombier extern int class[LAST][LAST]; 10*3e12c5d1SDavid du Colombier 11*3e12c5d1SDavid du Colombier #define dprintf if (dbg) printf 12*3e12c5d1SDavid du Colombier #define max(x,y) (((x) >= (y)) ? (x) : (y)) /* beware of side effects */ 13*3e12c5d1SDavid du Colombier #define min(x,y) (((x) <= (y)) ? (x) : (y)) 14*3e12c5d1SDavid du Colombier 15*3e12c5d1SDavid du Colombier extern char errbuf[200]; 16*3e12c5d1SDavid du Colombier extern char *cmdname; 17*3e12c5d1SDavid du Colombier #define ERROR sprintf(errbuf, 18*3e12c5d1SDavid du Colombier #define FATAL ), error(1, errbuf) 19*3e12c5d1SDavid du Colombier #define WARNING ), error(0, errbuf) 20*3e12c5d1SDavid du Colombier #define SYNTAX ), yyerror(errbuf) 21*3e12c5d1SDavid du Colombier 22*3e12c5d1SDavid du Colombier #define ROM '1' 23*3e12c5d1SDavid du Colombier #define ITAL '2' 24*3e12c5d1SDavid du Colombier #define BLD '3' 25*3e12c5d1SDavid du Colombier #define BDIT '4' 26*3e12c5d1SDavid du Colombier 27*3e12c5d1SDavid du Colombier #define DEFGAP -999 /* default gap in piles */ 28*3e12c5d1SDavid du Colombier 29*3e12c5d1SDavid du Colombier extern int dbg; 30*3e12c5d1SDavid du Colombier extern int ct; 31*3e12c5d1SDavid du Colombier extern int lp[]; 32*3e12c5d1SDavid du Colombier extern int used[]; /* available registers */ 33*3e12c5d1SDavid du Colombier extern int ps; /* dflt init pt size */ 34*3e12c5d1SDavid du Colombier extern int deltaps; /* default change in ps */ 35*3e12c5d1SDavid du Colombier extern int dps_set; /* 1 => -p option used */ 36*3e12c5d1SDavid du Colombier extern int gsize; /* global size */ 37*3e12c5d1SDavid du Colombier extern int ft; /* default font */ 38*3e12c5d1SDavid du Colombier extern int display; /* 1 => inline, 0 => .EQ/.EN */ 39*3e12c5d1SDavid du Colombier extern int synerr; /* 1 if syntax error in this eqn */ 40*3e12c5d1SDavid du Colombier 41*3e12c5d1SDavid du Colombier extern char *typesetter; /* typesetter name for -T... */ 42*3e12c5d1SDavid du Colombier extern int minsize; /* min size it can print */ 43*3e12c5d1SDavid du Colombier extern int ttype; /* actual type of typesetter: */ 44*3e12c5d1SDavid du Colombier 45*3e12c5d1SDavid du Colombier #define DEVCAT 1 46*3e12c5d1SDavid du Colombier #define DEV202 2 47*3e12c5d1SDavid du Colombier #define DEVAPS 3 48*3e12c5d1SDavid du Colombier #define DEVPOST 4 49*3e12c5d1SDavid du Colombier 50*3e12c5d1SDavid du Colombier extern double eht[]; 51*3e12c5d1SDavid du Colombier extern double ebase[]; 52*3e12c5d1SDavid du Colombier extern int lfont[]; 53*3e12c5d1SDavid du Colombier extern int rfont[]; 54*3e12c5d1SDavid du Colombier extern int lclass[]; 55*3e12c5d1SDavid du Colombier extern int rclass[]; 56*3e12c5d1SDavid du Colombier extern int yyval; 57*3e12c5d1SDavid du Colombier extern int yylval; 58*3e12c5d1SDavid du Colombier extern int eqnreg; 59*3e12c5d1SDavid du Colombier extern double eqnht; 60*3e12c5d1SDavid du Colombier extern int lefteq, righteq; 61*3e12c5d1SDavid du Colombier extern int markline; /* 1 if this EQ/EN contains mark or lineup */ 62*3e12c5d1SDavid du Colombier 63*3e12c5d1SDavid du Colombier #define TBLSIZE 100 64*3e12c5d1SDavid du Colombier 65*3e12c5d1SDavid du Colombier typedef struct s_tbl { 66*3e12c5d1SDavid du Colombier char *name; /* e.g., "max" or "sum" */ 67*3e12c5d1SDavid du Colombier char *cval; /* e.g., "\\f1max\\fP" */ 68*3e12c5d1SDavid du Colombier int ival; /* or SUM */ 69*3e12c5d1SDavid du Colombier struct s_tbl *next; 70*3e12c5d1SDavid du Colombier } tbl; 71*3e12c5d1SDavid du Colombier 72*3e12c5d1SDavid du Colombier extern char *spaceval; /* use in place of normal \x (for pic) */ 73*3e12c5d1SDavid du Colombier 74*3e12c5d1SDavid du Colombier #define String 01 75*3e12c5d1SDavid du Colombier #define Macro 02 76*3e12c5d1SDavid du Colombier #define File 04 77*3e12c5d1SDavid du Colombier #define Char 010 78*3e12c5d1SDavid du Colombier #define Free 040 79*3e12c5d1SDavid du Colombier 80*3e12c5d1SDavid du Colombier typedef struct infile { 81*3e12c5d1SDavid du Colombier FILE *fin; 82*3e12c5d1SDavid du Colombier char *fname; 83*3e12c5d1SDavid du Colombier int lineno; 84*3e12c5d1SDavid du Colombier } Infile; 85*3e12c5d1SDavid du Colombier 86*3e12c5d1SDavid du Colombier typedef struct { /* input source */ 87*3e12c5d1SDavid du Colombier int type; /* Macro, String, File */ 88*3e12c5d1SDavid du Colombier char *sp; /* if String or Macro */ 89*3e12c5d1SDavid du Colombier } Src; 90*3e12c5d1SDavid du Colombier 91*3e12c5d1SDavid du Colombier extern Src src[], *srcp; /* input source stack */ 92*3e12c5d1SDavid du Colombier 93*3e12c5d1SDavid du Colombier #define MAXARGS 20 94*3e12c5d1SDavid du Colombier typedef struct { /* argument stack */ 95*3e12c5d1SDavid du Colombier char *argstk[MAXARGS]; /* pointers to args */ 96*3e12c5d1SDavid du Colombier char *argval; /* points to space containing args */ 97*3e12c5d1SDavid du Colombier } Arg; 98*3e12c5d1SDavid du Colombier 99*3e12c5d1SDavid du Colombier typedef struct { /* font number and name */ 100*3e12c5d1SDavid du Colombier int ft; 101*3e12c5d1SDavid du Colombier char name[10]; 102*3e12c5d1SDavid du Colombier } Font; 103*3e12c5d1SDavid du Colombier 104*3e12c5d1SDavid du Colombier extern Font ftstack[]; 105*3e12c5d1SDavid du Colombier extern Font *ftp; 106*3e12c5d1SDavid du Colombier 107*3e12c5d1SDavid du Colombier extern int szstack[]; 108*3e12c5d1SDavid du Colombier extern int nszstack; 109*3e12c5d1SDavid du Colombier 110*3e12c5d1SDavid du Colombier extern Infile infile[10]; 111*3e12c5d1SDavid du Colombier extern Infile *curfile; 112*3e12c5d1SDavid du Colombier 113*3e12c5d1SDavid du Colombier extern tbl *lookup(tbl **tblp, char *name); 114*3e12c5d1SDavid du Colombier extern void install(tbl **tblp, char *name, char *cval, int ival); 115*3e12c5d1SDavid du Colombier extern tbl *keytbl[], *deftbl[], *restbl[], *ftunetbl[]; 116*3e12c5d1SDavid du Colombier 117*3e12c5d1SDavid du Colombier extern int salloc(void); 118*3e12c5d1SDavid du Colombier extern void sfree(int); 119*3e12c5d1SDavid du Colombier extern void nrwid(int, int, int); 120*3e12c5d1SDavid du Colombier extern char *ABSPS(int); 121*3e12c5d1SDavid du Colombier extern char *DPS(int, int); 122*3e12c5d1SDavid du Colombier extern int EFFPS(int); 123*3e12c5d1SDavid du Colombier extern double EM(double, int); 124*3e12c5d1SDavid du Colombier extern double REL(double, int); 125*3e12c5d1SDavid du Colombier extern char *pad(int); 126*3e12c5d1SDavid du Colombier extern void getstr(char *, int); 127*3e12c5d1SDavid du Colombier extern char *strsave(char *); 128*3e12c5d1SDavid du Colombier 129*3e12c5d1SDavid du Colombier extern int input(void); 130*3e12c5d1SDavid du Colombier extern int unput(int); 131*3e12c5d1SDavid du Colombier extern void pbstr(char *); 132*3e12c5d1SDavid du Colombier extern void error(int, char *); 133*3e12c5d1SDavid du Colombier extern void yyerror(char *); 134*3e12c5d1SDavid du Colombier 135*3e12c5d1SDavid du Colombier extern void diacrit(int, int); 136*3e12c5d1SDavid du Colombier extern void eqnbox(int, int, int); 137*3e12c5d1SDavid du Colombier extern void setfont(char *); 138*3e12c5d1SDavid du Colombier extern void font(int, int); 139*3e12c5d1SDavid du Colombier extern void globfont(void); 140*3e12c5d1SDavid du Colombier extern void fatbox(int); 141*3e12c5d1SDavid du Colombier extern void fromto(int, int, int); 142*3e12c5d1SDavid du Colombier extern void funny(int); 143*3e12c5d1SDavid du Colombier extern void integral(int, int, int); 144*3e12c5d1SDavid du Colombier extern void setintegral(void); 145*3e12c5d1SDavid du Colombier extern void pushsrc(int, char *); 146*3e12c5d1SDavid du Colombier extern void popsrc(void); 147*3e12c5d1SDavid du Colombier extern void putout(int); 148*3e12c5d1SDavid du Colombier extern void text(int, char *); 149*3e12c5d1SDavid du Colombier extern void subsup(int, int, int); 150*3e12c5d1SDavid du Colombier extern void bshiftb(int, int, int); 151*3e12c5d1SDavid du Colombier extern void shift2(int, int, int); 152*3e12c5d1SDavid du Colombier extern void setsize(char *); 153*3e12c5d1SDavid du Colombier extern void size(int, int); 154*3e12c5d1SDavid du Colombier extern void globsize(void); 155*3e12c5d1SDavid du Colombier extern void sqrt(int); 156*3e12c5d1SDavid du Colombier extern void text(int, char *); 157*3e12c5d1SDavid du Colombier extern void boverb(int, int); 158*3e12c5d1SDavid du Colombier extern void lineup(int); 159*3e12c5d1SDavid du Colombier extern void mark(int); 160*3e12c5d1SDavid du Colombier extern void paren(int, int, int); 161*3e12c5d1SDavid du Colombier extern void move(int, int, int); 162*3e12c5d1SDavid du Colombier extern void pile(int); 163*3e12c5d1SDavid du Colombier extern int startcol(int); 164*3e12c5d1SDavid du Colombier extern void column(int, int); 165*3e12c5d1SDavid du Colombier extern void matrix(int); 166