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