1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28 /*	  All Rights Reserved  	*/
29 
30 
31 /*	from OpenSolaris "ext.h	1.10	05/06/08 SMI"	*/
32 
33 /*
34  * Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
35  *
36  * Sccsid @(#)ext.h	1.111 (gritter) 10/23/09
37  */
38 
39 /*
40  * Changes Copyright (c) 2014 Carsten Kunze <carsten.kunze at arcor.de>
41  */
42 
43 /*
44  * University Copyright- Copyright (c) 1982, 1986, 1988
45  * The Regents of the University of California
46  * All Rights Reserved
47  *
48  * University Acknowledgment- Portions of this document are derived from
49  * software developed by the University of California, Berkeley, and its
50  * contributors.
51  */
52 
53 #include <sys/types.h>
54 
55 extern	char	**argp;
56 extern	char	*chname;
57 extern	char	*eibuf;
58 extern	char	*ibufp;
59 extern	char	*obufp;
60 extern	char	*xbufp;
61 extern	char	*xeibuf;
62 extern	char	*cfname[NSO+1];
63 extern	char	devname[20];
64 extern	char	ibuf[IBUFSZ];
65 extern	char	**mfiles;
66 extern	char	*nextf;
67 extern	char	obuf[],	*obufp;
68 extern	char	*termtab,	*fontfile;
69 extern	char	xbuf[IBUFSZ];
70 extern	filep	apptr;
71 extern	filep	ip;
72 extern	filep	nextb;
73 extern	filep	offset;
74 extern	filep	roff;
75 extern	filep	woff;
76 #ifdef NROFF
77 extern	long	lvmot;
78 extern	size_t	*chtab;
79 #else
80 extern	short	*chtab;
81 extern	int	html;
82 #endif
83 extern	int	*pnp;
84 extern	int	*pstab;
85 extern	int	app;
86 extern	int	ascii;
87 extern	int	bd;
88 extern	int	*bdtab;
89 extern	int	blmac;
90 extern	int	lsmac;
91 extern	int	glss;
92 extern	int	lsn;
93 extern	int	ccs;
94 extern	int	charf;
95 extern	tchar	**chartab;
96 extern	struct charout	*charout;
97 extern	int	charoutsz;
98 extern	int	clonef;
99 extern	int	copyf;
100 extern	int	cs;
101 extern	int	defaultpl;
102 extern	int	defcf;
103 extern	int	dfact;
104 extern	int	dfactd;
105 extern	int	diflg;
106 extern	int	dilev;
107 extern	int	donef;
108 extern	int	donep;
109 extern	int	dotT;
110 extern	int	dpn;
111 extern	int	dl;
112 extern	int	ds;
113 extern	int	ecs;
114 extern	int	ejf;
115 extern	int	em;
116 extern	int	eqflg;
117 extern	int	error;
118 extern	int	esc;
119 extern	int	eschar;
120 extern	int	ev;
121 extern	int	fc;
122 extern	char	*fchartab;
123 extern	int	flss;
124 extern	int	fmtchar;
125 extern	int	*fontlab;
126 extern	int	gflag;
127 extern	int	hflg;
128 extern	int	ifi;
129 extern	int	ifile;
130 extern	int	ifl[NSO];
131 extern	int	iflg;
132 extern	int	init;
133 extern	int	lastkern;
134 extern	int	lasttrack;
135 extern	int	lead;
136 extern	int	lg;
137 extern	int	lgf;
138 extern	int	macerr;
139 extern	int	mb_cur_max;
140 extern	int	mflg;
141 extern	int	mfont;
142 extern	int	minflg;
143 extern	int	minspc;
144 extern	int	mpts;
145 extern	int	ndone;
146 extern	struct contab	*newmn;
147 extern	int	nflush;
148 extern	int	nfo;
149 extern	int	nfonts;
150 extern	int	nform;
151 extern	int	nhyp;
152 extern	int	nlflg;
153 extern	int	nmfi;
154 extern	int	no_out;
155 extern	int	nofeed;
156 extern	int	nolt;
157 extern	int	nonumb;
158 extern	int	noscale;
159 extern	int	npn;
160 extern	int	npnflg;
161 extern	int	nx;
162 extern	int	oldbits;
163 extern	struct contab	*oldmn;
164 extern	int	*olt;
165 extern	int	over;
166 extern	int	padc;
167 extern	int	padj;
168 extern	int	pfont;
169 extern	int	pfrom;
170 extern	pid_t	pipeflg;
171 extern	int	pl;
172 extern	int	pnlist[];
173 extern	int	po1;
174 extern	int	po;
175 extern	int	ppts;
176 extern	int	print;
177 extern	int	ptid;
178 extern	int	pto;
179 extern	int	quiet;
180 extern	int	ralss;
181 extern	int	rargc;
182 extern	int	raw;
183 extern	int	rawwidth;
184 extern	long	realpage;
185 extern	int	res;
186 extern	int	setwdf;
187 extern	int	sfont;
188 extern	int	smnt;
189 extern	int	stdi;
190 extern	int	stop;
191 extern	int	sv;
192 extern	int	tabch,	ldrch;
193 extern	int	tailflg;
194 extern	int	tflg;
195 extern	int	totout;
196 extern	int	trap;
197 extern	int	*trtab;
198 extern	int	*trintab;
199 extern	int	*trnttab;
200 extern	int	tryglf;
201 extern	int	tty;
202 extern	int	ttyod;
203 extern	int	Tflg;
204 extern	int	ulfont;
205 extern	int	vflag;
206 extern	int	vpt;
207 extern	int	wbfi;
208 extern	int	widthp;
209 extern	int	xflag;
210 extern	int	xfont;
211 extern	int	xpts;
212 extern	int	no_out;
213 extern	int	ejl;
214 extern	struct	s	*frame,	*stk,	*nxf;
215 extern	tchar	**hyp;
216 extern	tchar	*olinep;
217 extern	tchar	*pbbuf;
218 extern	int	pbsize;
219 extern	int	pbp;
220 extern	int	lastpbp;
221 extern	tchar	ch;
222 extern	tchar	nrbits;
223 extern	tchar	*oline;
224 extern	size_t	olinesz;
225 extern	struct widcache {	/* width cache, indexed by character */
226 	int	fontpts;
227 	int	rst;
228 	int	rsb;
229 	int	width;
230 	int	track;
231 	char	*evid;
232 } *widcache;
233 extern	char *gchtab;
234 extern	struct	d	*d;
235 extern	struct	d	*dip;
236 extern	int	initbdtab[];
237 
238 #ifdef	EUC
239 #include <stddef.h>
240 extern	int	multi_locale;
241 extern  int	csi_width[];
242 extern	char	mbbuf1[];
243 extern	char	*mbbuf1p;
244 extern	wchar_t	twc;
245 extern	int	(*wdbdg)(wchar_t, wchar_t, int);
246 extern	wchar_t	*(*wddlm)(wchar_t, wchar_t, int);
247 #endif	/* EUC */
248 extern	int	**lhangtab;
249 extern	int	**rhangtab;
250 extern	int	**kernafter;
251 extern	int	**kernbefore;
252 extern	int	**ftrtab;
253 extern	char	*lgmark;
254 extern	struct lgtab	**lgtab;
255 extern	int	***lgrevtab;
256 extern	int	spreadwarn;
257 extern	int	spreadlimit;
258 extern	int	lastrq;
259 extern	int	noschr;
260 extern	int	argdelim;
261 extern	int	bol;
262 extern	int	prdblesc;
263 extern	int	gemu;
264 extern	int	chomp;
265 extern	int	chompend;
266 
267 /* n1.c */
268 extern	void	mainloop(void);
269 extern	int	tryfile(char *, char *, int);
270 extern	void	catch(int);
271 extern	void	kcatch(int);
272 extern	void	init0(void);
273 extern	void	init1(char);
274 extern	void	init2(void);
275 extern	void	cvtime(void);
276 extern	int	ctoi(register char *);
277 extern	void	mesg(int);
278 extern	void	errprint(const char *, ...);
279 #define	fdprintf	xxfdprintf
280 extern	void	fdprintf(int, char *, ...);
281 extern	char	*roff_sprintf(char *, size_t, char *, ...);
282 extern	int	control(register int, register int);
283 extern	int	getrq2(void);
284 extern	int	getrq(int);
285 extern	tchar	getch(void);
286 extern	void	setxon(void);
287 extern	tchar	getch0(void);
288 extern	void	pushback(register tchar *);
289 extern	void	cpushback(register char *);
290 extern	tchar	*growpbbuf(void);
291 extern	int	nextfile(void);
292 extern	int	popf(void);
293 extern	void	flushi(void);
294 extern	int	getach(void);
295 extern	int	rgetach(void);
296 extern	void	casenx(void);
297 extern	int	getname(void);
298 extern	void	caseso(void);
299 extern	void	casepso(void);
300 extern	void	caself(void);
301 extern	void	casecf(void);
302 extern	void	casesy(void);
303 extern	void	getpn(register char *);
304 extern	void	setrpt(void);
305 extern	void	casedb(void);
306 extern	void	casexflag(void);
307 extern	void	casecp(void);
308 extern	void	caserecursionlimit(void);
309 extern	void	casechar(int);
310 extern	void	casefchar(void);
311 extern	void	caserchar(void);
312 extern	tchar	setchar(tchar);
313 extern	tchar	sfmask(tchar);
314 extern	int	issame(tchar, tchar);
315 /* n2.c */
316 extern	int	pchar(register tchar);
317 extern	void	pchar1(register tchar);
318 extern	void	outascii(tchar);
319 extern	void	oputs(register char *);
320 extern	void	flusho(void);
321 extern	void	caseoutput(void);
322 extern	void	done(int);
323 extern	void	done1(int);
324 extern	void	done2(int);
325 extern	void	done3(int);
326 extern	void	edone(int);
327 extern	void	casepi(void);
328 /* n3.c */
329 extern	void	*growcontab(void);
330 extern	void	*growblist(void);
331 extern	void	caseig(void);
332 extern	void	casern(void);
333 extern	void	maddhash(register struct contab *);
334 extern	void	munhash(register struct contab *);
335 extern	filep	finds(register int, int, int);
336 extern	void	caserm(void);
337 extern	void	caseas(void);
338 extern	void	caseds(void);
339 extern	void	caseam(void);
340 extern	void	casede(void);
341 extern	struct contab	*findmn(register int);
342 extern	struct contab	*findmx(register int);
343 extern	int	skip(int);
344 extern	int	copyb(void);
345 extern	void	copys(void);
346 extern	filep	alloc(void);
347 extern	void	ffree(filep);
348 extern	void	wbt(tchar);
349 extern	void	wbf(register tchar);
350 extern	void	wbfl(void);
351 extern	tchar	rbf(void);
352 extern	tchar	rbf0(register filep);
353 extern	filep	incoff(register filep);
354 extern	tchar	popi(void);
355 extern	int	pushi(filep, int, enum flags);
356 extern	void	sfree(struct s *);
357 extern 	struct s	*macframe(void);
358 extern	int	getsn(int);
359 extern	int	setstr(void);
360 extern	void	collect(void);
361 extern	void	seta(void);
362 extern	void	casebox(void);
363 extern	void	caseboxa(void);
364 extern	void	caseda(int);
365 extern	void	casedi(int);
366 extern	void	casedt(void);
367 extern	void	caseals(void);
368 extern	void	casewatch(int);
369 extern	void	caseunwatch(void);
370 extern	void	prwatch(struct contab *, int, int);
371 extern	void	casetl(void);
372 extern	void	casepc(void);
373 extern	void	casechop(void);
374 extern	void	casepm(void);
375 extern	void	stackdump(void);
376 extern	char	*macname(int);
377 extern	int	maybemore(int, int);
378 extern	tchar	setuc(void);
379 extern	int	makerq(const char *);
380 /* n4.c */
381 extern	void	*grownumtab(void);
382 extern	void	setn(void);
383 extern	int	wrc(tchar);
384 extern	void	setn1(int, int, tchar);
385 extern	void	nunhash(register struct numtab *);
386 extern	struct numtab	*findr(register int);
387 extern	struct numtab	*usedr(register int);
388 extern	int	fnumb(register int, register int (*)(tchar));
389 extern	int	decml(register int, register int (*)(tchar));
390 extern	int	roman(int, int (*)(tchar));
391 extern	int	roman0(int, int (*)(tchar), char *, char *);
392 extern	int	abc(int, int (*)(tchar));
393 extern	int	abc0(int, int (*)(tchar));
394 extern	int	hatoi(void);
395 #undef	atof
396 #define	atof	xxatof
397 extern	float	atof(void);
398 extern	long long	atoi0(void);
399 extern	double	atof0(void);
400 extern	void	setnr(const char *, int, int);
401 extern	void	setnrf(const char *, float, float);
402 extern	void	caserr(void);
403 extern	void	casernn(void);
404 extern	void	casenr(void);
405 extern	void	casenrf(void);
406 extern	void	caselnr(void);
407 extern	void	caselnrf(void);
408 extern	void	setr(void);
409 extern	void	caseaf(void);
410 extern	void	setaf(void);
411 extern	void	casealn(void);
412 extern	void	casewatchn(int);
413 extern	void	caseunwatchn(void);
414 extern	void	prwatchn(struct numtab *);
415 extern	int	vnumb(int *);
416 extern	int	hnumb(int *);
417 extern	int	inumb(int *);
418 extern	int	inumb2(int *, int *);
419 extern	float	atop(void);
420 extern	int	quant(int, int);
421 extern	tchar	moflo(int);
422 /* n5.c */
423 extern	void	save_tty(void);
424 extern	void	casead(void);
425 extern	void	casena(void);
426 extern	void	casefi(void);
427 extern	void	casenf(void);
428 extern	void	casepadj(void);
429 extern	void	casers(void);
430 extern	void	casens(void);
431 extern	void	casespreadwarn(void);
432 extern	int	chget(int);
433 extern	void	casecc(void);
434 extern	void	casec2(void);
435 extern	void	casehc(void);
436 extern	void	casetc(void);
437 extern	void	caselc(void);
438 extern	void	casehy(void);
439 extern	void	casenh(void);
440 extern	void	casehlm(void);
441 extern	void	casehcode(void);
442 extern	void	caseshc(void);
443 extern	void	casehylen(void);
444 extern	void	casehypp(void);
445 extern	void	casepshape(void);
446 extern	void	caselpfx(void);
447 extern	int	max(int, int);
448 extern	int	min(int, int);
449 extern	void	casece(void);
450 extern	void	caserj(void);
451 extern	void	casebrnl(void);
452 extern	void	casebrpnl(void);
453 extern	void	casein(void);
454 extern	void	casell(void);
455 extern	void	caselt(void);
456 extern	void	caseti(void);
457 extern	void	casels(void);
458 extern	void	casepo(void);
459 extern	void	casepl(void);
460 extern	void	casewh(void);
461 extern	void	casedwh(void);
462 extern	void	casech(void);
463 extern	void	casedch(void);
464 extern	void	casevpt(void);
465 extern	tchar	setolt(void);
466 extern	int	findn(struct d *, int);
467 extern	void	casepn(void);
468 extern	void	casebp(void);
469 extern	void	casetm(int);
470 extern	void	casetmc(void);
471 extern	void	caseerrprint(void);
472 extern	void	caseopen(void);
473 extern	void	caseopena(void);
474 extern	void	casewrite(void);
475 extern	void	casewritec(void);
476 extern	void	casewritem(void);
477 extern	void	caseclose(void);
478 extern	void	casesp(int);
479 extern	void	casebrp(void);
480 extern	void	caseblm(void);
481 extern	void	caselsm(void);
482 extern	void	casert(void);
483 extern	void	caseem(void);
484 extern	void	casefl(void);
485 extern	void	caseev(void);
486 extern	void	caseevc(void);
487 extern	void	evc(struct env *, struct env *);
488 extern	void	evcline(struct env *, struct env *);
489 extern	void	relsev(struct env *);
490 extern	void	caseel(void);
491 extern	void	caseie(void);
492 extern	void	caseif(int);
493 extern	void	casenop(void);
494 extern	void	casechomp(void);
495 extern	void	casereturn(void);
496 extern	void	casewhile(void);
497 extern	void	casebreak(void);
498 extern	void	casecontinue(int);
499 extern	void	eatblk(int);
500 extern	int	cmpstr(tchar);
501 extern	void	caserd(void);
502 extern	int	rdtty(void);
503 extern	void	caseec(void);
504 extern	void	caseeo(void);
505 extern	void	caseecs(void);
506 extern	void	caseecr(void);
507 extern	void	caseescoff(void);
508 extern	void	caseescon(void);
509 extern	void	caseta(void);
510 extern	void	casene(void);
511 extern	void	casetr(int);
512 extern	void	casetrin(void);
513 extern	void	casetrnt(void);
514 extern	void	casecu(void);
515 extern	void	caseul(void);
516 extern	void	caseuf(void);
517 extern	void	caseit(int);
518 extern	void	caseitc(void);
519 extern	void	casemc(void);
520 extern	void	casesentchar(void);
521 extern	void	casetranschar(void);
522 extern	void	casebreakchar(void);
523 extern	void	casenhychar(void);
524 extern	void	caseconnectchar(void);
525 extern	void	casemk(void);
526 extern	void	casesv(void);
527 extern	void	caseos(void);
528 extern	void	casenm(void);
529 extern	void	getnm(int *, int);
530 extern	void	casenn(void);
531 extern	void	caseab(void);
532 extern	void	restore_tty(void);
533 extern	void	set_tty(void);
534 extern	void	echo_off(void);
535 extern	void	echo_on(void);
536 /* n7.c */
537 extern	int	collectmb(tchar);
538 extern	void	tbreak(void);
539 extern	void	donum(void);
540 extern	void	text(void);
541 extern	void	nofill(void);
542 extern	void	callsp(void);
543 extern	void	ckul(void);
544 extern	int	storeline(register tchar, int);
545 extern	void	newline(int);
546 extern	int	findn1(struct d *, int);
547 extern	void	chkpn(void);
548 extern	int	findt(struct d *, int);
549 extern	int	findt1(void);
550 extern	void	eject(struct s *);
551 extern	int	movword(void);
552 extern	void	horiz(int);
553 extern	void	setnel(void);
554 extern	int	getword(int);
555 extern	void	storeword(register tchar, register int);
556 extern	void	growpgsize(void);
557 /* n8.c */
558 extern	void	hyphen(tchar *);
559 extern	int	punct(tchar);
560 extern	int	alph(tchar);
561 extern	void	caseht(void);
562 extern	void	casehw(void);
563 extern	int	exword(void);
564 extern	int	suffix(void);
565 extern	int	maplow(tchar);
566 extern	int	vowel(tchar);
567 extern	tchar	*chkvow(tchar *);
568 extern	void	digram(void);
569 extern	int	dilook(tchar, tchar, const char [26][13]);
570 extern	void	casehylang(void);
571 /* n9.c */
572 extern	tchar	setz(void);
573 extern	void	setline(void);
574 extern	tchar	eat(tchar);
575 extern	void	setov(void);
576 extern	void	setbra(void);
577 extern	void	setvline(void);
578 extern	void	setdraw(void);
579 extern	void	casefc(void);
580 extern	tchar	setfield(int);
581 extern	tchar	setpenalty(void);
582 extern	tchar	setdpenal(void);
583 extern	tchar	mkxfunc(int, int);
584 extern	void	pushinlev(void);
585 extern	tchar	popinlev(void);
586 extern	void	localize(void);
587 extern	void	caselc_ctype(void);
588 extern	void	casepsbb(void);
589 extern	void	casewarn(void);
590 extern	void	nosuch(int);
591 extern	void	illseq(int, const char *, int);
592 extern	void	missing(void);
593 extern	void	nodelim(int);
594 extern	void	storerq(int);
595 extern	int	fetchrq(tchar *);
596 extern	void	morechars(int);
597 #ifdef NROFF
598 extern	void	caseutf8conv(void);
599 extern	int	addch(char *);
600 #endif
601