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