"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 */