144301Smarc /*- 238597Skarels * Copyright (c) 1989 The Regents of the University of California. 338597Skarels * All rights reserved. 438597Skarels * 544301Smarc * %sccs.include.redist.c% 638597Skarels */ 738597Skarels 838597Skarels #if defined(LIBC_SCCS) && !defined(lint) 9*46597Sdonn static char sccsid[] = "@(#)termios.c 5.4 (Berkeley) 02/23/91"; 1038597Skarels #endif /* LIBC_SCCS and not lint */ 1138597Skarels 1235766Smarc #include <sys/types.h> 1335766Smarc #include <sys/errno.h> 1444301Smarc #include <sys/ioctl.h> 1544301Smarc #include <sys/tty.h> 16*46597Sdonn #include <termios.h> 1735766Smarc #include <stdio.h> 18*46597Sdonn #include <unistd.h> 1935766Smarc 20*46597Sdonn int 2135766Smarc tcgetattr(fd, t) 2235766Smarc int fd; 2335766Smarc struct termios *t; 2435766Smarc { 2535766Smarc 2635766Smarc return(ioctl(fd, TIOCGETA, t)); 2735766Smarc } 2835766Smarc 29*46597Sdonn int 3035766Smarc tcsetattr(fd, opt, t) 3135766Smarc int fd, opt; 32*46597Sdonn const struct termios *t; 3335766Smarc { 3444301Smarc struct termios localterm; 3535766Smarc 3644301Smarc if (opt & TCSASOFT) { 3744301Smarc localterm = *t; 3844301Smarc localterm.c_cflag |= CIGNORE; 3944301Smarc t = &localterm; 4044301Smarc opt &= TCSASOFT; 4135766Smarc } 4244301Smarc if (opt == TCSANOW) 4344301Smarc return (ioctl(fd, TIOCSETA, t)); 4444301Smarc else if (opt == TCSADRAIN) 4544301Smarc return (ioctl(fd, TIOCSETAW, t)); 46*46597Sdonn return (ioctl(fd, TIOCSETAF, t)); 4735766Smarc } 4835766Smarc 49*46597Sdonn int 50*46597Sdonn #if __STDC__ 51*46597Sdonn tcsetpgrp(int fd, pid_t pgrp) 52*46597Sdonn #else 5335766Smarc tcsetpgrp(fd, pgrp) 54*46597Sdonn int fd; 55*46597Sdonn pid_t pgrp; 56*46597Sdonn #endif 5735766Smarc { 5835766Smarc return(ioctl(fd, TIOCSPGRP, &pgrp)); 5935766Smarc } 6035766Smarc 61*46597Sdonn pid_t 6235766Smarc tcgetpgrp(fd) 6335766Smarc { 64*46597Sdonn pid_t pgrp; 6535766Smarc 6635766Smarc if (ioctl(fd, TIOCGPGRP, &pgrp) < 0) 6735766Smarc return(-1); 6835766Smarc return(pgrp); 6935766Smarc } 7035766Smarc 71*46597Sdonn speed_t 7235766Smarc cfgetospeed(t) 73*46597Sdonn const struct termios *t; 7435766Smarc { 7535766Smarc return(t->c_ospeed); 7635766Smarc } 7735766Smarc 78*46597Sdonn speed_t 7935766Smarc cfgetispeed(t) 80*46597Sdonn const struct termios *t; 8135766Smarc { 8235766Smarc return(t->c_ispeed); 8335766Smarc } 8435766Smarc 85*46597Sdonn int 8635766Smarc cfsetospeed(t, speed) 8735766Smarc struct termios *t; 88*46597Sdonn speed_t speed; 8935766Smarc { 9035766Smarc t->c_ospeed = speed; 91*46597Sdonn return 0; 9235766Smarc } 9335766Smarc 94*46597Sdonn int 9535766Smarc cfsetispeed(t, speed) 9635766Smarc struct termios *t; 97*46597Sdonn speed_t speed; 9835766Smarc { 9935766Smarc t->c_ispeed = speed; 100*46597Sdonn return 0; 10135766Smarc } 10235766Smarc 103*46597Sdonn void 10435766Smarc cfsetspeed(t, speed) 10535766Smarc struct termios *t; 106*46597Sdonn speed_t speed; 10735766Smarc { 10835766Smarc t->c_ispeed = t->c_ospeed = speed; 10935766Smarc } 11035766Smarc 11146248Skarels /* 11246248Skarels * Make a pre-existing termios structure into "raw" mode: 11346248Skarels * character-at-a-time mode with no characters interpreted, 11446248Skarels * 8-bit data path. 11546248Skarels */ 116*46597Sdonn void 11735766Smarc cfmakeraw(t) 11835766Smarc struct termios *t; 11935766Smarc { 12046248Skarels t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); 12146248Skarels t->c_oflag &= ~OPOST; 12238596Skarels t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); 12346248Skarels t->c_cflag &= ~(CSIZE|PARENB); 12446248Skarels t->c_cflag |= CS8; 12535766Smarc /* set MIN/TIME */ 12635766Smarc } 127