xref: /csrg-svn/lib/libc/gen/termios.c (revision 46597)
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