xref: /csrg-svn/lib/libc/gen/termios.c (revision 44301)
1*44301Smarc /*-
238597Skarels  * Copyright (c) 1989 The Regents of the University of California.
338597Skarels  * All rights reserved.
438597Skarels  *
5*44301Smarc  * %sccs.include.redist.c%
638597Skarels  */
738597Skarels 
838597Skarels #if defined(LIBC_SCCS) && !defined(lint)
9*44301Smarc static char sccsid[] = "@(#)termios.c	5.2 (Berkeley) 06/26/90";
1038597Skarels #endif /* LIBC_SCCS and not lint */
1138597Skarels 
1235766Smarc #include <sys/types.h>
1335766Smarc #include <sys/errno.h>
14*44301Smarc #include <sys/ioctl.h>
15*44301Smarc #include <sys/tty.h>
1635766Smarc #include <sys/termios.h>
1735766Smarc #include <stdio.h>
1835766Smarc 
1935766Smarc tcgetattr(fd, t)
2035766Smarc 	int fd;
2135766Smarc 	struct termios *t;
2235766Smarc {
2335766Smarc 	extern errno;
2435766Smarc 
2535766Smarc 	return(ioctl(fd, TIOCGETA, t));
2635766Smarc }
2735766Smarc 
2835766Smarc tcsetattr(fd, opt, t)
2935766Smarc 	int fd, opt;
3035766Smarc 	struct termios *t;
3135766Smarc {
32*44301Smarc 	struct termios localterm;
3335766Smarc 
34*44301Smarc 	if (opt & TCSASOFT) {
35*44301Smarc 		localterm = *t;
36*44301Smarc 		localterm.c_cflag |= CIGNORE;
37*44301Smarc 		t = &localterm;
38*44301Smarc 		opt &= TCSASOFT;
3935766Smarc 	}
40*44301Smarc 	if (opt == TCSANOW)
41*44301Smarc 		return (ioctl(fd, TIOCSETA, t));
42*44301Smarc 	else if (opt == TCSADRAIN)
43*44301Smarc 		return (ioctl(fd, TIOCSETAW, t));
44*44301Smarc 	else
45*44301Smarc 		return (ioctl(fd, TIOCSETAF, t));
4635766Smarc }
4735766Smarc 
4835766Smarc tcsetpgrp(fd, pgrp)
4935766Smarc {
5035766Smarc 	return(ioctl(fd, TIOCSPGRP, &pgrp));
5135766Smarc }
5235766Smarc 
5335766Smarc tcgetpgrp(fd)
5435766Smarc {
5535766Smarc 	int pgrp;
5635766Smarc 
5735766Smarc 	if (ioctl(fd, TIOCGPGRP, &pgrp) < 0)
5835766Smarc 		return(-1);
5935766Smarc 	return(pgrp);
6035766Smarc }
6135766Smarc 
6235766Smarc cfgetospeed(t)
6335766Smarc 	struct termios *t;
6435766Smarc {
6535766Smarc 	return(t->c_ospeed);
6635766Smarc }
6735766Smarc 
6835766Smarc cfgetispeed(t)
6935766Smarc 	struct termios *t;
7035766Smarc {
7135766Smarc 	return(t->c_ispeed);
7235766Smarc }
7335766Smarc 
7435766Smarc cfsetospeed(t, speed)
7535766Smarc 	struct termios *t;
7635766Smarc {
7735766Smarc 	t->c_ospeed = speed;
7835766Smarc }
7935766Smarc 
8035766Smarc cfsetispeed(t, speed)
8135766Smarc 	struct termios *t;
8235766Smarc {
8335766Smarc 	t->c_ispeed = speed;
8435766Smarc }
8535766Smarc 
8635766Smarc cfsetspeed(t, speed)
8735766Smarc 	struct termios *t;
8835766Smarc {
8935766Smarc 	t->c_ispeed = t->c_ospeed = speed;
9035766Smarc }
9135766Smarc 
9235766Smarc cfmakeraw(t)
9335766Smarc 	struct termios *t;
9435766Smarc {
9538596Skarels 	t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|INLCR|IGNCR|ICRNL|IXON);
9635766Smarc 	t->c_oflag &= ~(ONLCR|OXTABS);
9738596Skarels 	t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
9835766Smarc 	/* set MIN/TIME */
9935766Smarc }
100