|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: #ifdef SYS_V ! 4: #include <termio.h> ! 5: struct termio tty, svtty; ! 6: #else ! 7: #include <sgtty.h> ! 8: struct sgttyb tty, svtty; ! 9: #endif ! 10: ! 11: extern int dbg; ! 12: ! 13: char *emalloc(n) ! 14: { ! 15: char *p, *calloc(); ! 16: ! 17: p = calloc(n, 1); ! 18: assert(p != NULL, "out of space in emalloc"); ! 19: return p; ! 20: } ! 21: ! 22: sendbuf(buf, p) /* write buf..buf+p-1 to jerq */ ! 23: char *buf, *p; ! 24: { ! 25: write(1, buf, p-buf); ! 26: } ! 27: ! 28: assert(c, s1, s2, s3) /* poor man's assertion */ ! 29: char *s1, *s2, *s3; ! 30: { ! 31: if (!c) { ! 32: fprintf(stderr, "assertion failed: "); ! 33: fprintf(stderr, s1, s2, s3); ! 34: fprintf(stderr, "\n"); ! 35: reset_tty(); ! 36: abort(); ! 37: } ! 38: } ! 39: ! 40: readbyte() /* receive one byte */ ! 41: { ! 42: char buf[2]; ! 43: ! 44: read(0, buf, 1); ! 45: return buf[0]; ! 46: } ! 47: ! 48: set_tty() /* set jerq terminal mode */ ! 49: { ! 50: if (dbg) ! 51: return; ! 52: #ifdef SYS_V ! 53: ioctl(1, TCGETA, &tty); ! 54: svtty = tty; ! 55: tty.c_iflag = IGNBRK; ! 56: tty.c_iflag &= ~(INLCR|IGNCR|ICRNL|IGNPAR|PARMRK); ! 57: tty.c_cflag = (tty.c_cflag & (CBAUD|CLOCAL))| CS8|CREAD; ! 58: tty.c_cc[VMIN] = 1; ! 59: tty.c_lflag &= ~(ECHO|ICANON|ECHOK|ECHONL|ECHOE); ! 60: tty.c_oflag &= ~(ONLCR|OCRNL|ONOCR|ONLRET|OFILL); ! 61: ioctl(1, TCSETAW, &tty); ! 62: #else ! 63: ioctl(1, TIOCGETP, &tty); ! 64: svtty = tty; ! 65: tty.sg_flags |= RAW; ! 66: tty.sg_flags &= ~ECHO; ! 67: ioctl(1, TIOCSETN, &tty); ! 68: #endif ! 69: } ! 70: ! 71: reset_tty() ! 72: { ! 73: if (dbg) ! 74: return; ! 75: #ifdef SYS_V ! 76: ioctl(1, TCSETAW, &svtty); ! 77: #else ! 78: ioctl(1, TIOCSETP, &svtty); /* SETN??? */ ! 79: #endif ! 80: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.