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