1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1982-2012 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
18da2e3ebdSchin *                                                                      *
19da2e3ebdSchin ***********************************************************************/
20da2e3ebdSchin #pragma prototyped
21da2e3ebdSchin 
22da2e3ebdSchin #ifndef _terminal_
23da2e3ebdSchin #define _terminal_	1
24da2e3ebdSchin 
25da2e3ebdSchin #include	"FEATURE/ttys"
26da2e3ebdSchin /*
27da2e3ebdSchin  * terminal interface
28da2e3ebdSchin  * complicated by the fact that there are so many variations
29da2e3ebdSchin  * This will use POSIX <termios.h> interface where available
30da2e3ebdSchin  */
31da2e3ebdSchin 
32da2e3ebdSchin #ifdef _hdr_termios
33da2e3ebdSchin #   include	<termios.h>
34da2e3ebdSchin #   if __sgi__ || sgi	/* special hack to eliminate ^M problem */
35da2e3ebdSchin #	ifndef ECHOCTL
36da2e3ebdSchin #	    define ECHOCTL	ECHOE
37da2e3ebdSchin #	endif /* ECHOCTL */
38da2e3ebdSchin #	ifndef CNSUSP
39da2e3ebdSchin #	    define CNSUSP	CNSWTCH
40da2e3ebdSchin #	endif /* CNSUSP */
41da2e3ebdSchin #   endif /* sgi */
42da2e3ebdSchin #   ifdef _NEXT_SOURCE
43da2e3ebdSchin #	define _lib_tcgetattr	1
44da2e3ebdSchin #	define _lib_tcgetpgrp	1
45da2e3ebdSchin #   endif /* _NEXT_SOURCE */
46da2e3ebdSchin #else
47da2e3ebdSchin #   if defined(_sys_termios) && defined(_lib_tcgetattr)
48da2e3ebdSchin #	include	<sys/termios.h>
49da2e3ebdSchin #	define _hdr_termios
50da2e3ebdSchin #   else
51da2e3ebdSchin #	undef _sys_termios
52da2e3ebdSchin #   endif /* _sys_termios */
53da2e3ebdSchin #endif /* _hdr_termios */
54da2e3ebdSchin 
55da2e3ebdSchin #ifdef _hdr_termios
56da2e3ebdSchin #   undef _hdr_sgtty
57da2e3ebdSchin #   undef tcgetattr
58da2e3ebdSchin #   undef tcsetattr
59da2e3ebdSchin #   undef tcgetpgrp
60da2e3ebdSchin #   undef tcsetpgrp
61da2e3ebdSchin #   undef cfgetospeed
62da2e3ebdSchin #   ifndef TCSANOW
63da2e3ebdSchin #	define TCSANOW		TCSETS
64da2e3ebdSchin #	define TCSADRAIN	TCSETSW
65da2e3ebdSchin #	define TCSAFLUSH	TCSETSF
66da2e3ebdSchin #   endif /* TCSANOW */
67da2e3ebdSchin     /* The following corrects bugs in some implementations */
68da2e3ebdSchin #   if defined(TCSADFLUSH) && !defined(TCSAFLUSH)
69da2e3ebdSchin #	define TCSAFLUSH	TCSADFLUSH
70da2e3ebdSchin #   endif /* TCSADFLUSH */
71da2e3ebdSchin #   ifndef _lib_tcgetattr
72da2e3ebdSchin #	undef  tcgetattr
73da2e3ebdSchin #	define tcgetattr(fd,tty)	ioctl(fd, TCGETS, tty)
74da2e3ebdSchin #	undef  tcsetattr
75da2e3ebdSchin #	define tcsetattr(fd,action,tty)	ioctl(fd, action, tty)
76da2e3ebdSchin #	undef  cfgetospeed
77da2e3ebdSchin #	define cfgetospeed(tp)		((tp)->c_cflag & CBAUD)
78da2e3ebdSchin #   endif /* _lib_tcgetattr */
79da2e3ebdSchin #   undef TIOCGETC
80da2e3ebdSchin #   if SHOPT_OLDTERMIO  /* use both termios and termio */
81da2e3ebdSchin #	ifdef _hdr_termio
82da2e3ebdSchin #	    include	<termio.h>
83da2e3ebdSchin #	else
84da2e3ebdSchin #	    ifdef _sys_termio
85da2e3ebdSchin #		include	<sys/termio.h>
86da2e3ebdSchin #		define _hdr_termio 1
87da2e3ebdSchin #	    else
88da2e3ebdSchin #		undef SHOPT_OLDTERMIO
89da2e3ebdSchin #	    endif /* _sys_termio */
90da2e3ebdSchin #	endif /* _hdr_termio */
91da2e3ebdSchin #   endif /* SHOPT_OLDTERMIO */
92da2e3ebdSchin #else
93da2e3ebdSchin #   define cfgetospeed(tp)	((tp)->c_cflag & CBAUD)
94da2e3ebdSchin #   undef SHOPT_OLDTERMIO
95da2e3ebdSchin #   ifdef _hdr_termio
96da2e3ebdSchin #	include	<termio.h>
97da2e3ebdSchin #   else
98da2e3ebdSchin #	ifdef _sys_termio
99da2e3ebdSchin #	    include	<sys/termio.h>
100da2e3ebdSchin #	    define _hdr_termio 1
101da2e3ebdSchin #	endif /* _sys_termio */
102da2e3ebdSchin #   endif /* _hdr_termio */
103da2e3ebdSchin #   ifdef _hdr_termio
104da2e3ebdSchin #	define termios termio
105da2e3ebdSchin #	undef TIOCGETC
106da2e3ebdSchin #	define tcgetattr(fd,tty)		ioctl(fd, TCGETA, tty)
107da2e3ebdSchin #	define tcsetattr(fd,action,tty)	ioctl(fd, action, tty)
108da2e3ebdSchin 
109da2e3ebdSchin #	ifdef _sys_bsdtty
110da2e3ebdSchin #	   include	<sys/bsdtty.h>
111da2e3ebdSchin #	endif /* _sys_bsdtty */
112da2e3ebdSchin #   else
113da2e3ebdSchin #	ifdef _hdr_sgtty
114da2e3ebdSchin #	    include	<sgtty.h>
115da2e3ebdSchin #	    ifndef LPENDIN
116da2e3ebdSchin #	        ifdef _sys_nttyio
117da2e3ebdSchin #		    include	<sys/nttyio.h>
118da2e3ebdSchin #	        endif /* _sys_nttyio */
119da2e3ebdSchin #	    endif /* LPENDIN */
120da2e3ebdSchin #	    define termios sgttyb
121da2e3ebdSchin #	    ifdef TIOCSETN
122da2e3ebdSchin #	 	undef TCSETAW
123da2e3ebdSchin #	    endif /* TIOCSETN */
124da2e3ebdSchin #	    ifdef TIOCGETP
125da2e3ebdSchin #		define tcgetattr(fd,tty)		ioctl(fd, TIOCGETP, tty)
126da2e3ebdSchin #		define tcsetattr(fd,action,tty)	ioctl(fd, action, tty)
127da2e3ebdSchin #	    else
128da2e3ebdSchin #		define tcgetattr(fd,tty)	gtty(fd, tty)
129da2e3ebdSchin #		define tcsetattr(fd,action,tty)	stty(fd, tty)
130da2e3ebdSchin #	    endif /* TIOCGETP */
131da2e3ebdSchin #	endif /* _hdr_sgtty */
132da2e3ebdSchin #   endif /* hdr_termio */
133da2e3ebdSchin 
134da2e3ebdSchin #   ifndef TCSANOW
135da2e3ebdSchin #	ifdef TCSETAW
136da2e3ebdSchin #	    define TCSANOW	TCSETA
137da2e3ebdSchin #	    ifdef u370
138da2e3ebdSchin 	    /* delays are too long, don't wait for output to drain */
139da2e3ebdSchin #		define TCSADRAIN	TCSETA
140da2e3ebdSchin #	    else
141da2e3ebdSchin #		define TCSADRAIN	TCSETAW
142da2e3ebdSchin #	    endif /* u370 */
143da2e3ebdSchin #	    define TCSAFLUSH	TCSETAF
144da2e3ebdSchin #	else
145da2e3ebdSchin #	    ifdef TIOCSETN
146da2e3ebdSchin #		define TCSANOW	TIOCSETN
147da2e3ebdSchin #		define TCSADRAIN	TIOCSETN
148da2e3ebdSchin #		define TCSAFLUSH	TIOCSETP
149da2e3ebdSchin #	    endif /* TIOCSETN */
150da2e3ebdSchin #	endif /* TCSETAW */
151da2e3ebdSchin #   endif /* TCSANOW */
152da2e3ebdSchin #endif /* _hdr_termios */
153da2e3ebdSchin 
154da2e3ebdSchin /* set ECHOCTL if driver can echo control charaters as ^c */
155da2e3ebdSchin #ifdef LCTLECH
156da2e3ebdSchin #   ifndef ECHOCTL
157da2e3ebdSchin #	define ECHOCTL	LCTLECH
158da2e3ebdSchin #   endif /* !ECHOCTL */
159da2e3ebdSchin #endif /* LCTLECH */
160da2e3ebdSchin #ifdef LNEW_CTLECH
161da2e3ebdSchin #   ifndef ECHOCTL
162da2e3ebdSchin #	define ECHOCTL  LNEW_CTLECH
163da2e3ebdSchin #   endif /* !ECHOCTL */
164da2e3ebdSchin #endif /* LNEW_CTLECH */
165da2e3ebdSchin #ifdef LNEW_PENDIN
166da2e3ebdSchin #   ifndef PENDIN
167da2e3ebdSchin #	define PENDIN LNEW_PENDIN
168da2e3ebdSchin #  endif /* !PENDIN */
169da2e3ebdSchin #endif /* LNEW_PENDIN */
170da2e3ebdSchin #ifndef ECHOCTL
171da2e3ebdSchin #   ifndef VEOL
172da2e3ebdSchin #	define RAWONLY	1
173da2e3ebdSchin #   endif /* !VEOL */
174da2e3ebdSchin #endif /* !ECHOCTL */
175da2e3ebdSchin 
176da2e3ebdSchin #ifdef _sys_filio
177da2e3ebdSchin #   ifndef FIONREAD
178da2e3ebdSchin #	include	<sys/filio.h>
179da2e3ebdSchin #   endif /* FIONREAD */
180da2e3ebdSchin #endif /* _sys_filio */
181da2e3ebdSchin /* set FIORDCHK if you can check for characters in input queue */
182da2e3ebdSchin #ifdef FIONREAD
183da2e3ebdSchin #   ifndef FIORDCHK
184da2e3ebdSchin #	define FIORDCHK	FIONREAD
185da2e3ebdSchin #   endif /* !FIORDCHK */
186da2e3ebdSchin #endif /* FIONREAD */
187da2e3ebdSchin 
188da2e3ebdSchin extern int	tty_alt(int);
189da2e3ebdSchin extern void	tty_cooked(int);
190da2e3ebdSchin extern int	tty_get(int,struct termios*);
191da2e3ebdSchin extern int	tty_raw(int,int);
192da2e3ebdSchin extern int	tty_check(int);
193da2e3ebdSchin extern int	tty_set(int, int, struct termios*);
194*b30d1939SAndy Fiddaman extern int	sh_ioctl(int,int,void*,int);
195*b30d1939SAndy Fiddaman #define ioctl(a,b,c)	sh_ioctl(a,b,c,sizeof(c))
196*b30d1939SAndy Fiddaman #ifdef _lib_tcgetattr
197*b30d1939SAndy Fiddaman     extern int	sh_tcgetattr(int,struct termios*);
198*b30d1939SAndy Fiddaman     extern int	sh_tcsetattr(int,int,struct termios*);
199*b30d1939SAndy Fiddaman #   define tcgetattr(a,b)	sh_tcgetattr(a,b)
200*b30d1939SAndy Fiddaman #   define tcsetattr(a,b,c)	sh_tcsetattr(a,b,c)
201*b30d1939SAndy Fiddaman #endif
202da2e3ebdSchin 
203da2e3ebdSchin #endif /* _terminal_ */
204