xterm_io.h revision 20d2c4d2
1/* $XTermId: xterm_io.h,v 1.50 2010/05/23 16:04:32 tom Exp $ */ 2 3/* 4 * Copyright 2000-2006,2010 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#ifdef CSRG_BASED 45#define USE_TERMIOS 46#endif 47 48#ifdef __CYGWIN__ 49#define ATT 50#define SVR4 51#define SYSV 52#define USE_SYSV_TERMIO 53#endif 54 55#ifdef __UNIXOS2__ 56#define USE_SYSV_TERMIO 57#endif 58 59#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__INTERIX) || defined(__APPLE__) || defined(__UNIXWARE__) 60#ifndef USE_POSIX_TERMIOS 61#define USE_POSIX_TERMIOS 62#endif 63#endif 64 65#if defined(AIXV4) 66#define USE_POSIX_TERMIOS 67#ifndef SYSV 68#define SYSV 69#endif 70#endif 71 72#ifdef linux 73#define USE_TERMIOS 74#endif 75 76#ifdef __SCO__ 77#define USE_TERMIOS 78#ifndef _SVID3 79#define _SVID3 80#endif 81#endif 82 83#ifdef Lynx 84#define USE_SYSV_TERMIO 85#endif 86 87#ifdef macII 88#undef SYSV /* pretend to be bsd (sgtty.h) */ 89#endif /* macII */ 90 91#if defined(__GLIBC__) && !defined(linux) 92#define USE_POSIX_TERMIOS /* GNU/Hurd, GNU/KFreeBSD and GNU/KNetBSD */ 93#endif 94 95#ifdef __MVS__ 96#define SVR4 97#define USE_POSIX_TERMIOS 98#endif 99 100#ifdef __QNX__ 101#define USE_POSIX_TERMIOS 102#endif 103 104#if defined(__osf__) 105#define USE_POSIX_TERMIOS 106#undef SYSV 107#endif 108 109/* 110 * Indirect system dependencies 111 */ 112#if defined(SVR4) && !defined(__sgi) 113#define USE_TERMIOS 114#endif 115 116#ifdef SYSV 117#define USE_SYSV_TERMIO 118#endif 119 120#if defined(USE_POSIX_TERMIOS) && !defined(USE_TERMIOS) 121#define USE_TERMIOS 122#endif 123 124/* 125 * Low-level ioctl, where it is needed or non-conflicting with termio/etc. 126 */ 127#ifdef __QNX__ 128#include <ioctl.h> 129#else 130#include <sys/ioctl.h> 131#endif 132 133/* 134 * Terminal I/O includes (termio, termios, sgtty headers). 135 */ 136#if defined(USE_POSIX_TERMIOS) 137#include <termios.h> 138#elif defined(USE_TERMIOS) 139#include <termios.h> 140/* this hacked termios support only works on SYSV */ 141#define USE_ANY_SYSV_TERMIO 142#define termio termios 143#ifndef __CYGWIN__ 144#undef TCGETA 145#define TCGETA TCGETS 146#undef TCSETA 147#define TCSETA TCSETS 148#undef TCSETAW 149#define TCSETAW TCSETSW 150#endif 151#elif defined(USE_SYSV_TERMIO) 152# define USE_ANY_SYSV_TERMIO 153# ifdef Lynx 154# include <termio.h> 155# else 156# include <sys/termio.h> 157# endif 158#elif defined(SYSV) || defined(ISC) 159# include <sys/termio.h> 160#elif !defined(VMS) 161# include <sgtty.h> 162#endif /* USE_POSIX_TERMIOS */ 163 164/* 165 * Stream includes, which declare struct winsize or ttysize. 166 */ 167#ifdef SYSV 168#ifdef USE_USG_PTYS 169#include <sys/stream.h> /* get typedef used in ptem.h */ 170#if !defined(SVR4) || defined(__SCO__) 171#include <sys/ptem.h> /* get struct winsize */ 172#endif 173#endif /* USE_USG_PTYS */ 174#elif defined(sun) && !defined(SVR4) 175#include <sys/ttycom.h> 176#ifdef TIOCSWINSZ 177#undef TIOCSSIZE 178#endif 179#endif /* SYSV */ 180 181/* 182 * Special cases (structures and definitions that have to be adjusted). 183 */ 184#if defined(__CYGWIN__) && !defined(TIOCSPGRP) 185#include <termios.h> 186#define TIOCSPGRP (_IOW('t', 118, pid_t)) 187#endif 188 189#ifdef __UNIXOS2__ 190 191#define XFREE86_PTY 0x76 192 193#define XTY_TIOCSETA 0x48 194#define XTY_TIOCSETAW 0x49 195#define XTY_TIOCSETAF 0x4a 196#define XTY_TIOCCONS 0x4d 197#define XTY_TIOCSWINSZ 0x53 198#define XTY_ENADUP 0x5a 199#define XTY_TRACE 0x5b 200#define XTY_TIOCGETA 0x65 201#define XTY_TIOCGWINSZ 0x66 202#define PTMS_GETPTY 0x64 203#define PTMS_BUFSZ 14 204 205#ifndef NCCS 206#define NCCS 11 207#endif 208 209#define TIOCCONS 108 210#define TIOCSWINSZ 113 211#define TIOCGWINSZ 117 212 213struct pt_termios 214{ 215 unsigned short c_iflag; 216 unsigned short c_oflag; 217 unsigned short c_cflag; 218 unsigned short c_lflag; 219 unsigned char c_cc[NCCS]; 220 long _reserved_[4]; 221}; 222 223struct winsize { 224 unsigned short ws_row; /* rows, in characters */ 225 unsigned short ws_col; /* columns, in characters */ 226 unsigned short ws_xpixel; /* horizontal size, pixels */ 227 unsigned short ws_ypixel; /* vertical size, pixels */ 228}; 229#define TTYSIZE_STRUCT struct winsize 230#define USE_STRUCT_WINSIZE 1 231 232#ifdef XTERM_MAIN 233extern int ptioctl(int fd, int func, void* data); 234#define ioctl ptioctl 235#endif 236 237#endif /* __UNIXOS2__ */ 238 239#ifdef __hpux 240#include <sys/bsdtty.h> /* defines TIOCSLTC */ 241#endif 242 243#ifdef ISC 244#define TIOCGPGRP TCGETPGRP 245#define TIOCSPGRP TCSETPGRP 246#endif 247 248#ifdef Lynx 249#include <resource.h> 250#elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__))) 251#include <sys/resource.h> 252#endif 253 254#ifdef macII 255#undef FIOCLEX 256#undef FIONCLEX 257#endif /* macII */ 258 259#ifdef __QNX__ 260#undef TIOCSLTC /* <sgtty.h> conflicts with <termios.h> */ 261#undef TIOCLSET 262#endif 263 264#if defined(__sgi) && (OSMAJORVERSION >= 5) 265#undef TIOCLSET /* defined, but not useable */ 266#endif 267 268#if defined(__GNU__) || defined(__MVS__) || defined(__osf__) 269#undef TIOCLSET 270#undef TIOCSLTC 271#endif 272 273#if defined (__sgi) || (defined(__linux__) && defined(__sparc__)) || defined(__UNIXWARE__) 274#undef TIOCLSET /* XXX why is this undef-ed again? */ 275#endif 276 277#if defined(sun) || defined(__UNIXWARE__) 278#include <sys/filio.h> 279#endif 280 281#if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4)) 282#define HAS_LTCHARS 283#endif 284 285#if !defined(TTYSIZE_STRUCT) 286#if defined(TIOCSSIZE) && (defined(sun) && !defined(SVR4)) 287#define USE_STRUCT_TTYSIZE 1 288#define TTYSIZE_STRUCT struct ttysize 289#elif defined(TIOCSWINSZ) 290#define USE_STRUCT_WINSIZE 1 291#define TTYSIZE_STRUCT struct winsize 292#endif /* sun vs TIOCSWINSZ */ 293#endif /* TTYSIZE_STRUCT */ 294 295#if defined(USE_STRUCT_TTYSIZE) 296#define TTYSIZE_STRUCT struct ttysize 297#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSSIZE, &data); 298#define TTYSIZE_COLS(data) data.ts_cols 299#define TTYSIZE_ROWS(data) data.ts_lines 300#elif defined(USE_STRUCT_WINSIZE) 301#define TTYSIZE_STRUCT struct winsize 302#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSWINSZ, (char *) &data) 303#define TTYSIZE_COLS(data) data.ws_col 304#define TTYSIZE_ROWS(data) data.ws_row 305#endif 306 307typedef unsigned short ttySize_t; 308 309#endif /* included_xterm_io_h */ 310