1*38597Skarels /* 2*38597Skarels * Copyright (c) 1989 The Regents of the University of California. 3*38597Skarels * All rights reserved. 4*38597Skarels * 5*38597Skarels * Redistribution and use in source and binary forms are permitted 6*38597Skarels * provided that the above copyright notice and this paragraph are 7*38597Skarels * duplicated in all such forms and that any documentation, 8*38597Skarels * advertising materials, and other materials related to such 9*38597Skarels * distribution and use acknowledge that the software was developed 10*38597Skarels * by the University of California, Berkeley. The name of the 11*38597Skarels * University may not be used to endorse or promote products derived 12*38597Skarels * from this software without specific prior written permission. 13*38597Skarels * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14*38597Skarels * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15*38597Skarels * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16*38597Skarels */ 17*38597Skarels 18*38597Skarels #if defined(LIBC_SCCS) && !defined(lint) 19*38597Skarels static char sccsid[] = "@(#)termios.c 5.1 (Berkeley) 08/14/89"; 20*38597Skarels #endif /* LIBC_SCCS and not lint */ 21*38597Skarels 2235766Smarc #include <sys/types.h> 2335766Smarc #include <sys/errno.h> 2435766Smarc #include <sys/termios.h> 2535766Smarc #include <sys/tty.h> 2635766Smarc #include <stdio.h> 2735766Smarc 2835766Smarc tcgetattr(fd, t) 2935766Smarc int fd; 3035766Smarc struct termios *t; 3135766Smarc { 3235766Smarc extern errno; 3335766Smarc 3435766Smarc return(ioctl(fd, TIOCGETA, t)); 3535766Smarc } 3635766Smarc 3735766Smarc tcsetattr(fd, opt, t) 3835766Smarc int fd, opt; 3935766Smarc struct termios *t; 4035766Smarc { 4135766Smarc long code; 4235766Smarc int ret; 4335766Smarc extern errno; 4435766Smarc 4535766Smarc switch (opt) { 4635766Smarc case TCSANOW: 4735766Smarc code = TIOCSETA; 4835766Smarc break; 4935766Smarc case TCSADRAIN: 5035766Smarc code = TIOCSETAW; 5135766Smarc break; 5235766Smarc case TCSADFLUSH: 5335766Smarc code = TIOCSETAF; 5435766Smarc break; 5535766Smarc case TCSANOW | TCSASOFT: 5635766Smarc code = TIOCSETAS; 5735766Smarc break; 5835766Smarc case TCSADRAIN | TCSASOFT: 5935766Smarc code = TIOCSETAWS; 6035766Smarc break; 6135766Smarc case TCSADFLUSH | TCSASOFT: 6235766Smarc code = TIOCSETAFS; 6335766Smarc break; 6435766Smarc default: 6535766Smarc errno = EINVAL; 6635766Smarc return(-1); 6735766Smarc } 6835766Smarc return(ioctl(fd, code, t)); 6935766Smarc } 7035766Smarc 7135766Smarc tcsetpgrp(fd, pgrp) 7235766Smarc { 7335766Smarc return(ioctl(fd, TIOCSPGRP, &pgrp)); 7435766Smarc } 7535766Smarc 7635766Smarc tcgetpgrp(fd) 7735766Smarc { 7835766Smarc int pgrp; 7935766Smarc 8035766Smarc if (ioctl(fd, TIOCGPGRP, &pgrp) < 0) 8135766Smarc return(-1); 8235766Smarc return(pgrp); 8335766Smarc } 8435766Smarc 8535766Smarc cfgetospeed(t) 8635766Smarc struct termios *t; 8735766Smarc { 8835766Smarc return(t->c_ospeed); 8935766Smarc } 9035766Smarc 9135766Smarc cfgetispeed(t) 9235766Smarc struct termios *t; 9335766Smarc { 9435766Smarc return(t->c_ispeed); 9535766Smarc } 9635766Smarc 9735766Smarc cfsetospeed(t, speed) 9835766Smarc struct termios *t; 9935766Smarc { 10035766Smarc t->c_ospeed = speed; 10135766Smarc } 10235766Smarc 10335766Smarc cfsetispeed(t, speed) 10435766Smarc struct termios *t; 10535766Smarc { 10635766Smarc t->c_ispeed = speed; 10735766Smarc } 10835766Smarc 10935766Smarc cfsetspeed(t, speed) 11035766Smarc struct termios *t; 11135766Smarc { 11235766Smarc t->c_ispeed = t->c_ospeed = speed; 11335766Smarc } 11435766Smarc 11535766Smarc cfmakeraw(t) 11635766Smarc struct termios *t; 11735766Smarc { 11838596Skarels t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|INLCR|IGNCR|ICRNL|IXON); 11935766Smarc t->c_oflag &= ~(ONLCR|OXTABS); 12038596Skarels t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); 12135766Smarc /* set MIN/TIME */ 12235766Smarc } 123