"Fossies" - the Fresh Open Source Software Archive 
Member "xterm-379/xterm_io.h" (18 Jan 2020, 7387 Bytes) of package /linux/misc/xterm-379.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "xterm_io.h" see the
Fossies "Dox" file reference documentation.
1 /* $XTermId: xterm_io.h,v 1.67 2020/01/18 18:48:19 tom Exp $ */
2
3 /*
4 * Copyright 2000-2018,2020 by Thomas E. Dickey
5 *
6 * All Rights Reserved
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
23 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 *
27 * Except as contained in this notice, the name(s) of the above copyright
28 * holders shall not be used in advertising or otherwise to promote the
29 * sale, use or other dealings in this Software without prior written
30 * authorization.
31 */
32
33 #ifndef included_xterm_io_h
34 #define included_xterm_io_h
35
36 #include <xterm.h>
37
38 /*
39 * System-specific definitions (keep these chunks one-per-system!).
40 *
41 * FIXME: some, such as those defining USE_TERMIOS should be moved to xterm.h
42 * as they are integrated with the configure script.
43 */
44 #if defined(__minix)
45 #define USE_POSIX_TERMIOS 1
46 #undef HAVE_POSIX_OPENPT /* present, does not work */
47 #endif
48
49 #ifdef CSRG_BASED
50 #define USE_TERMIOS
51 #endif
52
53 #ifdef __CYGWIN__
54 #define ATT
55 #define SVR4
56 #define SYSV
57 #define USE_SYSV_TERMIO
58 #endif
59
60 #if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__INTERIX) || defined(__APPLE__) || defined(__UNIXWARE__) || defined(__hpux)
61 #ifndef USE_POSIX_TERMIOS
62 #define USE_POSIX_TERMIOS
63 #endif
64 #endif
65
66 #if defined(AIXV4)
67 #define USE_POSIX_TERMIOS
68 #ifndef SYSV
69 #define SYSV
70 #endif
71 #endif
72
73 #ifdef linux
74 #define USE_TERMIOS
75 #define HAVE_POSIX_OPENPT 1
76 #define HAVE_PTSNAME 1
77 #define HAVE_GRANTPT_PTY_ISATTY 1
78 #endif
79
80 #ifdef __SCO__
81 #define USE_TERMIOS
82 #ifndef _SVID3
83 #define _SVID3
84 #endif
85 #endif
86
87 #ifdef Lynx
88 #define USE_SYSV_TERMIO
89 #endif
90
91 #ifdef macII
92 #undef SYSV /* pretend to be bsd (sgtty.h) */
93 #endif /* macII */
94
95 #ifdef __GNU__
96 #define USE_POSIX_TERMIOS
97 #define HAVE_POSIX_OPENPT 1
98 #define HAVE_PTSNAME 1
99 #define HAVE_GRANTPT_PTY_ISATTY 1
100 #endif
101
102 #if defined(__GLIBC__) && !(defined(linux) || defined(__GNU__))
103 #define USE_POSIX_TERMIOS /* GNU/KFreeBSD and GNU/KNetBSD */
104 #endif
105
106 #ifdef __MVS__
107 #define SVR4
108 #define USE_POSIX_TERMIOS
109 #endif
110
111 #ifdef __QNX__
112 #define USE_POSIX_TERMIOS
113 #endif
114
115 #if defined(__osf__)
116 #define USE_POSIX_TERMIOS
117 #undef SYSV
118 #endif
119
120 /*
121 * Indirect system dependencies
122 */
123 #if defined(SVR4) && !defined(__sgi)
124 #define USE_TERMIOS
125 #endif
126
127 #ifdef SYSV
128 #define USE_SYSV_TERMIO
129 #endif
130
131 #if defined(USE_POSIX_TERMIOS) && !defined(USE_TERMIOS)
132 #define USE_TERMIOS
133 #endif
134
135 /*
136 * Low-level ioctl, where it is needed or non-conflicting with termio/etc.
137 */
138 #ifdef __QNX__
139 #include <ioctl.h>
140 #else
141 #include <sys/ioctl.h>
142 #endif
143
144 /*
145 * Terminal I/O includes (termio, termios, sgtty headers).
146 */
147 #if defined(USE_POSIX_TERMIOS) && !defined(__hpux)
148 #include <termios.h>
149 #elif defined(USE_TERMIOS)
150 #include <termios.h>
151 /* this hacked termios support only works on SYSV */
152 #define USE_ANY_SYSV_TERMIO
153 #define termio termios
154 #ifndef __CYGWIN__
155 #undef TCGETA
156 #define TCGETA TCGETS
157 #undef TCSETA
158 #define TCSETA TCSETS
159 #undef TCSETAW
160 #define TCSETAW TCSETSW
161 #endif
162 #elif defined(USE_SYSV_TERMIO)
163 # define USE_ANY_SYSV_TERMIO
164 # ifdef Lynx
165 # include <termio.h>
166 # else
167 # include <sys/termio.h>
168 # endif
169 #elif defined(SYSV) || defined(ISC)
170 # include <sys/termio.h>
171 #elif !defined(VMS)
172 # include <sgtty.h>
173 #endif /* USE_POSIX_TERMIOS */
174
175 /*
176 * Stream includes, which declare struct winsize or ttysize.
177 */
178 #ifdef SYSV
179 #ifdef USE_USG_PTYS
180 #include <sys/stream.h> /* get typedef used in ptem.h */
181 #ifdef HAVE_SYS_PTEM_H
182 #include <sys/ptem.h> /* get struct winsize */
183 #endif
184 #endif /* USE_USG_PTYS */
185 #endif /* SYSV */
186
187 /*
188 * Special cases (structures and definitions that have to be adjusted).
189 */
190 #if defined(__CYGWIN__) && !defined(TIOCSPGRP)
191 #include <termios.h>
192 #define TIOCSPGRP (_IOW('t', 118, pid_t))
193 #endif
194
195 #ifdef __hpux
196 #include <sys/bsdtty.h> /* defines TIOCSLTC */
197 #endif
198
199 #ifdef ISC
200 #define TIOCGPGRP TCGETPGRP
201 #define TIOCSPGRP TCSETPGRP
202 #endif
203
204 #ifdef Lynx
205 #include <resource.h>
206 #elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
207 #include <sys/resource.h>
208 #endif
209
210 #ifdef macII
211 #undef FIOCLEX
212 #undef FIONCLEX
213 #endif /* macII */
214
215 #if defined(__QNX__) || defined(__GNU__) || defined(__MVS__) || defined(__osf__)
216 #undef TIOCSLTC /* <sgtty.h> conflicts with <termios.h> */
217 #undef TIOCSLTC
218 #endif
219
220 #if defined (__sgi) || (defined(__linux__) && defined(__sparc__)) || defined(__UNIXWARE__)
221 #undef TIOCLSET /* defined, but not usable */
222 #endif
223
224 #if defined(sun) || defined(__UNIXWARE__)
225 #include <sys/filio.h>
226 #endif
227
228 #if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
229 #define HAS_LTCHARS
230 #endif
231
232 #if !defined(TTYSIZE_STRUCT)
233 #if defined(TIOCSWINSZ)
234 #define USE_STRUCT_WINSIZE 1
235 #define TTYSIZE_STRUCT struct winsize
236 #define GET_TTYSIZE(fd, data) ioctl(fd, TIOCGWINSZ, (char *) &data)
237 #define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSWINSZ, (char *) &data)
238 #define TTYSIZE_COLS(data) data.ws_col
239 #define TTYSIZE_ROWS(data) data.ws_row
240 #endif /* TIOCSWINSZ */
241 #endif /* TTYSIZE_STRUCT */
242
243 #ifndef USE_STRUCT_WINSIZE
244 #error "There is a configuration error with struct winsize ifdef"
245 #endif
246
247 /* "resize" depends upon order of assignments in this macro */
248 #ifdef USE_STRUCT_WINSIZE
249 #define setup_winsize(ts, rows, cols, height, width) \
250 (ts).ws_xpixel = (ttySize_t) (width), \
251 (ts).ws_ypixel = (ttySize_t) (height), \
252 TTYSIZE_ROWS(ts) = (ttySize_t) (rows), \
253 TTYSIZE_COLS(ts) = (ttySize_t) (cols)
254 #else
255 #define setup_winsize(ts, rows, cols, height, width) \
256 TTYSIZE_ROWS(ts) = (ttySize_t) (rows), \
257 TTYSIZE_COLS(ts) = (ttySize_t) (cols)
258 #endif
259
260 #if OPT_TRACE
261
262 #ifdef USE_STRUCT_WINSIZE
263 #define trace_winsize(ts, id) \
264 TRACE(("%s@%d, TTYSIZE %s chars %dx%d pixels %dx%d\n", \
265 __FILE__, __LINE__, id, \
266 TTYSIZE_ROWS(ts), TTYSIZE_COLS(ts), (ts).ws_ypixel, (ts).ws_xpixel))
267 #else
268 #define trace_winsize(ts, id) \
269 TRACE(("%s@%d, TTYSIZE %s chars %dx%d\n", __FILE__, __LINE__, id, \
270 TTYSIZE_ROWS(ts), TTYSIZE_COLS(ts)))
271 #endif
272
273 #define TRACE_GET_TTYSIZE(fd, id) { \
274 TTYSIZE_STRUCT debug_ttysize; \
275 if (GET_TTYSIZE(fd, debug_ttysize) == 0) \
276 trace_winsize(debug_ttysize, id); \
277 else \
278 TRACE(("%s@%d, TTYSIZE failed %s\n", __FILE__, __LINE__, strerror(errno))); \
279 }
280 #else
281 #define trace_winsize(ts, id) /* nothing */
282 #define TRACE_GET_TTYSIZE(fd, id) /* nothing */
283 #endif
284
285 typedef unsigned short ttySize_t;
286
287 #endif /* included_xterm_io_h */