xterm_io.h revision d522f475
1d522f475Smrg/* $XTermId: xterm_io.h,v 1.47 2006/02/13 01:15:00 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
4d522f475Smrg * $XFree86: xc/programs/xterm/xterm_io.h,v 1.20 2006/02/13 01:15:00 dickey Exp $
5d522f475Smrg */
6d522f475Smrg
7d522f475Smrg/*
8d522f475Smrg * Copyright 2000-2005,2006 by Thomas E. Dickey
9d522f475Smrg *
10d522f475Smrg *                         All Rights Reserved
11d522f475Smrg *
12d522f475Smrg * Permission is hereby granted, free of charge, to any person obtaining a
13d522f475Smrg * copy of this software and associated documentation files (the
14d522f475Smrg * "Software"), to deal in the Software without restriction, including
15d522f475Smrg * without limitation the rights to use, copy, modify, merge, publish,
16d522f475Smrg * distribute, sublicense, and/or sell copies of the Software, and to
17d522f475Smrg * permit persons to whom the Software is furnished to do so, subject to
18d522f475Smrg * the following conditions:
19d522f475Smrg *
20d522f475Smrg * The above copyright notice and this permission notice shall be included
21d522f475Smrg * in all copies or substantial portions of the Software.
22d522f475Smrg *
23d522f475Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24d522f475Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25d522f475Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
26d522f475Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
27d522f475Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
28d522f475Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
29d522f475Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30d522f475Smrg *
31d522f475Smrg * Except as contained in this notice, the name(s) of the above copyright
32d522f475Smrg * holders shall not be used in advertising or otherwise to promote the
33d522f475Smrg * sale, use or other dealings in this Software without prior written
34d522f475Smrg * authorization.
35d522f475Smrg */
36d522f475Smrg
37d522f475Smrg#ifndef	included_xterm_io_h
38d522f475Smrg#define	included_xterm_io_h
39d522f475Smrg
40d522f475Smrg#include <xterm.h>
41d522f475Smrg
42d522f475Smrg/*
43d522f475Smrg * System-specific definitions (keep these chunks one-per-system!).
44d522f475Smrg *
45d522f475Smrg * FIXME:  some, such as those defining USE_TERMIOS should be moved to xterm.h
46d522f475Smrg * as they are integrated with the configure script.
47d522f475Smrg */
48d522f475Smrg#ifdef CSRG_BASED
49d522f475Smrg#define USE_TERMIOS
50d522f475Smrg#endif
51d522f475Smrg
52d522f475Smrg#ifdef __CYGWIN__
53d522f475Smrg#define ATT
54d522f475Smrg#define SVR4
55d522f475Smrg#define SYSV
56d522f475Smrg#define USE_SYSV_TERMIO
57d522f475Smrg#endif
58d522f475Smrg
59d522f475Smrg#ifdef __UNIXOS2__
60d522f475Smrg#define USE_SYSV_TERMIO
61d522f475Smrg#endif
62d522f475Smrg
63d522f475Smrg#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__INTERIX) || defined(__APPLE__) || defined(__UNIXWARE__)
64d522f475Smrg#ifndef USE_POSIX_TERMIOS
65d522f475Smrg#define USE_POSIX_TERMIOS
66d522f475Smrg#endif
67d522f475Smrg#endif
68d522f475Smrg
69d522f475Smrg#if defined(AIXV4)
70d522f475Smrg#define USE_POSIX_TERMIOS
71d522f475Smrg#ifndef SYSV
72d522f475Smrg#define SYSV
73d522f475Smrg#endif
74d522f475Smrg#endif
75d522f475Smrg
76d522f475Smrg#ifdef linux
77d522f475Smrg#define USE_TERMIOS
78d522f475Smrg#endif
79d522f475Smrg
80d522f475Smrg#ifdef __SCO__
81d522f475Smrg#define USE_TERMIOS
82d522f475Smrg#ifndef _SVID3
83d522f475Smrg#define _SVID3
84d522f475Smrg#endif
85d522f475Smrg#endif
86d522f475Smrg
87d522f475Smrg#ifdef Lynx
88d522f475Smrg#define USE_SYSV_TERMIO
89d522f475Smrg#endif
90d522f475Smrg
91d522f475Smrg#ifdef macII
92d522f475Smrg#undef SYSV			/* pretend to be bsd (sgtty.h) */
93d522f475Smrg#endif /* macII */
94d522f475Smrg
95d522f475Smrg#if defined(__GLIBC__) && !defined(linux)
96d522f475Smrg#define USE_POSIX_TERMIOS	/* GNU/Hurd, GNU/KFreeBSD and GNU/KNetBSD */
97d522f475Smrg#endif
98d522f475Smrg
99d522f475Smrg#ifdef __MVS__
100d522f475Smrg#define SVR4
101d522f475Smrg#define USE_POSIX_TERMIOS
102d522f475Smrg#endif
103d522f475Smrg
104d522f475Smrg#ifdef __QNX__
105d522f475Smrg#define USE_POSIX_TERMIOS
106d522f475Smrg#endif
107d522f475Smrg
108d522f475Smrg#if defined(__osf__)
109d522f475Smrg#define USE_POSIX_TERMIOS
110d522f475Smrg#undef SYSV
111d522f475Smrg#endif
112d522f475Smrg
113d522f475Smrg/*
114d522f475Smrg * Indirect system dependencies
115d522f475Smrg */
116d522f475Smrg#if defined(SVR4) && !defined(__sgi)
117d522f475Smrg#define USE_TERMIOS
118d522f475Smrg#endif
119d522f475Smrg
120d522f475Smrg#ifdef SYSV
121d522f475Smrg#define USE_SYSV_TERMIO
122d522f475Smrg#endif
123d522f475Smrg
124d522f475Smrg#if defined(USE_POSIX_TERMIOS) && !defined(USE_TERMIOS)
125d522f475Smrg#define USE_TERMIOS
126d522f475Smrg#endif
127d522f475Smrg
128d522f475Smrg/*
129d522f475Smrg * Low-level ioctl, where it is needed or non-conflicting with termio/etc.
130d522f475Smrg */
131d522f475Smrg#ifdef __QNX__
132d522f475Smrg#include <ioctl.h>
133d522f475Smrg#else
134d522f475Smrg#include <sys/ioctl.h>
135d522f475Smrg#endif
136d522f475Smrg
137d522f475Smrg/*
138d522f475Smrg * Terminal I/O includes (termio, termios, sgtty headers).
139d522f475Smrg */
140d522f475Smrg#if defined(USE_POSIX_TERMIOS)
141d522f475Smrg#include <termios.h>
142d522f475Smrg#elif defined(USE_TERMIOS)
143d522f475Smrg#include <termios.h>
144d522f475Smrg/* this hacked termios support only works on SYSV */
145d522f475Smrg#define USE_ANY_SYSV_TERMIO
146d522f475Smrg#define termio termios
147d522f475Smrg#ifndef __CYGWIN__
148d522f475Smrg#undef  TCGETA
149d522f475Smrg#define TCGETA TCGETS
150d522f475Smrg#undef  TCSETA
151d522f475Smrg#define TCSETA TCSETS
152d522f475Smrg#undef  TCSETAW
153d522f475Smrg#define TCSETAW TCSETSW
154d522f475Smrg#endif
155d522f475Smrg#elif defined(USE_SYSV_TERMIO)
156d522f475Smrg# define USE_ANY_SYSV_TERMIO
157d522f475Smrg# ifdef Lynx
158d522f475Smrg#  include <termio.h>
159d522f475Smrg# else
160d522f475Smrg#  include <sys/termio.h>
161d522f475Smrg# endif
162d522f475Smrg#elif defined(SYSV) || defined(ISC)
163d522f475Smrg# include <sys/termio.h>
164d522f475Smrg#elif !defined(VMS)
165d522f475Smrg# include <sgtty.h>
166d522f475Smrg#endif /* USE_POSIX_TERMIOS */
167d522f475Smrg
168d522f475Smrg/*
169d522f475Smrg * Stream includes, which declare struct winsize or ttysize.
170d522f475Smrg */
171d522f475Smrg#ifdef SYSV
172d522f475Smrg#ifdef USE_USG_PTYS
173d522f475Smrg#include <sys/stream.h>			/* get typedef used in ptem.h */
174d522f475Smrg#if !defined(SVR4) || defined(__SCO__)
175d522f475Smrg#include <sys/ptem.h>			/* get struct winsize */
176d522f475Smrg#endif
177d522f475Smrg#endif /* USE_USG_PTYS */
178d522f475Smrg#elif defined(sun) && !defined(SVR4)
179d522f475Smrg#include <sys/ttycom.h>
180d522f475Smrg#ifdef TIOCSWINSZ
181d522f475Smrg#undef TIOCSSIZE
182d522f475Smrg#endif
183d522f475Smrg#endif /* SYSV */
184d522f475Smrg
185d522f475Smrg/*
186d522f475Smrg * Special cases (structures and definitions that have to be adjusted).
187d522f475Smrg */
188d522f475Smrg#if defined(__CYGWIN__) && !defined(TIOCSPGRP)
189d522f475Smrg#include <termios.h>
190d522f475Smrg#define TIOCSPGRP (_IOW('t', 118, pid_t))
191d522f475Smrg#endif
192d522f475Smrg
193d522f475Smrg#ifdef __UNIXOS2__
194d522f475Smrg
195d522f475Smrg#define XFREE86_PTY	0x76
196d522f475Smrg
197d522f475Smrg#define XTY_TIOCSETA	0x48
198d522f475Smrg#define XTY_TIOCSETAW	0x49
199d522f475Smrg#define XTY_TIOCSETAF	0x4a
200d522f475Smrg#define XTY_TIOCCONS	0x4d
201d522f475Smrg#define XTY_TIOCSWINSZ	0x53
202d522f475Smrg#define XTY_ENADUP	0x5a
203d522f475Smrg#define XTY_TRACE	0x5b
204d522f475Smrg#define XTY_TIOCGETA	0x65
205d522f475Smrg#define XTY_TIOCGWINSZ	0x66
206d522f475Smrg#define PTMS_GETPTY	0x64
207d522f475Smrg#define PTMS_BUFSZ	14
208d522f475Smrg
209d522f475Smrg#ifndef NCCS
210d522f475Smrg#define NCCS 11
211d522f475Smrg#endif
212d522f475Smrg
213d522f475Smrg#define TIOCCONS	108
214d522f475Smrg#define TIOCSWINSZ	113
215d522f475Smrg#define TIOCGWINSZ	117
216d522f475Smrg
217d522f475Smrgstruct pt_termios
218d522f475Smrg{
219d522f475Smrg        unsigned short  c_iflag;
220d522f475Smrg        unsigned short  c_oflag;
221d522f475Smrg        unsigned short  c_cflag;
222d522f475Smrg        unsigned short  c_lflag;
223d522f475Smrg        unsigned char   c_cc[NCCS];
224d522f475Smrg        long            _reserved_[4];
225d522f475Smrg};
226d522f475Smrg
227d522f475Smrgstruct winsize {
228d522f475Smrg	unsigned short	ws_row;		/* rows, in characters */
229d522f475Smrg	unsigned short	ws_col;		/* columns, in characters */
230d522f475Smrg	unsigned short	ws_xpixel;	/* horizontal size, pixels */
231d522f475Smrg	unsigned short	ws_ypixel;	/* vertical size, pixels */
232d522f475Smrg};
233d522f475Smrg#define TTYSIZE_STRUCT struct winsize
234d522f475Smrg#define USE_STRUCT_WINSIZE 1
235d522f475Smrg
236d522f475Smrg#ifdef XTERM_MAIN
237d522f475Smrgextern int ptioctl(int fd, int func, void* data);
238d522f475Smrg#define ioctl ptioctl
239d522f475Smrg#endif
240d522f475Smrg
241d522f475Smrg#endif /* __UNIXOS2__ */
242d522f475Smrg
243d522f475Smrg#ifdef __hpux
244d522f475Smrg#include <sys/bsdtty.h>		/* defines TIOCSLTC */
245d522f475Smrg#endif
246d522f475Smrg
247d522f475Smrg#ifdef ISC
248d522f475Smrg#define TIOCGPGRP TCGETPGRP
249d522f475Smrg#define TIOCSPGRP TCSETPGRP
250d522f475Smrg#endif
251d522f475Smrg
252d522f475Smrg#ifdef Lynx
253d522f475Smrg#include <resource.h>
254d522f475Smrg#elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
255d522f475Smrg#include <sys/resource.h>
256d522f475Smrg#endif
257d522f475Smrg
258d522f475Smrg#ifdef macII
259d522f475Smrg#undef FIOCLEX
260d522f475Smrg#undef FIONCLEX
261d522f475Smrg#endif /* macII */
262d522f475Smrg
263d522f475Smrg#ifdef __QNX__
264d522f475Smrg#undef TIOCSLTC			/* <sgtty.h> conflicts with <termios.h> */
265d522f475Smrg#undef TIOCLSET
266d522f475Smrg#endif
267d522f475Smrg
268d522f475Smrg#if defined(__sgi) && (OSMAJORVERSION >= 5)
269d522f475Smrg#undef TIOCLSET				/* defined, but not useable */
270d522f475Smrg#endif
271d522f475Smrg
272d522f475Smrg#if defined(__GNU__) || defined(__MVS__) || defined(__osf__)
273d522f475Smrg#undef TIOCLSET
274d522f475Smrg#undef TIOCSLTC
275d522f475Smrg#endif
276d522f475Smrg
277d522f475Smrg#if defined (__sgi) || (defined(__linux__) && defined(__sparc__)) || defined(__UNIXWARE__)
278d522f475Smrg#undef TIOCLSET /* XXX why is this undef-ed again? */
279d522f475Smrg#endif
280d522f475Smrg
281d522f475Smrg#if defined(sun) || defined(__UNIXWARE__)
282d522f475Smrg#include <sys/filio.h>
283d522f475Smrg#endif
284d522f475Smrg
285d522f475Smrg#if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
286d522f475Smrg#define HAS_LTCHARS
287d522f475Smrg#endif
288d522f475Smrg
289d522f475Smrg#if !defined(TTYSIZE_STRUCT)
290d522f475Smrg#if defined(TIOCSSIZE) && (defined(sun) && !defined(SVR4))
291d522f475Smrg#define USE_STRUCT_TTYSIZE 1
292d522f475Smrg#define TTYSIZE_STRUCT struct ttysize
293d522f475Smrg#elif defined(TIOCSWINSZ)
294d522f475Smrg#define USE_STRUCT_WINSIZE 1
295d522f475Smrg#define TTYSIZE_STRUCT struct winsize
296d522f475Smrg#endif /* sun vs TIOCSWINSZ */
297d522f475Smrg#endif /* TTYSIZE_STRUCT */
298d522f475Smrg
299d522f475Smrg#if defined(USE_STRUCT_TTYSIZE)
300d522f475Smrg#define TTYSIZE_STRUCT struct ttysize
301d522f475Smrg#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSSIZE, &data);
302d522f475Smrg#define TTYSIZE_COLS(data) data.ts_cols
303d522f475Smrg#define TTYSIZE_ROWS(data) data.ts_lines
304d522f475Smrg#elif defined(USE_STRUCT_WINSIZE)
305d522f475Smrg#define TTYSIZE_STRUCT struct winsize
306d522f475Smrg#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSWINSZ, (char *) &data)
307d522f475Smrg#define TTYSIZE_COLS(data) data.ws_col
308d522f475Smrg#define TTYSIZE_ROWS(data) data.ws_row
309d522f475Smrg#endif
310d522f475Smrg
311d522f475Smrg#endif	/* included_xterm_io_h */
312