Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/ksh93/include/terminal.h
1810 views
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 <[email protected]> *
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
188
extern int tty_alt(int);
189
extern void tty_cooked(int);
190
extern int tty_get(int,struct termios*);
191
extern int tty_raw(int,int);
192
extern int tty_check(int);
193
extern int tty_set(int, int, struct termios*);
194
extern 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
205