1*35766Smarc #include <sys/types.h> 2*35766Smarc #include <sys/errno.h> 3*35766Smarc #include <sys/termios.h> 4*35766Smarc #include <sys/tty.h> 5*35766Smarc #include <stdio.h> 6*35766Smarc 7*35766Smarc tcgetattr(fd, t) 8*35766Smarc int fd; 9*35766Smarc struct termios *t; 10*35766Smarc { 11*35766Smarc extern errno; 12*35766Smarc 13*35766Smarc return(ioctl(fd, TIOCGETA, t)); 14*35766Smarc } 15*35766Smarc 16*35766Smarc tcsetattr(fd, opt, t) 17*35766Smarc int fd, opt; 18*35766Smarc struct termios *t; 19*35766Smarc { 20*35766Smarc long code; 21*35766Smarc int ret; 22*35766Smarc extern errno; 23*35766Smarc 24*35766Smarc switch (opt) { 25*35766Smarc case TCSANOW: 26*35766Smarc code = TIOCSETA; 27*35766Smarc break; 28*35766Smarc case TCSADRAIN: 29*35766Smarc code = TIOCSETAW; 30*35766Smarc break; 31*35766Smarc case TCSADFLUSH: 32*35766Smarc code = TIOCSETAF; 33*35766Smarc break; 34*35766Smarc case TCSANOW | TCSASOFT: 35*35766Smarc code = TIOCSETAS; 36*35766Smarc break; 37*35766Smarc case TCSADRAIN | TCSASOFT: 38*35766Smarc code = TIOCSETAWS; 39*35766Smarc break; 40*35766Smarc case TCSADFLUSH | TCSASOFT: 41*35766Smarc code = TIOCSETAFS; 42*35766Smarc break; 43*35766Smarc default: 44*35766Smarc errno = EINVAL; 45*35766Smarc return(-1); 46*35766Smarc } 47*35766Smarc return(ioctl(fd, code, t)); 48*35766Smarc } 49*35766Smarc 50*35766Smarc tcsetpgrp(fd, pgrp) 51*35766Smarc { 52*35766Smarc return(ioctl(fd, TIOCSPGRP, &pgrp)); 53*35766Smarc } 54*35766Smarc 55*35766Smarc tcgetpgrp(fd) 56*35766Smarc { 57*35766Smarc int pgrp; 58*35766Smarc 59*35766Smarc if (ioctl(fd, TIOCGPGRP, &pgrp) < 0) 60*35766Smarc return(-1); 61*35766Smarc return(pgrp); 62*35766Smarc } 63*35766Smarc 64*35766Smarc cfgetospeed(t) 65*35766Smarc struct termios *t; 66*35766Smarc { 67*35766Smarc return(t->c_ospeed); 68*35766Smarc } 69*35766Smarc 70*35766Smarc cfgetispeed(t) 71*35766Smarc struct termios *t; 72*35766Smarc { 73*35766Smarc return(t->c_ispeed); 74*35766Smarc } 75*35766Smarc 76*35766Smarc cfsetospeed(t, speed) 77*35766Smarc struct termios *t; 78*35766Smarc { 79*35766Smarc t->c_ospeed = speed; 80*35766Smarc } 81*35766Smarc 82*35766Smarc cfsetispeed(t, speed) 83*35766Smarc struct termios *t; 84*35766Smarc { 85*35766Smarc t->c_ispeed = speed; 86*35766Smarc } 87*35766Smarc 88*35766Smarc cfsetspeed(t, speed) 89*35766Smarc struct termios *t; 90*35766Smarc { 91*35766Smarc t->c_ispeed = t->c_ospeed = speed; 92*35766Smarc } 93*35766Smarc 94*35766Smarc cfmakeraw(t) 95*35766Smarc struct termios *t; 96*35766Smarc { 97*35766Smarc t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|INLCR|IGNCR|ICRNL|IXON|IEXTEN); 98*35766Smarc t->c_oflag &= ~(ONLCR|OXTABS); 99*35766Smarc t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG); 100*35766Smarc /* set MIN/TIME */ 101*35766Smarc } 102