* Copyright (c) 1983 The Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)tipout.c 5.2 (Berkeley) %G%";
* lower fork of tip -- handles passive side
* reading from the remote host
* TIPOUT wait state routine --
* sent by TIPIN when it wants to posses the remote host
* Scripting command interpreter --
* accepts script file name over the pipe and acts accordingly
register char *pline
= line
;
if (boolean(value(SCRIPT
)) && fscript
!= NULL
)
boolean(value(SCRIPT
)) = FALSE
;
if ((fscript
= fopen(line
, "a")) == NULL
)
boolean(value(SCRIPT
)) = TRUE
;
write(repdes
[1], &reply
, 1);
if (boolean(value(SCRIPT
)) && fscript
!= NULL
)
boolean(value(BEAUTIFY
)) = !boolean(value(BEAUTIFY
));
signal(SIGQUIT
, SIG_IGN
);
signal(SIGEMT
, intEMT
); /* attention from TIPIN */
signal(SIGTERM
, intTERM
); /* time to go signal */
signal(SIGIOT
, intIOT
); /* scripting going on signal */
signal(SIGHUP
, intTERM
); /* for dial-ups */
signal(SIGSYS
, intSYS
); /* beautify toggle */
for (omask
= 0;; sigsetmask(omask
)) {
cnt
= read(FD
, buf
, BUFSIZ
);
if (cnt
< 0 && errno
== EIO
) {
sigblock(sigmask(SIGTERM
));
#define ALLSIGS sigmask(SIGEMT)|sigmask(SIGTERM)|sigmask(SIGIOT)|sigmask(SIGSYS)
omask
= sigblock(ALLSIGS
);
for (cp
= buf
; cp
< buf
+ cnt
; cp
++)
if (boolean(value(SCRIPT
)) && fscript
!= NULL
) {
if (!boolean(value(BEAUTIFY
))) {
fwrite(buf
, 1, cnt
, fscript
);
for (cp
= buf
; cp
< buf
+ cnt
; cp
++)
if ((*cp
>= ' ' && *cp
<= '~') ||
any(*cp
, value(EXCEPTIONS
)))