|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 3769 (0xeb9) Types: TextFile Names: »makesane.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec8/uutty/makesane.c«
/* Tell the device driver to do normal I/O on the device. * Unfortunately, this is done in different ways on different * brands of Unix. Make sure that your system is included * somewhere in the following list. */ #include <dbg.h> #ifdef BERK # include <sgtty.h> int ldisc = NETLDISC; struct sgttyb sgttyb; #endif #ifdef PCIX # include <termio.h> struct termio termio; #endif #ifdef SYS5 # include <termio.h> static struct termio trmstat; #endif extern int errno; extern int baudmask; /* CBAUD mask if baud rate specified */ makesane(fn) int fn; /* File number */ { int i; D5("makesane(%d)",fn); errno = 0; #ifdef SYS5 i = ioctl(fn,TCGETA,&trmstat); if (debug >= 4) { P("makesane: %d:\tcflag=%06o [old]",fn,trmstat.c_cflag); P("makesane: %d:\tiflag=%06o [old]",fn,trmstat.c_iflag); P("makesane: %d:\tlflag=%06o [old]",fn,trmstat.c_lflag); P("makesane: %d:\toflag=%06o [old]",fn,trmstat.c_oflag); } D5("makesane: ioctl(fn=%d,TCGETA=%d,&trmstat=%08X)=%d",fn,TCGETA,&trmstat,i); /* ** The following was given by "stty -a" on one SYS/V machine: ** speed 9600 baud; line = 2; intr = ^c; quit = ^\; erase = ^H; kill = ^x; eof = ^d; eol = ^@;susp = ^z;dsus = ^y ** -parenb -parodd cs8 -cstopb -hupcl cread -clocal -tostop ** -ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc ** ixon -ixany -ixoff ** isig icanon -xcase echo echoe echok -echonl -noflsh ** opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3 speed 9600 baud; line = 2; intr = ^c; quit = ^\; erase = DEL; kill = ^x; eof = ^d; eol = ^@;susp = ^z;dsus = ^y -parenb -parodd cs8 -cstopb -hupcl cread -clocal -tostop -ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc ixon -ixany -ixoff isig icanon -xcase echo echoe echok -echonl -noflsh opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3 */ trmstat.c_cflag &= CBAUD; /* Save the speed */ if (baudmask) { D4("makesane: baudmask=0%o",baudmask); trmstat.c_cflag = baudmask; /* Set a different speed */ } trmstat.c_cflag |= HUPCL | CREAD | CS8; trmstat.c_iflag = BRKINT | IGNPAR | ISTRIP | ICRNL | IXON; trmstat.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK; trmstat.c_oflag = OPOST | ONLCR | TAB3; trmstat.c_cc[0] = 0x03; /* INTR = ^C */ trmstat.c_cc[1] = 0x1C; /* QUIT = ^\ */ trmstat.c_cc[2] = 0x10; /* ERASE= ^H [BS] */ trmstat.c_cc[3] = 0x18; /* KILL = ^X */ trmstat.c_cc[4] = 0x04; /* EOF = ^D */ trmstat.c_cc[5] = 0; /* EOL char */ trmstat.c_cc[6] = 0; /* EOL2 char */ /* trmstat.c_cc[7] = __; ** Reserved */ trmstat.c_cc[8] = 0x1A; /* SUSP = ^Z */ trmstat.c_cc[9] = 0x19; /* SUSP = ^Y */ if (debug >= 5) { P("makesane: %d:\tcflag=%06o [new]",fn,trmstat.c_cflag); P("makesane: %d:\tiflag=%06o [new]",fn,trmstat.c_iflag); P("makesane: %d:\tlflag=%06o [new]",fn,trmstat.c_lflag); P("makesane: %d:\toflag=%06o [new]",fn,trmstat.c_oflag); Hexdnm(&trmstat.c_cc[0],NCC,"c_cc:"); } i = ioctl(fn,TCSETA,&trmstat); #endif #ifdef SYS3 /* Note: Tested only on PC/IX */ i = ioctl(fn,TCGETA,&trmstat); trmstat.c_cflag |= HUPCL | PARENB | CREAD | CS7; trmstat.c_iflag = BRKINT | IGNPAR | ISTRIP | ICRNL | IXON; trmstat.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK; trmstat.c_oflag = OPOST | ONLCR | TAB3; D5("makesane: \tcflag=%06o",trmstat.c_cflag); D5("makesane: \tiflag=%06o",trmstat.c_iflag); D5("makesane: \tlflag=%06o",trmstat.c_lflag); D5("makesane: \toflag=%06o",trmstat.c_oflag); i = ioctl(fn,TCSETA,&trmstat); #endif #ifdef BERK /* Note: Tested only on 4.2 */ i = ioctl(fn,TIOCGETP,&sgttyb); sgttyb.sg_flags = SANE | TANDEM; ioctl(fn,TIOCSETP,&sgttyb); if (errno) { E("makesane: Can't do sane i/o on \"%s\"",fnnam); exit(-1); } #endif D5("makesane: %d is now sane.",fn); }