/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #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 = stdout; 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);
/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
#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 = stdout;
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);