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