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