static char sccsid
[] = "@(#)n1.c 4.10 6/2/90";
consume options, initialization, main loop,
input routines, escape function calling
int inchar
[LNSIZE
], *pinchar
= inchar
; /* XXX */
extern struct s
*frame
, *stk
, *nxf
;
extern struct s
*ejl
, *litlev
;
extern char ibuf
[IBUFSZ
];
extern char xbuf
[IBUFSZ
];
extern struct sgttyb ttys
;
int ms
[] = {31,28,31,30,31,30,31,31,30,31,30,31};
extern catch(), fpecatch(), kcatch();
if(signal(SIGINT
,catch) == SIG_IGN
){
while(--argc
> 0 && (++argv
)[0][0]=='-')
if(!(stop
= cnum(&argv
[0][2])))stop
++;
vlist
[findr(argv
[0][2])] = cnum(&argv
[0][3]);
while((*p
++ = *q
++) != 0);
if (access(nextf
, 4) < 0) {
strcpy(local
, _PATH_LOCAL_TMAC
);
strcat(local
, &argv
[0][2]);
if (access(local
, 4) == 0)
if(!((*q
) & 0177))continue;
while((*p
++ = *q
++) != 0);
if(open(ptname
,1) < 0)prstr("Busy.\n");
else prstr("Available.\n");
pfrom
= cnum(&argv
[0][1]);
if(argc
> 0)goto options
;
copyf
= lgf
= nb
= nflush
= nlflg
= 0;
if(ip
&& (rbf0(ip
)==0) && ejf
&& (frame
->pframe
<= ejl
)){
if(lit
&& (frame
<= litlev
)){
if((j
= (i
& CMASK
)) == XPAR
){
for(;(i
& CMASK
) != '\n';)pchar(i
= getch());
if((j
== cc
) || (j
== c2
)){
while(((j
=((i
=getch()) & CMASK
)) == ' ') ||
prstrfl("Floating Exception.\n");
static char *acct_file
= "/usr/adm/tracct";
acctf
= open(acct_file
,1);
static char tempname
[] = "/tmp/taXXXXX";
acctg();/*open troff actg file while mode 4755*/
if((close(creat(p
, 0600))) < 0){
prstr("Cannot create temp file.\n");
for(i
=256; --i
;)trtab
[i
]=i
;
if(((ttyp
=ttyname(j
=0)) != (char *)0) ||
((ttyp
=ttyname(j
=1)) != (char *)0) ||
((ttyp
=ttyname(j
=2)) != (char *)0)
if((ptid
= open(ptname
,1)) < 0){
prstr("Typesetter busy.\n");
for(i
=NEV
; i
--;)write(ibf
, (char *)&block
, EVS
*sizeof(int));
pinchar
= inchar
; /* XXX */
frame
= stk
= (struct s
*)setbrk(DELTA
);
mode
= ((struct stat
*)(cbuf
))->st_mode
;
if((i
== 0) || ((j
= findmn(i
)) == -1))return(0);
if(contab
[j
].rq
& MMASK
){
return(pushi(((filep
)contab
[j
].x
.mx
)<<BLKBITS
));
return((*contab
[j
].x
.f
)(0));
if(((i
=getach()) == 0) ||
((j
=getach()) == 0))goto rtn
;
if(((i
= ch
) & CMASK
) == '\n')nlflg
++;
if((k
= (i
= getch0()) & CMASK
) != ESC
){
if((k
== 'f') && lg
&& !lgf
){
if((k
== fc
) || (k
== tabch
) || (k
== ldrch
)){
if((i
=setfield(k
)) == 0)goto g0
; else goto g2
;
i
= makem(-width(' ' | chbits
));
k
= (j
= getch0()) & CMASK
;
case '\n': /*concealed newline*/
case 'n': /*number register*/
case '*': /*string indicator*/
case '$': /*argument indicator*/
while(((i
=getch0()) & CMASK
) != '\n');
case ESC
: /*double backslash*/
case 'e': /*printable version of current eschar*/
case ' ': /*unpaddable space*/
case '|': /*narrow space*/
case '^': /*half of narrow space*/
case '-': /*current font minus*/
case 'c': /*to be continued*/
case '!': /*transparent indicator*/
case 'a': /*leader (SOH)*/
case '(': /*special char name*/
if((i
=setch()) == 0)goto g0
;
case 's': /*size indicator*/
case 'f': /*font indicator*/
case 'w': /*width function*/
case 'z': /*zero with char*/
case 'k': /*mark hor place*/
if((i
=findr(getsn())) == -1)goto g0
;
vlist
[i
] = v
.hp
= sumhp(); /* XXX */
case 'j': /*mark output hor place*/
if(!(i
=getach()))goto g0
;
case '0': /*number space*/
i
= makem(width('0' | chbits
));
case 'x': /*extra line space*/
case 'd': /*half em down*/
pinchar
= inchar
; /* XXX */
if (pinchar
>= inchar
+ LNSIZE
) { /* XXX */
inchar
[0] = makem(sumhp());
*pinchar
++ = i
; /* XXX */
sumhp() /* XXX - add up widths in inchar array */
for (p
= inchar
; p
< pinchar
; p
++)
char ifilt
[32] = {0,001,002,003,0,005,006,007,010,011,012};
if(ch0
){i
=ch0
; ch0
=0; return(i
);}
if(nchar
){nchar
--; return(rchar
);}
if(nx
|| ((ibufp
>= eibuf
) && (eibuf
!= (char *) MAXPTR
))){
if(ibufp
< eibuf
)goto g2
;
if((j
=read(ifile
,ibuf
,IBUFSZ
)) <= 0)goto g0
;
if(i
>= 040)goto g4
; else i
= ifilt
[i
];
if((j
= i
& CMASK
) == IMP
)goto again
;
if((i
== 0) && !init
)goto again
;
if((copyf
== 0) && ((i
& ~BMASK
) == 0) && ((i
& CMASK
) < 0370))
if(spbits
&& (i
>31) && ((codetab
[i
-32] & 0200))) i
|= spbits
;
if((i
& CMASK
) == eschar
)i
= (i
& ~CMASK
) | ESC
;
if(popf())goto n0
; /*popf error*/
if((p
[0] == '-') && (p
[1] == 0)){
}else if((ifile
=open(p
,0)) < 0){
if((nfo
-= mflg
) && !stdi
)done(0);
v
.cd
= ifile
= stdi
= mflg
= 0;
if((ifile
= ifl
[ifi
]) == 0){
while(q
< eibuf
)*q
++ = *p
++;
if((lseek(ifile
,(long)(ioff
& ~(IBUFSZ
-1)),0) < 0) ||
((i
= read(ifile
,ibuf
,IBUFSZ
)) < 0))return(1);
if(ttyname(ifile
) == (char *)0)
if((ibufp
= ibuf
+ (int)(ioff
& (IBUFSZ
-1))) >= eibuf
)return(1);
if((ch0
& CMASK
) == '\n')nlflg
++;
if(donef
&& (frame
== stk
))break;
pinchar
= inchar
; /* XXX */
if(((i
= getch()) & MOT
) ||
for(k
=0; k
< (NS
-1); k
++){
if(((j
=(i
=getch()) & CMASK
) <= ' ') ||
if(skip() || !getname() || ((i
=open(nextf
,0)) <0) || (ifi
>= NSO
)) {
prstr("can't open file ");
while(p
< eibuf
)*q
++ = *p
++;
casecf(){ /* copy file without change */
if(skip() || !getname() || ((fd
=open(nextf
,0)) <0) || (ifi
>= NSO
)) {
prstr("can't open file ");
while ((n
= read(fd
, buf
, OBUFSZ
)) > 0)
if((*a
& 0177) == 0)return;
while((i
= getch() & CMASK
) != 0)switch(i
){
if(pnp
>= &pnlist
[NPN
-2]){
prstr("Too many page numbers\n");
ch
= noscale
= print
= 0;
(((j
= getch0()) & CMASK
) == RPT
))return;