blob: 07dc4df66db92b178ef4aec501655d8aa76ad4ec [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <inttypes.h>
#undef sqrt
#define sqrt p9_sqrt
#define YYSTYPE uintptr_t /* DEC v. GNU garbage */
enum charclass {
OTHER, OLET, ILET, DIG, LPAR, RPAR, SLASH, PLUS, ILETF, ILETJ, VBAR,
NONE, LAST
};
extern int class[LAST][LAST];
#define dprintf if (dbg) printf
#define max(x,y) (((x) >= (y)) ? (x) : (y)) /* beware of side effects */
#define min(x,y) (((x) <= (y)) ? (x) : (y))
#undef sprintf /* Snow Leopard */
extern char errbuf[200];
extern char *cmdname;
#define ERROR sprintf(errbuf,
#define FATAL ), error(1, errbuf)
#define WARNING ), error(0, errbuf)
#define SYNTAX ), yyerror(errbuf)
#define ROM '1'
#define ITAL '2'
#define BLD '3'
#define BDIT '4'
#define DEFGAP -999 /* default gap in piles */
extern int dbg;
extern int ct;
extern int lp[];
extern int used[]; /* available registers */
extern int ps; /* dflt init pt size */
extern int deltaps; /* default change in ps */
extern int dps_set; /* 1 => -p option used */
extern int gsize; /* global size */
extern int ft; /* default font */
extern int display; /* 1 => inline, 0 => .EQ/.EN */
extern int synerr; /* 1 if syntax error in this eqn */
extern char *typesetter; /* typesetter name for -T... */
extern int minsize; /* min size it can print */
extern int ttype; /* actual type of typesetter: */
#define DEVCAT 1
#define DEV202 2
#define DEVAPS 3
#define DEVPOST 4
extern double eht[];
extern double ebase[];
extern int lfont[];
extern int rfont[];
extern int lclass[];
extern int rclass[];
extern YYSTYPE yyval; /* DEC cc wants long */
extern YYSTYPE yylval; /* DEC cc wants long */
extern int eqnreg;
extern double eqnht;
extern int lefteq, righteq;
extern int markline; /* 1 if this EQ/EN contains mark or lineup */
#define TBLSIZE 100
typedef struct s_tbl {
char *name; /* e.g., "max" or "sum" */
char *cval; /* e.g., "\\f1max\\fP" */
int ival; /* or SUM */
struct s_tbl *next;
} tbl;
extern char *spaceval; /* use in place of normal \x (for pic) */
#define String 01
#define Macro 02
#define File 04
#define Char 010
#define Free 040
typedef struct infile {
FILE *fin;
char *fname;
int lineno;
} Infile;
typedef struct { /* input source */
int type; /* Macro, String, File */
char *sp; /* if String or Macro */
} Src;
extern Src src[], *srcp; /* input source stack */
#define MAXARGS 20
typedef struct { /* argument stack */
char *argstk[MAXARGS]; /* pointers to args */
char *argval; /* points to space containing args */
} Arg;
typedef struct { /* font number and name */
int ft;
char name[10];
} Font;
extern Font ftstack[];
extern Font *ftp;
extern int szstack[];
extern int nszstack;
extern Infile infile[10];
extern Infile *curfile;
extern tbl *lookup(tbl **tblp, char *name);
extern void install(tbl **tblp, char *name, char *cval, int ival);
extern tbl *keytbl[], *deftbl[], *restbl[], *ftunetbl[];
extern int salloc(void);
extern void sfree(int);
extern void nrwid(int, int, int);
extern char *ABSPS(int);
extern char *DPS(int, int);
extern int EFFPS(int);
extern double EM(double, int);
extern double REL(double, int);
extern char *pad(int);
extern void getstr(char *, int);
extern char *strsave(char *);
extern int input(void);
extern int unput(int);
extern void pbstr(char *);
extern void error(int, char *);
extern void yyerror(char *);
extern void diacrit(int, int);
extern void eqnbox(int, int, int);
extern void setfont(char *);
extern void font(int, int);
extern void globfont(void);
extern void fatbox(int);
extern void fromto(int, int, int);
extern void funny(int);
extern void integral(int, int, int);
extern void setintegral(void);
extern void pushsrc(int, char *);
extern void popsrc(void);
extern void putout(int);
extern void text(int, char *);
extern void subsup(int, int, int);
extern void bshiftb(int, int, int);
extern void shift2(int, int, int);
extern void setsize(char *);
extern void size(int, int);
extern void globsize(void);
extern void sqrt(int);
extern void text(int, char *);
extern void boverb(int, int);
extern void lineup(int);
extern void mark(int);
extern void paren(int, int, int);
extern void move(int, int, int);
extern void pile(int);
extern int startcol(int);
extern void column(int, int);
extern void matrix(int);