Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <stdio.h>
2
#include "tdef.h"
3
#include "fns.h"
4
#include "ext.h"
5
 
6
char	termtab[NS];	/* term type added in ptinit() */
7
char	fontdir[NS];	/* added in casefp; not used by nroff */
8
char	devname[20];	/* default output device */
9
 
10
Numtab numtab[NN] = {
11
	{ PAIR('%', 0) },
12
	{ PAIR('n', 'l') },
13
	{ PAIR('y', 'r') },
14
	{ PAIR('h', 'p') },
15
	{ PAIR('c', 't') },
16
	{ PAIR('d', 'n') },
17
	{ PAIR('m', 'o') },
18
	{ PAIR('d', 'y') },
19
	{ PAIR('d', 'w') },
20
	{ PAIR('l', 'n') },
21
	{ PAIR('d', 'l') },
22
	{ PAIR('s', 't') },
23
	{ PAIR('s', 'b') },
24
	{ PAIR('c', '.') },
25
	{ PAIR('$', '$') },
26
};
27
 
28
 
29
int	alphabet	= 256;	/* latin-1 */
30
int	pto	= 10000;
31
int	pfrom	= 1;
32
int	print	= 1;
33
char	nextf[NS]	= TMACDIR;
34
char	mfiles[NMF][NS];
35
int	nmfi	= 0;
36
int	oldbits	= -1;
37
int	init	= 1;
38
int	fc	= IMP;	/* field character */
39
int	eschar	= '\\';
40
int	pl;
41
int	po;
42
FILE	*ptid	= stdout;
43
 
44
int	dfact	= 1;
45
int	dfactd	= 1;
46
int	res	= 1;
47
int	smnt	= 0;	/* beginning of special fonts */
48
int	ascii	= 0;	/* ascii normally off for troff, on for nroff;  -a turns on */
49
int	lg;
50
int	pnlist[NPN] = { -1 };
51
 
52
 
53
int	*pnp	= pnlist;
54
int	npn	= 1;
55
int	npnflg	=  1;
56
int	dpn	=  -1;
57
int	totout	=  1;
58
int	ulfont	=  ULFONT;
59
int	tabch	=  TAB;
60
int	ldrch	=  LEADER;
61
 
62
 
63
Contab contab[NM] = {
64
	C(PAIR('d', 's'), caseds),
65
	C(PAIR('a', 's'), caseas),
66
	C(PAIR('s', 'p'), casesp),
67
	C(PAIR('f', 't'), caseft),
68
	C(PAIR('p', 's'), caseps),
69
	C(PAIR('v', 's'), casevs),
70
	C(PAIR('n', 'r'), casenr),
71
	C(PAIR('i', 'f'), caseif),
72
	C(PAIR('i', 'e'), caseie),
73
	C(PAIR('e', 'l'), caseel),
74
	C(PAIR('p', 'o'), casepo),
75
	C(PAIR('t', 'l'), casetl),
76
	C(PAIR('t', 'm'), casetm),
77
	C(PAIR('f', 'm'), casefm),
78
	C(PAIR('b', 'p'), casebp),
79
	C(PAIR('c', 'h'), casech),
80
	C(PAIR('p', 'n'), casepn),
81
	C(PAIR('b', 'r'), tbreak),
82
	C(PAIR('t', 'i'), caseti),
83
	C(PAIR('n', 'e'), casene),
84
	C(PAIR('n', 'f'), casenf),
85
	C(PAIR('c', 'e'), casece),
86
	C(PAIR('f', 'i'), casefi),
87
	C(PAIR('i', 'n'), casein),
88
	C(PAIR('l', 'l'), casell),
89
	C(PAIR('n', 's'), casens),
90
	C(PAIR('m', 'k'), casemk),
91
	C(PAIR('r', 't'), casert),
92
	C(PAIR('a', 'm'), caseam),
93
	C(PAIR('d', 'e'), casede),
94
	C(PAIR('d', 'i'), casedi),
95
	C(PAIR('d', 'a'), caseda),
96
	C(PAIR('w', 'h'), casewh),
97
	C(PAIR('d', 't'), casedt),
98
	C(PAIR('i', 't'), caseit),
99
	C(PAIR('r', 'm'), caserm),
100
	C(PAIR('r', 'r'), caserr),
101
	C(PAIR('r', 'n'), casern),
102
	C(PAIR('a', 'd'), casead),
103
	C(PAIR('r', 's'), casers),
104
	C(PAIR('n', 'a'), casena),
105
	C(PAIR('p', 'l'), casepl),
106
	C(PAIR('t', 'a'), caseta),
107
	C(PAIR('t', 'r'), casetr),
108
	C(PAIR('u', 'l'), caseul),
109
	C(PAIR('c', 'u'), casecu),
110
	C(PAIR('l', 't'), caselt),
111
	C(PAIR('n', 'x'), casenx),
112
	C(PAIR('s', 'o'), caseso),
113
	C(PAIR('i', 'g'), caseig),
114
	C(PAIR('t', 'c'), casetc),
115
	C(PAIR('f', 'c'), casefc),
116
	C(PAIR('e', 'c'), caseec),
117
	C(PAIR('e', 'o'), caseeo),
118
	C(PAIR('l', 'c'), caselc),
119
	C(PAIR('e', 'v'), caseev),
120
	C(PAIR('r', 'd'), caserd),
121
	C(PAIR('a', 'b'), caseab),
122
	C(PAIR('f', 'l'), casefl),
123
	C(PAIR('e', 'x'), caseex),
124
	C(PAIR('s', 's'), casess),
125
	C(PAIR('f', 'p'), casefp),
126
	C(PAIR('c', 's'), casecs),
127
	C(PAIR('b', 'd'), casebd),
128
	C(PAIR('l', 'g'), caselg),
129
	C(PAIR('h', 'c'), casehc),
130
	C(PAIR('h', 'y'), casehy),
131
	C(PAIR('n', 'h'), casenh),
132
	C(PAIR('n', 'm'), casenm),
133
	C(PAIR('n', 'n'), casenn),
134
	C(PAIR('s', 'v'), casesv),
135
	C(PAIR('o', 's'), caseos),
136
	C(PAIR('l', 's'), casels),
137
	C(PAIR('c', 'c'), casecc),
138
	C(PAIR('c', '2'), casec2),
139
	C(PAIR('e', 'm'), caseem),
140
	C(PAIR('a', 'f'), caseaf),
141
	C(PAIR('h', 'a'), caseha),
142
	C(PAIR('h', 'w'), casehw),
143
	C(PAIR('m', 'c'), casemc),
144
	C(PAIR('p', 'm'), casepm),
145
	C(PAIR('p', 'i'), casepi),
146
	C(PAIR('u', 'f'), caseuf),
147
	C(PAIR('p', 'c'), casepc),
148
	C(PAIR('h', 't'), caseht),
149
	C(PAIR('c', 'f'), casecf),
150
	C(PAIR('s', 'y'), casesy),
151
	C(PAIR('l', 'f'), caself),
152
	C(PAIR('p', 't'), casept),
153
	C(PAIR('g', 'd'), casegd),
154
};
155
 
156
 
157
Tbuf _oline;
158
 
159
/*
160
 * troff environment block
161
 */
162
 
163
Env env[NEV] = { {	/* this sets up env[0] */
164
/* int	ics	 */	0,	/* insertion character space, set by .mc */
165
/* int	sps	 */	0,
166
/* int	spacesz	 */	0,
167
/* int	lss	 */	0,
168
/* int	lss1	 */	0,
169
/* int	ll	 */	0,
170
/* int	ll1	 */	0,
171
/* int	lt	 */	0,
172
/* int	lt1	 */	0,
173
/* Tchar ic	 */	0,	/* insertion character (= margin character) */
174
/* int	icf	 */	0,	/* insertion character flag */
175
/* Tchar chbits	 */	0,	/* size+font bits for current character */
176
/* Tchar spbits	 */	0,
177
/* Tchar nmbits	 */	0,	/* size+font bits for number from .nm */
178
/* int	apts	 */	PS,	/* actual point size -- as requested by user */
179
/* int	apts1	 */	PS,	/* need not match an existent size */
180
/* int	pts	 */	PS,	/* hence, this is the size that really exists */
181
/* int	pts1	 */	PS,
182
/* int	font	 */	FT,
183
/* int	font1	 */	FT,
184
/* int	ls	 */	1,
185
/* int	ls1	 */	1,
186
/* int	ad	 */	1,
187
/* int	nms	 */	1,	/* .nm multiplier */
188
/* int	ndf	 */	1,	/* .nm separator */
189
/* int	nmwid	 */	3,	/* max width of .nm numbers */
190
/* int	fi	 */	1,
191
/* int	cc	 */	'.',
192
/* int	c2	 */	'\'',
193
/* int	ohc	 */	OHC,
194
/* int	tdelim	 */	IMP,
195
/* int	hyf	 */	1,
196
/* int	hyoff	 */	0,
197
/* int	hyphalg  */	HYPHALG,
198
/* int	un1	 */	-1,
199
/* int	tabc	 */	0,
200
/* int	dotc	 */	'.',
201
/* int	adsp	 */	0,	/* add this much space to each padding point */
202
/* int	adrem	 */	0,	/* excess space to add until it runs out */
203
/* int	lastl	 */	0,	/* last text on current output line */
204
/* int	nel	 */	0,	/* how much space left on current output line */
205
/* int	admod	 */	0,	/* adjust mode */
206
/* Tchar *wordp	 */	0,
207
/* int	spflg	 */	0,	/* probably to indicate space after punctuation needed */
208
/* Tchar *linep	 */	0,
209
/* Tchar *wdend	 */	0,
210
/* Tchar *wdstart */	0,
211
/* int	wne	 */	0,
212
/* int	ne	 */	0,	/* how much space taken on current output line */
213
/* int	nc	 */	0,	/* #characters (incl blank) on output line */
214
/* int	nb	 */	0,
215
/* int	lnmod	 */	0,	/* line number mode, set by .nm */
216
/* int	nwd	 */	0,	/* number of words on current output line */
217
/* int	nn	 */	0,	/* from .nn command */
218
/* int	ni	 */	0,	/* indent of .nm numbers, probably */
219
/* int	ul	 */	0,
220
/* int	cu	 */	0,
221
/* int	ce	 */	0,
222
/* int	in	 */	0,	/* indent and previous value */
223
/* int	in1	 */	0,
224
/* int	un	 */	0,	/* unindent of left margin in some way */
225
/* int	wch	 */	0,
226
/* int	pendt	 */	0,
227
/* Tchar *pendw	 */	(Tchar *)0,
228
/* int	pendnf	 */	0,
229
/* int	spread	 */	0,
230
/* int	it	 */	0,	/* input trap count */
231
/* int	itmac	 */	0,
232
} };
233
 
234
Env	*envp	= env;	/* start off in env 0 */
235
 
236
Numerr	numerr;
237
 
238
Stack	*frame, *stk, *ejl;
239
Stack	*nxf;
240
 
241
int	pipeflg;
242
int	hflg;	/* used in nroff only */
243
int	eqflg;	/* used in nroff only */
244
 
245
int	xpts;
246
int	ppts;
247
int	pfont;
248
int	mpts;
249
int	mfont;
250
int	cs;
251
int	ccs;
252
int	bd;
253
 
254
int	stdi;
255
int	quiet;
256
int	stop;
257
char	ibuf[IBUFSZ];
258
char	xbuf[IBUFSZ];
259
char	*ibufp;
260
char	*xbufp;
261
char	*eibuf;
262
char	*xeibuf;
263
Tchar	pbbuf[NC];		/* pushback buffer for arguments, \n, etc. */
264
Tchar	*pbp = pbbuf;		/* next free slot in pbbuf */
265
Tchar	*lastpbp = pbbuf;	/* pbp in previous stack frame */
266
int	nx;
267
int	mflg;
268
Tchar	ch = 0;
269
int	ibf;
270
int	ifi;
271
int	iflg;
272
int	rargc;
273
char	**argp;
274
Ushort	trtab[NTRTAB];
275
int	lgf;
276
int	copyf;
277
Offset	ip;
278
int	nlflg;
279
int	donef;
280
int	nflush;
281
int	nfo;
282
int	padc;
283
int	raw;
284
int	flss;
285
int	nonumb;
286
int	trap;
287
int	tflg;
288
int	ejf;
289
int	dilev;
290
Offset	offset;
291
int	em;
292
int	ds;
293
Offset	woff;
294
int	app;
295
int	ndone;
296
int	lead;
297
int	ralss;
298
Offset	nextb;
299
Tchar	nrbits;
300
int	nform;
301
int	oldmn;
302
int	newmn;
303
int	macerr;
304
Offset	apptr;
305
int	diflg;
306
int	evi;
307
int	vflag;
308
int	noscale;
309
int	po1;
310
int	nlist[NTRAP];
311
int	mlist[NTRAP];
312
int	evlist[EVLSZ];
313
int	ev;
314
int	tty;
315
int	sfont	= FT;	/* appears to be "standard" font; used by .ul */
316
int	sv;
317
int	esc;
318
int	widthp;
319
int	xfont;
320
int	setwdf;
321
int	over;
322
int	nhyp;
323
Tchar	**hyp;
324
Tchar	*olinep;
325
int	dotT;
326
char	*unlkp;
327
Wcache	widcache[NWIDCACHE];
328
Diver	d[NDI];
329
Diver	*dip;
330
 
331
int	c_hyphen;
332
int	c_emdash;
333
int	c_rule;
334
int	c_minus;
335
int	c_fi;
336
int	c_fl;
337
int	c_ff;
338
int	c_ffi;
339
int	c_ffl;
340
int	c_acute;
341
int	c_grave;
342
int	c_under;
343
int	c_rooten;
344
int	c_boxrule;
345
int	c_lefthand;
346
int	c_dagger;
347
int	c_isalnum;
348
 
349
Spnames	spnames[] =
350
{
351
	&c_hyphen,	"hy",
352
	&c_emdash,	"em",
353
	&c_rule,	"ru",
354
	&c_minus,	"\\-",
355
	&c_fi,		"fi",
356
	&c_fl,		"fl",
357
	&c_ff,		"ff",
358
	&c_ffi,		"Fi",
359
	&c_ffl,		"Fl",
360
	&c_acute,	"aa",
361
	&c_grave,	"ga",
362
	&c_under,	"ul",
363
	&c_rooten,	"rn",
364
	&c_boxrule,	"br",
365
	&c_lefthand,	"lh",
366
	&c_dagger,	"dg",	/* not in nroff?? */
367
	&c_isalnum,	"__",
368
	0, 0
369
};
370
 
371
 
372
Tchar	(*hmot)(void);
373
Tchar	(*makem)(int i);
374
Tchar	(*setabs)(void);
375
Tchar	(*setch)(int c);
376
Tchar	(*sethl)(int k);
377
Tchar	(*setht)(void);
378
Tchar	(*setslant)(void);
379
Tchar	(*vmot)(void);
380
Tchar	(*xlss)(void);
381
int	(*findft)(int i);
382
int	(*width)(Tchar j);
383
void	(*mchbits)(void);
384
void	(*ptlead)(void);
385
void	(*ptout)(Tchar i);
386
void	(*ptpause)(void);
387
void	(*setfont)(int a);
388
void	(*setps)(void);
389
void	(*setwd)(void);
390