xref: /plan9/sys/src/cmd/eqn/e.h (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
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