1 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
2 /*	  All Rights Reserved  	*/
3 
4 
5 /*
6  * Copyright (c) 1980 Regents of the University of California.
7  * All rights reserved. The Berkeley software License Agreement
8  * specifies the terms and conditions for redistribution.
9  */
10 
11 /*
12  * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc.
13  * All Rights Reserved.
14  */
15 
16 /*	from "e.h	1.5	05/06/02 SMI"	"ucbeqn:e.h 1.1" */
17 
18 /*
19  * Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
20  *
21  * Sccsid @(#)e.h	1.13 (gritter) 1/13/08
22  */
23 
24 /*
25  * Changes Copyright (c) 2014 Carsten Kunze (carsten.kunze at arcor.de)
26  */
27 
28 #include <stdio.h>
29 #include <inttypes.h>
30 #include "global.h"
31 
32 #if defined (__GLIBC__) && defined (_IO_getc_unlocked)
33 #undef	getc
34 #define	getc(f)	_IO_getc_unlocked(f)
35 #endif
36 
37 #define	FATAL	1
38 #define	ROM	'1'
39 #ifndef NEQN
40 #define	ITAL	'2'
41 #define	BLD	'3'
42 #else /* NEQN */
43 #define	ITAL	'1'
44 #define	BLD	'1'
45 #endif /* NEQN */
46 
47 #define	rom(c)	(((c) & 0177) == ROM)
48 #define	ital(c)	(((c) & 0177) == ITAL)
49 #define	bld(c)	(((c) & 0177) == BLD)
50 
51 #define	OP	0200
52 #define	op(c)	((c) & OP)
53 
54 #ifndef NEQN
55 #define	VERT(n)	(n)
56 #define POINT	72
57 #define EM(m, ps)	((((float)(m)*(ps) * resolution) / POINT))
58 #else /* NEQN */
59 #define	VERT(n)	(20 * (n))
60 #endif /* NEQN */
61 #define	EFFPS(p)	((p) >= 6 ? (p) : 6)
62 
63 extern int	dbg;
64 extern int	ct;
65 extern int	lp[];
66 extern int	used[];	/* available registers */
67 extern float	ps;	/* dflt init pt size */
68 #define	resolution	72	/* was: resolution of ditroff */
69 extern float	deltaps;	/* default change in ps */
70 extern float	gsize;	/* global size */
71 extern int	gfont;	/* global font */
72 extern int	ft;	/* dflt font */
73 extern FILE	*curfile;	/* current input file */
74 extern int	ifile;	/* input file number */
75 extern int	linect;	/* line number in current file */
76 extern int	eqline;	/* line where eqn started */
77 extern int	svargc;
78 extern char	**svargv;
79 #ifndef	NEQN
80 extern float	eht[100];
81 extern float	ebase[100];
82 #else	/* NEQN */
83 extern int	eht[100];
84 extern int	ebase[100];
85 #endif	/* NEQN */
86 extern int	lfont[100];
87 extern int	rfont[100];
88 extern int	eqnreg, eqnht;
89 extern int	lefteq, righteq;
90 extern int	lastchar;	/* last character read by lex */
91 extern int	markline;	/* 1 if this EQ/EN contains mark or lineup */
92 extern char	*progname;
93 
94 typedef struct s_tbl {
95 	char	*name;
96 	char	*defn;
97 	struct s_tbl *next;
98 } tbl;
99 extern  char    *spaceval;  /* use in place of normal \x (for pic) */
100 
101 /* diacrit.c */
102 void diacrit(int, int);
103 /* e.c */
104 int yyparse(void);
105 /* eqnbox.c */
106 void eqnbox(int, int, int);
107 /* font.c */
108 void setfont(char);
109 void font(int, int);
110 void fatbox(int);
111 void globfont(void);
112 /* fromto.c */
113 void fromto(int, int, int);
114 /* funny.c */
115 void funny(int);
116 /* glob.c */
117 /* integral.c */
118 void integral(int, int, int);
119 void setintegral(void);
120 /* io.c */
121 int main(int, char **);
122 void eqnexit(int);
123 int eqn(int, char **);
124 #define	getline(s, n)	eqngetline(s, n)
125 int getline(char **, size_t *);
126 void do_inline(void);
127 void putout(int);
128 float max(float, float);
129 int oalloc(void);
130 void ofree(int);
131 void setps(float);
132 void nrwid(int, float, int);
133 void setfile(int, char **);
134 void yyerror(char *);
135 void init(void);
136 void error(int, const char *, ...);
137 /* lex.c */
138 int gtc(void);
139 int openinfile(void);
140 void pbstr(register char *);
141 int yylex(void);
142 int getstr(char *, register int);
143 int cstr(char *, int, int);
144 void define(int);
145 void space(void);
146 char *strsave(char *);
147 void include(void);
148 void delim(void);
149 /* lookup.c */
150 tbl *lookup(tbl **, char *, char *);
151 void init_tbl(void);
152 /* mark.c */
153 void mark(int);
154 void lineup(int);
155 /* matrix.c */
156 void column(int, int);
157 void matrix(int);
158 /* move.c */
159 void move(int, int, int);
160 /* over.c */
161 void boverb(int, int);
162 /* paren.c */
163 void paren(int, int, int);
164 void brack(int, char *, char *, char *);
165 /* pile.c */
166 void lpile(int, int, int);
167 /* shift.c */
168 void bshiftb(int, int, int);
169 void shift(int);
170 void shift2(int, int, int);
171 /* size.c */
172 void setsize(char *);
173 void size(float, int);
174 void globsize(void);
175 char *tsize(float);
176 /* sqrt.c */
177 #define	sqrt(n)	eqnsqrt(n)
178 void sqrt(int);
179 /* text.c */
180 void text(int, char *);
181 int trans(int, char *);
182 void shim(int);
183 void roman(int);
184 void name4(int, int);
185