1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)tipout.c	5.1 (Berkeley) 4/30/85";
   9: #endif not lint
  10: 
  11: #include "tip.h"
  12: /*
  13:  * tip
  14:  *
  15:  * lower fork of tip -- handles passive side
  16:  *  reading from the remote host
  17:  */
  18: 
  19: static  jmp_buf sigbuf;
  20: 
  21: /*
  22:  * TIPOUT wait state routine --
  23:  *   sent by TIPIN when it wants to posses the remote host
  24:  */
  25: intIOT()
  26: {
  27: 
  28:     write(repdes[1],&ccc,1);
  29:     read(fildes[0], &ccc,1);
  30:     longjmp(sigbuf, 1);
  31: }
  32: 
  33: /*
  34:  * Scripting command interpreter --
  35:  *  accepts script file name over the pipe and acts accordingly
  36:  */
  37: intEMT()
  38: {
  39:     char c, line[256];
  40:     register char *pline = line;
  41:     char reply;
  42: 
  43:     read(fildes[0], &c, 1);
  44:     while (c != '\n') {
  45:         *pline++ = c;
  46:         read(fildes[0], &c, 1);
  47:     }
  48:     *pline = '\0';
  49:     if (boolean(value(SCRIPT)) && fscript != NULL)
  50:         fclose(fscript);
  51:     if (pline == line) {
  52:         boolean(value(SCRIPT)) = FALSE;
  53:         reply = 'y';
  54:     } else {
  55:         if ((fscript = fopen(line, "a")) == NULL)
  56:             reply = 'n';
  57:         else {
  58:             reply = 'y';
  59:             boolean(value(SCRIPT)) = TRUE;
  60:         }
  61:     }
  62:     write(repdes[1], &reply, 1);
  63:     longjmp(sigbuf, 1);
  64: }
  65: 
  66: intTERM()
  67: {
  68: 
  69:     if (boolean(value(SCRIPT)) && fscript != NULL)
  70:         fclose(fscript);
  71:     exit(0);
  72: }
  73: 
  74: intSYS()
  75: {
  76: 
  77:     boolean(value(BEAUTIFY)) = !boolean(value(BEAUTIFY));
  78:     longjmp(sigbuf, 1);
  79: }
  80: 
  81: /*
  82:  * ****TIPOUT   TIPOUT****
  83:  */
  84: tipout()
  85: {
  86:     char buf[BUFSIZ];
  87:     register char *cp;
  88:     register int cnt;
  89:     extern int errno;
  90:     long omask;
  91: 
  92:     signal(SIGINT, SIG_IGN);
  93:     signal(SIGQUIT, SIG_IGN);
  94:     signal(SIGEMT, intEMT);     /* attention from TIPIN */
  95:     signal(SIGTERM, intTERM);   /* time to go signal */
  96:     signal(SIGIOT, intIOT);     /* scripting going on signal */
  97:     signal(SIGHUP, intTERM);    /* for dial-ups */
  98:     signal(SIGSYS, intSYS);     /* beautify toggle */
  99:     (void) setjmp(sigbuf);
 100:     for (omask = 0;; sigsetmask(omask)) {
 101:         cnt = read(FD, buf, BUFSIZ);
 102:         if (cnt <= 0) {
 103:             /* lost carrier */
 104:             if (cnt < 0 && errno == EIO) {
 105:                 sigblock(sigmask(SIGTERM));
 106:                 intTERM();
 107:                 /*NOTREACHED*/
 108:             }
 109:             continue;
 110:         }
 111: #define ALLSIGS sigmask(SIGEMT)|sigmask(SIGTERM)|sigmask(SIGIOT)|sigmask(SIGSYS)
 112:         omask = sigblock(ALLSIGS);
 113:         for (cp = buf; cp < buf + cnt; cp++)
 114:             *cp &= 0177;
 115:         write(1, buf, cnt);
 116:         if (boolean(value(SCRIPT)) && fscript != NULL) {
 117:             if (!boolean(value(BEAUTIFY))) {
 118:                 fwrite(buf, 1, cnt, fscript);
 119:                 continue;
 120:             }
 121:             for (cp = buf; cp < buf + cnt; cp++)
 122:                 if ((*cp >= ' ' && *cp <= '~') ||
 123:                     any(*cp, value(EXCEPTIONS)))
 124:                     putc(*cp, fscript);
 125:         }
 126:     }
 127: }

Defined functions

intEMT defined in line 37; used 1 times
  • in line 94
intIOT defined in line 25; used 1 times
  • in line 96
intSYS defined in line 74; used 1 times
  • in line 98
intTERM defined in line 66; used 3 times
tipout defined in line 84; used 1 times

Defined variables

sccsid defined in line 8; never used
sigbuf defined in line 19; used 4 times

Defined macros

ALLSIGS defined in line 111; used 1 times
Last modified: 1988-08-31
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1485
Valid CSS Valid XHTML 1.0 Strict