ptyx.h revision 0d92cbfd
10d92cbfdSchristos/* $XTermId: ptyx.h,v 1.536 2008/12/30 17:22:55 tom Exp $ */ 2d522f475Smrg 3d522f475Smrg/* 4d522f475Smrg * Copyright 1999-2007,2008 by Thomas E. Dickey 5d522f475Smrg * 6d522f475Smrg * All Rights Reserved 7d522f475Smrg * 8d522f475Smrg * Permission is hereby granted, free of charge, to any person obtaining a 9d522f475Smrg * copy of this software and associated documentation files (the 10d522f475Smrg * "Software"), to deal in the Software without restriction, including 11d522f475Smrg * without limitation the rights to use, copy, modify, merge, publish, 12d522f475Smrg * distribute, sublicense, and/or sell copies of the Software, and to 13d522f475Smrg * permit persons to whom the Software is furnished to do so, subject to 14d522f475Smrg * the following conditions: 15d522f475Smrg * 16d522f475Smrg * The above copyright notice and this permission notice shall be included 17d522f475Smrg * in all copies or substantial portions of the Software. 18d522f475Smrg * 19d522f475Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20d522f475Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21d522f475Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22d522f475Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 23d522f475Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24d522f475Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25d522f475Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26d522f475Smrg * 27d522f475Smrg * Except as contained in this notice, the name(s) of the above copyright 28d522f475Smrg * holders shall not be used in advertising or otherwise to promote the 29d522f475Smrg * sale, use or other dealings in this Software without prior written 30d522f475Smrg * authorization. 31d522f475Smrg * 32d522f475Smrg * 33d522f475Smrg * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. 34d522f475Smrg * 35d522f475Smrg * All Rights Reserved 36d522f475Smrg * 37d522f475Smrg * Permission to use, copy, modify, and distribute this software and its 38d522f475Smrg * documentation for any purpose and without fee is hereby granted, 39d522f475Smrg * provided that the above copyright notice appear in all copies and that 40d522f475Smrg * both that copyright notice and this permission notice appear in 41d522f475Smrg * supporting documentation, and that the name of Digital Equipment 42d522f475Smrg * Corporation not be used in advertising or publicity pertaining to 43d522f475Smrg * distribution of the software without specific, written prior permission. 44d522f475Smrg * 45d522f475Smrg * 46d522f475Smrg * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 47d522f475Smrg * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 48d522f475Smrg * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 49d522f475Smrg * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 50d522f475Smrg * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 51d522f475Smrg * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 52d522f475Smrg * SOFTWARE. 53d522f475Smrg */ 54d522f475Smrg 55d522f475Smrg#ifndef included_ptyx_h 56d522f475Smrg#define included_ptyx_h 1 57d522f475Smrg 58d522f475Smrg#ifdef HAVE_CONFIG_H 59d522f475Smrg#include <xtermcfg.h> 60d522f475Smrg#endif 61d522f475Smrg 62d522f475Smrg/* ptyx.h */ 63d522f475Smrg/* @(#)ptyx.h X10/6.6 11/10/86 */ 64d522f475Smrg 65d522f475Smrg#include <X11/IntrinsicP.h> 66d522f475Smrg#include <X11/Shell.h> /* for XtNdieCallback, etc. */ 67d522f475Smrg#include <X11/StringDefs.h> /* for standard resource names */ 68d522f475Smrg#include <X11/Xmu/Misc.h> /* For Max() and Min(). */ 69d522f475Smrg#include <X11/Xfuncs.h> 70d522f475Smrg#include <X11/Xosdefs.h> 71d522f475Smrg#include <X11/Xmu/Converters.h> 72d522f475Smrg#ifdef XRENDERFONT 73d522f475Smrg#include <X11/Xft/Xft.h> 74d522f475Smrg#endif 75d522f475Smrg 76d522f475Smrg/* adapted from IntrinsicI.h */ 77d522f475Smrg#define MyStackAlloc(size, stack_cache_array) \ 78d522f475Smrg ((size) <= sizeof(stack_cache_array) \ 79d522f475Smrg ? (XtPointer)(stack_cache_array) \ 80d522f475Smrg : (XtPointer)malloc((unsigned)(size))) 81d522f475Smrg 82d522f475Smrg#define MyStackFree(pointer, stack_cache_array) \ 83d522f475Smrg if ((pointer) != ((char *)(stack_cache_array))) free(pointer) 84d522f475Smrg 85d522f475Smrg/* adapted from vile (vi-like-emacs) */ 86d522f475Smrg#define TypeCallocN(type,n) (type *)calloc((n), sizeof(type)) 87d522f475Smrg#define TypeCalloc(type) TypeCalloc(type,1) 88d522f475Smrg 89d522f475Smrg#define TypeMallocN(type,n) (type *)malloc(sizeof(type) * (n)) 90d522f475Smrg#define TypeMalloc(type) TypeMallocN(type,1) 91d522f475Smrg 92d522f475Smrg#define TypeRealloc(type,n,p) (type *)realloc(p, (n) * sizeof(type)) 93d522f475Smrg 94d522f475Smrg/* use these to allocate partly-structured data */ 95d522f475Smrg#define CastMallocN(type,n) (type *)malloc(sizeof(type) + (n)) 96d522f475Smrg#define CastMalloc(type) CastMallocN(type,0) 97d522f475Smrg 98d522f475Smrg/* 99d522f475Smrg** System V definitions 100d522f475Smrg*/ 101d522f475Smrg 102d522f475Smrg#ifdef att 103d522f475Smrg#define ATT 104d522f475Smrg#endif 105d522f475Smrg 106d522f475Smrg#ifdef SVR4 107d522f475Smrg#undef SYSV /* predefined on Solaris 2.4 */ 108d522f475Smrg#define SYSV /* SVR4 is (approx) superset of SVR3 */ 109d522f475Smrg#define ATT 110d522f475Smrg#endif 111d522f475Smrg 112d522f475Smrg#ifdef SYSV 113d522f475Smrg#ifdef X_NOT_POSIX 114d522f475Smrg#if !defined(CRAY) && !defined(SVR4) 115d522f475Smrg#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : \ 116d522f475Smrg (close(fd2), fcntl(fd1, F_DUPFD, fd2))) 117d522f475Smrg#endif 118d522f475Smrg#endif 119d522f475Smrg#endif /* SYSV */ 120d522f475Smrg 121d522f475Smrg/* 122d522f475Smrg * Newer versions of <X11/Xft/Xft.h> have a version number. We use certain 123d522f475Smrg * features from that. 124d522f475Smrg */ 125d522f475Smrg#if defined(XRENDERFONT) && defined(XFT_VERSION) && XFT_VERSION >= 20100 126d522f475Smrg#define HAVE_TYPE_FCCHAR32 1 /* compatible: XftChar16 */ 127d522f475Smrg#define HAVE_TYPE_XFTCHARSPEC 1 /* new type XftCharSpec */ 128d522f475Smrg#endif 129d522f475Smrg 130d522f475Smrg/* 131d522f475Smrg** Definitions to simplify ifdef's for pty's. 132d522f475Smrg*/ 133d522f475Smrg#define USE_PTY_DEVICE 1 134d522f475Smrg#define USE_PTY_SEARCH 1 135d522f475Smrg 136d522f475Smrg#if defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) 137d522f475Smrg#undef USE_PTY_DEVICE 138d522f475Smrg#undef USE_PTY_SEARCH 139d522f475Smrg#define USE_PTS_DEVICE 1 140d522f475Smrg#elif defined(VMS) 141d522f475Smrg#undef USE_PTY_DEVICE 142d522f475Smrg#undef USE_PTY_SEARCH 143d522f475Smrg#elif defined(PUCC_PTYD) 144d522f475Smrg#undef USE_PTY_SEARCH 145d522f475Smrg#elif (defined(sun) && defined(SVR4)) || defined(_ALL_SOURCE) || defined(__CYGWIN__) 146d522f475Smrg#undef USE_PTY_SEARCH 147d522f475Smrg#endif 148d522f475Smrg 149d522f475Smrg#if defined(SYSV) && defined(i386) && !defined(SVR4) 150d522f475Smrg#define ATT 151d522f475Smrg#define USE_HANDSHAKE 1 152d522f475Smrg#define USE_ISPTS_FLAG 1 153d522f475Smrg#endif 154d522f475Smrg 155d522f475Smrg#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) 156d522f475Smrg#define USE_USG_PTYS 157d522f475Smrg#define USE_HANDSHAKE 0 /* "recent" Linux systems do not require handshaking */ 158d522f475Smrg#elif (defined(ATT) && !defined(__sgi)) || defined(__MVS__) || (defined(SYSV) && defined(i386)) 159d522f475Smrg#define USE_USG_PTYS 160d522f475Smrg#else 161d522f475Smrg#define USE_HANDSHAKE 1 162d522f475Smrg#endif 163d522f475Smrg 164d522f475Smrg/* 165d522f475Smrg * More systems than not require pty-handshaking. 166d522f475Smrg */ 167d522f475Smrg#ifndef USE_HANDSHAKE 168d522f475Smrg#define USE_HANDSHAKE 1 169d522f475Smrg#endif 170d522f475Smrg 171d522f475Smrg/* 172d522f475Smrg** allow for mobility of the pty master/slave directories 173d522f475Smrg*/ 174d522f475Smrg#ifndef PTYDEV 175d522f475Smrg#if defined(__hpux) 176d522f475Smrg#define PTYDEV "/dev/ptym/ptyxx" 177d522f475Smrg#elif defined(__MVS__) 178d522f475Smrg#define PTYDEV "/dev/ptypxxxx" 179d522f475Smrg#else 180d522f475Smrg#define PTYDEV "/dev/ptyxx" 181d522f475Smrg#endif 182d522f475Smrg#endif /* !PTYDEV */ 183d522f475Smrg 184d522f475Smrg#ifndef TTYDEV 185d522f475Smrg#if defined(__hpux) 186d522f475Smrg#define TTYDEV "/dev/pty/ttyxx" 187d522f475Smrg#elif defined(__MVS__) 188d522f475Smrg#define TTYDEV "/dev/ptypxxxx" 189d522f475Smrg#elif defined(USE_PTS_DEVICE) 190d522f475Smrg#define TTYDEV "/dev/pts/0" 191d522f475Smrg#else 192d522f475Smrg#define TTYDEV "/dev/ttyxx" 193d522f475Smrg#endif 194d522f475Smrg#endif /* !TTYDEV */ 195d522f475Smrg 196d522f475Smrg#ifndef PTYCHAR1 197d522f475Smrg#ifdef __hpux 198d522f475Smrg#define PTYCHAR1 "zyxwvutsrqp" 199d522f475Smrg#else /* !__hpux */ 200d522f475Smrg#ifdef __UNIXOS2__ 201d522f475Smrg#define PTYCHAR1 "pq" 202d522f475Smrg#else 203d522f475Smrg#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ" 204d522f475Smrg#endif /* !__UNIXOS2__ */ 205d522f475Smrg#endif /* !__hpux */ 206d522f475Smrg#endif /* !PTYCHAR1 */ 207d522f475Smrg 208d522f475Smrg#ifndef PTYCHAR2 209d522f475Smrg#ifdef __hpux 210d522f475Smrg#define PTYCHAR2 "fedcba9876543210" 211d522f475Smrg#else /* !__hpux */ 212d522f475Smrg#if defined(__DragonFly__) || defined(__FreeBSD__) 213d522f475Smrg#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv" 214d522f475Smrg#else /* !__FreeBSD__ */ 215d522f475Smrg#define PTYCHAR2 "0123456789abcdef" 216d522f475Smrg#endif /* !__FreeBSD__ */ 217d522f475Smrg#endif /* !__hpux */ 218d522f475Smrg#endif /* !PTYCHAR2 */ 219d522f475Smrg 220d522f475Smrg#ifndef TTYFORMAT 221d522f475Smrg#if defined(CRAY) 222d522f475Smrg#define TTYFORMAT "/dev/ttyp%03d" 223d522f475Smrg#elif defined(__MVS__) 224d522f475Smrg#define TTYFORMAT "/dev/ttyp%04d" 225d522f475Smrg#else 226d522f475Smrg#define TTYFORMAT "/dev/ttyp%d" 227d522f475Smrg#endif 228d522f475Smrg#endif /* TTYFORMAT */ 229d522f475Smrg 230d522f475Smrg#ifndef PTYFORMAT 231d522f475Smrg#ifdef CRAY 232d522f475Smrg#define PTYFORMAT "/dev/pty/%03d" 233d522f475Smrg#elif defined(__MVS__) 234d522f475Smrg#define PTYFORMAT "/dev/ptyp%04d" 235d522f475Smrg#else 236d522f475Smrg#define PTYFORMAT "/dev/ptyp%d" 237d522f475Smrg#endif 238d522f475Smrg#endif /* PTYFORMAT */ 239d522f475Smrg 240d522f475Smrg#ifndef PTYCHARLEN 241d522f475Smrg#ifdef CRAY 242d522f475Smrg#define PTYCHARLEN 3 243d522f475Smrg#elif defined(__MVS__) 244d522f475Smrg#define PTYCHARLEN 8 /* OS/390 stores, e.g. ut_id="ttyp1234" */ 245d522f475Smrg#else 246d522f475Smrg#define PTYCHARLEN 2 247d522f475Smrg#endif 248d522f475Smrg#endif 249d522f475Smrg 250d522f475Smrg#ifndef MAXPTTYS 251d522f475Smrg#ifdef CRAY 252d522f475Smrg#define MAXPTTYS 256 253d522f475Smrg#else 254d522f475Smrg#define MAXPTTYS 2048 255d522f475Smrg#endif 256d522f475Smrg#endif 257d522f475Smrg 258d522f475Smrg/* Until the translation manager comes along, I have to do my own translation of 259d522f475Smrg * mouse events into the proper routines. */ 260d522f475Smrg 261d522f475Smrgtypedef enum { 262d522f475Smrg NORMAL = 0 263d522f475Smrg , LEFTEXTENSION 264d522f475Smrg , RIGHTEXTENSION 265d522f475Smrg} EventMode; 266d522f475Smrg 267d522f475Smrg/* 268d522f475Smrg * The origin of a screen is 0, 0. Therefore, the number of rows 269d522f475Smrg * on a screen is screen->max_row + 1, and similarly for columns. 270d522f475Smrg */ 271d522f475Smrg#define MaxCols(screen) ((screen)->max_col + 1) 272d522f475Smrg#define MaxRows(screen) ((screen)->max_row + 1) 273d522f475Smrg 274d522f475Smrgtypedef unsigned char Char; /* to support 8 bit chars */ 275d522f475Smrgtypedef Char *ScrnPtr; 276d522f475Smrgtypedef ScrnPtr *ScrnBuf; 277d522f475Smrg 278d522f475Smrg#define CharOf(n) ((unsigned char)(n)) 279d522f475Smrg 280d522f475Smrgtypedef struct { 281d522f475Smrg int row; 282d522f475Smrg int col; 283d522f475Smrg} CELL; 284d522f475Smrg 285d522f475Smrg#define isSameRow(a,b) ((a)->row == (b)->row) 286d522f475Smrg#define isSameCol(a,b) ((a)->col == (b)->col) 287d522f475Smrg#define isSameCELL(a,b) (isSameRow(a,b) && isSameCol(a,b)) 288d522f475Smrg 289d522f475Smrg#define xBIT(n) (1 << (n)) 290d522f475Smrg 291d522f475Smrg/* 292d522f475Smrg * ANSI emulation, special character codes 293d522f475Smrg */ 294d522f475Smrg#define ANSI_BEL 0x07 295d522f475Smrg#define ANSI_FF 0x0C /* C0, C1 control names */ 296d522f475Smrg#define ANSI_NAK 0x15 297d522f475Smrg#define ANSI_CAN 0x18 298d522f475Smrg#define ANSI_ESC 0x1B 299d522f475Smrg#define ANSI_SPA 0x20 300d522f475Smrg#define XTERM_POUND 0x1E /* internal mapping for '#' */ 301d522f475Smrg#define ANSI_DEL 0x7F 302d522f475Smrg#define ANSI_SS2 0x8E 303d522f475Smrg#define ANSI_SS3 0x8F 304d522f475Smrg#define ANSI_DCS 0x90 305d522f475Smrg#define ANSI_SOS 0x98 306d522f475Smrg#define ANSI_CSI 0x9B 307d522f475Smrg#define ANSI_ST 0x9C 308d522f475Smrg#define ANSI_OSC 0x9D 309d522f475Smrg#define ANSI_PM 0x9E 310d522f475Smrg#define ANSI_APC 0x9F 311d522f475Smrg 312d522f475Smrg#define MIN_DECID 52 /* can emulate VT52 */ 313d522f475Smrg#define MAX_DECID 420 /* ...through VT420 */ 314d522f475Smrg 315d522f475Smrg#ifndef DFT_DECID 316d522f475Smrg#define DFT_DECID "vt100" /* default VT100 */ 317d522f475Smrg#endif 318d522f475Smrg 319d522f475Smrg#ifndef DFT_KBD_DIALECT 320d522f475Smrg#define DFT_KBD_DIALECT "B" /* default USASCII */ 321d522f475Smrg#endif 322d522f475Smrg 323d522f475Smrg/* constants used for utf8 mode */ 324d522f475Smrg#define UCS_REPL 0xfffd 325d522f475Smrg#define UCS_LIMIT 0x80000000U /* both limit and flag for non-UCS */ 326d522f475Smrg 327d522f475Smrg#define TERMCAP_SIZE 1500 /* 1023 is standard; 'screen' exceeds */ 328d522f475Smrg 329d522f475Smrg#define NMENUFONTS 9 /* font entries in fontMenu */ 330d522f475Smrg 331d522f475Smrg#define NBOX 5 /* Number of Points in box */ 332d522f475Smrg#define NPARAM 30 /* Max. parameters */ 333d522f475Smrg 334d522f475Smrgtypedef struct { 335d522f475Smrg char *opt; 336d522f475Smrg char *desc; 337d522f475Smrg} OptionHelp; 338d522f475Smrg 3390d92cbfdSchristostypedef short ParmType; 3400d92cbfdSchristos 341d522f475Smrgtypedef struct { 3420d92cbfdSchristos Char a_type; /* CSI, etc., see unparseq() */ 3430d92cbfdSchristos Char a_pintro; /* private-mode char, if any */ 3440d92cbfdSchristos Char a_inters; /* special (before final-char) */ 3450d92cbfdSchristos Char a_final; /* final-char */ 3460d92cbfdSchristos ParmType a_nparam; /* # of parameters */ 3470d92cbfdSchristos ParmType a_param[NPARAM]; /* Parameters */ 348d522f475Smrg} ANSI; 349d522f475Smrg 350d522f475Smrg#define TEK_FONT_LARGE 0 351d522f475Smrg#define TEK_FONT_2 1 352d522f475Smrg#define TEK_FONT_3 2 353d522f475Smrg#define TEK_FONT_SMALL 3 354d522f475Smrg#define TEKNUMFONTS 4 355d522f475Smrg 356d522f475Smrg/* Actually there are 5 types of lines, but four are non-solid lines */ 357d522f475Smrg#define TEKNUMLINES 4 358d522f475Smrg 359d522f475Smrgtypedef struct { 360d522f475Smrg int x; 361d522f475Smrg int y; 362d522f475Smrg int fontsize; 363d522f475Smrg unsigned linetype; 364d522f475Smrg} Tmodes; 365d522f475Smrg 366d522f475Smrgtypedef struct { 367d522f475Smrg int Twidth; 368d522f475Smrg int Theight; 369d522f475Smrg} T_fontsize; 370d522f475Smrg 371d522f475Smrgtypedef struct { 372d522f475Smrg short *bits; 373d522f475Smrg int x; 374d522f475Smrg int y; 375d522f475Smrg int width; 376d522f475Smrg int height; 377d522f475Smrg} BitmapBits; 378d522f475Smrg 379d522f475Smrg#define SAVELINES 64 /* default # lines to save */ 380d522f475Smrg#define SCROLLLINES 1 /* default # lines to scroll */ 381d522f475Smrg 382d522f475Smrg#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp 383d522f475Smrg 384d522f475Smrg/***====================================================================***/ 385d522f475Smrg 386d522f475Smrg#if (XtSpecificationRelease < 6) 387d522f475Smrg#ifndef NO_ACTIVE_ICON 388d522f475Smrg#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */ 389d522f475Smrg#endif 390d522f475Smrg#endif 391d522f475Smrg 392d522f475Smrg#ifndef OPT_AIX_COLORS 393d522f475Smrg#define OPT_AIX_COLORS 1 /* true if xterm is configured with AIX (16) colors */ 394d522f475Smrg#endif 395d522f475Smrg 396d522f475Smrg#ifndef OPT_BLINK_CURS 397d522f475Smrg#define OPT_BLINK_CURS 1 /* true if xterm has blinking cursor capability */ 398d522f475Smrg#endif 399d522f475Smrg 400d522f475Smrg#ifndef OPT_BLINK_TEXT 401d522f475Smrg#define OPT_BLINK_TEXT OPT_BLINK_CURS /* true if xterm has blinking text capability */ 402d522f475Smrg#endif 403d522f475Smrg 404d522f475Smrg#ifndef OPT_BOX_CHARS 405d522f475Smrg#define OPT_BOX_CHARS 1 /* true if xterm can simulate box-characters */ 406d522f475Smrg#endif 407d522f475Smrg 408d522f475Smrg#ifndef OPT_BROKEN_OSC 409d522f475Smrg#ifdef linux 410d522f475Smrg#define OPT_BROKEN_OSC 1 /* man console_codes, 1st paragraph - cf: ECMA-48 */ 411d522f475Smrg#else 412d522f475Smrg#define OPT_BROKEN_OSC 0 /* true if xterm allows Linux's broken OSC parsing */ 413d522f475Smrg#endif 414d522f475Smrg#endif 415d522f475Smrg 416d522f475Smrg#ifndef OPT_BROKEN_ST 417d522f475Smrg#define OPT_BROKEN_ST 1 /* true if xterm allows old/broken OSC parsing */ 418d522f475Smrg#endif 419d522f475Smrg 420d522f475Smrg#ifndef OPT_C1_PRINT 421d522f475Smrg#define OPT_C1_PRINT 1 /* true if xterm allows C1 controls to be printable */ 422d522f475Smrg#endif 423d522f475Smrg 424d522f475Smrg#ifndef OPT_CLIP_BOLD 425d522f475Smrg#define OPT_CLIP_BOLD 1 /* true if xterm uses clipping to avoid bold-trash */ 426d522f475Smrg#endif 427d522f475Smrg 428d522f475Smrg#ifndef OPT_COLOR_CLASS 429d522f475Smrg#define OPT_COLOR_CLASS 1 /* true if xterm uses separate color-resource classes */ 430d522f475Smrg#endif 431d522f475Smrg 432d522f475Smrg#ifndef OPT_COLOR_RES 433d522f475Smrg#define OPT_COLOR_RES 1 /* true if xterm delays color-resource evaluation */ 434d522f475Smrg#undef OPT_COLOR_RES2 435d522f475Smrg#endif 436d522f475Smrg 437d522f475Smrg#ifndef OPT_COLOR_RES2 438d522f475Smrg#define OPT_COLOR_RES2 OPT_COLOR_RES /* true to avoid using extra resources */ 439d522f475Smrg#endif 440d522f475Smrg 441d522f475Smrg#ifndef OPT_DABBREV 442d522f475Smrg#define OPT_DABBREV 0 /* dynamic abbreviations */ 443d522f475Smrg#endif 444d522f475Smrg 445d522f475Smrg#ifndef OPT_DEC_CHRSET 446d522f475Smrg#define OPT_DEC_CHRSET 1 /* true if xterm is configured for DEC charset */ 447d522f475Smrg#endif 448d522f475Smrg 449d522f475Smrg#ifndef OPT_DEC_LOCATOR 450d522f475Smrg#define OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */ 451d522f475Smrg#endif 452d522f475Smrg 453d522f475Smrg#ifndef OPT_DEC_RECTOPS 454d522f475Smrg#define OPT_DEC_RECTOPS 0 /* true if xterm is configured for VT420 rectangles */ 455d522f475Smrg#endif 456d522f475Smrg 457d522f475Smrg#ifndef OPT_DEC_SOFTFONT 458d522f475Smrg#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */ 459d522f475Smrg#endif 460d522f475Smrg 461d522f475Smrg#ifndef OPT_EBCDIC 462d522f475Smrg#ifdef __MVS__ 463d522f475Smrg#define OPT_EBCDIC 1 464d522f475Smrg#else 465d522f475Smrg#define OPT_EBCDIC 0 466d522f475Smrg#endif 467d522f475Smrg#endif 468d522f475Smrg 469d522f475Smrg#ifndef OPT_EXEC_XTERM 470d522f475Smrg#define OPT_EXEC_XTERM 0 /* true if xterm can fork/exec copies of itself */ 471d522f475Smrg#endif 472d522f475Smrg 473d522f475Smrg#ifndef OPT_EXTRA_PASTE 474d522f475Smrg#define OPT_EXTRA_PASTE 1 475d522f475Smrg#endif 476d522f475Smrg 477d522f475Smrg#ifndef OPT_FOCUS_EVENT 478d522f475Smrg#define OPT_FOCUS_EVENT 1 /* focus in/out events */ 479d522f475Smrg#endif 480d522f475Smrg 481d522f475Smrg#ifndef OPT_HP_FUNC_KEYS 482d522f475Smrg#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */ 483d522f475Smrg#endif 484d522f475Smrg 485d522f475Smrg#ifndef OPT_I18N_SUPPORT 486d522f475Smrg#if (XtSpecificationRelease >= 5) 487d522f475Smrg#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */ 488d522f475Smrg#else 489d522f475Smrg#define OPT_I18N_SUPPORT 0 490d522f475Smrg#endif 491d522f475Smrg#endif 492d522f475Smrg 493d522f475Smrg#ifndef OPT_INITIAL_ERASE 494d522f475Smrg#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */ 495d522f475Smrg#endif 496d522f475Smrg 497d522f475Smrg#ifndef OPT_INPUT_METHOD 498d522f475Smrg#if (XtSpecificationRelease >= 6) 499d522f475Smrg#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */ 500d522f475Smrg#else 501d522f475Smrg#define OPT_INPUT_METHOD 0 502d522f475Smrg#endif 503d522f475Smrg#endif 504d522f475Smrg 505d522f475Smrg#ifndef OPT_ISO_COLORS 506d522f475Smrg#define OPT_ISO_COLORS 1 /* true if xterm is configured with ISO colors */ 507d522f475Smrg#endif 508d522f475Smrg 509d522f475Smrg#ifndef OPT_256_COLORS 510d522f475Smrg#define OPT_256_COLORS 0 /* true if xterm is configured with 256 colors */ 511d522f475Smrg#endif 512d522f475Smrg 513d522f475Smrg#ifndef OPT_88_COLORS 514d522f475Smrg#define OPT_88_COLORS 0 /* true if xterm is configured with 88 colors */ 515d522f475Smrg#endif 516d522f475Smrg 517d522f475Smrg#ifndef OPT_HIGHLIGHT_COLOR 518d522f475Smrg#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */ 519d522f475Smrg#endif 520d522f475Smrg 521d522f475Smrg#ifndef OPT_LOAD_VTFONTS 522d522f475Smrg#define OPT_LOAD_VTFONTS 0 /* true if xterm has load-vt-fonts() action */ 523d522f475Smrg#endif 524d522f475Smrg 525d522f475Smrg#ifndef OPT_LUIT_PROG 526d522f475Smrg#define OPT_LUIT_PROG 0 /* true if xterm supports luit */ 527d522f475Smrg#endif 528d522f475Smrg 529d522f475Smrg#ifndef OPT_MAXIMIZE 530d522f475Smrg#define OPT_MAXIMIZE 1 /* add actions for iconify ... maximize */ 531d522f475Smrg#endif 532d522f475Smrg 533d522f475Smrg#ifndef OPT_MINI_LUIT 534d522f475Smrg#define OPT_MINI_LUIT 0 /* true if xterm supports built-in mini-luit */ 535d522f475Smrg#endif 536d522f475Smrg 537d522f475Smrg#ifndef OPT_MOD_FKEYS 538d522f475Smrg#define OPT_MOD_FKEYS 1 /* modify cursor- and function-keys in normal mode */ 539d522f475Smrg#endif 540d522f475Smrg 541d522f475Smrg#ifndef OPT_NUM_LOCK 542d522f475Smrg#define OPT_NUM_LOCK 1 /* use NumLock key only for numeric-keypad */ 543d522f475Smrg#endif 544d522f475Smrg 545d522f475Smrg#ifndef OPT_PASTE64 546d522f475Smrg#define OPT_PASTE64 0 /* program control of select/paste via base64 */ 547d522f475Smrg#endif 548d522f475Smrg 549d522f475Smrg#ifndef OPT_PC_COLORS 550d522f475Smrg#define OPT_PC_COLORS 1 /* true if xterm supports PC-style (bold) colors */ 551d522f475Smrg#endif 552d522f475Smrg 553d522f475Smrg#ifndef OPT_PTY_HANDSHAKE 554d522f475Smrg#define OPT_PTY_HANDSHAKE USE_HANDSHAKE /* avoid pty races on older systems */ 555d522f475Smrg#endif 556d522f475Smrg 557d522f475Smrg#ifndef OPT_PRINT_COLORS 558d522f475Smrg#define OPT_PRINT_COLORS 1 /* true if we print color information */ 559d522f475Smrg#endif 560d522f475Smrg 561d522f475Smrg#ifndef OPT_READLINE 562d522f475Smrg#define OPT_READLINE 0 /* mouse-click/paste support for readline */ 563d522f475Smrg#endif 564d522f475Smrg 565d522f475Smrg#ifndef OPT_RENDERFONT 566d522f475Smrg#ifdef XRENDERFONT 567d522f475Smrg#define OPT_RENDERFONT 1 568d522f475Smrg#else 569d522f475Smrg#define OPT_RENDERFONT 0 570d522f475Smrg#endif 571d522f475Smrg#endif 572d522f475Smrg 573d522f475Smrg#ifndef OPT_RENDERWIDE 574d522f475Smrg#if OPT_RENDERFONT && OPT_WIDE_CHARS && defined(HAVE_TYPE_XFTCHARSPEC) 575d522f475Smrg#define OPT_RENDERWIDE 1 576d522f475Smrg#else 577d522f475Smrg#define OPT_RENDERWIDE 0 578d522f475Smrg#endif 579d522f475Smrg#endif 580d522f475Smrg 581d522f475Smrg#ifndef OPT_SAME_NAME 582d522f475Smrg#define OPT_SAME_NAME 1 /* suppress redundant updates of title, icon, etc. */ 583d522f475Smrg#endif 584d522f475Smrg 585d522f475Smrg#ifndef OPT_SCO_FUNC_KEYS 586d522f475Smrg#define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */ 587d522f475Smrg#endif 588d522f475Smrg 589d522f475Smrg#ifndef OPT_SUN_FUNC_KEYS 590d522f475Smrg#define OPT_SUN_FUNC_KEYS 1 /* true if xterm supports Sun-style function keys */ 591d522f475Smrg#endif 592d522f475Smrg 593d522f475Smrg#ifndef OPT_SELECT_REGEX 594d522f475Smrg#define OPT_SELECT_REGEX 0 /* true if xterm supports regular-expression selects */ 595d522f475Smrg#endif 596d522f475Smrg 597d522f475Smrg#ifndef OPT_SESSION_MGT 598d522f475Smrg#if defined(XtNdieCallback) && defined(XtNsaveCallback) 599d522f475Smrg#define OPT_SESSION_MGT 1 600d522f475Smrg#else 601d522f475Smrg#define OPT_SESSION_MGT 0 602d522f475Smrg#endif 603d522f475Smrg#endif 604d522f475Smrg 605d522f475Smrg#ifndef OPT_SHIFT_FONTS 606781b53c7Schristos#define OPT_SHIFT_FONTS 0 /* true if xterm interprets fontsize-shifting */ 607d522f475Smrg#endif 608d522f475Smrg 609d522f475Smrg#ifndef OPT_SUNPC_KBD 610d522f475Smrg#define OPT_SUNPC_KBD 1 /* true if xterm supports Sun/PC keyboard map */ 611d522f475Smrg#endif 612d522f475Smrg 613d522f475Smrg#ifndef OPT_TCAP_FKEYS 614d522f475Smrg#define OPT_TCAP_FKEYS 0 /* true for experimental termcap function-keys */ 615d522f475Smrg#endif 616d522f475Smrg 617d522f475Smrg#ifndef OPT_TCAP_QUERY 618d522f475Smrg#define OPT_TCAP_QUERY 0 /* true for experimental termcap query */ 619d522f475Smrg#endif 620d522f475Smrg 621d522f475Smrg#ifndef OPT_TEK4014 622d522f475Smrg#define OPT_TEK4014 1 /* true if we're using tek4014 emulation */ 623d522f475Smrg#endif 624d522f475Smrg 625d522f475Smrg#ifndef OPT_TOOLBAR 626d522f475Smrg#define OPT_TOOLBAR 0 /* true if xterm supports toolbar menus */ 627d522f475Smrg#endif 628d522f475Smrg 629d522f475Smrg#ifndef OPT_TRACE 630d522f475Smrg#define OPT_TRACE 0 /* true if we're using debugging traces */ 631d522f475Smrg#endif 632d522f475Smrg 633d522f475Smrg#ifndef OPT_TRACE_FLAGS 634d522f475Smrg#define OPT_TRACE_FLAGS 0 /* additional tracing used for SCRN_BUF_FLAGS */ 635d522f475Smrg#endif 636d522f475Smrg 637d522f475Smrg#ifndef OPT_VT52_MODE 638d522f475Smrg#define OPT_VT52_MODE 1 /* true if xterm supports VT52 emulation */ 639d522f475Smrg#endif 640d522f475Smrg 641d522f475Smrg#ifndef OPT_WIDE_CHARS 642d522f475Smrg#define OPT_WIDE_CHARS 0 /* true if xterm supports 16-bit characters */ 643d522f475Smrg#endif 644d522f475Smrg 645d522f475Smrg#ifndef OPT_XMC_GLITCH 646d522f475Smrg#define OPT_XMC_GLITCH 0 /* true if xterm supports xmc (magic cookie glitch) */ 647d522f475Smrg#endif 648d522f475Smrg 649d522f475Smrg#ifndef OPT_ZICONBEEP 650d522f475Smrg#define OPT_ZICONBEEP 1 /* true if xterm supports "-ziconbeep" option */ 651d522f475Smrg#endif 652d522f475Smrg 653d522f475Smrg/***====================================================================***/ 654d522f475Smrg 655d522f475Smrg#if OPT_AIX_COLORS && !OPT_ISO_COLORS 656d522f475Smrg/* You must have ANSI/ISO colors to support AIX colors */ 657d522f475Smrg#undef OPT_AIX_COLORS 658d522f475Smrg#define OPT_AIX_COLORS 0 659d522f475Smrg#endif 660d522f475Smrg 661d522f475Smrg#if OPT_COLOR_RES && !OPT_ISO_COLORS 662d522f475Smrg/* You must have ANSI/ISO colors to support ColorRes logic */ 663d522f475Smrg#undef OPT_COLOR_RES 664d522f475Smrg#define OPT_COLOR_RES 0 665d522f475Smrg#endif 666d522f475Smrg 667d522f475Smrg#if OPT_COLOR_RES2 && !(OPT_256_COLORS || OPT_88_COLORS) 668d522f475Smrg/* You must have 88/256 colors to need fake-resource logic */ 669d522f475Smrg#undef OPT_COLOR_RES2 670d522f475Smrg#define OPT_COLOR_RES2 0 671d522f475Smrg#endif 672d522f475Smrg 673d522f475Smrg#if OPT_PASTE64 && !OPT_READLINE 674d522f475Smrg/* OPT_PASTE64 uses logic from OPT_READLINE */ 675d522f475Smrg#undef OPT_READLINE 676d522f475Smrg#define OPT_READLINE 1 677d522f475Smrg#endif 678d522f475Smrg 679d522f475Smrg#if OPT_PC_COLORS && !OPT_ISO_COLORS 680d522f475Smrg/* You must have ANSI/ISO colors to support PC colors */ 681d522f475Smrg#undef OPT_PC_COLORS 682d522f475Smrg#define OPT_PC_COLORS 0 683d522f475Smrg#endif 684d522f475Smrg 685d522f475Smrg#if OPT_PRINT_COLORS && !OPT_ISO_COLORS 686d522f475Smrg/* You must have ANSI/ISO colors to be able to print them */ 687d522f475Smrg#undef OPT_PRINT_COLORS 688d522f475Smrg#define OPT_PRINT_COLORS 0 689d522f475Smrg#endif 690d522f475Smrg 691d522f475Smrg#if OPT_256_COLORS && !OPT_ISO_COLORS 692d522f475Smrg/* You must have ANSI/ISO colors to support 256 colors */ 693d522f475Smrg#undef OPT_256_COLORS 694d522f475Smrg#define OPT_256_COLORS 0 695d522f475Smrg#endif 696d522f475Smrg 697d522f475Smrg#if OPT_88_COLORS && !OPT_ISO_COLORS 698d522f475Smrg/* You must have ANSI/ISO colors to support 88 colors */ 699d522f475Smrg#undef OPT_88_COLORS 700d522f475Smrg#define OPT_88_COLORS 0 701d522f475Smrg#endif 702d522f475Smrg 703d522f475Smrg#if OPT_88_COLORS && OPT_256_COLORS 704d522f475Smrg/* 256 colors supersedes 88 colors */ 705d522f475Smrg#undef OPT_88_COLORS 706d522f475Smrg#define OPT_88_COLORS 0 707d522f475Smrg#endif 708d522f475Smrg 709d522f475Smrg/***====================================================================***/ 710d522f475Smrg 711d522f475Smrg/* 712d522f475Smrg * Indices for menu_font_names[][] 713d522f475Smrg */ 714d522f475Smrgtypedef enum { 715d522f475Smrg fNorm = 0 /* normal font */ 716d522f475Smrg , fBold /* bold font */ 717d522f475Smrg#if OPT_WIDE_CHARS 718d522f475Smrg , fWide /* double-width font */ 719d522f475Smrg , fWBold /* double-width bold font */ 720d522f475Smrg#endif 721d522f475Smrg , fMAX 722d522f475Smrg} VTFontEnum; 723d522f475Smrg 724d522f475Smrg/* 725d522f475Smrg * Indices for cachedGCs.c (unrelated to VTFontEnum). 726d522f475Smrg */ 727d522f475Smrgtypedef enum { 728d522f475Smrg gcNorm = 0 729d522f475Smrg , gcBold 730d522f475Smrg , gcNormReverse 731d522f475Smrg , gcBoldReverse 732d522f475Smrg#if OPT_BOX_CHARS 733d522f475Smrg , gcLine 734d522f475Smrg , gcDots 735d522f475Smrg#endif 736d522f475Smrg#if OPT_DEC_CHRSET 737d522f475Smrg , gcCNorm 738d522f475Smrg , gcCBold 739d522f475Smrg#endif 740d522f475Smrg#if OPT_WIDE_CHARS 741d522f475Smrg , gcWide 742d522f475Smrg , gcWBold 743d522f475Smrg , gcWideReverse 744d522f475Smrg , gcWBoldReverse 745d522f475Smrg#endif 746d522f475Smrg , gcVTcursNormal 747d522f475Smrg , gcVTcursFilled 748d522f475Smrg , gcVTcursReverse 749d522f475Smrg , gcVTcursOutline 750d522f475Smrg#if OPT_TEK4014 751d522f475Smrg , gcTKcurs 752d522f475Smrg#endif 753d522f475Smrg , gcMAX 754d522f475Smrg} CgsEnum; 755d522f475Smrg 756d522f475Smrg#define for_each_text_gc(n) for (n = gcNorm; n < gcVTcursNormal; ++n) 757d522f475Smrg#define for_each_curs_gc(n) for (n = gcVTcursNormal; n <= gcVTcursOutline; ++n) 758d522f475Smrg#define for_each_gc(n) for (n = gcNorm; n < gcMAX; ++n) 759d522f475Smrg 760d522f475Smrg/* indices for the normal terminal colors in screen.Tcolors[] */ 761d522f475Smrgtypedef enum { 762d522f475Smrg TEXT_FG = 0 /* text foreground */ 763d522f475Smrg , TEXT_BG /* text background */ 764d522f475Smrg , TEXT_CURSOR /* text cursor */ 765d522f475Smrg , MOUSE_FG /* mouse foreground */ 766d522f475Smrg , MOUSE_BG /* mouse background */ 767d522f475Smrg#if OPT_TEK4014 768d522f475Smrg , TEK_FG /* tektronix foreground */ 769d522f475Smrg , TEK_BG /* tektronix background */ 770d522f475Smrg , TEK_CURSOR /* tektronix cursor */ 771d522f475Smrg#endif 772d522f475Smrg#if OPT_HIGHLIGHT_COLOR 773d522f475Smrg , HIGHLIGHT_BG /* highlight background */ 774d522f475Smrg , HIGHLIGHT_FG /* highlight foreground */ 775d522f475Smrg#endif 776d522f475Smrg , NCOLORS /* total number of colors */ 777d522f475Smrg} TermColors; 778d522f475Smrg 779d522f475Smrg/* indices for mapping multiple clicks to selection types */ 780d522f475Smrgtypedef enum { 781d522f475Smrg Select_CHAR=0 782d522f475Smrg ,Select_WORD 783d522f475Smrg ,Select_LINE 784d522f475Smrg ,Select_GROUP 785d522f475Smrg ,Select_PAGE 786d522f475Smrg ,Select_ALL 787d522f475Smrg#if OPT_SELECT_REGEX 788d522f475Smrg ,Select_REGEX 789d522f475Smrg#endif 790d522f475Smrg ,NSELECTUNITS 791d522f475Smrg} SelectUnit; 792d522f475Smrg 793d522f475Smrg#define COLOR_DEFINED(s,w) ((s)->which & (1<<(w))) 794d522f475Smrg#define COLOR_VALUE(s,w) ((s)->colors[w]) 795d522f475Smrg#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w] = (v)), ((s)->which |= (1<<(w)))) 796d522f475Smrg 797d522f475Smrg#define COLOR_NAME(s,w) ((s)->names[w]) 798d522f475Smrg#define SET_COLOR_NAME(s,w,v) (((s)->names[w] = (v)), ((s)->which |= (1<<(w)))) 799d522f475Smrg 800d522f475Smrg#define UNDEFINE_COLOR(s,w) ((s)->which &= (~((w)<<1))) 801d522f475Smrg 802d522f475Smrg/***====================================================================***/ 803d522f475Smrg 804d522f475Smrg#if OPT_ISO_COLORS 805d522f475Smrg#define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code 806d522f475Smrg#define TERM_COLOR_FLAGS(xw) ((xw)->flags & (FG_COLOR|BG_COLOR)) 807d522f475Smrg#define COLOR_0 0 808d522f475Smrg#define COLOR_1 1 809d522f475Smrg#define COLOR_2 2 810d522f475Smrg#define COLOR_3 3 811d522f475Smrg#define COLOR_4 4 812d522f475Smrg#define COLOR_5 5 813d522f475Smrg#define COLOR_6 6 814d522f475Smrg#define COLOR_7 7 815d522f475Smrg#define COLOR_8 8 816d522f475Smrg#define COLOR_9 9 817d522f475Smrg#define COLOR_10 10 818d522f475Smrg#define COLOR_11 11 819d522f475Smrg#define COLOR_12 12 820d522f475Smrg#define COLOR_13 13 821d522f475Smrg#define COLOR_14 14 822d522f475Smrg#define COLOR_15 15 823d522f475Smrg#define MIN_ANSI_COLORS 16 824d522f475Smrg 825d522f475Smrg#if OPT_256_COLORS 826d522f475Smrg# define NUM_ANSI_COLORS 256 827d522f475Smrg#elif OPT_88_COLORS 828d522f475Smrg# define NUM_ANSI_COLORS 88 829d522f475Smrg#else 830d522f475Smrg# define NUM_ANSI_COLORS MIN_ANSI_COLORS 831d522f475Smrg#endif 832d522f475Smrg 833d522f475Smrg#if NUM_ANSI_COLORS > MIN_ANSI_COLORS 834d522f475Smrg# define OPT_EXT_COLORS 1 835d522f475Smrg#else 836d522f475Smrg# define OPT_EXT_COLORS 0 837d522f475Smrg#endif 838d522f475Smrg 839d522f475Smrg#define COLOR_BD (NUM_ANSI_COLORS) /* BOLD */ 840d522f475Smrg#define COLOR_UL (NUM_ANSI_COLORS+1) /* UNDERLINE */ 841d522f475Smrg#define COLOR_BL (NUM_ANSI_COLORS+2) /* BLINK */ 842d522f475Smrg#define COLOR_RV (NUM_ANSI_COLORS+3) /* REVERSE */ 843d522f475Smrg#define MAXCOLORS (NUM_ANSI_COLORS+4) 844d522f475Smrg#ifndef DFT_COLORMODE 845d522f475Smrg#define DFT_COLORMODE True /* default colorMode resource */ 846d522f475Smrg#endif 847d522f475Smrg 848d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \ 849d522f475Smrg (( screen->colorRVMode && hilite ) || \ 850d522f475Smrg ( !screen->colorRVMode && \ 851d522f475Smrg (( (flags & INVERSE) && !hilite) || \ 852d522f475Smrg (!(flags & INVERSE) && hilite)) )) 853d522f475Smrg 854d522f475Smrg/* Define a fake XK code, we need it for the fake color response in 855d522f475Smrg * xtermcapKeycode(). */ 856d522f475Smrg#if OPT_TCAP_QUERY && OPT_ISO_COLORS 857d522f475Smrg# define XK_COLORS 0x0003 858d522f475Smrg#endif 859d522f475Smrg 860d522f475Smrg#else /* !OPT_ISO_COLORS */ 861d522f475Smrg 862d522f475Smrg#define if_OPT_ISO_COLORS(screen, code) /* nothing */ 863d522f475Smrg#define TERM_COLOR_FLAGS(xw) 0 864d522f475Smrg 865d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \ 866d522f475Smrg (( (flags & INVERSE) && !hilite) || \ 867d522f475Smrg (!(flags & INVERSE) && hilite)) 868d522f475Smrg 869d522f475Smrg#endif /* OPT_ISO_COLORS */ 870d522f475Smrg 871d522f475Smrg#if OPT_AIX_COLORS 872d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code 873d522f475Smrg#else 874d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) /* nothing */ 875d522f475Smrg#endif 876d522f475Smrg 877d522f475Smrg#if OPT_256_COLORS || OPT_88_COLORS 878d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) if(screen->colorMode) code 879d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /* nothing */ 880d522f475Smrg#elif OPT_ISO_COLORS 881d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) /* nothing */ 882d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code 883d522f475Smrg#else 884d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) /* nothing */ 885d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/ 886d522f475Smrg#endif 887d522f475Smrg 888d522f475Smrg#define COLOR_RES_NAME(root) "color" root 889d522f475Smrg 890d522f475Smrg#if OPT_COLOR_CLASS 891d522f475Smrg#define COLOR_RES_CLASS(root) "Color" root 892d522f475Smrg#else 893d522f475Smrg#define COLOR_RES_CLASS(root) XtCForeground 894d522f475Smrg#endif 895d522f475Smrg 896d522f475Smrg#if OPT_COLOR_RES 897d522f475Smrg#define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value) 898d522f475Smrg#define COLOR_RES2(name,class,offset,value) Sres(name, class, offset.resource, value) 899d522f475Smrg#else 900d522f475Smrg#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value) 901d522f475Smrg#define COLOR_RES2(name,class,offset,value) Cres(name, class, offset, value) 902d522f475Smrg#endif 903d522f475Smrg 904d522f475Smrg#define CLICK_RES_NAME(count) "on" count "Clicks" 905d522f475Smrg#define CLICK_RES_CLASS(count) "On" count "Clicks" 906d522f475Smrg#define CLICK_RES(count,offset,value) Sres(CLICK_RES_NAME(count), CLICK_RES_CLASS(count), offset, value) 907d522f475Smrg 908d522f475Smrg/***====================================================================***/ 909d522f475Smrg 910d522f475Smrg#if OPT_DEC_CHRSET 911d522f475Smrg#define if_OPT_DEC_CHRSET(code) code 912d522f475Smrg /* Use 2 bits for encoding the double high/wide sense of characters */ 913d522f475Smrg#define CSET_SWL 0 914d522f475Smrg#define CSET_DHL_TOP 1 915d522f475Smrg#define CSET_DHL_BOT 2 916d522f475Smrg#define CSET_DWL 3 917d522f475Smrg#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */ 918d522f475Smrg /* Use remaining bits for encoding the other character-sets */ 919d522f475Smrg#define CSET_NORMAL(code) ((code) == CSET_SWL) 920d522f475Smrg#define CSET_DOUBLE(code) (!CSET_NORMAL(code) && !CSET_EXTEND(code)) 921d522f475Smrg#define CSET_EXTEND(code) ((code) > CSET_DWL) 922d522f475Smrg /* for doublesize characters, the first cell in a row holds the info */ 923d522f475Smrg#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0]) 924d522f475Smrg#define CurMaxCol(screen, row) \ 925d522f475Smrg (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ 926d522f475Smrg ? (screen->max_col / 2) \ 927d522f475Smrg : (screen->max_col)) 928d522f475Smrg#define CurCursorX(screen, row, col) \ 929d522f475Smrg (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ 930d522f475Smrg ? CursorX(screen, 2*(col)) \ 931d522f475Smrg : CursorX(screen, (col))) 932d522f475Smrg#define CurFontWidth(screen, row) \ 933d522f475Smrg (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ 934d522f475Smrg ? 2*FontWidth(screen) \ 935d522f475Smrg : FontWidth(screen)) 936d522f475Smrg#else 937d522f475Smrg#define if_OPT_DEC_CHRSET(code) /*nothing*/ 938d522f475Smrg#define CurMaxCol(screen, row) screen->max_col 939d522f475Smrg#define CurCursorX(screen, row, col) CursorX(screen, col) 940d522f475Smrg#define CurFontWidth(screen, row) FontWidth(screen) 941d522f475Smrg#endif 942d522f475Smrg 943d522f475Smrg#if OPT_LUIT_PROG && !OPT_WIDE_CHARS 944d522f475Smrg#error Luit requires the wide-chars configuration 945d522f475Smrg#endif 946d522f475Smrg 947d522f475Smrg /* the number of pointers per row in 'ScrnBuf' */ 948d522f475Smrg#if OPT_WIDE_CHARS 949d522f475Smrg#define MAX_PTRS term->num_ptrs 950d522f475Smrg#else 951d522f475Smrg#define MAX_PTRS (OFF_FINAL) 952d522f475Smrg#endif 953d522f475Smrg 954d522f475Smrg#define BUF_HEAD 1 955d522f475Smrg /* the number that point to Char data */ 956d522f475Smrg#define BUF_PTRS (MAX_PTRS - BUF_HEAD) 957d522f475Smrg 958d522f475Smrg/***====================================================================***/ 959d522f475Smrg 960d522f475Smrg#if OPT_EBCDIC 961d522f475Smrgextern int E2A(int); 962d522f475Smrgextern int A2E(int); 963d522f475Smrg#else 964d522f475Smrg#define E2A(a) (a) 965d522f475Smrg#define A2E(a) (a) 966d522f475Smrg#endif 967d522f475Smrg 968d522f475Smrg#define CONTROL(a) (A2E(E2A(a)&037)) 969d522f475Smrg 970d522f475Smrg/***====================================================================***/ 971d522f475Smrg 972d522f475Smrg#if OPT_TEK4014 973d522f475Smrg#define TEK4014_ACTIVE(xw) ((xw)->misc.TekEmu) 974d522f475Smrg#define TEK4014_SHOWN(xw) ((xw)->misc.Tshow) 975d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (TEK4014_ACTIVE(term) ? tek : vt) 976d522f475Smrg#define CURRENT_EMU() CURRENT_EMU_VAL((Widget)tekWidget, (Widget)term) 977d522f475Smrg#else 978d522f475Smrg#define TEK4014_ACTIVE(screen) 0 979d522f475Smrg#define TEK4014_SHOWN(xw) 0 980d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (vt) 981d522f475Smrg#define CURRENT_EMU() ((Widget)term) 982d522f475Smrg#endif 983d522f475Smrg 984d522f475Smrg/***====================================================================***/ 985d522f475Smrg 986d522f475Smrg#if OPT_TOOLBAR 987d522f475Smrg#define SHELL_OF(widget) XtParent(XtParent(widget)) 988d522f475Smrg#else 989d522f475Smrg#define SHELL_OF(widget) XtParent(widget) 990d522f475Smrg#endif 991d522f475Smrg 992d522f475Smrg/***====================================================================***/ 993d522f475Smrg 994d522f475Smrg#if OPT_VT52_MODE 995d522f475Smrg#define if_OPT_VT52_MODE(screen, code) if(screen->vtXX_level == 0) code 996d522f475Smrg#else 997d522f475Smrg#define if_OPT_VT52_MODE(screen, code) /* nothing */ 998d522f475Smrg#endif 999d522f475Smrg 1000d522f475Smrg/***====================================================================***/ 1001d522f475Smrg 1002d522f475Smrg#if OPT_XMC_GLITCH 1003d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code 1004d522f475Smrg#define XMC_GLITCH 1 /* the character we'll show */ 1005d522f475Smrg#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD|BLINK) 1006d522f475Smrg#else 1007d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) /* nothing */ 1008d522f475Smrg#endif 1009d522f475Smrg 1010d522f475Smrg/***====================================================================***/ 1011d522f475Smrg 10120d92cbfdSchristos#define LO_BYTE(ch) CharOf((ch) & 0xff) 10130d92cbfdSchristos#define HI_BYTE(ch) CharOf((ch) >> 8) 10140d92cbfdSchristos 10150d92cbfdSchristos#define PACK_FGBG(screen, row, col) \ 10160d92cbfdSchristos (unsigned) ((SCRN_BUF_FGRND(screen, row)[col] << 8) \ 10170d92cbfdSchristos | (SCRN_BUF_BGRND(screen, row)[col])) 1018d522f475Smrg 1019d522f475Smrg#if OPT_WIDE_CHARS 1020d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code 1021d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow 1022d522f475Smrg#define PAIRED_CHARS(lo,hi) lo,hi 1023d522f475Smrg#define PACK_PAIR(lo,hi,n) (lo[n] | (hi ? (hi[n] << 8) : 0)) 1024d522f475Smrgtypedef unsigned IChar; /* for 8 or 16-bit characters, plus flag */ 1025d522f475Smrg#else 1026d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) /* nothing */ 1027d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow 1028d522f475Smrg#define PAIRED_CHARS(lo,hi) lo 1029d522f475Smrg#define PACK_PAIR(lo,hi,n) lo[n] 1030d522f475Smrgtypedef unsigned char IChar; /* for 8-bit characters */ 1031d522f475Smrg#endif 1032d522f475Smrg 1033d522f475Smrg/***====================================================================***/ 1034d522f475Smrg 1035d522f475Smrg#ifndef RES_OFFSET 1036d522f475Smrg#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset) 1037d522f475Smrg#endif 1038d522f475Smrg 1039d522f475Smrg#define RES_NAME(name) name 1040d522f475Smrg#define RES_CLASS(name) name 1041d522f475Smrg 1042d522f475Smrg#define Bres(name, class, offset, dftvalue) \ 1043d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \ 1044d522f475Smrg RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue} 1045d522f475Smrg 1046d522f475Smrg#define Cres(name, class, offset, dftvalue) \ 1047d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRPixel, sizeof(Pixel), \ 1048d522f475Smrg RES_OFFSET(offset), XtRString, (XtPointer) dftvalue} 1049d522f475Smrg 1050d522f475Smrg#define Tres(name, class, offset, dftvalue) \ 1051d522f475Smrg COLOR_RES2(name, class, screen.Tcolors[offset], dftvalue) \ 1052d522f475Smrg 1053d522f475Smrg#define Fres(name, class, offset, dftvalue) \ 1054d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRFontStruct, sizeof(XFontStruct *), \ 1055d522f475Smrg RES_OFFSET(offset), XtRString, (XtPointer) dftvalue} 1056d522f475Smrg 1057d522f475Smrg#define Ires(name, class, offset, dftvalue) \ 1058d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \ 1059d522f475Smrg RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue} 1060d522f475Smrg 1061d522f475Smrg#define Dres(name, class, offset, dftvalue) \ 1062d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRFloat, sizeof(float), \ 1063d522f475Smrg RES_OFFSET(offset), XtRString, (XtPointer) dftvalue} 1064d522f475Smrg 1065d522f475Smrg#define Sres(name, class, offset, dftvalue) \ 1066d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \ 1067d522f475Smrg RES_OFFSET(offset), XtRString, (XtPointer) dftvalue} 1068d522f475Smrg 1069d522f475Smrg#define Wres(name, class, offset, dftvalue) \ 1070d522f475Smrg {RES_NAME(name), RES_CLASS(class), XtRWidget, sizeof(Widget), \ 1071d522f475Smrg RES_OFFSET(offset), XtRWidget, (XtPointer) dftvalue} 1072d522f475Smrg 1073d522f475Smrg/***====================================================================***/ 1074d522f475Smrg 1075d522f475Smrg#define FRG_SIZE resource.minBufSize 1076d522f475Smrg#define BUF_SIZE resource.maxBufSize 1077d522f475Smrg 1078d522f475Smrgtypedef struct { 1079d522f475Smrg Char * next; 1080d522f475Smrg Char * last; 1081d522f475Smrg int update; /* HandleInterpret */ 1082d522f475Smrg#if OPT_WIDE_CHARS 1083d522f475Smrg IChar utf_data; /* resulting character */ 1084d522f475Smrg int utf_size; /* ...number of bytes decoded */ 1085d522f475Smrg Char *write_buf; 1086d522f475Smrg unsigned write_len; 1087d522f475Smrg#endif 1088d522f475Smrg Char buffer[1]; 1089d522f475Smrg} PtyData; 1090d522f475Smrg 1091d522f475Smrg/***====================================================================***/ 1092d522f475Smrg 1093d522f475Smrg/* The order of ifdef's matches the logic for num_ptrs in VTInitialize */ 1094d522f475Smrgtypedef enum { 1095d522f475Smrg OFF_FLAGS = 0 /* BUF_HEAD */ 1096d522f475Smrg , OFF_ATTRS /* video attributes */ 1097d522f475Smrg#if OPT_ISO_COLORS 1098d522f475Smrg#if OPT_256_COLORS || OPT_88_COLORS 1099d522f475Smrg , OFF_FGRND /* foreground color number */ 1100d522f475Smrg , OFF_BGRND /* background color number */ 1101d522f475Smrg#else 1102d522f475Smrg , OFF_COLOR /* foreground+background color numbers */ 1103d522f475Smrg#endif 1104d522f475Smrg#endif 1105d522f475Smrg#if OPT_DEC_CHRSET 1106d522f475Smrg , OFF_CSETS /* DEC character-set */ 1107d522f475Smrg#endif 1108d522f475Smrg /* wide (16-bit) characters begin here */ 1109d522f475Smrg , OFF_CHARS /* first (or only) byte of cell's character */ 1110d522f475Smrg#if OPT_WIDE_CHARS 1111d522f475Smrg , OFF_WIDEC /* second byte of first wide-character */ 1112d522f475Smrg#endif 1113d522f475Smrg , OFF_FINAL /* first enum past fixed-offsets */ 1114d522f475Smrg} BufOffsets; 1115d522f475Smrg 1116d522f475Smrg /* 1117d522f475Smrg * A "row" is the index within the visible part of the screen, and an 1118d522f475Smrg * "inx" is the index within the whole set of scrollable lines. 1119d522f475Smrg */ 1120d522f475Smrg#define ROW2INX(screen, row) ((row) + (screen)->topline) 1121d522f475Smrg#define INX2ROW(screen, inx) ((inx) - (screen)->topline) 1122d522f475Smrg 1123d522f475Smrg#define ROW2ABS(screen, row) ((row) + (screen)->savedlines) 1124d522f475Smrg#define INX2ABS(screen, inx) ROW2ABS(screen, INX2ROW(screen, inx)) 1125d522f475Smrg 1126d522f475Smrg#define okScrnRow(screen, row) \ 1127d522f475Smrg ((row) <= (screen)->max_row \ 1128d522f475Smrg && (row) >= -((screen)->savedlines)) 1129d522f475Smrg 1130d522f475Smrg /* ScrnBuf-level macros */ 1131d522f475Smrg#define BUFFER_PTR(buf, row, off) (buf[MAX_PTRS * (row) + off]) 1132d522f475Smrg 1133d522f475Smrg#define BUF_FLAGS(buf, row) BUFFER_PTR(buf, row, OFF_FLAGS) 1134d522f475Smrg#define BUF_CHARS(buf, row) BUFFER_PTR(buf, row, OFF_CHARS) 1135d522f475Smrg#define BUF_ATTRS(buf, row) BUFFER_PTR(buf, row, OFF_ATTRS) 1136d522f475Smrg#define BUF_COLOR(buf, row) BUFFER_PTR(buf, row, OFF_COLOR) 1137d522f475Smrg#define BUF_FGRND(buf, row) BUFFER_PTR(buf, row, OFF_FGRND) 1138d522f475Smrg#define BUF_BGRND(buf, row) BUFFER_PTR(buf, row, OFF_BGRND) 1139d522f475Smrg#define BUF_CSETS(buf, row) BUFFER_PTR(buf, row, OFF_CSETS) 1140d522f475Smrg#define BUF_WIDEC(buf, row) BUFFER_PTR(buf, row, OFF_WIDEC) 1141d522f475Smrg 1142d522f475Smrg /* TScreen-level macros */ 1143d522f475Smrg#define SCREEN_PTR(screen, row, off) BUFFER_PTR(screen->visbuf, row, off) 1144d522f475Smrg 1145d522f475Smrg#define SCRN_BUF_FLAGS(screen, row) SCREEN_PTR(screen, row, OFF_FLAGS) 1146d522f475Smrg#define SCRN_BUF_CHARS(screen, row) SCREEN_PTR(screen, row, OFF_CHARS) 1147d522f475Smrg#define SCRN_BUF_ATTRS(screen, row) SCREEN_PTR(screen, row, OFF_ATTRS) 1148d522f475Smrg#define SCRN_BUF_COLOR(screen, row) SCREEN_PTR(screen, row, OFF_COLOR) 1149d522f475Smrg#define SCRN_BUF_FGRND(screen, row) SCREEN_PTR(screen, row, OFF_FGRND) 1150d522f475Smrg#define SCRN_BUF_BGRND(screen, row) SCREEN_PTR(screen, row, OFF_BGRND) 1151d522f475Smrg#define SCRN_BUF_CSETS(screen, row) SCREEN_PTR(screen, row, OFF_CSETS) 1152d522f475Smrg#define SCRN_BUF_WIDEC(screen, row) SCREEN_PTR(screen, row, OFF_WIDEC) 1153d522f475Smrg 1154d522f475Smrgtypedef struct { 1155d522f475Smrg unsigned chrset; 1156d522f475Smrg unsigned flags; 1157d522f475Smrg XFontStruct * fs; 1158d522f475Smrg char * fn; 1159d522f475Smrg} XTermFonts; 1160d522f475Smrg 1161d522f475Smrgtypedef struct { 1162d522f475Smrg int top; 1163d522f475Smrg int left; 1164d522f475Smrg int bottom; 1165d522f475Smrg int right; 1166d522f475Smrg} XTermRect; 1167d522f475Smrg 1168d522f475Smrg /* indices into save_modes[] */ 1169d522f475Smrgtypedef enum { 1170d522f475Smrg DP_CRS_VISIBLE, 1171d522f475Smrg DP_DECANM, 1172d522f475Smrg DP_DECARM, 1173d522f475Smrg DP_DECAWM, 1174d522f475Smrg DP_DECBKM, 1175d522f475Smrg DP_DECCKM, 1176d522f475Smrg DP_DECCOLM, /* IN132COLUMNS */ 1177d522f475Smrg DP_DECOM, 1178d522f475Smrg DP_DECPEX, 1179d522f475Smrg DP_DECPFF, 1180d522f475Smrg DP_DECSCLM, 1181d522f475Smrg DP_DECSCNM, 1182d522f475Smrg DP_DECTCEM, 1183d522f475Smrg DP_DECTEK, 1184d522f475Smrg DP_PRN_EXTENT, 1185d522f475Smrg DP_PRN_FORMFEED, 1186d522f475Smrg DP_X_ALTSCRN, 1187d522f475Smrg DP_X_DECCOLM, 1188d522f475Smrg DP_X_LOGGING, 1189d522f475Smrg DP_X_MARGIN, 1190d522f475Smrg DP_X_MORE, 1191d522f475Smrg DP_X_MOUSE, 1192d522f475Smrg DP_X_REVWRAP, 1193d522f475Smrg DP_X_X10MSE, 1194d522f475Smrg#if OPT_BLINK_CURS 1195d522f475Smrg DP_CRS_BLINK, 1196d522f475Smrg#endif 1197d522f475Smrg#if OPT_FOCUS_EVENT 1198d522f475Smrg DP_X_FOCUS, 1199d522f475Smrg#endif 1200d522f475Smrg#if OPT_TOOLBAR 1201d522f475Smrg DP_TOOLBAR, 1202d522f475Smrg#endif 1203d522f475Smrg DP_LAST 1204d522f475Smrg} SaveModes; 1205d522f475Smrg 12060d92cbfdSchristos#define DoSM(code,value) screen->save_modes[code] = (unsigned) (value) 12070d92cbfdSchristos#define DoRM(code,value) value = (Boolean) screen->save_modes[code] 12080d92cbfdSchristos#define DoRM0(code,value) value = screen->save_modes[code] 1209d522f475Smrg 1210d522f475Smrg /* index into vt_shell[] or tek_shell[] */ 1211d522f475Smrgtypedef enum { 1212d522f475Smrg noMenu = -1, 1213d522f475Smrg mainMenu, 1214d522f475Smrg vtMenu, 1215d522f475Smrg fontMenu, 1216d522f475Smrg tekMenu 1217d522f475Smrg} MenuIndex; 1218d522f475Smrg 1219d522f475Smrg#define NUM_POPUP_MENUS 4 1220d522f475Smrg 1221d522f475Smrg#if OPT_COLOR_RES 1222d522f475Smrgtypedef struct { 1223d522f475Smrg String resource; 1224d522f475Smrg Pixel value; 1225d522f475Smrg int mode; 1226d522f475Smrg} ColorRes; 1227d522f475Smrg#else 1228d522f475Smrg#define ColorRes Pixel 1229d522f475Smrg#endif 1230d522f475Smrg 1231d522f475Smrgtypedef struct { 1232d522f475Smrg unsigned which; /* must have NCOLORS bits */ 1233d522f475Smrg Pixel colors[NCOLORS]; 1234d522f475Smrg char *names[NCOLORS]; 1235d522f475Smrg} ScrnColors; 1236d522f475Smrg 1237d522f475Smrgtypedef struct { 1238d522f475Smrg Boolean saved; 1239d522f475Smrg int row; 1240d522f475Smrg int col; 1241d522f475Smrg unsigned flags; /* VTxxx saves graphics rendition */ 12420d92cbfdSchristos Char curgl; 12430d92cbfdSchristos Char curgr; 12440d92cbfdSchristos Char gsets[4]; 1245d522f475Smrg#if OPT_ISO_COLORS 1246d522f475Smrg int cur_foreground; /* current foreground color */ 1247d522f475Smrg int cur_background; /* current background color */ 1248d522f475Smrg int sgr_foreground; /* current SGR foreground color */ 1249d522f475Smrg int sgr_background; /* current SGR background color */ 1250d522f475Smrg Boolean sgr_extended; /* SGR set with extended codes? */ 1251d522f475Smrg#endif 1252d522f475Smrg} SavedCursor; 1253d522f475Smrg 1254d522f475Smrg#define SAVED_CURSORS 2 1255d522f475Smrg 1256d522f475Smrgtypedef struct { 1257d522f475Smrg int width; /* if > 0, width of scrollbar, */ 1258d522f475Smrg /* and scrollbar is showing */ 1259d522f475Smrg Boolean rv_cached; /* see ScrollBarReverseVideo */ 1260d522f475Smrg int rv_active; /* ...current reverse-video */ 1261d522f475Smrg Pixel bg; /* ...cached background color */ 1262d522f475Smrg Pixel fg; /* ...cached foreground color */ 1263d522f475Smrg Pixel bdr; /* ...cached border color */ 1264d522f475Smrg Pixmap bdpix; /* ...cached border pixmap */ 1265d522f475Smrg} SbInfo; 1266d522f475Smrg 1267d522f475Smrg#if OPT_TOOLBAR 1268d522f475Smrgtypedef struct { 1269d522f475Smrg Widget menu_bar; /* toolbar, if initialized */ 1270d522f475Smrg Dimension menu_height; /* ...and its height */ 1271d522f475Smrg Dimension menu_border; /* ...and its border */ 1272d522f475Smrg} TbInfo; 1273d522f475Smrg#define VT100_TB_INFO(name) screen.fullVwin.tb_info.name 1274d522f475Smrg#endif 1275d522f475Smrg 1276d522f475Smrgtypedef struct { 1277d522f475Smrg Window window; /* X window id */ 1278d522f475Smrg int width; /* width of columns */ 1279d522f475Smrg int height; /* height of rows */ 1280d522f475Smrg Dimension fullwidth; /* full width of window */ 1281d522f475Smrg Dimension fullheight; /* full height of window */ 1282d522f475Smrg int f_width; /* width of fonts in pixels */ 1283d522f475Smrg int f_height; /* height of fonts in pixels */ 1284d522f475Smrg int f_ascent; /* ascent of font in pixels */ 1285d522f475Smrg int f_descent; /* descent of font in pixels */ 1286d522f475Smrg SbInfo sb_info; 1287d522f475Smrg#if OPT_TOOLBAR 1288d522f475Smrg Boolean active; /* true if toolbars are used */ 1289d522f475Smrg TbInfo tb_info; /* toolbar information */ 1290d522f475Smrg#endif 1291d522f475Smrg} VTwin; 1292d522f475Smrg 1293d522f475Smrgtypedef struct { 1294d522f475Smrg Window window; /* X window id */ 1295d522f475Smrg int width; /* width of columns */ 1296d522f475Smrg int height; /* height of rows */ 1297d522f475Smrg Dimension fullwidth; /* full width of window */ 1298d522f475Smrg Dimension fullheight; /* full height of window */ 1299d522f475Smrg double tekscale; /* scale factor Tek -> vs100 */ 1300d522f475Smrg} TKwin; 1301d522f475Smrg 1302d522f475Smrgtypedef struct { 1303d522f475Smrg/* These parameters apply to both windows */ 1304d522f475Smrg Display *display; /* X display for screen */ 1305d522f475Smrg int respond; /* socket for responses 1306d522f475Smrg (position report, etc.) */ 1307d522f475Smrg/* These parameters apply to VT100 window */ 1308d522f475Smrg IChar unparse_bfr[256]; 1309d522f475Smrg unsigned unparse_len; 1310d522f475Smrg 1311d522f475Smrg#if OPT_TCAP_QUERY 1312d522f475Smrg int tc_query_code; 1313d522f475Smrg Bool tc_query_fkey; 1314d522f475Smrg#endif 1315d522f475Smrg pid_t pid; /* pid of process on far side */ 1316d522f475Smrg uid_t uid; /* user id of actual person */ 1317d522f475Smrg gid_t gid; /* group id of actual person */ 1318d522f475Smrg ColorRes Tcolors[NCOLORS]; /* terminal colors */ 1319d522f475Smrg#if OPT_HIGHLIGHT_COLOR 1320d522f475Smrg Boolean hilite_color; /* hilite colors override */ 1321d522f475Smrg Boolean hilite_reverse; /* hilite overrides reverse */ 1322d522f475Smrg#endif 1323d522f475Smrg#if OPT_ISO_COLORS 1324d522f475Smrg ColorRes Acolors[MAXCOLORS]; /* ANSI color emulation */ 1325d522f475Smrg int veryBoldColors; /* modifier for boldColors */ 1326d522f475Smrg Boolean boldColors; /* can we make bold colors? */ 1327d522f475Smrg Boolean colorMode; /* are we using color mode? */ 1328d522f475Smrg Boolean colorULMode; /* use color for underline? */ 1329d522f475Smrg Boolean italicULMode; /* italic font for underline? */ 1330d522f475Smrg Boolean colorBDMode; /* use color for bold? */ 1331d522f475Smrg Boolean colorBLMode; /* use color for blink? */ 1332d522f475Smrg Boolean colorRVMode; /* use color for reverse? */ 1333d522f475Smrg Boolean colorAttrMode; /* prefer colorUL/BD to SGR */ 1334d522f475Smrg#endif 1335d522f475Smrg#if OPT_DEC_CHRSET 1336d522f475Smrg Boolean font_doublesize;/* enable font-scaling */ 1337d522f475Smrg int cache_doublesize;/* limit of our cache */ 1338d522f475Smrg Char cur_chrset; /* character-set index & code */ 1339d522f475Smrg int fonts_used; /* count items in double_fonts */ 1340d522f475Smrg XTermFonts double_fonts[NUM_CHRSET]; 1341d522f475Smrg#endif 1342d522f475Smrg#if OPT_DEC_RECTOPS 1343d522f475Smrg int cur_decsace; /* parameter for DECSACE */ 1344d522f475Smrg#endif 1345d522f475Smrg#if OPT_WIDE_CHARS 1346d522f475Smrg Boolean wide_chars; /* true when 16-bit chars */ 1347d522f475Smrg Boolean vt100_graphics; /* true to allow vt100-graphics */ 1348d522f475Smrg Boolean utf8_inparse; /* true to enable UTF-8 parser */ 1349d522f475Smrg int utf8_mode; /* use UTF-8 decode/encode: 0-2 */ 1350d522f475Smrg int max_combining; /* maximum # of combining chars */ 1351d522f475Smrg Boolean utf8_latin1; /* use UTF-8 with Latin-1 bias */ 1352d522f475Smrg Boolean utf8_title; /* use UTF-8 titles */ 1353d522f475Smrg int latin9_mode; /* poor man's luit, latin9 */ 1354d522f475Smrg int unicode_font; /* font uses unicode encoding */ 1355d522f475Smrg int utf_count; /* state of utf_char */ 1356d522f475Smrg IChar utf_char; /* in-progress character */ 1357d522f475Smrg int last_written_col; 1358d522f475Smrg int last_written_row; 1359d522f475Smrg XChar2b *draw_buf; /* drawXtermText() data */ 1360d522f475Smrg Cardinal draw_len; /* " " " */ 1361d522f475Smrg#endif 1362d522f475Smrg#if OPT_BROKEN_OSC 1363d522f475Smrg Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */ 1364d522f475Smrg#endif 1365d522f475Smrg#if OPT_BROKEN_ST 1366d522f475Smrg Boolean brokenStringTerm; /* true to match old OSC parse */ 1367d522f475Smrg#endif 1368d522f475Smrg#if OPT_C1_PRINT || OPT_WIDE_CHARS 1369d522f475Smrg Boolean c1_printable; /* true if we treat C1 as print */ 1370d522f475Smrg#endif 1371d522f475Smrg int border; /* inner border */ 1372d522f475Smrg int scrollBarBorder; /* scrollBar border */ 13730d92cbfdSchristos long event_mask; 13740d92cbfdSchristos unsigned send_mouse_pos; /* user wants mouse transition */ 1375d522f475Smrg /* and position information */ 1376d522f475Smrg Boolean send_focus_pos; /* user wants focus in/out info */ 1377d522f475Smrg Boolean quiet_grab; /* true if no cursor change on focus */ 1378d522f475Smrg#if OPT_PASTE64 1379d522f475Smrg int base64_paste; /* set to send paste in base64 */ 1380d522f475Smrg int base64_final; /* string-terminator for paste */ 1381d522f475Smrg /* _qWriteSelectionData expects these to be initialized to zero. 1382d522f475Smrg * base64_flush() is the last step of the conversion, it clears these 1383d522f475Smrg * variables. 1384d522f475Smrg */ 13850d92cbfdSchristos unsigned base64_accu; 13860d92cbfdSchristos unsigned base64_count; 13870d92cbfdSchristos unsigned base64_pad; 1388d522f475Smrg#endif 1389d522f475Smrg#if OPT_READLINE 1390d522f475Smrg unsigned click1_moves; 1391d522f475Smrg unsigned paste_moves; 1392d522f475Smrg unsigned dclick3_deletes; 1393d522f475Smrg unsigned paste_brackets; 1394d522f475Smrg unsigned paste_quotes; 1395d522f475Smrg unsigned paste_literal_nl; 1396d522f475Smrg#endif /* OPT_READLINE */ 1397d522f475Smrg#if OPT_DEC_LOCATOR 1398d522f475Smrg Boolean locator_reset; /* turn mouse off after 1 report? */ 1399d522f475Smrg Boolean locator_pixels; /* report in pixels? */ 1400d522f475Smrg /* if false, report in cells */ 14010d92cbfdSchristos unsigned locator_events; /* what events to report */ 1402d522f475Smrg Boolean loc_filter; /* is filter rectangle active? */ 1403d522f475Smrg int loc_filter_top; /* filter rectangle for DEC Locator */ 1404d522f475Smrg int loc_filter_left; 1405d522f475Smrg int loc_filter_bottom; 1406d522f475Smrg int loc_filter_right; 1407d522f475Smrg#endif /* OPT_DEC_LOCATOR */ 1408d522f475Smrg int mouse_button; /* current button pressed */ 1409d522f475Smrg int mouse_row; /* ...and its row */ 1410d522f475Smrg int mouse_col; /* ...and its column */ 1411d522f475Smrg int select; /* xterm selected */ 1412d522f475Smrg Boolean bellOnReset; /* bellOnReset */ 1413d522f475Smrg Boolean visualbell; /* visual bell mode */ 1414d522f475Smrg Boolean poponbell; /* pop on bell mode */ 14150d92cbfdSchristos 14160d92cbfdSchristos Boolean allowFontOps; /* FontOps mode */ 1417d522f475Smrg Boolean allowSendEvents;/* SendEvent mode */ 14180d92cbfdSchristos Boolean allowTcapOps; /* TcapOps mode */ 1419d522f475Smrg Boolean allowTitleOps; /* TitleOps mode */ 1420d522f475Smrg Boolean allowWindowOps; /* WindowOps mode */ 14210d92cbfdSchristos 14220d92cbfdSchristos Boolean allowFontOp0; /* initial FontOps mode */ 1423d522f475Smrg Boolean allowSendEvent0;/* initial SendEvent mode */ 14240d92cbfdSchristos Boolean allowTcapOp0; /* initial TcapOps mode */ 1425d522f475Smrg Boolean allowTitleOp0; /* initial TitleOps mode */ 1426d522f475Smrg Boolean allowWindowOp0; /* initial WindowOps mode */ 14270d92cbfdSchristos 1428d522f475Smrg Boolean awaitInput; /* select-timeout mode */ 1429d522f475Smrg Boolean grabbedKbd; /* keyboard is grabbed */ 1430d522f475Smrg#ifdef ALLOWLOGGING 1431d522f475Smrg int logging; /* logging mode */ 1432d522f475Smrg int logfd; /* file descriptor of log */ 1433d522f475Smrg char *logfile; /* log file name */ 1434d522f475Smrg Char *logstart; /* current start of log buffer */ 1435d522f475Smrg#endif 1436d522f475Smrg int inhibit; /* flags for inhibiting changes */ 1437d522f475Smrg 1438d522f475Smrg/* VT window parameters */ 1439d522f475Smrg Boolean Vshow; /* VT window showing */ 1440d522f475Smrg VTwin fullVwin; 1441d522f475Smrg#ifndef NO_ACTIVE_ICON 1442d522f475Smrg VTwin iconVwin; 1443d522f475Smrg VTwin *whichVwin; 1444d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1445d522f475Smrg 1446d522f475Smrg int pointer_mode; /* when to use hidden_cursor */ 1447d522f475Smrg Boolean hide_pointer; /* true to use "hidden_cursor" */ 1448d522f475Smrg Cursor pointer_cursor; /* pointer cursor in window */ 1449d522f475Smrg Cursor hidden_cursor; /* hidden cursor in window */ 1450d522f475Smrg 1451d522f475Smrg String answer_back; /* response to ENQ */ 1452d522f475Smrg String printer_command; /* pipe/shell command string */ 1453d522f475Smrg Boolean printer_autoclose; /* close printer when offline */ 1454d522f475Smrg Boolean printer_extent; /* print complete page */ 1455d522f475Smrg Boolean printer_formfeed; /* print formfeed per function */ 1456d522f475Smrg int printer_controlmode; /* 0=off, 1=auto, 2=controller */ 1457d522f475Smrg int print_attributes; /* 0=off, 1=normal, 2=color */ 1458d522f475Smrg 1459d522f475Smrg Boolean fnt_prop; /* true if proportional fonts */ 1460d522f475Smrg Boolean fnt_boxes; /* true if font has box-chars */ 1461d522f475Smrg#if OPT_BOX_CHARS 1462d522f475Smrg Boolean force_box_chars;/* true if we assume that */ 1463d522f475Smrg Boolean force_all_chars;/* true to outline missing chars*/ 1464d522f475Smrg#endif 1465d522f475Smrg Dimension fnt_wide; 1466d522f475Smrg Dimension fnt_high; 1467d522f475Smrg XTermFonts fnts[fMAX]; /* normal/bold/etc for terminal */ 1468d522f475Smrg Boolean free_bold_box; /* same_font_size's austerity */ 1469d522f475Smrg#ifndef NO_ACTIVE_ICON 1470d522f475Smrg XTermFonts fnt_icon; /* icon font */ 1471d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1472d522f475Smrg int enbolden; /* overstrike for bold font */ 1473d522f475Smrg XPoint *box; /* draw unselected cursor */ 1474d522f475Smrg 1475d522f475Smrg int cursor_state; /* ON, OFF, or BLINKED_OFF */ 1476d522f475Smrg int cursor_busy; /* do not redraw... */ 14770d92cbfdSchristos Boolean cursor_underline; /* true if cursor is in underline mode */ 1478d522f475Smrg#if OPT_BLINK_CURS 1479d522f475Smrg Boolean cursor_blink; /* cursor blink enable */ 1480d522f475Smrg Boolean cursor_blink_res; /* initial cursor blink value */ 1481d522f475Smrg Boolean cursor_blink_esc; /* cursor blink escape-state */ 1482d522f475Smrg#endif 1483d522f475Smrg#if OPT_BLINK_TEXT 1484d522f475Smrg Boolean blink_as_bold; /* text blink disable */ 1485d522f475Smrg#endif 1486d522f475Smrg#if OPT_BLINK_CURS || OPT_BLINK_TEXT 1487d522f475Smrg int blink_state; /* ON, OFF, or BLINKED_OFF */ 1488d522f475Smrg int blink_on; /* cursor on time (msecs) */ 1489d522f475Smrg int blink_off; /* cursor off time (msecs) */ 1490d522f475Smrg XtIntervalId blink_timer; /* timer-id for cursor-proc */ 1491d522f475Smrg#endif 1492d522f475Smrg#if OPT_ZICONBEEP 1493d522f475Smrg Boolean zIconBeep_flagged; /* True if icon name was changed */ 1494d522f475Smrg#endif /* OPT_ZICONBEEP */ 1495d522f475Smrg int cursor_GC; /* see ShowCursor() */ 1496d522f475Smrg int cursor_set; /* requested state */ 1497d522f475Smrg CELL cursorp; /* previous cursor row/column */ 1498d522f475Smrg int cur_col; /* current cursor column */ 1499d522f475Smrg int cur_row; /* current cursor row */ 1500d522f475Smrg int max_col; /* rightmost column */ 1501d522f475Smrg int max_row; /* bottom row */ 1502d522f475Smrg int top_marg; /* top line of scrolling region */ 1503d522f475Smrg int bot_marg; /* bottom line of " " */ 1504d522f475Smrg Widget scrollWidget; /* pointer to scrollbar struct */ 1505d522f475Smrg /* 1506d522f475Smrg * Indices used to keep track of the top of the vt100 window and 1507d522f475Smrg * the saved lines, taking scrolling into account. 1508d522f475Smrg */ 1509d522f475Smrg int topline; /* line number of top, <= 0 */ 1510d522f475Smrg int savedlines; /* number of lines that've been saved */ 1511d522f475Smrg int savelines; /* number of lines off top to save */ 1512d522f475Smrg int scroll_amt; /* amount to scroll */ 1513d522f475Smrg int refresh_amt; /* amount to refresh */ 1514d522f475Smrg /* 1515d522f475Smrg * Pointer to the current visible buffer, e.g., allbuf or altbuf. 1516d522f475Smrg */ 1517d522f475Smrg ScrnBuf visbuf; /* ptr to visible screen buf (main) */ 1518d522f475Smrg /* 1519d522f475Smrg * Data for the normal buffer, which may have saved lines to which 1520d522f475Smrg * the user can scroll. 1521d522f475Smrg */ 1522d522f475Smrg ScrnBuf allbuf; /* screen buffer (may include 1523d522f475Smrg lines scrolled off top) */ 1524d522f475Smrg Char *sbuf_address; /* main screen memory address */ 1525d522f475Smrg Boolean is_running; /* true when buffers are legal */ 1526d522f475Smrg /* 1527d522f475Smrg * Data for the alternate buffer. 1528d522f475Smrg */ 1529d522f475Smrg ScrnBuf altbuf; /* alternate screen buffer */ 1530d522f475Smrg Char *abuf_address; /* alternate screen memory address */ 1531d522f475Smrg Boolean alternate; /* true if using alternate buf */ 1532d522f475Smrg /* 1533d522f475Smrg * Workspace used for screen operations. 1534d522f475Smrg */ 1535d522f475Smrg Char **save_ptr; /* workspace for save-pointers */ 1536d522f475Smrg size_t save_len; /* ...and its length */ 1537d522f475Smrg 1538d522f475Smrg int scrolllines; /* number of lines to button scroll */ 1539d522f475Smrg Boolean scrollttyoutput; /* scroll to bottom on tty output */ 1540d522f475Smrg Boolean scrollkey; /* scroll to bottom on key */ 1541d522f475Smrg Boolean cursor_moved; /* scrolling makes cursor move */ 1542d522f475Smrg 15430d92cbfdSchristos Boolean do_wrap; /* true if cursor in last column 1544d522f475Smrg and character just output */ 1545d522f475Smrg 1546d522f475Smrg int incopy; /* 0 idle; 1 XCopyArea issued; 1547d522f475Smrg -1 first GraphicsExpose seen, 1548d522f475Smrg but last not seen */ 1549d522f475Smrg int copy_src_x; /* params from last XCopyArea ... */ 1550d522f475Smrg int copy_src_y; 1551d522f475Smrg unsigned int copy_width; 1552d522f475Smrg unsigned int copy_height; 1553d522f475Smrg int copy_dest_x; 1554d522f475Smrg int copy_dest_y; 1555d522f475Smrg 1556d522f475Smrg Boolean c132; /* allow change to 132 columns */ 1557d522f475Smrg Boolean curses; /* kludge line wrap for more */ 1558d522f475Smrg Boolean hp_ll_bc; /* kludge HP-style ll for xdb */ 1559d522f475Smrg Boolean marginbell; /* true if margin bell on */ 1560d522f475Smrg int nmarginbell; /* columns from right margin */ 1561d522f475Smrg int bellarmed; /* cursor below bell margin */ 1562d522f475Smrg Boolean multiscroll; /* true if multi-scroll */ 1563d522f475Smrg int scrolls; /* outstanding scroll count, 1564d522f475Smrg used only with multiscroll */ 1565d522f475Smrg SavedCursor sc[SAVED_CURSORS]; /* data for restore cursor */ 15660d92cbfdSchristos unsigned save_modes[DP_LAST]; /* save dec/xterm private modes */ 1567d522f475Smrg 1568d522f475Smrg /* Improved VT100 emulation stuff. */ 1569d522f475Smrg String keyboard_dialect; /* default keyboard dialect */ 15700d92cbfdSchristos Char gsets[4]; /* G0 through G3. */ 1571d522f475Smrg Char curgl; /* Current GL setting. */ 1572d522f475Smrg Char curgr; /* Current GR setting. */ 1573d522f475Smrg Char curss; /* Current single shift. */ 1574d522f475Smrg String term_id; /* resource for terminal_id */ 1575d522f475Smrg int terminal_id; /* 100=vt100, 220=vt220, etc. */ 1576d522f475Smrg int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */ 1577d522f475Smrg int ansi_level; /* levels 1,2,3 */ 1578d522f475Smrg int protected_mode; /* 0=off, 1=DEC, 2=ISO */ 1579d522f475Smrg Boolean always_bold_mode; /* compare normal/bold font */ 1580d522f475Smrg Boolean always_highlight; /* whether to highlight cursor */ 1581d522f475Smrg Boolean bold_mode; /* use bold font or overstrike */ 1582d522f475Smrg Boolean delete_is_del; /* true for compatible Delete key */ 1583d522f475Smrg Boolean jumpscroll; /* whether we should jumpscroll */ 1584d522f475Smrg Boolean old_fkeys; /* true for compatible fkeys */ 1585d522f475Smrg Boolean underline; /* whether to underline text */ 1586d522f475Smrg 1587d522f475Smrg#if OPT_MAXIMIZE 1588d522f475Smrg Boolean restore_data; 1589d522f475Smrg int restore_x; 1590d522f475Smrg int restore_y; 1591d522f475Smrg unsigned restore_width; 1592d522f475Smrg unsigned restore_height; 1593d522f475Smrg#endif 1594d522f475Smrg 1595d522f475Smrg#if OPT_VT52_MODE 1596d522f475Smrg int vt52_save_level; /* save-area for DECANM */ 15970d92cbfdSchristos Char vt52_save_curgl; 15980d92cbfdSchristos Char vt52_save_curgr; 15990d92cbfdSchristos Char vt52_save_curss; 16000d92cbfdSchristos Char vt52_save_gsets[4]; 1601d522f475Smrg#endif 1602d522f475Smrg /* Testing */ 1603d522f475Smrg#if OPT_XMC_GLITCH 1604d522f475Smrg unsigned xmc_glitch; /* # of spaces to pad on SGR's */ 1605d522f475Smrg int xmc_attributes; /* attrs that make a glitch */ 1606d522f475Smrg Boolean xmc_inline; /* SGR's propagate only to eol */ 1607d522f475Smrg Boolean move_sgr_ok; /* SGR is reset on move */ 1608d522f475Smrg#endif 1609d522f475Smrg 1610d522f475Smrg /* 1611d522f475Smrg * Bell 1612d522f475Smrg */ 1613d522f475Smrg int visualBellDelay; /* msecs to delay for visibleBell */ 1614d522f475Smrg int bellSuppressTime; /* msecs after Bell before another allowed */ 1615d522f475Smrg Boolean bellInProgress; /* still ringing/flashing prev bell? */ 1616d522f475Smrg Boolean bellIsUrgent; /* set XUrgency WM hint on bell */ 1617d522f475Smrg /* 1618d522f475Smrg * Select/paste state. 1619d522f475Smrg */ 1620d522f475Smrg Boolean selectToClipboard; /* primary vs clipboard */ 1621d522f475Smrg String *mappedSelect; /* mapping for "SELECT" to "PRIMARY" */ 1622d522f475Smrg 1623d522f475Smrg Boolean waitingForTrackInfo; 1624d522f475Smrg int numberOfClicks; 1625d522f475Smrg int maxClicks; 1626d522f475Smrg int multiClickTime; /* time between multiclick selects */ 1627d522f475Smrg SelectUnit selectUnit; 1628d522f475Smrg SelectUnit selectMap[NSELECTUNITS]; 1629d522f475Smrg String onClick[NSELECTUNITS + 1]; 1630d522f475Smrg 1631d522f475Smrg char *charClass; /* for overriding word selection */ 1632d522f475Smrg Boolean cutNewline; /* whether or not line cut has \n */ 1633d522f475Smrg Boolean cutToBeginningOfLine; /* line cuts to BOL? */ 1634d522f475Smrg Boolean highlight_selection; /* controls appearance of selection */ 1635d522f475Smrg Boolean trim_selection; /* controls trimming of selection */ 1636d522f475Smrg Boolean i18nSelections; 1637d522f475Smrg Boolean brokenSelections; 1638d522f475Smrg Boolean keepSelection; /* do not lose selection on output */ 1639d522f475Smrg Boolean replyToEmacs; /* Send emacs escape code when done selecting or extending? */ 1640d522f475Smrg Char *selection_data; /* the current selection */ 1641d522f475Smrg int selection_size; /* size of allocated buffer */ 16420d92cbfdSchristos unsigned long selection_length; /* number of significant bytes */ 1643d522f475Smrg EventMode eventMode; 1644d522f475Smrg Time selection_time; /* latest event timestamp */ 1645d522f475Smrg Time lastButtonUpTime; 1646d522f475Smrg unsigned lastButton; 1647d522f475Smrg 1648d522f475Smrg CELL rawPos; /* raw position for selection start */ 1649d522f475Smrg CELL startRaw; /* area before selectUnit processing */ 1650d522f475Smrg CELL endRaw; /* " " */ 1651d522f475Smrg CELL startSel; /* area after selectUnit processing */ 1652d522f475Smrg CELL endSel; /* " " */ 1653d522f475Smrg CELL startH; /* start highlighted text */ 1654d522f475Smrg CELL endH; /* end highlighted text */ 1655d522f475Smrg CELL saveStartW; /* saved WORD state, for LINE */ 1656d522f475Smrg CELL startExt; /* Start, end of extension */ 1657d522f475Smrg CELL endExt; /* " " */ 1658d522f475Smrg CELL saveStartR; /* Saved values of raw selection for extend to restore to */ 1659d522f475Smrg CELL saveEndR; /* " " */ 1660d522f475Smrg int startHCoord, endHCoord; 1661d522f475Smrg int firstValidRow; /* Valid rows for selection clipping */ 1662d522f475Smrg int lastValidRow; /* " " */ 1663d522f475Smrg 1664d522f475Smrg Atom* selection_atoms; /* which selections we own */ 1665d522f475Smrg Cardinal sel_atoms_size; /* how many atoms allocated */ 1666d522f475Smrg Cardinal selection_count; /* how many atoms in use */ 1667d522f475Smrg#if OPT_SELECT_REGEX 1668d522f475Smrg char * selectExpr[NSELECTUNITS]; 1669d522f475Smrg#endif 1670d522f475Smrg /* 1671d522f475Smrg * Input/output state. 1672d522f475Smrg */ 1673d522f475Smrg Boolean input_eight_bits;/* use 8th bit instead of ESC prefix */ 1674d522f475Smrg Boolean output_eight_bits; /* honor all bits or strip */ 1675d522f475Smrg Boolean control_eight_bits; /* send CSI as 8-bits */ 1676d522f475Smrg Boolean backarrow_key; /* backspace/delete */ 1677d522f475Smrg Boolean alt_is_not_meta; /* use both Alt- and Meta-key */ 1678d522f475Smrg Boolean alt_sends_esc; /* Alt-key sends ESC prefix */ 1679d522f475Smrg Boolean meta_sends_esc; /* Meta-key sends ESC prefix */ 1680d522f475Smrg /* 1681d522f475Smrg * Fonts 1682d522f475Smrg */ 1683d522f475Smrg Pixmap menu_item_bitmap; /* mask for checking items */ 1684d522f475Smrg String initial_font; 1685d522f475Smrg String menu_font_names[NMENUFONTS][fMAX]; 1686d522f475Smrg#define MenuFontName(n) menu_font_names[n][fNorm] 1687d522f475Smrg long menu_font_sizes[NMENUFONTS]; 1688d522f475Smrg int menu_font_number; 1689d522f475Smrg#if OPT_CLIP_BOLD 1690d522f475Smrg Boolean use_clipping; 1691d522f475Smrg#endif 1692d522f475Smrg void * main_cgs_cache; 1693d522f475Smrg#ifndef NO_ACTIVE_ICON 1694d522f475Smrg void * icon_cgs_cache; 1695d522f475Smrg#endif 1696d522f475Smrg#if OPT_RENDERFONT 1697d522f475Smrg XftFont * renderFontNorm[NMENUFONTS]; 1698d522f475Smrg XftFont * renderFontBold[NMENUFONTS]; 1699d522f475Smrg XftFont * renderFontItal[NMENUFONTS]; 1700d522f475Smrg XftFont * renderWideNorm[NMENUFONTS]; 1701d522f475Smrg XftFont * renderWideBold[NMENUFONTS]; 1702d522f475Smrg XftFont * renderWideItal[NMENUFONTS]; 1703d522f475Smrg XftDraw * renderDraw; 1704d522f475Smrg#endif 1705d522f475Smrg#if OPT_INPUT_METHOD 1706d522f475Smrg XIM xim; 1707d522f475Smrg XFontSet fs; /* fontset for XIM preedit */ 1708d522f475Smrg int fs_ascent; /* ascent of fs */ 1709d522f475Smrg#endif 1710d522f475Smrg XIC xic; /* this is used even without XIM */ 1711d522f475Smrg#if OPT_DABBREV 1712d522f475Smrg int dabbrev_working; /* nonzero during dabbrev process */ 1713d522f475Smrg unsigned char dabbrev_erase_char; /* used for deleting inserted completion */ 1714d522f475Smrg#endif 1715d522f475Smrg char tcapbuf[TERMCAP_SIZE]; 1716d522f475Smrg#if OPT_TCAP_FKEYS 1717d522f475Smrg char ** tcap_fkeys; 1718d522f475Smrg char tcap_area[TERMCAP_SIZE]; 1719d522f475Smrg#endif 1720d522f475Smrg} TScreen; 1721d522f475Smrg 1722d522f475Smrgtypedef struct _TekPart { 1723d522f475Smrg XFontStruct * Tfont[TEKNUMFONTS]; 1724d522f475Smrg int tobaseline[TEKNUMFONTS]; /* top-baseline, each font */ 1725d522f475Smrg char * initial_font; /* large, 2, 3, small */ 1726d522f475Smrg char * gin_terminator_str; /* ginTerminator resource */ 1727d522f475Smrg#if OPT_TOOLBAR 1728d522f475Smrg TbInfo tb_info; /* toolbar information */ 1729d522f475Smrg#endif 1730d522f475Smrg} TekPart; 1731d522f475Smrg 1732d522f475Smrg/* Tektronix window parameters */ 1733d522f475Smrgtypedef struct _TekScreen { 1734d522f475Smrg GC TnormalGC; /* normal painting */ 1735d522f475Smrg GC TcursorGC; /* normal cursor painting */ 1736d522f475Smrg 1737d522f475Smrg Boolean waitrefresh; /* postpone refresh */ 1738d522f475Smrg TKwin fullTwin; 1739d522f475Smrg#ifndef NO_ACTIVE_ICON 1740d522f475Smrg TKwin iconTwin; 1741d522f475Smrg TKwin *whichTwin; 1742d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1743d522f475Smrg 1744d522f475Smrg Cursor arrow; /* arrow cursor */ 1745d522f475Smrg GC linepat[TEKNUMLINES]; /* line patterns */ 1746d522f475Smrg int cur_X; /* current x */ 1747d522f475Smrg int cur_Y; /* current y */ 1748d522f475Smrg Tmodes cur; /* current tek modes */ 1749d522f475Smrg Tmodes page; /* starting tek modes on page */ 1750d522f475Smrg int margin; /* 0 -> margin 1, 1 -> margin 2 */ 1751d522f475Smrg int pen; /* current Tektronix pen 0=up, 1=dn */ 1752d522f475Smrg char *TekGIN; /* nonzero if Tektronix GIN mode*/ 1753d522f475Smrg int gin_terminator; /* Tek strap option */ 1754d522f475Smrg char tcapbuf[TERMCAP_SIZE]; 1755d522f475Smrg} TekScreen; 1756d522f475Smrg 1757d522f475Smrg#if OPT_READLINE 1758d522f475Smrg#define SCREEN_FLAG(screenp,f) (1&(screenp)->f) 1759d522f475Smrg#define SCREEN_FLAG_set(screenp,f) ((screenp)->f |= 1) 1760d522f475Smrg#define SCREEN_FLAG_unset(screenp,f) ((screenp)->f &= ~1L) 1761d522f475Smrg#define SCREEN_FLAG_save(screenp,f) \ 1762d522f475Smrg ((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f)) 1763d522f475Smrg#define SCREEN_FLAG_restore(screenp,f) ((screenp)->f = (((screenp)->f)>>1)) 1764d522f475Smrg#else 1765d522f475Smrg#define SCREEN_FLAG(screenp,f) (0) 1766d522f475Smrg#endif 1767d522f475Smrg 1768d522f475Smrg/* meaning of bits in screen.select flag */ 1769d522f475Smrg#define INWINDOW 01 /* the mouse is in one of the windows */ 1770d522f475Smrg#define FOCUS 02 /* one of the windows is the focus window */ 1771d522f475Smrg 1772d522f475Smrg#define MULTICLICKTIME 250 /* milliseconds */ 1773d522f475Smrg 1774d522f475Smrgtypedef enum { 1775d522f475Smrg keyboardIsLegacy, /* bogus vt220 codes for F1-F4, etc. */ 1776d522f475Smrg keyboardIsDefault, 1777d522f475Smrg keyboardIsHP, 1778d522f475Smrg keyboardIsSCO, 1779d522f475Smrg keyboardIsSun, 1780d522f475Smrg keyboardIsTermcap, 1781d522f475Smrg keyboardIsVT220 1782d522f475Smrg} xtermKeyboardType; 1783d522f475Smrg 1784d522f475Smrgtypedef enum { /* legal values for screen.pointer_mode */ 1785d522f475Smrg pNever = 0, 1786d522f475Smrg pNoMouse = 1, 1787d522f475Smrg pAlways = 2 1788d522f475Smrg} pointerModeTypes; 1789d522f475Smrg 1790d522f475Smrgtypedef enum { /* legal values for screen.utf8_mode */ 1791d522f475Smrg uFalse = 0, 1792d522f475Smrg uTrue = 1, 1793d522f475Smrg uAlways = 2, 1794d522f475Smrg uDefault = 3 1795d522f475Smrg} utf8ModeTypes; 1796d522f475Smrg 1797d522f475Smrg#if OPT_HP_FUNC_KEYS 1798d522f475Smrg#define NAME_HP_KT " hp" 1799d522f475Smrg#else 1800d522f475Smrg#define NAME_HP_KT /*nothing*/ 1801d522f475Smrg#endif 1802d522f475Smrg 1803d522f475Smrg#if OPT_SCO_FUNC_KEYS 1804d522f475Smrg#define NAME_SCO_KT " sco" 1805d522f475Smrg#else 1806d522f475Smrg#define NAME_SCO_KT /*nothing*/ 1807d522f475Smrg#endif 1808d522f475Smrg 1809d522f475Smrg#if OPT_SUN_FUNC_KEYS 1810d522f475Smrg#define NAME_SUN_KT " sun" 1811d522f475Smrg#else 1812d522f475Smrg#define NAME_SUN_KT /*nothing*/ 1813d522f475Smrg#endif 1814d522f475Smrg 1815d522f475Smrg#if OPT_SUNPC_KBD 1816d522f475Smrg#define NAME_VT220_KT " vt220" 1817d522f475Smrg#else 1818d522f475Smrg#define NAME_VT220_KT /*nothing*/ 1819d522f475Smrg#endif 1820d522f475Smrg 1821d522f475Smrg#if OPT_TCAP_FKEYS 1822d522f475Smrg#define NAME_TCAP_KT " tcap" 1823d522f475Smrg#else 1824d522f475Smrg#define NAME_TCAP_KT /*nothing*/ 1825d522f475Smrg#endif 1826d522f475Smrg 1827d522f475Smrg#define KEYBOARD_TYPES NAME_TCAP_KT NAME_HP_KT NAME_SCO_KT NAME_SUN_KT NAME_VT220_KT 1828d522f475Smrg 1829d522f475Smrg#if OPT_TRACE 1830d522f475Smrgextern const char * visibleKeyboardType(xtermKeyboardType); 1831d522f475Smrg#endif 1832d522f475Smrg 1833d522f475Smrgtypedef struct 1834d522f475Smrg{ 1835d522f475Smrg int cursor_keys; /* how to handle cursor-key modifiers */ 1836d522f475Smrg int function_keys; /* how to handle function-key modifiers */ 1837d522f475Smrg int keypad_keys; /* how to handle keypad key-modifiers */ 1838d522f475Smrg int other_keys; /* how to handle other key-modifiers */ 1839d522f475Smrg int string_keys; /* how to handle string() modifiers */ 1840d522f475Smrg} TModify; 1841d522f475Smrg 1842d522f475Smrgtypedef struct 1843d522f475Smrg{ 1844d522f475Smrg xtermKeyboardType type; 1845d522f475Smrg unsigned flags; 1846d522f475Smrg char *shell_translations; 1847d522f475Smrg char *xterm_translations; 1848d522f475Smrg char *extra_translations; 1849d522f475Smrg#if OPT_INITIAL_ERASE 1850d522f475Smrg int reset_DECBKM; /* reset should set DECBKM */ 1851d522f475Smrg#endif 1852d522f475Smrg#if OPT_MOD_FKEYS 1853d522f475Smrg TModify modify_now; /* current modifier value */ 1854d522f475Smrg TModify modify_1st; /* original modifier value, for resets */ 1855d522f475Smrg int format_keys; /* format of modifyOtherKeys */ 1856d522f475Smrg#endif 1857d522f475Smrg} TKeyboard; 1858d522f475Smrg 1859d522f475Smrgtypedef struct { 1860d522f475Smrg char *f_n; /* the normal font */ 1861d522f475Smrg char *f_b; /* the bold font */ 1862d522f475Smrg#if OPT_WIDE_CHARS 1863d522f475Smrg char *f_w; /* the normal wide font */ 1864d522f475Smrg char *f_wb; /* the bold wide font */ 1865d522f475Smrg#endif 1866d522f475Smrg} VTFontNames; 1867d522f475Smrg 1868d522f475Smrgtypedef struct _Misc { 1869d522f475Smrg VTFontNames default_font; 1870d522f475Smrg char *geo_metry; 1871d522f475Smrg char *T_geometry; 1872d522f475Smrg#if OPT_WIDE_CHARS 1873d522f475Smrg Boolean cjk_width; /* true for built-in CJK wcwidth() */ 1874d522f475Smrg Boolean mk_width; /* true for simpler built-in wcwidth() */ 1875d522f475Smrg int mk_samplesize; 1876d522f475Smrg int mk_samplepass; 1877d522f475Smrg#endif 1878d522f475Smrg#if OPT_LUIT_PROG 1879d522f475Smrg Boolean callfilter; /* true to invoke luit */ 1880d522f475Smrg Boolean use_encoding; /* true to use -encoding option for luit */ 1881d522f475Smrg char *locale_str; /* "locale" resource */ 1882d522f475Smrg char *localefilter; /* path for luit */ 1883d522f475Smrg#endif 1884d522f475Smrg#if OPT_INPUT_METHOD 1885d522f475Smrg char *f_x; /* font for XIM */ 1886d522f475Smrg#endif 1887d522f475Smrg int limit_resize; 1888d522f475Smrg#ifdef ALLOWLOGGING 1889d522f475Smrg Boolean log_on; 1890d522f475Smrg#endif 1891d522f475Smrg Boolean login_shell; 1892d522f475Smrg Boolean re_verse; 1893d522f475Smrg Boolean re_verse0; /* initial value of "-rv" */ 1894d522f475Smrg XtGravity resizeGravity; 1895d522f475Smrg Boolean reverseWrap; 1896d522f475Smrg Boolean autoWrap; 1897d522f475Smrg Boolean logInhibit; 1898d522f475Smrg Boolean signalInhibit; 1899d522f475Smrg#if OPT_TEK4014 1900d522f475Smrg Boolean tekInhibit; 1901d522f475Smrg Boolean tekSmall; /* start tek window in small size */ 1902d522f475Smrg Boolean TekEmu; /* true if Tektronix emulation */ 1903d522f475Smrg Boolean Tshow; /* Tek window showing */ 1904d522f475Smrg#endif 1905d522f475Smrg Boolean scrollbar; 1906d522f475Smrg#ifdef SCROLLBAR_RIGHT 1907d522f475Smrg Boolean useRight; 1908d522f475Smrg#endif 1909d522f475Smrg Boolean titeInhibit; 1910d522f475Smrg Boolean tiXtraScroll; 1911d522f475Smrg Boolean appcursorDefault; 1912d522f475Smrg Boolean appkeypadDefault; 1913d522f475Smrg#if OPT_INPUT_METHOD 1914d522f475Smrg char* input_method; 1915d522f475Smrg char* preedit_type; 1916d522f475Smrg Boolean open_im; 1917d522f475Smrg Boolean cannot_im; /* true if we cannot use input-method */ 1918d522f475Smrg#endif 1919d522f475Smrg Boolean dynamicColors; 1920d522f475Smrg Boolean shared_ic; 1921d522f475Smrg#ifndef NO_ACTIVE_ICON 1922d522f475Smrg Boolean active_icon; /* use application icon window */ 1923d522f475Smrg unsigned icon_border_width; 1924d522f475Smrg Pixel icon_border_pixel; 1925d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1926d522f475Smrg#if OPT_DEC_SOFTFONT 1927d522f475Smrg Boolean font_loadable; 1928d522f475Smrg#endif 1929d522f475Smrg#if OPT_SHIFT_FONTS 1930d522f475Smrg Boolean shift_fonts; /* true if we interpret fontsize-shifting */ 1931d522f475Smrg#endif 1932d522f475Smrg#if OPT_SUNPC_KBD 1933d522f475Smrg int ctrl_fkeys; /* amount to add to XK_F1 for ctrl modifier */ 1934d522f475Smrg#endif 1935d522f475Smrg#if OPT_NUM_LOCK 1936d522f475Smrg Boolean real_NumLock; /* true if we treat NumLock key specially */ 1937d522f475Smrg Boolean alwaysUseMods; /* true if we always want f-key modifiers */ 1938d522f475Smrg unsigned long num_lock; /* modifier for Num_Lock */ 1939d522f475Smrg unsigned long alt_mods; /* modifier for Alt_L or Alt_R */ 1940d522f475Smrg unsigned long meta_mods; /* modifier for Meta_L or Meta_R */ 1941d522f475Smrg unsigned long other_mods; /* conflicting modifiers, e.g., Mode_Switch */ 1942d522f475Smrg#endif 1943d522f475Smrg#if OPT_RENDERFONT 1944d522f475Smrg char *face_name; 1945d522f475Smrg char *face_wide_name; 1946d522f475Smrg float face_size[NMENUFONTS]; 1947d522f475Smrg Boolean render_font; 1948d522f475Smrg#endif 1949d522f475Smrg} Misc; 1950d522f475Smrg 1951d522f475Smrgtypedef struct {int foo;} XtermClassPart, TekClassPart; 1952d522f475Smrg 1953d522f475Smrgtypedef struct _XtermClassRec { 1954d522f475Smrg CoreClassPart core_class; 1955d522f475Smrg XtermClassPart xterm_class; 1956d522f475Smrg} XtermClassRec; 1957d522f475Smrg 1958d522f475Smrgextern WidgetClass xtermWidgetClass; 1959d522f475Smrg 1960d522f475Smrg#define IsXtermWidget(w) (XtClass(w) == xtermWidgetClass) 1961d522f475Smrg 1962d522f475Smrg#if OPT_TEK4014 1963d522f475Smrgtypedef struct _TekClassRec { 1964d522f475Smrg CoreClassPart core_class; 1965d522f475Smrg TekClassPart tek_class; 1966d522f475Smrg} TekClassRec; 1967d522f475Smrg 1968d522f475Smrgextern WidgetClass tekWidgetClass; 1969d522f475Smrg 1970d522f475Smrg#define IsTekWidget(w) (XtClass(w) == tekWidgetClass) 1971d522f475Smrg 1972d522f475Smrg#endif 1973d522f475Smrg 1974d522f475Smrg/* define masks for keyboard.flags */ 1975d522f475Smrg#define MODE_KAM xBIT(0) /* keyboard action mode */ 1976d522f475Smrg#define MODE_DECKPAM xBIT(1) /* keypad application mode */ 1977d522f475Smrg#define MODE_DECCKM xBIT(2) /* cursor keys */ 1978d522f475Smrg#define MODE_SRM xBIT(3) /* send-receive mode */ 1979d522f475Smrg#define MODE_DECBKM xBIT(4) /* backarrow */ 1980d522f475Smrg 1981d522f475Smrg 1982d522f475Smrg#define N_MARGINBELL 10 1983d522f475Smrg 1984d522f475Smrg#define TAB_BITS_SHIFT 5 /* FIXME: 2**5 == 32 (should derive) */ 1985d522f475Smrg#define TAB_BITS_WIDTH (1 << TAB_BITS_SHIFT) 1986d522f475Smrg#define TAB_ARRAY_SIZE (1024 / TAB_BITS_WIDTH) 1987d522f475Smrg#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE) 1988d522f475Smrg 1989d522f475Smrgtypedef unsigned Tabs [TAB_ARRAY_SIZE]; 1990d522f475Smrg 1991d522f475Smrgtypedef struct _XtermWidgetRec { 1992d522f475Smrg CorePart core; 1993d522f475Smrg XSizeHints hints; 1994d522f475Smrg Bool init_menu; 1995d522f475Smrg TKeyboard keyboard; /* terminal keyboard */ 1996d522f475Smrg TScreen screen; /* terminal screen */ 1997d522f475Smrg unsigned flags; /* mode flags */ 1998d522f475Smrg int cur_foreground; /* current foreground color */ 1999d522f475Smrg int cur_background; /* current background color */ 2000d522f475Smrg Pixel dft_foreground; /* default foreground color */ 2001d522f475Smrg Pixel dft_background; /* default background color */ 2002d522f475Smrg#if OPT_ISO_COLORS 2003d522f475Smrg int sgr_foreground; /* current SGR foreground color */ 2004d522f475Smrg int sgr_background; /* current SGR background color */ 2005d522f475Smrg Boolean sgr_extended; /* SGR set with extended codes? */ 2006d522f475Smrg#endif 2007d522f475Smrg#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS 2008d522f475Smrg int num_ptrs; /* number of pointers per row in 'ScrnBuf' */ 2009d522f475Smrg#endif 2010d522f475Smrg unsigned initflags; /* initial mode flags */ 2011d522f475Smrg Tabs tabs; /* tabstops of the terminal */ 2012d522f475Smrg Misc misc; /* miscellaneous parameters */ 2013d522f475Smrg} XtermWidgetRec, *XtermWidget; 2014d522f475Smrg 2015d522f475Smrg#if OPT_TEK4014 2016d522f475Smrgtypedef struct _TekWidgetRec { 2017d522f475Smrg CorePart core; 2018d522f475Smrg TekPart tek; /* contains resources */ 2019d522f475Smrg TekScreen screen; /* contains working data (no resources) */ 2020d522f475Smrg Bool init_menu; 2021d522f475Smrg XSizeHints hints; 2022d522f475Smrg} TekWidgetRec, *TekWidget; 2023d522f475Smrg#endif /* OPT_TEK4014 */ 2024d522f475Smrg 2025d522f475Smrg/* 2026d522f475Smrg * terminal flags 2027d522f475Smrg * There are actually two namespaces mixed together here. 2028d522f475Smrg * One is the set of flags that can go in screen->visbuf attributes 2029d522f475Smrg * and which must fit in a char (see OFF_ATTRS). 2030d522f475Smrg * The other is the global setting stored in 2031d522f475Smrg * term->flags and screen->save_modes. This need only fit in an unsigned. 2032d522f475Smrg */ 2033d522f475Smrg 2034d522f475Smrg#define AttrBIT(n) xBIT(n) /* text-attributes */ 2035d522f475Smrg#define DrawBIT(n) xBIT(n + 8) /* drawXtermText flags */ 2036d522f475Smrg#define MiscBIT(n) xBIT(n + 16) /* miscellaneous state flags */ 2037d522f475Smrg 2038d522f475Smrg/* global flags and character flags (visible character attributes) */ 2039d522f475Smrg#define INVERSE AttrBIT(0) /* invert the characters to be output */ 2040d522f475Smrg#define UNDERLINE AttrBIT(1) /* true if underlining */ 2041d522f475Smrg#define BOLD AttrBIT(2) 2042d522f475Smrg#define BLINK AttrBIT(3) 2043d522f475Smrg/* global flags (also character attributes) */ 2044d522f475Smrg#define BG_COLOR AttrBIT(4) /* true if background set */ 2045d522f475Smrg#define FG_COLOR AttrBIT(5) /* true if foreground set */ 2046d522f475Smrg 2047d522f475Smrg/* character flags (internal attributes) */ 2048d522f475Smrg#define PROTECTED AttrBIT(6) /* a character that cannot be erased */ 2049d522f475Smrg#define CHARDRAWN AttrBIT(7) /* a character has been drawn here on 2050d522f475Smrg the screen. Used to distinguish 2051d522f475Smrg blanks from empty parts of the 2052d522f475Smrg screen when selecting */ 2053d522f475Smrg 2054d522f475Smrg/* The following attributes are used in the argument of drawXtermText() */ 2055d522f475Smrg#define NOBACKGROUND DrawBIT(0) /* Used for overstrike */ 2056d522f475Smrg#define NOTRANSLATION DrawBIT(1) /* No scan for chars missing in font */ 2057d522f475Smrg#define DOUBLEWFONT DrawBIT(2) /* The actual X-font is double-width */ 2058d522f475Smrg#define DOUBLEHFONT DrawBIT(3) /* The actual X-font is double-height */ 2059d522f475Smrg#define CHARBYCHAR DrawBIT(4) /* Draw chars one-by-one */ 2060d522f475Smrg 2061d522f475Smrg/* The following attribute is used in the argument of xtermSpecialFont etc */ 2062d522f475Smrg#define NORESOLUTION DrawBIT(5) /* find the font without resolution */ 2063d522f475Smrg 2064d522f475Smrg/* 2065d522f475Smrg * Other flags 2066d522f475Smrg */ 2067d522f475Smrg#define WRAPAROUND MiscBIT(0) /* true if auto wraparound mode */ 2068d522f475Smrg#define REVERSEWRAP MiscBIT(1) /* true if reverse wraparound mode */ 2069d522f475Smrg#define REVERSE_VIDEO MiscBIT(2) /* true if screen white on black */ 2070d522f475Smrg#define LINEFEED MiscBIT(3) /* true if in auto linefeed mode */ 2071d522f475Smrg#define ORIGIN MiscBIT(4) /* true if in origin mode */ 2072d522f475Smrg#define INSERT MiscBIT(5) /* true if in insert mode */ 2073d522f475Smrg#define SMOOTHSCROLL MiscBIT(6) /* true if in smooth scroll mode */ 2074d522f475Smrg#define IN132COLUMNS MiscBIT(7) /* true if in 132 column mode */ 2075d522f475Smrg#define INVISIBLE MiscBIT(8) /* true if writing invisible text */ 2076d522f475Smrg#define NATIONAL MiscBIT(9) /* true if writing national charset */ 2077d522f475Smrg 2078d522f475Smrg/* 2079d522f475Smrg * Groups of attributes 2080d522f475Smrg */ 2081d522f475Smrg /* mask for video-attributes only */ 2082d522f475Smrg#define SGR_MASK (BOLD | BLINK | UNDERLINE | INVERSE) 2083d522f475Smrg 2084d522f475Smrg /* mask: user-visible attributes */ 2085d522f475Smrg#define ATTRIBUTES (SGR_MASK | BG_COLOR | FG_COLOR | INVISIBLE | PROTECTED) 2086d522f475Smrg 2087d522f475Smrg/* The toplevel-call to drawXtermText() should have text-attributes guarded: */ 2088d522f475Smrg#define DRAWX_MASK (ATTRIBUTES | CHARDRAWN) 2089d522f475Smrg 2090d522f475Smrg#if OPT_BLINK_TEXT 2091d522f475Smrg#define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0)) 2092d522f475Smrg#else 2093d522f475Smrg#define BOLDATTR(screen) (BOLD | BLINK) 2094d522f475Smrg#endif 2095d522f475Smrg 2096d522f475Smrg/* 2097d522f475Smrg * Per-line flags 2098d522f475Smrg */ 2099d522f475Smrg#define LINEWRAPPED 0x01 /* used once per line to indicate that it wraps 2100d522f475Smrg * onto the next line so we can tell the 2101d522f475Smrg * difference between lines that have wrapped 2102d522f475Smrg * around and lines that have ended naturally 2103d522f475Smrg * with a CR at column max_col. 2104d522f475Smrg */ 2105d522f475Smrg 2106d522f475Smrg#if OPT_ZICONBEEP || OPT_TOOLBAR 2107d522f475Smrg#define HANDLE_STRUCT_NOTIFY 1 2108d522f475Smrg#else 2109d522f475Smrg#define HANDLE_STRUCT_NOTIFY 0 2110d522f475Smrg#endif 2111d522f475Smrg 2112d522f475Smrg/* 2113d522f475Smrg * If we've set protected attributes with the DEC-style DECSCA, then we'll have 2114d522f475Smrg * to use DECSED or DECSEL to erase preserving protected text. (The normal ED, 2115d522f475Smrg * EL won't preserve protected-text). If we've used SPA, then normal ED and EL 2116d522f475Smrg * will preserve protected-text. To keep things simple, just remember the last 2117d522f475Smrg * control that was used to begin protected-text, and use that to determine how 2118d522f475Smrg * erases are performed (otherwise we'd need 2 bits per protected character). 2119d522f475Smrg */ 2120d522f475Smrg#define OFF_PROTECT 0 2121d522f475Smrg#define DEC_PROTECT 1 2122d522f475Smrg#define ISO_PROTECT 2 2123d522f475Smrg 2124d522f475Smrg#define TScreenOf(xw) (&(xw)->screen) 2125d522f475Smrg#define TekScreenOf(tw) (&(tw)->screen) 2126d522f475Smrg 2127d522f475Smrg#ifdef SCROLLBAR_RIGHT 2128d522f475Smrg#define OriginX(screen) (((term->misc.useRight)?0:ScrollbarWidth(screen)) + screen->border) 2129d522f475Smrg#else 2130d522f475Smrg#define OriginX(screen) (ScrollbarWidth(screen) + screen->border) 2131d522f475Smrg#endif 2132d522f475Smrg 2133d522f475Smrg#define OriginY(screen) (screen->border) 2134d522f475Smrg 2135d522f475Smrg#define CursorMoved(screen) \ 2136d522f475Smrg ((screen)->cursor_moved || \ 2137d522f475Smrg ((screen)->cursorp.col != (screen)->cur_col || \ 2138d522f475Smrg (screen)->cursorp.row != (screen)->cur_row)) 2139d522f475Smrg 2140d522f475Smrg#define CursorX(screen,col) ((col) * FontWidth(screen) + OriginX(screen)) 2141d522f475Smrg#define CursorY(screen,row) ((INX2ROW(screen, row) * FontHeight(screen)) \ 2142d522f475Smrg + screen->border) 2143d522f475Smrg 2144d522f475Smrg/* 2145d522f475Smrg * These definitions depend on whether xterm supports active-icon. 2146d522f475Smrg */ 2147d522f475Smrg#ifndef NO_ACTIVE_ICON 2148d522f475Smrg#define IsIconWin(screen,win) ((win) == &(screen)->iconVwin) 2149d522f475Smrg#define IsIcon(screen) (WhichVWin(screen) == &(screen)->iconVwin) 2150d522f475Smrg#define WhichVWin(screen) ((screen)->whichVwin) 2151d522f475Smrg#define WhichTWin(screen) ((screen)->whichTwin) 2152d522f475Smrg 2153d522f475Smrg#define WhichVFont(screen,name) (IsIcon(screen) ? (screen)->fnt_icon.fs \ 2154d522f475Smrg : (screen)->name) 2155d522f475Smrg#define FontAscent(screen) (IsIcon(screen) ? (screen)->fnt_icon.fs->ascent \ 2156d522f475Smrg : WhichVWin(screen)->f_ascent) 2157d522f475Smrg#define FontDescent(screen) (IsIcon(screen) ? (screen)->fnt_icon.fs->descent \ 2158d522f475Smrg : WhichVWin(screen)->f_descent) 2159d522f475Smrg#else /* NO_ACTIVE_ICON */ 2160d522f475Smrg 2161d522f475Smrg#define IsIconWin(screen,win) (False) 2162d522f475Smrg#define IsIcon(screen) (False) 2163d522f475Smrg#define WhichVWin(screen) (&((screen)->fullVwin)) 2164d522f475Smrg#define WhichTWin(screen) (&((screen)->fullTwin)) 2165d522f475Smrg 2166d522f475Smrg#define WhichVFont(screen,name) ((screen)->name) 2167d522f475Smrg#define FontAscent(screen) WhichVWin(screen)->f_ascent 2168d522f475Smrg#define FontDescent(screen) WhichVWin(screen)->f_descent 2169d522f475Smrg 2170d522f475Smrg#endif /* NO_ACTIVE_ICON */ 2171d522f475Smrg 2172d522f475Smrg#define okFont(font) ((font) != 0 && (font)->fid != 0) 2173d522f475Smrg 2174d522f475Smrg/* 2175d522f475Smrg * Macro to check if we are iconified; do not use render for that case. 2176d522f475Smrg */ 2177d522f475Smrg#define UsingRenderFont(xw) ((xw)->misc.render_font && !IsIcon(&((xw)->screen))) 2178d522f475Smrg 2179d522f475Smrg/* 2180d522f475Smrg * These definitions do not depend on whether xterm supports active-icon. 2181d522f475Smrg */ 2182d522f475Smrg#define VWindow(screen) WhichVWin(screen)->window 2183d522f475Smrg#define VShellWindow XtWindow(SHELL_OF(term)) 2184d522f475Smrg#define TWindow(screen) WhichTWin(screen)->window 2185d522f475Smrg#define TShellWindow XtWindow(SHELL_OF(tekWidget)) 2186d522f475Smrg 2187d522f475Smrg#define Width(screen) WhichVWin(screen)->width 2188d522f475Smrg#define Height(screen) WhichVWin(screen)->height 2189d522f475Smrg#define FullWidth(screen) WhichVWin(screen)->fullwidth 2190d522f475Smrg#define FullHeight(screen) WhichVWin(screen)->fullheight 2191d522f475Smrg#define FontWidth(screen) WhichVWin(screen)->f_width 2192d522f475Smrg#define FontHeight(screen) WhichVWin(screen)->f_height 2193d522f475Smrg 2194d522f475Smrg#define NormalFont(screen) WhichVFont(screen, fnts[fNorm].fs) 2195d522f475Smrg#define BoldFont(screen) WhichVFont(screen, fnts[fBold].fs) 2196d522f475Smrg 2197d522f475Smrg#if OPT_WIDE_CHARS 2198d522f475Smrg#define NormalWFont(screen) WhichVFont(screen, fnts[fWide].fs) 2199d522f475Smrg#define BoldWFont(screen) WhichVFont(screen, fnts[fWBold].fs) 2200d522f475Smrg#endif 2201d522f475Smrg 2202d522f475Smrg#define ScrollbarWidth(screen) WhichVWin(screen)->sb_info.width 2203d522f475Smrg 2204d522f475Smrg#define NormalGC(w,sp) getCgsGC(w, WhichVWin(sp), gcNorm) 2205d522f475Smrg#define ReverseGC(w,sp) getCgsGC(w, WhichVWin(sp), gcNormReverse) 2206d522f475Smrg#define NormalBoldGC(w,sp) getCgsGC(w, WhichVWin(sp), gcBold) 2207d522f475Smrg#define ReverseBoldGC(w,sp) getCgsGC(w, WhichVWin(sp), gcBoldReverse) 2208d522f475Smrg 2209d522f475Smrg#define TWidth(screen) WhichTWin(screen)->width 2210d522f475Smrg#define THeight(screen) WhichTWin(screen)->height 2211d522f475Smrg#define TFullWidth(screen) WhichTWin(screen)->fullwidth 2212d522f475Smrg#define TFullHeight(screen) WhichTWin(screen)->fullheight 2213d522f475Smrg#define TekScale(screen) WhichTWin(screen)->tekscale 2214d522f475Smrg 2215d522f475Smrg#define BorderWidth(w) ((w)->core.border_width) 2216d522f475Smrg#define BorderPixel(w) ((w)->core.border_pixel) 2217d522f475Smrg 2218d522f475Smrg#if OPT_TOOLBAR 2219d522f475Smrg#define ToolbarHeight(w) ((resource.toolBar) \ 2220d522f475Smrg ? (term->VT100_TB_INFO(menu_height) \ 2221d522f475Smrg + term->VT100_TB_INFO(menu_border) * 2) \ 2222d522f475Smrg : 0) 2223d522f475Smrg#else 2224d522f475Smrg#define ToolbarHeight(w) 0 2225d522f475Smrg#endif 2226d522f475Smrg 2227d522f475Smrg#if OPT_TEK4014 2228d522f475Smrg#define TEK_LINK_BLOCK_SIZE 1024 2229d522f475Smrg 2230d522f475Smrgtypedef struct Tek_Link 2231d522f475Smrg{ 2232d522f475Smrg struct Tek_Link *next; /* pointer to next TekLink in list 2233d522f475Smrg NULL <=> this is last TekLink */ 2234d522f475Smrg unsigned short fontsize;/* character size, 0-3 */ 2235d522f475Smrg unsigned short count; /* number of chars in data */ 2236d522f475Smrg char *ptr; /* current pointer into data */ 2237d522f475Smrg char data [TEK_LINK_BLOCK_SIZE]; 2238d522f475Smrg} TekLink; 2239d522f475Smrg#endif /* OPT_TEK4014 */ 2240d522f475Smrg 2241d522f475Smrg/* flags for cursors */ 2242d522f475Smrg#define OFF 0 2243d522f475Smrg#define ON 1 2244d522f475Smrg#define BLINKED_OFF 2 2245d522f475Smrg#define CLEAR 0 2246d522f475Smrg#define TOGGLE 1 2247d522f475Smrg 2248d522f475Smrg/* flags for inhibit */ 2249d522f475Smrg#ifdef ALLOWLOGGING 2250d522f475Smrg#define I_LOG 0x01 2251d522f475Smrg#endif 2252d522f475Smrg#define I_SIGNAL 0x02 2253d522f475Smrg#define I_TEK 0x04 2254d522f475Smrg 2255d522f475Smrg/***====================================================================***/ 2256d522f475Smrg 2257d522f475Smrg#if OPT_TRACE 2258d522f475Smrg#undef NDEBUG /* turn on assert's */ 2259d522f475Smrg#else 2260d522f475Smrg#ifndef NDEBUG 2261d522f475Smrg#define NDEBUG /* not debugging, don't do assert's */ 2262d522f475Smrg#endif 2263d522f475Smrg#endif 2264d522f475Smrg 22650d92cbfdSchristos#include <trace.h> 22660d92cbfdSchristos 2267d522f475Smrg#ifndef TRACE 2268d522f475Smrg#define TRACE(p) /*nothing*/ 2269d522f475Smrg#endif 2270d522f475Smrg 2271d522f475Smrg#ifndef TRACE_ARGV 2272d522f475Smrg#define TRACE_ARGV(tag,argv) /*nothing*/ 2273d522f475Smrg#endif 2274d522f475Smrg 2275d522f475Smrg#ifndef TRACE_CHILD 2276d522f475Smrg#define TRACE_CHILD /*nothing*/ 2277d522f475Smrg#endif 2278d522f475Smrg 2279d522f475Smrg#ifndef TRACE_HINTS 2280d522f475Smrg#define TRACE_HINTS(hints) /*nothing*/ 2281d522f475Smrg#endif 2282d522f475Smrg 2283d522f475Smrg#ifndef TRACE_IDS 2284d522f475Smrg#define TRACE_IDS /*nothing*/ 2285d522f475Smrg#endif 2286d522f475Smrg 2287d522f475Smrg#ifndef TRACE_OPTS 2288d522f475Smrg#define TRACE_OPTS(opts,ress,lens) /*nothing*/ 2289d522f475Smrg#endif 2290d522f475Smrg 2291d522f475Smrg#ifndef TRACE_TRANS 2292d522f475Smrg#define TRACE_TRANS(name,w) /*nothing*/ 2293d522f475Smrg#endif 2294d522f475Smrg 2295d522f475Smrg#ifndef TRACE_WM_HINTS 2296d522f475Smrg#define TRACE_WM_HINTS(w) /*nothing*/ 2297d522f475Smrg#endif 2298d522f475Smrg 2299d522f475Smrg#ifndef TRACE_XRES 2300d522f475Smrg#define TRACE_XRES() /*nothing*/ 2301d522f475Smrg#endif 2302d522f475Smrg 2303d522f475Smrg#ifndef TRACE2 2304d522f475Smrg#define TRACE2(p) /*nothing*/ 2305d522f475Smrg#endif 2306d522f475Smrg 2307d522f475Smrg#endif /* included_ptyx_h */ 2308