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