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