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