2 |
- |
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);
|