13b04b890Sslatteng #include "tdef.h" 23b04b890Sslatteng 33b04b890Sslatteng /* You may want to change these names */ 425bdb26eSslatteng /* these SHOULD be defined in the makefile */ 53b04b890Sslatteng 678cf08cbSslatteng #ifndef FONTDIR 778cf08cbSslatteng # define FONTDIR "/usr/lib/font" 878cf08cbSslatteng #endif 925bdb26eSslatteng #ifndef MACROLIB 10*49d48dedSslatteng /* MACROLIB is the prefix of the macro filenames */ 11*49d48dedSslatteng # define MACROLIB "/usr/lib/tmac/tmac." 1225bdb26eSslatteng #endif 1378cf08cbSslatteng 143b04b890Sslatteng #ifndef NROFF 1578cf08cbSslatteng char termtab[NS] = FONTDIR; /* rest added in ptinit() */ 1678cf08cbSslatteng char fontfile[NS] = FONTDIR; /* rest added in casefp() */ 17*49d48dedSslatteng char devname[20] = "va"; /* default typesetter */ 183b04b890Sslatteng #endif 193b04b890Sslatteng char obuf[OBUFSZ]; /* characters collected here for actual typesetter output */ 203b04b890Sslatteng char *obufp = obuf; 213b04b890Sslatteng int r[NN] = { /* read-only number registers at beginning */ 223b04b890Sslatteng PAIR('%', 0), 233b04b890Sslatteng PAIR('n', 'l'), 243b04b890Sslatteng PAIR('y', 'r'), 253b04b890Sslatteng PAIR('h', 'p'), 263b04b890Sslatteng PAIR('c', 't'), 273b04b890Sslatteng PAIR('d', 'n'), 283b04b890Sslatteng PAIR('m', 'o'), 293b04b890Sslatteng PAIR('d', 'y'), 303b04b890Sslatteng PAIR('d', 'w'), 313b04b890Sslatteng PAIR('l', 'n'), 323b04b890Sslatteng PAIR('d', 'l'), 333b04b890Sslatteng PAIR('s', 't'), 343b04b890Sslatteng PAIR('s', 'b'), 353b04b890Sslatteng PAIR('c', '.'), 363b04b890Sslatteng PAIR('$', '$'), 373b04b890Sslatteng }; 383b04b890Sslatteng 393b04b890Sslatteng 403b04b890Sslatteng int pto = 10000; 413b04b890Sslatteng int pfrom = 1; 423b04b890Sslatteng int print = 1; 4325bdb26eSslatteng char nextf[NS] = MACROLIB; 44*49d48dedSslatteng int nfi; 453b04b890Sslatteng #ifdef NROFF 463b04b890Sslatteng char termtab[NS] = "/usr/lib/term/tab37"; 473b04b890Sslatteng #endif 483b04b890Sslatteng #ifndef NROFF 493b04b890Sslatteng int oldbits = -1; 503b04b890Sslatteng #endif 513b04b890Sslatteng int init = 1; 523b04b890Sslatteng int fc = IMP; /* field character */ 533b04b890Sslatteng int eschar = '\\'; 543b04b890Sslatteng #ifdef NROFF 553b04b890Sslatteng int pl = 11*INCH; 563b04b890Sslatteng int po = PO; 573b04b890Sslatteng #else 583b04b890Sslatteng int pl; 593b04b890Sslatteng int po; 603b04b890Sslatteng #endif 613b04b890Sslatteng int dfact = 1; 623b04b890Sslatteng int dfactd = 1; 633b04b890Sslatteng int res = 1; 643b04b890Sslatteng int ascii = ASCII; 653b04b890Sslatteng int ptid = PTID; 663b04b890Sslatteng int lg = LG; 673b04b890Sslatteng int pnlist[NPN] = { 683b04b890Sslatteng -1}; 693b04b890Sslatteng 703b04b890Sslatteng 713b04b890Sslatteng int *pnp = pnlist; 723b04b890Sslatteng int npn = 1; 733b04b890Sslatteng int npnflg = 1; 743b04b890Sslatteng int xflg = 1; 753b04b890Sslatteng int dpn = -1; 763b04b890Sslatteng int totout = 1; 773b04b890Sslatteng int ulfont = FT + 1; 783b04b890Sslatteng int ulbit = 1 << 9; 793b04b890Sslatteng int tabch = TAB; 803b04b890Sslatteng int ldrch = LEADER; 813b04b890Sslatteng int xxx; 823b04b890Sslatteng extern caseds(), caseas(), casesp(), caseft(), caseps(), casevs(), 833b04b890Sslatteng casenr(), caseif(), casepo(), casetl(), casetm(), casebp(), casech(), 843b04b890Sslatteng casepn(), tbreak(), caseti(), casene(), casenf(), casece(), casefi(), 85ca957863Sslatteng casein(), casell(), casens(), casemk(), casert(), caseam(), casest(), 863b04b890Sslatteng casede(), casedi(), caseda(), casewh(), casedt(), caseit(), caserm(), 873b04b890Sslatteng casern(), casead(), casers(), casena(), casepl(), caseta(), casetr(), 883b04b890Sslatteng caseul(), caselt(), casenx(), caseso(), caseig(), casetc(), casefc(), 893b04b890Sslatteng caseec(), caseeo(), caselc(), caseev(), caserd(), caseab(), casefl(), 903b04b890Sslatteng done(), casess(), casefp(), casecs(), casebd(), caselg(), casehc(), 913b04b890Sslatteng casehy(), casenh(), casenm(), casenn(), casesv(), caseos(), casels(), 923b04b890Sslatteng casecc(), casec2(), caseem(), caseaf(), casehw(), casemc(), casepm(), 933b04b890Sslatteng casecu(), casepi(), caserr(), caseuf(), caseie(), caseel(), casepc(), 943b04b890Sslatteng caseht(), casecf(), casesy(); 953b04b890Sslatteng 963b04b890Sslatteng struct contab { 973b04b890Sslatteng int rq; 983b04b890Sslatteng /* 993b04b890Sslatteng union { 1003b04b890Sslatteng */ 1013b04b890Sslatteng int (*f)(); 1023b04b890Sslatteng /* 1033b04b890Sslatteng unsigned mx; 1043b04b890Sslatteng }x; 1053b04b890Sslatteng */ 1063b04b890Sslatteng } contab[NM] = { 1073b04b890Sslatteng PAIR('d', 's'), caseds, 1083b04b890Sslatteng PAIR('a', 's'), caseas, 1093b04b890Sslatteng PAIR('s', 'p'), casesp, 1103b04b890Sslatteng PAIR('f', 't'), caseft, 1113b04b890Sslatteng PAIR('p', 's'), caseps, 1123b04b890Sslatteng PAIR('v', 's'), casevs, 1133b04b890Sslatteng PAIR('n', 'r'), casenr, 1143b04b890Sslatteng PAIR('i', 'f'), caseif, 1153b04b890Sslatteng PAIR('i', 'e'), caseie, 1163b04b890Sslatteng PAIR('e', 'l'), caseel, 1173b04b890Sslatteng PAIR('p', 'o'), casepo, 1183b04b890Sslatteng PAIR('t', 'l'), casetl, 1193b04b890Sslatteng PAIR('t', 'm'), casetm, 1203b04b890Sslatteng PAIR('b', 'p'), casebp, 1213b04b890Sslatteng PAIR('c', 'h'), casech, 1223b04b890Sslatteng PAIR('p', 'n'), casepn, 1233b04b890Sslatteng PAIR('b', 'r'), tbreak, 1243b04b890Sslatteng PAIR('t', 'i'), caseti, 1253b04b890Sslatteng PAIR('n', 'e'), casene, 1263b04b890Sslatteng PAIR('n', 'f'), casenf, 1273b04b890Sslatteng PAIR('c', 'e'), casece, 1283b04b890Sslatteng PAIR('f', 'i'), casefi, 1293b04b890Sslatteng PAIR('i', 'n'), casein, 1303b04b890Sslatteng PAIR('l', 'l'), casell, 1313b04b890Sslatteng PAIR('n', 's'), casens, 1323b04b890Sslatteng PAIR('m', 'k'), casemk, 1333b04b890Sslatteng PAIR('r', 't'), casert, 1343b04b890Sslatteng PAIR('a', 'm'), caseam, 135ca957863Sslatteng PAIR('s', 't'), casest, 1363b04b890Sslatteng PAIR('d', 'e'), casede, 1373b04b890Sslatteng PAIR('d', 'i'), casedi, 1383b04b890Sslatteng PAIR('d', 'a'), caseda, 1393b04b890Sslatteng PAIR('w', 'h'), casewh, 1403b04b890Sslatteng PAIR('d', 't'), casedt, 1413b04b890Sslatteng PAIR('i', 't'), caseit, 1423b04b890Sslatteng PAIR('r', 'm'), caserm, 1433b04b890Sslatteng PAIR('r', 'r'), caserr, 1443b04b890Sslatteng PAIR('r', 'n'), casern, 1453b04b890Sslatteng PAIR('a', 'd'), casead, 1463b04b890Sslatteng PAIR('r', 's'), casers, 1473b04b890Sslatteng PAIR('n', 'a'), casena, 1483b04b890Sslatteng PAIR('p', 'l'), casepl, 1493b04b890Sslatteng PAIR('t', 'a'), caseta, 1503b04b890Sslatteng PAIR('t', 'r'), casetr, 1513b04b890Sslatteng PAIR('u', 'l'), caseul, 1523b04b890Sslatteng PAIR('c', 'u'), casecu, 1533b04b890Sslatteng PAIR('l', 't'), caselt, 1543b04b890Sslatteng PAIR('n', 'x'), casenx, 1553b04b890Sslatteng PAIR('s', 'o'), caseso, 1563b04b890Sslatteng PAIR('i', 'g'), caseig, 1573b04b890Sslatteng PAIR('t', 'c'), casetc, 1583b04b890Sslatteng PAIR('f', 'c'), casefc, 1593b04b890Sslatteng PAIR('e', 'c'), caseec, 1603b04b890Sslatteng PAIR('e', 'o'), caseeo, 1613b04b890Sslatteng PAIR('l', 'c'), caselc, 1623b04b890Sslatteng PAIR('e', 'v'), caseev, 1633b04b890Sslatteng PAIR('r', 'd'), caserd, 1643b04b890Sslatteng PAIR('a', 'b'), caseab, 1653b04b890Sslatteng PAIR('f', 'l'), casefl, 1663b04b890Sslatteng PAIR('e', 'x'), done, 1673b04b890Sslatteng PAIR('s', 's'), casess, 1683b04b890Sslatteng PAIR('f', 'p'), casefp, 1693b04b890Sslatteng PAIR('c', 's'), casecs, 1703b04b890Sslatteng PAIR('b', 'd'), casebd, 1713b04b890Sslatteng PAIR('l', 'g'), caselg, 1723b04b890Sslatteng PAIR('h', 'c'), casehc, 1733b04b890Sslatteng PAIR('h', 'y'), casehy, 1743b04b890Sslatteng PAIR('n', 'h'), casenh, 1753b04b890Sslatteng PAIR('n', 'm'), casenm, 1763b04b890Sslatteng PAIR('n', 'n'), casenn, 1773b04b890Sslatteng PAIR('s', 'v'), casesv, 1783b04b890Sslatteng PAIR('o', 's'), caseos, 1793b04b890Sslatteng PAIR('l', 's'), casels, 1803b04b890Sslatteng PAIR('c', 'c'), casecc, 1813b04b890Sslatteng PAIR('c', '2'), casec2, 1823b04b890Sslatteng PAIR('e', 'm'), caseem, 1833b04b890Sslatteng PAIR('a', 'f'), caseaf, 1843b04b890Sslatteng PAIR('h', 'w'), casehw, 1853b04b890Sslatteng PAIR('m', 'c'), casemc, 1863b04b890Sslatteng PAIR('p', 'm'), casepm, 1873b04b890Sslatteng PAIR('p', 'i'), casepi, 1883b04b890Sslatteng PAIR('u', 'f'), caseuf, 1893b04b890Sslatteng PAIR('p', 'c'), casepc, 1903b04b890Sslatteng PAIR('h', 't'), caseht, 1913b04b890Sslatteng PAIR('c', 'f'), casecf, 1923b04b890Sslatteng PAIR('s', 'y'), casesy, 1933b04b890Sslatteng PAIR('!', 0), casesy, /* synonym for .sy */ 1943b04b890Sslatteng }; 1953b04b890Sslatteng 1963b04b890Sslatteng 1973b04b890Sslatteng tchar oline[LNSIZE+1]; 1983b04b890Sslatteng 1993b04b890Sslatteng /* 2003b04b890Sslatteng troff environment block 2013b04b890Sslatteng */ 2023b04b890Sslatteng 2033b04b890Sslatteng int block = 0; 2043b04b890Sslatteng #ifdef NROFF 2053b04b890Sslatteng /* these are initialized statically in nroff (so far) 2063b04b890Sslatteng /* and dynamically in ptinit() in troff beacuse INCH 2073b04b890Sslatteng /* is a variable 2083b04b890Sslatteng */ 2093b04b890Sslatteng int ics = ICS; /* space for insertion character */ 2103b04b890Sslatteng int sps = SPS; 2113b04b890Sslatteng int spacesz = SS; 2123b04b890Sslatteng int lss = VS; 2133b04b890Sslatteng int lss1 = VS; 2143b04b890Sslatteng int ll = LL; 2153b04b890Sslatteng int ll1 = LL; 2163b04b890Sslatteng int lt = LL; 2173b04b890Sslatteng int lt1 = LL; 2183b04b890Sslatteng #else 2193b04b890Sslatteng int ics = 0; 2203b04b890Sslatteng int sps = 0; 2213b04b890Sslatteng int spacesz = 0; 2223b04b890Sslatteng int lss = 0; 2233b04b890Sslatteng int lss1 = 0; 2243b04b890Sslatteng int ll = 0; 2253b04b890Sslatteng int ll1 = 0; 2263b04b890Sslatteng int lt = 0; 2273b04b890Sslatteng int lt1 = 0; 2283b04b890Sslatteng #endif 2293b04b890Sslatteng tchar ic = 0; /* insertion character (= margin character) */ 2303b04b890Sslatteng int icf = 0; 2313b04b890Sslatteng tchar chbits = 0; /* size+font bits for current character */ 2323b04b890Sslatteng tchar spbits = 0; /* ditto for special font */ 2333b04b890Sslatteng tchar nmbits = 0; 2343b04b890Sslatteng int apts = PS; /* actual point size -- as requested by user */ 2353b04b890Sslatteng int apts1 = PS; /* need not match an existent size */ 2363b04b890Sslatteng int pts = PS; /* hence, this is the size that really exists */ 2373b04b890Sslatteng int pts1 = PS; 2383b04b890Sslatteng int font = FT; 2393b04b890Sslatteng int font1 = FT; 240ca957863Sslatteng int stip = ST; 241ca957863Sslatteng int stip1 = ST; 2423b04b890Sslatteng int ls = 1; 2433b04b890Sslatteng int ls1 = 1; 2443b04b890Sslatteng int ad = 1; 2453b04b890Sslatteng int nms = 1; 2463b04b890Sslatteng int ndf = 1; 2473b04b890Sslatteng int fi = 1; 2483b04b890Sslatteng int cc = '.'; 2493b04b890Sslatteng int c2 = '\''; 2503b04b890Sslatteng int ohc = OHC; 2513b04b890Sslatteng int tdelim = IMP; 2523b04b890Sslatteng int hyf = 1; 2533b04b890Sslatteng int hyoff = 0; 2543b04b890Sslatteng int un1 = -1; 2553b04b890Sslatteng int tabc = 0; 2563b04b890Sslatteng int dotc = '.'; 2573b04b890Sslatteng int adsp = 0; 2583b04b890Sslatteng int adrem = 0; 2593b04b890Sslatteng int lastl = 0; 2603b04b890Sslatteng int nel = 0; 2613b04b890Sslatteng int admod = 0; 2623b04b890Sslatteng tchar *wordp = 0; 2633b04b890Sslatteng int spflg = 0; /* probably to indicate space after punctuation needed */ 2643b04b890Sslatteng tchar *linep = 0; 2653b04b890Sslatteng tchar *wdend = 0; 2663b04b890Sslatteng tchar *wdstart = 0; 2673b04b890Sslatteng int wne = 0; 2683b04b890Sslatteng int ne = 0; 2693b04b890Sslatteng int nc = 0; 2703b04b890Sslatteng int nb = 0; 2713b04b890Sslatteng int lnmod = 0; 2723b04b890Sslatteng int nwd = 0; 2733b04b890Sslatteng int nn = 0; 2743b04b890Sslatteng int ni = 0; 2753b04b890Sslatteng int ul = 0; 2763b04b890Sslatteng int cu = 0; 2773b04b890Sslatteng int ce = 0; 2783b04b890Sslatteng int in = 0; 2793b04b890Sslatteng int in1 = 0; 2803b04b890Sslatteng int un = 0; 2813b04b890Sslatteng int wch = 0; 2823b04b890Sslatteng int pendt = 0; 2833b04b890Sslatteng tchar *pendw = 0; 2843b04b890Sslatteng int pendnf = 0; 2853b04b890Sslatteng int spread = 0; 2863b04b890Sslatteng int it = 0; 2873b04b890Sslatteng int itmac = 0; 2883b04b890Sslatteng int lnsize = LNSIZE; 2893b04b890Sslatteng tchar *hyptr[NHYP] = { 2903b04b890Sslatteng 0}; 2913b04b890Sslatteng 2923b04b890Sslatteng 2933b04b890Sslatteng int tabtab[NTAB] = { 2943b04b890Sslatteng 0}; 2953b04b890Sslatteng 2963b04b890Sslatteng 2973b04b890Sslatteng tchar line[LNSIZE] = { 2983b04b890Sslatteng 0}; 2993b04b890Sslatteng 3003b04b890Sslatteng 3013b04b890Sslatteng tchar word[WDSIZE] = { 3023b04b890Sslatteng 0}; 3033b04b890Sslatteng 3043b04b890Sslatteng 3053b04b890Sslatteng char blockxxx[EVSPARE] = { 3063b04b890Sslatteng 0}; 3073b04b890Sslatteng 3083b04b890Sslatteng 309