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