n5.c revision e5190c108bde19ca4d7c03b1d1eab7b00bd3a1ed
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/*
* University Copyright- Copyright (c) 1982, 1986, 1988
* The Regents of the University of California
* All Rights Reserved
*
* University Acknowledgment- Portions of this document are derived from
* software developed by the University of California, Berkeley, and its
* contributors.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef EUC
#ifdef NROFF
#include <stddef.h>
#include <stdlib.h>
#include <widec.h>
#endif /* NROFF */
#endif /* EUC */
#include <string.h>
#include "tdef.h"
#include "ext.h"
/*
* troff5.c
*
* misc processing requests
*/
int ifx;
int
casead()
{
int i;
ad = 1;
/*leave admod alone*/
if (skip())
return (0);
case 'r': /*right adj, left ragged*/
admod = 2;
break;
case 'l': /*left adj, right ragged*/
break;
case 'c': /*centered adj*/
admod = 1;
break;
case 'b':
case 'n':
admod = 0;
break;
case '0':
case '2':
case '4':
ad = 0;
case '1':
case '3':
case '5':
}
return (0);
}
int
casena()
{
ad = 0;
return (0);
}
int
casefi()
{
tbreak();
fi++;
pendnf = 0;
return (0);
}
int
casenf()
{
tbreak();
fi = 0;
return (0);
}
int
casers()
{
return (0);
}
int
casens()
{
return (0);
}
int
chget(c)
int c;
{
tchar i;
ch = i;
return(c);
} else
return(i & BYTEMASK);
}
int
casecc()
{
return (0);
}
int
casec2()
{
return (0);
}
int
casehc()
{
return (0);
}
int
casetc()
{
return (0);
}
int
caselc()
{
return (0);
}
int
casehy()
{
int i;
hyf = 1;
if (skip())
return (0);
noscale++;
i = atoi();
noscale = 0;
if (nonumb)
return (0);
return (0);
}
int
casenh()
{
hyf = 0;
return (0);
}
int
{
return(aa);
else
return(bb);
}
int
casece()
{
int i;
noscale++;
skip();
if (nonumb)
i = 1;
tbreak();
ce = i;
noscale = 0;
return (0);
}
int
casein()
{
int i;
if (skip())
i = in1;
else
tbreak();
in = i;
if (!nc) {
setnel();
}
return (0);
}
int
casell()
{
int i;
if (skip())
i = ll1;
else
ll = i;
setnel();
return (0);
}
int
caselt()
{
int i;
if (skip())
i = lt1;
else
lt = i;
return (0);
}
int
caseti()
{
int i;
if (skip())
return (0);
tbreak();
un1 = i;
setnel();
return (0);
}
int
casels()
{
int i;
noscale++;
if (skip())
i = ls1;
else
ls = i;
noscale = 0;
return (0);
}
int
casepo()
{
int i;
if (skip())
i = po1;
else
po = i;
#ifndef NROFF
if (!ascii)
#endif
return (0);
}
int
casepl()
{
int i;
skip();
else
pl = i;
return (0);
}
int
casewh()
{
int i, j, k;
lgf++;
skip();
i = vnumb((int *)0);
if (nonumb)
return (0);
skip();
j = getrq();
mlist[k] = j;
return (0);
}
for (k = 0; k < NTRAP; k++)
if (mlist[k] == 0)
break;
if (k == NTRAP) {
flusho();
return (0);
}
mlist[k] = j;
nlist[k] = i;
return (0);
}
int
casech()
{
int i, j, k;
lgf++;
skip();
if (!(j = getrq()))
return (0);
else
for (k = 0; k < NTRAP; k++)
if (mlist[k] == j)
break;
if (k == NTRAP)
return (0);
skip();
i = vnumb((int *)0);
if (nonumb)
mlist[k] = 0;
nlist[k] = i;
return (0);
}
int
findn(i)
int i;
{
int k;
for (k = 0; k < NTRAP; k++)
break;
return(k);
}
int
casepn()
{
int i;
skip();
noscale++;
noscale = 0;
if (!nonumb) {
npn = i;
npnflg++;
}
return (0);
}
int
casebp()
{
int i;
struct s *savframe;
if (dip != d)
return (0);
skip();
i = 0;
tbreak();
if (!nonumb) {
npn = i;
npnflg++;
return (0);
return (0);
}
int
int ab;
{
int i;
lgf++;
copyf++;
for (i = 0; i < NTM - 2; )
break;
if (i == NTM - 2)
tmbuf[i++] = '\n';
tmbuf[i] = 0;
if (ab) /* truncate output */
flusho();
copyf--;
lgf--;
return (0);
}
int
casesp(a)
int a;
{
int i, j, savlss;
tbreak();
return (0);
i = findt1();
if (!a) {
skip();
j = vnumb((int *)0);
if (nonumb)
j = lss;
} else
j = a;
if (j == 0)
return (0);
if (i < j)
j = i;
if (dip != d)
else
if ((i + j) < 0)
j = -i;
lss = j;
newline(0);
return (0);
}
int
casert()
{
int a, *p;
skip();
if (dip != d)
else
a = vnumb(p);
if (nonumb)
if ((a < 0) || (a >= *p))
return (0);
nb++;
casesp(a - *p);
return (0);
}
int
caseem()
{
lgf++;
skip();
return (0);
}
int
casefl()
{
tbreak();
flusho();
return (0);
}
int
caseev()
{
int nxev;
if (skip()) {
e0:
if (evi == 0)
return (0);
goto e1;
}
noscale++;
noscale = 0;
if (nonumb)
goto e0;
flushi();
flusho();
if (error)
done2(040);
else
edone(040);
return (0);
}
e1:
return (0);
#ifdef INCORE
{
}
#else
#endif
return (0);
}
int
caseel()
{
if (--ifx < 0) {
ifx = 0;
iflist[0] = 0;
}
caseif(2);
return (0);
}
int
caseie()
{
ifx = 0;
edone(040);
}
caseif(1);
ifx++;
return (0);
}
int
caseif(x)
int x;
{
extern int falsef;
int notflag, true;
tchar i;
if (x == 2) {
notflag = 0;
goto i1;
}
true = 0;
skip();
notflag = 1;
} else {
notflag = 0;
ch = i;
}
i = atoi();
if (!nonumb) {
if (i > 0)
true++;
goto i1;
}
i = getch();
switch (cbits(i)) {
case 'e':
true++;
break;
case 'o':
true++;
break;
#ifdef NROFF
case 'n':
true++;
case 't':
#endif
#ifndef NROFF
case 't':
true++;
case 'n':
#endif
case ' ':
break;
default:
true = cmpstr(i);
}
i1:
true ^= notflag;
if (x == 1)
if (true) {
i2:
;
goto i2;
ch = i;
nflush++;
} else {
copyf++;
falsef++;
eatblk(0);
copyf--;
falsef--;
}
return (0);
}
int
int inblk;
{ int cnt, i;
cnt = 0;
do {
if (ch) {
ch = 0;
} else
if (i == ESC)
cnt++;
else {
if (cnt == 1)
switch (i) {
case '{': i = LEFT; break;
case '}': i = RIGHT; break;
case '\n': i = 'x'; break;
}
cnt = 0;
}
if (i == '\n')
nlflg++;
return (0);
}
int
cmpstr(c)
tchar c;
{
int j, delim;
tchar i;
int val;
if (ismot(c))
return(0);
*sp++ = i;
edone(0100);
}
if (nlflg) {
goto rtn;
}
*sp++ = 0;
mchbits();
val = 1;
if (*sp != i) {
val = 0;
goto rtn;
}
sp++;
}
if (*sp)
val = 0;
rtn:
mchbits();
return(val);
}
int
caserd()
{
lgf++;
skip();
getname();
if (!iflg) {
if (quiet) {
#ifdef NROFF
echo_off();
flusho();
#endif /* NROFF */
} else {
if (nextf[0]) {
} else {
}
}
}
collect();
tty++;
return (0);
}
int
rdtty()
{
char onechar;
#ifdef EUC
#ifdef NROFF
int i, n, col_index;
#endif /* NROFF */
#endif /* EUC */
onechar = 0;
if (onechar == '\n')
tty++;
else
tty = 1;
#ifndef EUC
if (tty != 3)
return(onechar);
#else
#ifndef NROFF
if (tty != 3)
return(onechar);
#else
if (tty != 3) {
if (!multi_locale)
return(onechar);
i = onechar & 0377;
*mbbuf1p++ = i;
*mbbuf1p = 0;
twc = 0;
*mbbuf1p = 0;
} else {
i |= (MIDDLEOFMB);
}
} else {
if (n > 1)
i |= (LASTOFMB);
else
i |= (BYTE_CHR);
col_index = 0;
} else {
col_index = 0;
}
twc = 0;
}
return(i);
}
#endif /* NROFF */
#endif /* EUC */
}
popi();
tty = 0;
#ifdef NROFF
if (quiet)
echo_on();
#endif /* NROFF */
return(0);
}
int
caseec()
{
return (0);
}
int
caseeo()
{
eschar = 0;
return (0);
}
int
caseta()
{
int i;
if (skip())
break;
if (!nonumb)
case 'C':
break;
case 'R':
break;
default: /*includes L*/
break;
}
}
tabtab[i] = 0;
return (0);
}
int
casene()
{
int i, j;
skip();
i = vnumb((int *)0);
if (nonumb)
i = lss;
if (i > (j = findt1())) {
i = lss;
lss = j;
newline(0);
lss = i;
}
return (0);
}
int
casetr()
{
int i, j;
tchar k;
lgf++;
skip();
if (ismot(k))
return (0);
return (0);
if ((j = cbits(k)) == '\n')
j = ' ';
trtab[i] = j;
}
return (0);
}
int
casecu()
{
cu++;
caseul();
return (0);
}
int
caseul()
{
int i;
noscale++;
if (skip())
i = 1;
else
i = atoi();
if (ul && (i == 0)) {
}
if (i) {
if (!ul) {
}
ul = i;
}
noscale = 0;
mchbits();
return (0);
}
int
caseuf()
{
int i, j;
else
ulfont = j;
#ifdef NROFF
#endif
return (0);
}
int
caseit()
{
int i;
lgf++;
noscale++;
skip();
i = atoi();
skip();
it = i;
noscale = 0;
return (0);
}
int
casemc()
{
int i;
if (icf > 1)
ic = 0;
icf = 0;
if (skip())
return (0);
icf = 1;
skip();
if (!nonumb)
ics = i;
return (0);
}
int
casemk()
{
int i, j;
if (dip != d)
else
if (skip()) {
return (0);
}
if ((i = getrq()) == 0)
return (0);
return (0);
}
int
casesv()
{
int i;
skip();
if ((i = vnumb((int *)0)) < 0)
return (0);
if (nonumb)
i = 1;
sv += i;
caseos();
return (0);
}
int
caseos()
{
int savlss;
newline(0);
sv = 0;
}
return (0);
}
int
casenm()
{
int i;
if (skip())
return (0);
lnmod++;
noscale++;
if (!nonumb)
noscale = 0;
return (0);
}
int
int *p, min;
{
int i;
eat(' ');
if (skip())
return (0);
i = atoi();
if (nonumb)
return (0);
return (0);
}
int
casenn()
{
noscale++;
skip();
noscale = 0;
return (0);
}
int
caseab()
{
casetm(1);
done3(0);
return (0);
}
#ifdef NROFF
/*
* The following routines are concerned with setting terminal options.
* and UNIX System V systems (i.e. DOCUMENTER'S WORKBENCH)
* The distinction is controlled by the #define'd variable USG,
* which must be set by System V users.
*/
#ifdef USG
#include <termio.h>
#else
#include <sgtty.h>
#endif /* USG */
int
save_tty() /*save any tty settings that may be changed*/
{
#ifdef USG
#else
#endif /* USG */
return (0);
}
int
restore_tty() /*restore tty settings from beginning*/
{
if (ttysave[0] != -1) {
#ifdef USG
#else
}
#endif /* USG */
}
return (0);
}
int
set_tty() /*this replaces the use of bset and breset*/
{
save_tty();
}
#endif /* USG */
return (0);
}
int
echo_off() /*turn off ECHO for .rd in "-q" mode*/
{
if (ttysave[0] == -1)
return (0);
#ifdef USG
#else
#endif /* USG */
return (0);
}
int
echo_on() /*restore ECHO after .rd in "-q" mode*/
{
if (ttysave[0] == -1)
return (0);
#ifdef USG
#else
#endif /* USG */
return (0);
}
#endif /* NROFF */