| #include <stdio.h> |
| #include "tdef.h" |
| #include "fns.h" |
| #include "ext.h" |
| |
| char termtab[NS]; /* term type added in ptinit() */ |
| char fontdir[NS]; /* added in casefp; not used by nroff */ |
| char devname[20]; /* default output device */ |
| |
| Numtab numtab[NN] = { |
| { PAIR('%', 0) }, |
| { PAIR('n', 'l') }, |
| { PAIR('y', 'r') }, |
| { PAIR('h', 'p') }, |
| { PAIR('c', 't') }, |
| { PAIR('d', 'n') }, |
| { PAIR('m', 'o') }, |
| { PAIR('d', 'y') }, |
| { PAIR('d', 'w') }, |
| { PAIR('l', 'n') }, |
| { PAIR('d', 'l') }, |
| { PAIR('s', 't') }, |
| { PAIR('s', 'b') }, |
| { PAIR('c', '.') }, |
| { PAIR('$', '$') } |
| }; |
| |
| |
| int alphabet = 256; /* latin-1 */ |
| int pto = 10000; |
| int pfrom = 1; |
| int print = 1; |
| char nextf[NS] = TMACDIR; |
| char mfiles[NMF][NS]; |
| int nmfi = 0; |
| int oldbits = -1; |
| int init = 1; |
| int fc = IMP; /* field character */ |
| int eschar = '\\'; |
| int pl; |
| int po; |
| FILE *ptid; |
| |
| int dfact = 1; |
| int dfactd = 1; |
| int res = 1; |
| int smnt = 0; /* beginning of special fonts */ |
| int ascii = 0; /* ascii normally off for troff, on for nroff; -a turns on */ |
| int lg; |
| int pnlist[NPN] = { -1 }; |
| |
| |
| int *pnp = pnlist; |
| int npn = 1; |
| int npnflg = 1; |
| int dpn = -1; |
| int totout = 1; |
| int ulfont = ULFONT; |
| int tabch = TAB; |
| int ldrch = LEADER; |
| |
| |
| Contab contab[NM] = { |
| C(PAIR('d', 's'), caseds), |
| C(PAIR('a', 's'), caseas), |
| C(PAIR('s', 'p'), casesp), |
| C(PAIR('f', 't'), caseft), |
| C(PAIR('p', 's'), caseps), |
| C(PAIR('v', 's'), casevs), |
| C(PAIR('n', 'r'), casenr), |
| C(PAIR('i', 'f'), caseif), |
| C(PAIR('i', 'e'), caseie), |
| C(PAIR('e', 'l'), caseel), |
| C(PAIR('p', 'o'), casepo), |
| C(PAIR('t', 'l'), casetl), |
| C(PAIR('t', 'm'), casetm), |
| C(PAIR('f', 'm'), casefm), |
| C(PAIR('b', 'p'), casebp), |
| C(PAIR('c', 'h'), casech), |
| C(PAIR('p', 'n'), casepn), |
| C(PAIR('b', 'r'), tbreak), |
| C(PAIR('t', 'i'), caseti), |
| C(PAIR('n', 'e'), casene), |
| C(PAIR('n', 'f'), casenf), |
| C(PAIR('c', 'e'), casece), |
| C(PAIR('f', 'i'), casefi), |
| C(PAIR('i', 'n'), casein), |
| C(PAIR('l', 'l'), casell), |
| C(PAIR('n', 's'), casens), |
| C(PAIR('m', 'k'), casemk), |
| C(PAIR('r', 't'), casert), |
| C(PAIR('a', 'm'), caseam), |
| C(PAIR('d', 'e'), casede), |
| C(PAIR('d', 'i'), casedi), |
| C(PAIR('d', 'a'), caseda), |
| C(PAIR('w', 'h'), casewh), |
| C(PAIR('d', 't'), casedt), |
| C(PAIR('i', 't'), caseit), |
| C(PAIR('r', 'm'), caserm), |
| C(PAIR('r', 'r'), caserr), |
| C(PAIR('r', 'n'), casern), |
| C(PAIR('a', 'd'), casead), |
| C(PAIR('r', 's'), casers), |
| C(PAIR('n', 'a'), casena), |
| C(PAIR('p', 'l'), casepl), |
| C(PAIR('t', 'a'), caseta), |
| C(PAIR('t', 'r'), casetr), |
| C(PAIR('u', 'l'), caseul), |
| C(PAIR('c', 'u'), casecu), |
| C(PAIR('l', 't'), caselt), |
| C(PAIR('n', 'x'), casenx), |
| C(PAIR('s', 'o'), caseso), |
| C(PAIR('i', 'g'), caseig), |
| C(PAIR('t', 'c'), casetc), |
| C(PAIR('f', 'c'), casefc), |
| C(PAIR('e', 'c'), caseec), |
| C(PAIR('e', 'o'), caseeo), |
| C(PAIR('l', 'c'), caselc), |
| C(PAIR('e', 'v'), caseev), |
| C(PAIR('r', 'd'), caserd), |
| C(PAIR('a', 'b'), caseab), |
| C(PAIR('f', 'l'), casefl), |
| C(PAIR('e', 'x'), caseex), |
| C(PAIR('s', 's'), casess), |
| C(PAIR('f', 'p'), casefp), |
| C(PAIR('c', 's'), casecs), |
| C(PAIR('b', 'd'), casebd), |
| C(PAIR('l', 'g'), caselg), |
| C(PAIR('h', 'c'), casehc), |
| C(PAIR('h', 'y'), casehy), |
| C(PAIR('n', 'h'), casenh), |
| C(PAIR('n', 'm'), casenm), |
| C(PAIR('n', 'n'), casenn), |
| C(PAIR('s', 'v'), casesv), |
| C(PAIR('o', 's'), caseos), |
| C(PAIR('l', 's'), casels), |
| C(PAIR('c', 'c'), casecc), |
| C(PAIR('c', '2'), casec2), |
| C(PAIR('e', 'm'), caseem), |
| C(PAIR('a', 'f'), caseaf), |
| C(PAIR('h', 'a'), caseha), |
| C(PAIR('h', 'w'), casehw), |
| C(PAIR('m', 'c'), casemc), |
| C(PAIR('p', 'm'), casepm), |
| C(PAIR('p', 'i'), casepi), |
| C(PAIR('u', 'f'), caseuf), |
| C(PAIR('p', 'c'), casepc), |
| C(PAIR('h', 't'), caseht), |
| C(PAIR('c', 'f'), casecf), |
| C(PAIR('s', 'y'), casesy), |
| C(PAIR('l', 'f'), caself), |
| C(PAIR('p', 't'), casept), |
| C(PAIR('g', 'd'), casegd) |
| }; |
| |
| |
| Tbuf _oline; |
| |
| /* |
| * troff environment block |
| */ |
| |
| Env env[NEV] = { { /* this sets up env[0] */ |
| /* int ics */ 0, /* insertion character space, set by .mc */ |
| /* int sps */ 0, |
| /* int spacesz */ 0, |
| /* int lss */ 0, |
| /* int lss1 */ 0, |
| /* int ll */ 0, |
| /* int ll1 */ 0, |
| /* int lt */ 0, |
| /* int lt1 */ 0, |
| /* Tchar ic */ 0, /* insertion character (= margin character) */ |
| /* int icf */ 0, /* insertion character flag */ |
| /* Tchar chbits */ 0, /* size+font bits for current character */ |
| /* Tchar spbits */ 0, |
| /* Tchar nmbits */ 0, /* size+font bits for number from .nm */ |
| /* int apts */ PS, /* actual point size -- as requested by user */ |
| /* int apts1 */ PS, /* need not match an existent size */ |
| /* int pts */ PS, /* hence, this is the size that really exists */ |
| /* int pts1 */ PS, |
| /* int font */ FT, |
| /* int font1 */ FT, |
| /* int ls */ 1, |
| /* int ls1 */ 1, |
| /* int ad */ 1, |
| /* int nms */ 1, /* .nm multiplier */ |
| /* int ndf */ 1, /* .nm separator */ |
| /* int nmwid */ 3, /* max width of .nm numbers */ |
| /* int fi */ 1, |
| /* int cc */ '.', |
| /* int c2 */ '\'', |
| /* int ohc */ OHC, |
| /* int tdelim */ IMP, |
| /* int hyf */ 1, |
| /* int hyoff */ 0, |
| /* int hyphalg */ HYPHALG, |
| /* int un1 */ -1, |
| /* int tabc */ 0, |
| /* int dotc */ '.', |
| /* int adsp */ 0, /* add this much space to each padding point */ |
| /* int adrem */ 0, /* excess space to add until it runs out */ |
| /* int lastl */ 0, /* last text on current output line */ |
| /* int nel */ 0, /* how much space left on current output line */ |
| /* int admod */ 0, /* adjust mode */ |
| /* Tchar *wordp */ 0, |
| /* int spflg */ 0, /* probably to indicate space after punctuation needed */ |
| /* Tchar *linep */ 0, |
| /* Tchar *wdend */ 0, |
| /* Tchar *wdstart */ 0, |
| /* int wne */ 0, |
| /* int ne */ 0, /* how much space taken on current output line */ |
| /* int nc */ 0, /* #characters (incl blank) on output line */ |
| /* int nb */ 0, |
| /* int lnmod */ 0, /* line number mode, set by .nm */ |
| /* int nwd */ 0, /* number of words on current output line */ |
| /* int nn */ 0, /* from .nn command */ |
| /* int ni */ 0, /* indent of .nm numbers, probably */ |
| /* int ul */ 0, |
| /* int cu */ 0, |
| /* int ce */ 0, |
| /* int in */ 0, /* indent and previous value */ |
| /* int in1 */ 0, |
| /* int un */ 0, /* unindent of left margin in some way */ |
| /* int wch */ 0, |
| /* int pendt */ 0, |
| /* Tchar *pendw */ (Tchar *)0, |
| /* int pendnf */ 0, |
| /* int spread */ 0, |
| /* int it */ 0, /* input trap count */ |
| /* int itmac */ 0 |
| } }; |
| |
| Env *envp = env; /* start off in env 0 */ |
| |
| Numerr numerr; |
| |
| Stack *frame, *stk, *ejl; |
| Stack *nxf; |
| |
| int pipeflg; |
| int hflg; /* used in nroff only */ |
| int eqflg; /* used in nroff only */ |
| |
| int xpts; |
| int ppts; |
| int pfont; |
| int mpts; |
| int mfont; |
| int cs; |
| int ccs; |
| int bd; |
| |
| int stdi; |
| int quiet; |
| int stop; |
| char ibuf[IBUFSZ]; |
| char xbuf[IBUFSZ]; |
| char *ibufp; |
| char *xbufp; |
| char *eibuf; |
| char *xeibuf; |
| Tchar pbbuf[NC]; /* pushback buffer for arguments, \n, etc. */ |
| Tchar *pbp = pbbuf; /* next free slot in pbbuf */ |
| Tchar *lastpbp = pbbuf; /* pbp in previous stack frame */ |
| int nx; |
| int mflg; |
| Tchar ch = 0; |
| int ibf; |
| int ifi; |
| int iflg; |
| int rargc; |
| char **argp; |
| Ushort trtab[NTRTAB]; |
| int lgf; |
| int copyf; |
| Offset ip; |
| int nlflg; |
| int donef; |
| int nflush; |
| int nfo; |
| int padc; |
| int raw; |
| int flss; |
| int nonumb; |
| int trap; |
| int tflg; |
| int ejf; |
| int dilev; |
| Offset offset; |
| int em; |
| int ds; |
| Offset woff; |
| int app; |
| int ndone; |
| int lead; |
| int ralss; |
| Offset nextb; |
| Tchar nrbits; |
| int nform; |
| int oldmn; |
| int newmn; |
| int macerr; |
| Offset apptr; |
| int diflg; |
| int evi; |
| int vflag; |
| int noscale; |
| int po1; |
| int nlist[NTRAP]; |
| int mlist[NTRAP]; |
| int evlist[EVLSZ]; |
| int ev; |
| int tty; |
| int sfont = FT; /* appears to be "standard" font; used by .ul */ |
| int sv; |
| int esc; |
| int widthp; |
| int xfont; |
| int setwdf; |
| int over; |
| int nhyp; |
| Tchar **hyp; |
| Tchar *olinep; |
| int dotT; |
| char *unlkp; |
| Wcache widcache[NWIDCACHE]; |
| Diver d[NDI]; |
| Diver *dip; |
| |
| int c_hyphen; |
| int c_emdash; |
| int c_rule; |
| int c_minus; |
| int c_fi; |
| int c_fl; |
| int c_ff; |
| int c_ffi; |
| int c_ffl; |
| int c_acute; |
| int c_grave; |
| int c_under; |
| int c_rooten; |
| int c_boxrule; |
| int c_lefthand; |
| int c_dagger; |
| int c_isalnum; |
| |
| Spnames spnames[] = |
| { |
| &c_hyphen, "hy", |
| &c_emdash, "em", |
| &c_rule, "ru", |
| &c_minus, "\\-", |
| &c_fi, "fi", |
| &c_fl, "fl", |
| &c_ff, "ff", |
| &c_ffi, "Fi", |
| &c_ffl, "Fl", |
| &c_acute, "aa", |
| &c_grave, "ga", |
| &c_under, "ul", |
| &c_rooten, "rn", |
| &c_boxrule, "br", |
| &c_lefthand, "lh", |
| &c_dagger, "dg", /* not in nroff?? */ |
| &c_isalnum, "__", |
| 0, 0 |
| }; |
| |
| |
| Tchar (*hmot)(void); |
| Tchar (*makem)(int i); |
| Tchar (*setabs)(void); |
| Tchar (*setch)(int c); |
| Tchar (*sethl)(int k); |
| Tchar (*setht)(void); |
| Tchar (*setslant)(void); |
| Tchar (*vmot)(void); |
| Tchar (*xlss)(void); |
| int (*findft)(int i); |
| int (*width)(Tchar j); |
| void (*mchbits)(void); |
| void (*ptlead)(void); |
| void (*ptout)(Tchar i); |
| void (*ptpause)(void); |
| void (*setfont)(int a); |
| void (*setps)(void); |
| void (*setwd)(void); |
| |