* Copyright (c) 1983 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
static char sccsid
[] = "@(#)tipout.c 5.4 (Berkeley) 3/2/91";
* 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
)))