1 /* termios.cc: termios for WIN32.
3 Copyright 1996, 1997, 1998, 2000, 2001 Red Hat, Inc.
5 Written by Doug Evans and Steve Chamberlain of Cygnus Support
6 dje@cygnus.com, sac@cygnus.com
8 This file is part of Cygwin.
10 This software is a copyrighted work licensed under the terms of the
11 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
24 #include "cygwin/version.h"
25 #include "perprocess.h"
26 #include <sys/termios.h>
28 /* tcsendbreak: POSIX 7.2.2.1 */
30 tcsendbreak (int fd, int duration)
34 cygheap_fdget cfd (fd);
40 else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
41 res = cfd->tcsendbreak (duration);
44 syscall_printf ("%d = tcsendbreak (%d, %d)", res, fd, duration);
48 /* tcdrain: POSIX 7.2.2.1 */
54 termios_printf ("tcdrain");
56 cygheap_fdget cfd (fd);
62 else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
63 res = cfd->tcdrain ();
66 syscall_printf ("%d = tcdrain (%d)", res, fd);
70 /* tcflush: POSIX 7.2.2.1 */
72 tcflush (int fd, int queue)
76 cygheap_fdget cfd (fd);
82 else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
83 res = cfd->tcflush (queue);
86 termios_printf ("%d = tcflush (%d, %d)", res, fd, queue);
90 /* tcflow: POSIX 7.2.2.1 */
92 tcflow (int fd, int action)
96 cygheap_fdget cfd (fd);
102 else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
103 res = cfd->tcflow (action);
106 syscall_printf ("%d = tcflow (%d, %d)", res, fd, action);
110 /* tcsetattr: POSIX96 7.2.1.1 */
112 tcsetattr (int fd, int a, const struct termios *t)
116 cygheap_fdget cfd (fd);
120 t = __tonew_termios (t);
124 else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
125 res = cfd->tcsetattr (a, t);
128 termios_printf ("iflag %x, oflag %x, cflag %x, lflag %x, VMIN %d, VTIME %d",
129 t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],
131 termios_printf ("%d = tcsetattr (%d, %d, %x)", res, fd, a, t);
135 /* tcgetattr: POSIX 7.2.1.1 */
137 tcgetattr (int fd, struct termios *in_t)
140 struct termios *t = __makenew_termios (in_t);
142 cygheap_fdget cfd (fd);
145 else if (!cfd->is_tty ())
147 else if ((res = cfd->tcgetattr (t)) == 0)
148 (void) __toapp_termios (in_t, t);
151 termios_printf ("%d = tcgetattr (%d, %p)", res, fd, in_t);
153 termios_printf ("iflag %x, oflag %x, cflag %x, lflag %x, VMIN %d, VTIME %d",
154 t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],
160 /* tcgetpgrp: POSIX 7.2.3.1 */
166 cygheap_fdget cfd (fd);
169 else if (!cfd->is_tty ())
172 res = cfd->tcgetpgrp ();
174 termios_printf ("%d = tcgetpgrp (%d)", res, fd);
178 /* tcsetpgrp: POSIX 7.2.4.1 */
180 tcsetpgrp (int fd, pid_t pgid)
184 cygheap_fdget cfd (fd);
187 else if (!cfd->is_tty ())
190 res = cfd->tcsetpgrp (pgid);
192 termios_printf ("%d = tcsetpgrp (%d, %x)", res, fd, pgid);
196 /* NIST PCTS requires not macro-only implementation */
202 /* cfgetospeed: POSIX96 7.1.3.1 */
204 cfgetospeed (struct termios *tp)
206 return __tonew_termios(tp)->c_ospeed;
209 /* cfgetispeed: POSIX96 7.1.3.1 */
211 cfgetispeed (struct termios *tp)
213 return __tonew_termios(tp)->c_ispeed;
216 /* cfsetospeed: POSIX96 7.1.3.1 */
218 cfsetospeed (struct termios *in_tp, speed_t speed)
220 struct termios *tp = __tonew_termios (in_tp);
221 tp->c_ospeed = speed;
222 (void) __toapp_termios (in_tp, tp);
226 /* cfsetispeed: POSIX96 7.1.3.1 */
228 cfsetispeed (struct termios *in_tp, speed_t speed)
230 struct termios *tp = __tonew_termios (in_tp);
231 tp->c_ispeed = speed;
232 (void) __toapp_termios (in_tp, tp);