diff options
Diffstat (limited to 'xc/programs/xterm/ptyx.h')
-rw-r--r-- | xc/programs/xterm/ptyx.h | 1379 |
1 files changed, 1379 insertions, 0 deletions
diff --git a/xc/programs/xterm/ptyx.h b/xc/programs/xterm/ptyx.h new file mode 100644 index 000000000..ca8030696 --- /dev/null +++ b/xc/programs/xterm/ptyx.h @@ -0,0 +1,1379 @@ +/* + * $XConsortium: ptyx.h /main/67 1996/11/29 10:34:19 swick $ + * $XFree86: xc/programs/xterm/ptyx.h,v 3.67 1999/12/30 02:05:56 robin Exp $ + */ + +/* + * Copyright 1999 by Thomas E. Dickey <dickey@clark.net> + * + * All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name(s) of the above copyright + * holders shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization. + * + * + * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Digital Equipment + * Corporation not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior permission. + * + * + * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#ifndef included_ptyx_h +#define included_ptyx_h 1 + +#ifdef HAVE_CONFIG_H +#include <xtermcfg.h> +#endif + +/* ptyx.h */ +/* @(#)ptyx.h X10/6.6 11/10/86 */ + +#include <X11/IntrinsicP.h> +#include <X11/Xmu/Misc.h> /* For Max() and Min(). */ +#include <X11/Xfuncs.h> +#include <X11/Xosdefs.h> +#include <X11/Xmu/Converters.h> + +/* adapted from IntrinsicI.h */ +#define MyStackAlloc(size, stack_cache_array) \ + ((size) <= sizeof(stack_cache_array) \ + ? (XtPointer)(stack_cache_array) \ + : (XtPointer)malloc((unsigned)(size))) + +#define MyStackFree(pointer, stack_cache_array) \ + if ((pointer) != ((char *)(stack_cache_array))) free(pointer) + +#ifdef AMOEBA +/* Avoid name clashes with standard Amoeba types: */ +#define event am_event_t +#define interval am_interval_t +#include <amoeba.h> +#include <semaphore.h> +#include <circbuf.h> +#undef event +#undef interval +#endif + +/* +** System V definitions +*/ + +#ifdef SYSV +#ifdef X_NOT_POSIX +#ifndef CRAY +#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : \ + (close(fd2), fcntl(fd1, F_DUPFD, fd2))) +#endif +#endif +#endif /* SYSV */ + +/* +** allow for mobility of the pty master/slave directories +*/ +#ifndef PTYDEV +#if defined(__hpux) +#define PTYDEV "/dev/ptym/ptyxx" +#elif defined(__MVS__) +#define PTYDEV "/dev/ptypxxxx" +#elif !defined(__osf__) +#define PTYDEV "/dev/ptyxx" +#endif +#endif /* !PTYDEV */ + +#ifndef TTYDEV +#if defined(__hpux) +#define TTYDEV "/dev/pty/ttyxx" +#elif defined(__MVS__) +#define TTYDEV "/dev/ptypxxxx" +#elif defined(__osf__) || (defined(linux) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) +#define TTYDEV "/dev/ttydirs/xxx/xxxxxxxxxxxxxx" +#else +#define TTYDEV "/dev/ttyxx" +#endif +#endif /* !TTYDEV */ + +#ifndef PTYCHAR1 +#ifdef __hpux +#define PTYCHAR1 "zyxwvutsrqp" +#else /* !__hpux */ +#ifdef __EMX__ +#define PTYCHAR1 "pq" +#else +#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ" +#endif /* !__EMX__ */ +#endif /* !__hpux */ +#endif /* !PTYCHAR1 */ + +#ifndef PTYCHAR2 +#ifdef __hpux +#define PTYCHAR2 "fedcba9876543210" +#else /* !__hpux */ +#ifdef __FreeBSD__ +#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv" +#else /* !__FreeBSD__ */ +#define PTYCHAR2 "0123456789abcdef" +#endif /* !__FreeBSD__ */ +#endif /* !__hpux */ +#endif /* !PTYCHAR2 */ + +#ifndef TTYFORMAT +#if defined(CRAY) +#define TTYFORMAT "/dev/ttyp%03d" +#elif defined(__MVS__) +#define TTYFORMAT "/dev/ttyp%04d" +#else +#define TTYFORMAT "/dev/ttyp%d" +#endif +#endif /* TTYFORMAT */ + +#ifndef PTYFORMAT +#ifdef CRAY +#define PTYFORMAT "/dev/pty/%03d" +#elif defined(__MVS__) +#define PTYFORMAT "/dev/ptyp%04d" +#else +#define PTYFORMAT "/dev/ptyp%d" +#endif +#endif /* PTYFORMAT */ + +#ifndef MAXPTTYS +#ifdef CRAY +#define MAXPTTYS 256 +#else +#define MAXPTTYS 2048 +#endif +#endif + +/* Until the translation manager comes along, I have to do my own translation of + * mouse events into the proper routines. */ + +typedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode; + +/* + * The origin of a screen is 0, 0. Therefore, the number of rows + * on a screen is screen->max_row + 1, and similarly for columns. + */ + +typedef unsigned char Char; /* to support 8 bit chars */ +typedef Char **ScrnBuf; + +#define CharOf(n) ((n) & 0xff) + +/* + * ANSI emulation, special character codes + */ +#define INQ 0x05 +#define BEL 0x07 +#define FF 0x0C /* C0, C1 control names */ +#define LS1 0x0E +#define LS0 0x0F +#define NAK 0x15 +#define CAN 0x18 +#define SUB 0x1A +#define ESC 0x1B +#define XPOUND 0x1E /* internal mapping for '#' */ +#define US 0x1F +#define DEL 0x7F +#define RI 0x8D +#define SS2 0x8E +#define SS3 0x8F +#define DCS 0x90 +#define SPA 0x96 +#define EPA 0x97 +#define SOS 0x98 +#define OLDID 0x9A /* ESC Z */ +#define CSI 0x9B +#define ST 0x9C +#define OSC 0x9D +#define PM 0x9E +#define APC 0x9F +#define RDEL 0xFF + +#define MIN_DECID 52 /* can emulate VT52 */ +#define MAX_DECID 420 /* ...through VT420 */ + +#ifndef DFT_DECID +#define DFT_DECID "vt100" /* default VT100 */ +#endif + +#ifndef DFT_KBD_DIALECT +#define DFT_KBD_DIALECT "B" /* default USASCII */ +#endif + +/* constants used for utf8 mode */ +#define UCS_REPL 0xfffd +#define UCS_LIMIT 0x80000000U /* both limit and flag for non-UCS */ + +#define TERMCAP_SIZE 1500 /* 1023 is standard; 'screen' exceeds */ + +#define NMENUFONTS 9 /* font entries in fontMenu */ + +#define NBOX 5 /* Number of Points in box */ +#define NPARAM 30 /* Max. parameters */ + +typedef struct { + unsigned char a_type; + unsigned char a_pintro; + unsigned char a_final; + unsigned char a_inters; + char a_nparam; /* # of parameters */ + short a_param[NPARAM]; /* Parameters */ +} ANSI; + +#define TEK_FONT_LARGE 0 +#define TEK_FONT_2 1 +#define TEK_FONT_3 2 +#define TEK_FONT_SMALL 3 +#define TEKNUMFONTS 4 + +/* Actually there are 5 types of lines, but four are non-solid lines */ +#define TEKNUMLINES 4 + +typedef struct { + int x; + int y; + int fontsize; + int linetype; +} Tmodes; + +typedef struct { + int Twidth; + int Theight; +} T_fontsize; + +typedef struct { + short *bits; + int x; + int y; + int width; + int height; +} BitmapBits; + +#define SAVELINES 64 /* default # lines to save */ +#define SCROLLLINES 1 /* default # lines to scroll */ + +/***====================================================================***/ + +#define TEXT_FG 0 +#define TEXT_BG 1 +#define TEXT_CURSOR 2 +#define MOUSE_FG 3 +#define MOUSE_BG 4 +#define TEK_FG 5 +#define TEK_BG 6 +#define HIGHLIGHT_BG 7 +#define NCOLORS 8 + +#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp; + +#define COLOR_DEFINED(s,w) ((s)->which&(1<<(w))) +#define COLOR_VALUE(s,w) ((s)->colors[w]) +#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w]=(v)),((s)->which|=(1<<(w)))) + +#define COLOR_NAME(s,w) ((s)->names[w]) +#define SET_COLOR_NAME(s,w,v) (((s)->names[w]=(v)),((s)->which|=(1<<(w)))) + +#define UNDEFINE_COLOR(s,w) ((s)->which&=(~((w)<<1))) +#define OPPOSITE_COLOR(n) (((n)==TEXT_FG?TEXT_BG:\ + ((n)==TEXT_BG?TEXT_FG:\ + ((n)==MOUSE_FG?MOUSE_BG:\ + ((n)==MOUSE_BG?MOUSE_FG:\ + ((n)==TEK_FG?TEK_BG:\ + ((n)==TEXT_BG?TEK_FG:(n)))))))) + +typedef struct { + unsigned which; /* must have NCOLORS bits */ + Pixel colors[NCOLORS]; + char *names[NCOLORS]; +} ScrnColors; + +/***====================================================================***/ + +#if (XtSpecificationRelease < 6) +#ifndef NO_ACTIVE_ICON +#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */ +#endif +#endif + +#ifndef OPT_AIX_COLORS +#define OPT_AIX_COLORS 1 /* true if xterm is configured with AIX (16) colors */ +#endif + +#ifndef OPT_BLINK_CURS +#define OPT_BLINK_CURS 1 /* true if xterm has blinking cursor capability */ +#endif + +#ifndef OPT_BOX_CHARS +#define OPT_BOX_CHARS 1 /* true if xterm can simulate box-characters */ +#endif + +#ifndef OPT_CLIP_BOLD +#define OPT_CLIP_BOLD 1 /* true if xterm uses clipping to avoid bold-trash */ +#endif + +#ifndef OPT_DEC_CHRSET +#define OPT_DEC_CHRSET 1 /* true if xterm is configured for DEC charset */ +#endif + +#ifndef OPT_DEC_LOCATOR +#define OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */ +#endif + +#ifndef OPT_DEC_SOFTFONT +#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */ +#endif + +#ifndef OPT_EBCDIC +#ifdef __MVS__ +#define OPT_EBCDIC 1 +#else +#define OPT_EBCDIC 0 +#endif +#endif + +#ifndef OPT_HP_FUNC_KEYS +#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */ +#endif + +#ifndef OPT_I18N_SUPPORT +#if (XtSpecificationRelease >= 5) +#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */ +#else +#define OPT_I18N_SUPPORT 0 +#endif +#endif + +#ifndef OPT_INITIAL_ERASE +#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */ +#endif + +#ifndef OPT_INPUT_METHOD +#if (XtSpecificationRelease >= 6) +#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */ +#else +#define OPT_INPUT_METHOD 0 +#endif +#endif + +#ifndef OPT_ISO_COLORS +#define OPT_ISO_COLORS 1 /* true if xterm is configured with ISO colors */ +#endif + +#ifndef OPT_256_COLORS +#define OPT_256_COLORS 0 /* true if xterm is configured with 256 colors */ +#endif + +#ifndef OPT_88_COLORS +#define OPT_88_COLORS 0 /* true if xterm is configured with 88 colors */ +#endif + +#ifndef OPT_HIGHLIGHT_COLOR +#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */ +#endif + +#ifndef OPT_MAXIMIZE +#define OPT_MAXIMIZE 1 /* add actions for iconify ... maximize */ +#endif + +#ifndef OPT_NUM_LOCK +#define OPT_NUM_LOCK 1 /* use NumLock key only for numeric-keypad */ +#endif + +#ifndef OPT_SAME_NAME +#define OPT_SAME_NAME 1 /* suppress redundant updates of title, icon, etc. */ +#endif + +#ifndef OPT_PC_COLORS +#define OPT_PC_COLORS 1 /* true if xterm supports PC-style (bold) colors */ +#endif + +#ifndef OPT_PRINT_COLORS +#define OPT_PRINT_COLORS 1 /* true if we print color information */ +#endif + +#ifndef OPT_SHIFT_KEYS +#define OPT_SHIFT_KEYS 1 /* true if xterm interprets shifted special-keys */ +#endif + +#ifndef OPT_SUNPC_KBD +#define OPT_SUNPC_KBD 1 /* true if xterm supports Sun/PC keyboard map */ +#endif + +#ifndef OPT_TEK4014 +#define OPT_TEK4014 1 /* true if we're using tek4014 emulation */ +#endif + +#ifndef OPT_TOOLBAR +#define OPT_TOOLBAR 0 /* true if xterm supports toolbar menus */ +#endif + +#ifndef OPT_TRACE +#define OPT_TRACE 0 /* true if we're using debugging traces */ +#endif + +#ifndef OPT_VT52_MODE +#define OPT_VT52_MODE 1 /* true if xterm supports VT52 emulation */ +#endif + +#ifndef OPT_WIDE_CHARS +#define OPT_WIDE_CHARS 0 /* true if xterm supports 16-bit characters */ +#endif + +#ifndef OPT_XMC_GLITCH +#define OPT_XMC_GLITCH 0 /* true if xterm supports xmc (magic cookie glitch) */ +#endif + +#ifndef OPT_ZICONBEEP +#define OPT_ZICONBEEP 1 /* true if xterm supports "-ziconbeep" option */ +#endif + +/***====================================================================***/ + +#if OPT_AIX_COLORS && !OPT_ISO_COLORS +/* You must have ANSI/ISO colors to support AIX colors */ +#undef OPT_AIX_COLORS +#endif + +#if OPT_PC_COLORS && !OPT_ISO_COLORS +/* You must have ANSI/ISO colors to support PC colors */ +#undef OPT_PC_COLORS +#endif + +#if OPT_256_COLORS && !OPT_ISO_COLORS +/* You must have ANSI/ISO colors to support 256 colors */ +#undef OPT_256_COLORS +#endif + +#if OPT_88_COLORS && !OPT_ISO_COLORS +/* You must have ANSI/ISO colors to support 88 colors */ +#undef OPT_88_COLORS +#endif + +#if OPT_88_COLORS && OPT_256_COLORS +/* 256 colors supersedes 88 colors */ +#undef OPT_88_COLORS +#endif + +/***====================================================================***/ + +#if OPT_ISO_COLORS +#define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code +#define TERM_COLOR_FLAGS (term->flags & (FG_COLOR|BG_COLOR)) +#define COLOR_0 0 +#define COLOR_1 1 +#define COLOR_2 2 +#define COLOR_3 3 +#define COLOR_4 4 +#define COLOR_5 5 +#define COLOR_6 6 +#define COLOR_7 7 +#define COLOR_8 8 +#define COLOR_9 9 +#define COLOR_10 10 +#define COLOR_11 11 +#define COLOR_12 12 +#define COLOR_13 13 +#define COLOR_14 14 +#define COLOR_15 15 + +#if OPT_256_COLORS +# define NUM_ANSI_COLORS 256 +#elif OPT_88_COLORS +# define NUM_ANSI_COLORS 88 +#else +# define NUM_ANSI_COLORS 16 +#endif + +#if NUM_ANSI_COLORS > 16 +# define OPT_EXT_COLORS 1 +#else +# define OPT_EXT_COLORS 0 +#endif + +#define COLOR_BD (NUM_ANSI_COLORS) /* BOLD */ +#define COLOR_UL (NUM_ANSI_COLORS+1) /* UNDERLINE */ +#define COLOR_BL (NUM_ANSI_COLORS+2) /* BLINK */ +#define MAXCOLORS (NUM_ANSI_COLORS+3) +#ifndef DFT_COLORMODE +#define DFT_COLORMODE TRUE /* default colorMode resource */ +#endif + +#else /* !OPT_ISO_COLORS */ + +#define if_OPT_ISO_COLORS(screen, code) /* nothing */ +#define TERM_COLOR_FLAGS 0 + +#endif /* OPT_ISO_COLORS */ + +#if OPT_AIX_COLORS +#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code +#else +#define if_OPT_AIX_COLORS(screen, code) /* nothing */ +#endif + +#if OPT_256_COLORS || OPT_88_COLORS +# define if_OPT_EXT_COLORS(screen, code) if(screen->colorMode) code +# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /* nothing */ +#elif OPT_ISO_COLORS +# define if_OPT_EXT_COLORS(screen, code) /* nothing */ +# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code +#else +# define if_OPT_EXT_COLORS(screen, code) /* nothing */ +# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/ +#endif + +/***====================================================================***/ + +#if OPT_DEC_CHRSET +#define if_OPT_DEC_CHRSET(code) code + /* Use 2 bits for encoding the double high/wide sense of characters */ +#define CSET_SWL 0 +#define CSET_DHL_TOP 1 +#define CSET_DHL_BOT 2 +#define CSET_DWL 3 +#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */ + /* Use remaining bits for encoding the other character-sets */ +#define CSET_NORMAL(code) ((code) == CSET_SWL) +#define CSET_DOUBLE(code) (!CSET_NORMAL(code) && !CSET_EXTEND(code)) +#define CSET_EXTEND(code) ((code) > CSET_DWL) + /* for doublesize characters, the first cell in a row holds the info */ +#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0]) +#define CurMaxCol(screen, row) \ + (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ + ? (screen->max_col / 2) \ + : (screen->max_col)) +#define CurCursorX(screen, row, col) \ + (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ + ? CursorX(screen, 2*(col)) \ + : CursorX(screen, (col))) +#define CurFontWidth(screen, row) \ + (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \ + ? 2*FontWidth(screen) \ + : FontWidth(screen)) +#else +#define if_OPT_DEC_CHRSET(code) /*nothing*/ +#define CurMaxCol(screen, row) screen->max_col +#define CurCursorX(screen, row, col) CursorX(screen, col) +#define CurFontWidth(screen, row) FontWidth(screen) +#endif + + /* the number of pointers per row in 'ScrnBuf' */ +#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS +#define MAX_PTRS term->num_ptrs +#else +#define MAX_PTRS (OFF_ATTRS+1) +#endif + +#define BUF_HEAD 1 + /* the number that point to Char data */ +#define BUF_PTRS (MAX_PTRS - BUF_HEAD) + +/***====================================================================***/ + +#if OPT_EBCDIC +extern int E2A(int); +extern int A2E(int); +extern char CONTROL(char); +#else +#define E2A(a) (a) +#define A2E(a) (a) +#define CONTROL(a) ((a)&037) +#endif + +/***====================================================================***/ + +#if OPT_TEK4014 +#define TEK4014_ACTIVE(screen) ((screen)->TekEmu) +#define CURRENT_EMU_VAL(screen,tek,vt) (TEK4014_ACTIVE(screen) ? tek : vt) +#define CURRENT_EMU(screen) CURRENT_EMU_VAL(screen, (Widget)tekWidget, (Widget)term) +#else +#define TEK4014_ACTIVE(screen) 0 +#define CURRENT_EMU_VAL(screen,tek,vt) (vt) +#define CURRENT_EMU(screen) ((Widget)term) +#endif + +/***====================================================================***/ + +#if OPT_TOOLBAR +#define SHELL_OF(widget) XtParent(XtParent(widget)) +#else +#define SHELL_OF(widget) XtParent(widget) +#endif + +/***====================================================================***/ + +#if OPT_VT52_MODE +#define if_OPT_VT52_MODE(screen, code) if(screen->ansi_level == 0) code +#else +#define if_OPT_VT52_MODE(screen, code) /* nothing */ +#endif + +/***====================================================================***/ + +#if OPT_XMC_GLITCH +#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code +#define XMC_GLITCH 1 /* the character we'll show */ +#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD) +#else +#define if_OPT_XMC_GLITCH(screen, code) /* nothing */ +#endif + +/***====================================================================***/ + +#if OPT_WIDE_CHARS +#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code +#define PAIRED_CHARS(a,b) a,b +typedef unsigned IChar; /* for 8 or 16-bit characters, plus flag */ +#else +#define if_OPT_WIDE_CHARS(screen, code) /* nothing */ +#define PAIRED_CHARS(a,b) a +typedef unsigned char IChar; /* for 8-bit characters */ +#endif + +/***====================================================================***/ + +#define BUF_SIZE 4096 + +typedef struct { + int cnt; /* number of chars left to process */ + IChar * ptr; /* pointer into decoded data */ + Char buf[BUF_SIZE]; /* we read directly into this */ +#if OPT_WIDE_CHARS + IChar buf2[BUF_SIZE]; /* ...and may decode into this */ +#define DecodedData(data) (data)->buf2 +#else +#define DecodedData(data) (data)->buf +#endif + } PtyData; + +/***====================================================================***/ + +#if OPT_TRACE +#include <trace.h> +#else +#define TRACE(p) /*nothing*/ +#define TRACE_CHILD /*nothing*/ +#endif + +/***====================================================================***/ + +/* The order of ifdef's matches the logic for num_ptrs in VTInitialize */ +typedef enum { + OFF_FLAGS = 0 /* BUF_HEAD */ + , OFF_CHARS = 1 + , OFF_ATTRS = 2 +#if OPT_ISO_COLORS +#if OPT_256_COLORS || OPT_88_COLORS + , OFF_FGRND + , OFF_BGRND +#else + , OFF_COLOR +#endif +#endif +#if OPT_DEC_CHRSET + , OFF_CSETS +#endif +#if OPT_WIDE_CHARS + , OFF_WIDEC +#endif +} BufOffsets; + + /* ScrnBuf-level macros */ +#define BUF_FLAGS(buf, row) (buf[MAX_PTRS * (row) + OFF_FLAGS]) +#define BUF_CHARS(buf, row) (buf[MAX_PTRS * (row) + OFF_CHARS]) +#define BUF_ATTRS(buf, row) (buf[MAX_PTRS * (row) + OFF_ATTRS]) +#define BUF_COLOR(buf, row) (buf[MAX_PTRS * (row) + OFF_COLOR]) +#define BUF_FGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_FGRND]) +#define BUF_BGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_BGRND]) +#define BUF_CSETS(buf, row) (buf[MAX_PTRS * (row) + OFF_CSETS]) +#define BUF_WIDEC(buf, row) (buf[MAX_PTRS * (row) + OFF_WIDEC]) + + /* TScreen-level macros */ +#define SCRN_BUF_FLAGS(screen, row) BUF_FLAGS(screen->visbuf, row) +#define SCRN_BUF_CHARS(screen, row) BUF_CHARS(screen->visbuf, row) +#define SCRN_BUF_ATTRS(screen, row) BUF_ATTRS(screen->visbuf, row) +#define SCRN_BUF_COLOR(screen, row) BUF_COLOR(screen->visbuf, row) +#define SCRN_BUF_FGRND(screen, row) BUF_FGRND(screen->visbuf, row) +#define SCRN_BUF_BGRND(screen, row) BUF_BGRND(screen->visbuf, row) +#define SCRN_BUF_CSETS(screen, row) BUF_CSETS(screen->visbuf, row) +#define SCRN_BUF_WIDEC(screen, row) BUF_WIDEC(screen->visbuf, row) + +typedef struct { + unsigned chrset; + unsigned flags; + XFontStruct * fs; + GC gc; + char * fn; +} XTermFonts; + + /* indices into save_modes[] */ +typedef enum { + DP_DECCKM, + DP_DECANM, + DP_DECCOLM, /* IN132COLUMNS */ + DP_DECSCLM, + DP_DECSCNM, + DP_DECOM, + DP_DECAWM, + DP_DECARM, + DP_X_X10MSE, + DP_DECPFF, + DP_DECPEX, + DP_DECTCEM, + DP_DECTEK, + DP_X_DECCOLM, + DP_X_MORE, + DP_X_MARGIN, + DP_X_REVWRAP, + DP_X_LOGGING, + DP_X_ALTSCRN, + DP_DECBKM, + DP_X_MOUSE, + DP_LAST + } SaveModes; + +#define DoSM(code,value) screen->save_modes[code] = value +#define DoRM(code,value) value = screen->save_modes[code] + + /* index into vt_shell[] or tek_shell[] */ +typedef enum { + mainMenu, + vtMenu, + fontMenu, + tekMenu +} MenuIndex; + +#define NUM_POPUP_MENUS 4 + +typedef struct { + Boolean saved; + int row; + int col; + unsigned flags; /* VTxxx saves graphics rendition */ + char curgl; + char curgr; + char gsets[4]; +#if OPT_ISO_COLORS + int cur_foreground; /* current foreground color */ + int cur_background; /* current background color */ + int sgr_foreground; /* current SGR foreground color */ +#endif +} SavedCursor; + +struct _vtwin { + Window window; /* X window id */ + int width; /* width of columns */ + int height; /* height of rows */ + int fullwidth; /* full width of window */ + int fullheight; /* full height of window */ + int f_width; /* width of fonts in pixels */ + int f_height; /* height of fonts in pixels */ + int scrollbar; /* if > 0, width of scrollbar, */ + /* and scrollbar is showing */ + GC normalGC; /* normal painting */ + GC reverseGC; /* reverse painting */ + GC normalboldGC; /* normal painting, bold font */ + GC reverseboldGC; /* reverse painting, bold font */ +#if OPT_TOOLBAR + Widget menu_bar; /* toolbar, if initialized */ + Dimension menu_height; /* ...and its height */ +#endif +}; + +struct _tekwin { + Window window; /* X window id */ + int width; /* width of columns */ + int height; /* height of rows */ + int fullwidth; /* full width of window */ + int fullheight; /* full height of window */ + double tekscale; /* scale factor Tek -> vs100 */ +}; + +typedef struct { +/* These parameters apply to both windows */ + Display *display; /* X display for screen */ + int respond; /* socket for responses + (position report, etc.) */ +#ifdef AMOEBA + capability proccap; /* process capability */ + struct circbuf *tty_inq; /* tty server input queue */ + struct circbuf *tty_outq; /* tty server output queue */ +#endif + long pid; /* pid of process on far side */ + int uid; /* user id of actual person */ + int gid; /* group id of actual person */ + GC cursorGC; /* normal cursor painting */ + GC fillCursorGC; /* special cursor painting */ + GC reversecursorGC;/* reverse cursor painting */ + GC cursoroutlineGC;/* for painting lines around */ + Pixel foreground; /* foreground color */ + Pixel cursorcolor; /* Cursor color */ + Pixel mousecolor; /* Mouse color */ + Pixel mousecolorback; /* Mouse color background */ +#if OPT_ISO_COLORS + Pixel Acolors[MAXCOLORS]; /* ANSI color emulation */ + Boolean boldColors; /* can we make bold colors? */ + Boolean colorMode; /* are we using color mode? */ + Boolean colorULMode; /* use color for underline? */ + Boolean colorBDMode; /* use color for bold? */ + Boolean colorBLMode; /* use color for blink? */ + Boolean colorAttrMode; /* prefer colorUL/BD to SGR */ +#endif +#if OPT_HIGHLIGHT_COLOR + Pixel highlightcolor; /* Highlight background color */ +#endif +#if OPT_DEC_CHRSET + Boolean font_doublesize;/* enable font-scaling */ + int cache_doublesize;/* limit of our cache */ + Char cur_chrset; /* character-set index & code */ + int fonts_used; /* count items in double_fonts */ + XTermFonts double_fonts[NUM_CHRSET]; +#endif +#if OPT_WIDE_CHARS + Boolean wide_chars; /* true when 16-bit chars */ + int utf8_mode; /* use UTF-8 decode/encode: 0-2 */ + int utf_count; /* state of utf_char */ + IChar utf_char; /* in-progress character */ +#endif + int border; /* inner border */ + Cursor arrow; /* arrow cursor */ + unsigned long event_mask; + unsigned short send_mouse_pos; /* user wants mouse transition */ + /* and position information */ +#if OPT_DEC_LOCATOR + Boolean locator_reset; /* turn mouse off after 1 report? */ + Boolean locator_pixels; /* report in pixels? */ + /* if false, report in cells */ + unsigned short locator_events; /* what events to report */ + Boolean loc_filter; /* is filter rectangle active? */ + int loc_filter_top; /* filter rectangle for DEC Locator */ + int loc_filter_left; + int loc_filter_bottom; + int loc_filter_right; +#endif /* OPT_DEC_LOCATOR */ + int mouse_button; /* current button pressed */ + int mouse_row; /* ...and its row */ + int mouse_col; /* ...and its column */ + int select; /* xterm selected */ + Boolean visualbell; /* visual bell mode */ + Boolean allowSendEvents;/* SendEvent mode */ + Boolean awaitInput; /* select-timeout mode */ + Boolean grabbedKbd; /* keyboard is grabbed */ +#ifdef ALLOWLOGGING + int logging; /* logging mode */ + int logfd; /* file descriptor of log */ + char *logfile; /* log file name */ + IChar *logstart; /* current start of log buffer */ +#endif + int inhibit; /* flags for inhibiting changes */ + +/* VT window parameters */ + Boolean Vshow; /* VT window showing */ + struct _vtwin fullVwin; +#ifndef NO_ACTIVE_ICON + struct _vtwin iconVwin; + struct _vtwin * whichVwin; +#endif /* NO_ACTIVE_ICON */ + + Cursor pointer_cursor; /* pointer cursor in window */ + + String answer_back; /* response to ENQ */ + String printer_command; /* pipe/shell command string */ + Boolean printer_autoclose; /* close printer when offline */ + Boolean printer_extent; /* print complete page */ + Boolean printer_formfeed; /* print formfeed per function */ + int printer_controlmode; /* 0=off, 1=auto, 2=controller */ +#if OPT_PRINT_COLORS + int print_attributes; /* 0=off, 1=normal, 2=color */ +#endif + + Boolean fnt_prop; /* true if proportional fonts */ + Boolean fnt_boxes; /* true if font has box-chars */ + Dimension fnt_wide; + Dimension fnt_high; + XFontStruct *fnt_norm; /* normal font of terminal */ + XFontStruct *fnt_bold; /* bold font of terminal */ +#ifndef NO_ACTIVE_ICON + XFontStruct *fnt_icon; /* icon font */ +#endif /* NO_ACTIVE_ICON */ + int enbolden; /* overstrike for bold font */ + XPoint *box; /* draw unselected cursor */ + + int cursor_state; /* ON, OFF, or BLINKED_OFF */ +#if OPT_BLINK_CURS + Boolean cursor_blink; /* cursor blink enable */ + int cursor_on; /* cursor on time (msecs) */ + int cursor_off; /* cursor off time (msecs) */ + XtIntervalId cursor_timer; /* timer-id for cursor-proc */ +#endif + int cursor_set; /* requested state */ + int cursor_col; /* previous cursor column */ + int cursor_row; /* previous cursor row */ + int cur_col; /* current cursor column */ + int cur_row; /* current cursor row */ + int max_col; /* rightmost column */ + int max_row; /* bottom row */ + int top_marg; /* top line of scrolling region */ + int bot_marg; /* bottom line of " " */ + Widget scrollWidget; /* pointer to scrollbar struct */ + int topline; /* line number of top, <= 0 */ + int savedlines; /* number of lines that've been saved */ + int savelines; /* number of lines off top to save */ + int scrolllines; /* number of lines to button scroll */ + Boolean scrollttyoutput; /* scroll to bottom on tty output */ + Boolean scrollkey; /* scroll to bottom on key */ + + ScrnBuf visbuf; /* ptr to visible screen buf (main) */ + ScrnBuf allbuf; /* screen buffer (may include + lines scrolled off top) */ + Char *sbuf_address; /* main screen memory address */ + ScrnBuf altbuf; /* alternate screen buffer */ + Char *abuf_address; /* alternate screen memory address */ + Char **save_ptr; /* workspace for save-pointers */ + size_t save_len; /* ...and its length */ + Boolean alternate; /* true if using alternate buf */ + unsigned short do_wrap; /* true if cursor in last column + and character just output */ + int incopy; /* 0 idle; 1 XCopyArea issued; + -1 first GraphicsExpose seen, + but last not seen */ + int copy_src_x; /* params from last XCopyArea ... */ + int copy_src_y; + unsigned int copy_width; + unsigned int copy_height; + int copy_dest_x; + int copy_dest_y; + Boolean c132; /* allow change to 132 columns */ + Boolean curses; /* kludge line wrap for more */ + Boolean hp_ll_bc; /* kludge HP-style ll for xdb */ + Boolean marginbell; /* true if margin bell on */ + int nmarginbell; /* columns from right margin */ + int bellarmed; /* cursor below bell margin */ + Boolean multiscroll; /* true if multi-scroll */ + int scrolls; /* outstanding scroll count, + used only with multiscroll */ + SavedCursor sc[2]; /* data for restore cursor */ + int save_modes[24]; /* save dec/xterm private modes */ + + /* Improved VT100 emulation stuff. */ + String keyboard_dialect; /* default keyboard dialect */ + char gsets[4]; /* G0 through G3. */ + char curgl; /* Current GL setting. */ + char curgr; /* Current GR setting. */ + char curss; /* Current single shift. */ + String term_id; /* resource for terminal_id */ + int terminal_id; /* 100=vt100, 220=vt220, etc. */ + int ansi_level; /* 0=vt100, 1,2,3 = vt100 ... vt320 */ + int scroll_amt; /* amount to scroll */ + int refresh_amt; /* amount to refresh */ + int protected_mode; /* 0=off, 1=DEC, 2=ISO */ + Boolean old_fkeys; /* true for compatible fkeys */ + Boolean jumpscroll; /* whether we should jumpscroll */ + Boolean always_highlight; /* whether to highlight cursor */ + Boolean underline; /* whether to underline text */ + Boolean bold_mode; /* whether to use bold font */ + +#if OPT_MAXIMIZE + Boolean restore_data; + unsigned restore_x; + unsigned restore_y; + unsigned restore_width; + unsigned restore_height; +#endif + /* Testing */ +#if OPT_XMC_GLITCH + int xmc_glitch; /* # of spaces to pad on SGR's */ + int xmc_attributes; /* attrs that make a glitch */ + Boolean xmc_inline; /* SGR's propagate only to eol */ + Boolean move_sgr_ok; /* SGR is reset on move */ +#endif + +#if OPT_TEK4014 +/* Tektronix window parameters */ + GC TnormalGC; /* normal painting */ + GC TcursorGC; /* normal cursor painting */ + Pixel Tforeground; /* foreground color */ + Pixel Tbackground; /* Background color */ + Pixel Tcursorcolor; /* Cursor color */ + + int Tcolor; /* colors used */ + Boolean Tshow; /* Tek window showing */ + Boolean waitrefresh; /* postpone refresh */ + struct _tekwin fullTwin; +#ifndef NO_ACTIVE_ICON + struct _tekwin iconTwin; + struct _tekwin *whichTwin; +#endif /* NO_ACTIVE_ICON */ + + int xorplane; /* z plane for inverts */ + GC linepat[TEKNUMLINES]; /* line patterns */ + Boolean TekEmu; /* true if Tektronix emulation */ + int cur_X; /* current x */ + int cur_Y; /* current y */ + Tmodes cur; /* current tek modes */ + Tmodes page; /* starting tek modes on page */ + int margin; /* 0 -> margin 1, 1 -> margin 2 */ + int pen; /* current Tektronix pen 0=up, 1=dn */ + char *TekGIN; /* nonzero if Tektronix GIN mode*/ + int gin_terminator; /* Tek strap option */ +#endif /* OPT_TEK4014 */ + + int multiClickTime; /* time between multiclick selects */ + int bellSuppressTime; /* msecs after Bell before another allowed */ + Boolean bellInProgress; /* still ringing/flashing prev bell? */ + char *charClass; /* for overriding word selection */ + Boolean cutNewline; /* whether or not line cut has \n */ + Boolean cutToBeginningOfLine; /* line cuts to BOL? */ + Boolean highlight_selection; /* controls appearance of selection */ + Boolean trim_selection; /* controls trimming of selection */ + char *selection_data; /* the current selection */ + int selection_size; /* size of allocated buffer */ + int selection_length; /* number of significant bytes */ + Time selection_time; /* latest event timestamp */ + int startHRow, startHCol, /* highlighted text */ + endHRow, endHCol, + startHCoord, endHCoord; + Atom* selection_atoms; /* which selections we own */ + Cardinal sel_atoms_size; /* how many atoms allocated */ + Cardinal selection_count; /* how many atoms in use */ + Boolean input_eight_bits;/* use 8th bit instead of ESC prefix */ + Boolean output_eight_bits; /* honor all bits or strip */ + Boolean control_eight_bits; /* send CSI as 8-bits */ + Boolean backarrow_key; /* backspace/delete */ + Boolean meta_sends_esc; /* Meta-key sends ESC prefix */ + Pixmap menu_item_bitmap; /* mask for checking items */ + String menu_font_names[NMENUFONTS]; + unsigned long menu_font_sizes[NMENUFONTS]; + int menu_font_number; + XIC xic; +} TScreen; + +typedef struct _TekPart { + XFontStruct * Tfont[TEKNUMFONTS]; + int tobaseline[TEKNUMFONTS]; /* top-baseline, each font */ + char * initial_font; /* large, 2, 3, small */ + char * gin_terminator_str; /* ginTerminator resource */ +#if OPT_TOOLBAR + Widget menu_bar; /* toolbar, if initialized */ + Dimension menu_height; /* ...and its height */ +#endif +} TekPart; + + + +/* meaning of bits in screen.select flag */ +#define INWINDOW 01 /* the mouse is in one of the windows */ +#define FOCUS 02 /* one of the windows is the focus window */ + +#define MULTICLICKTIME 250 /* milliseconds */ + +typedef struct +{ + unsigned flags; +} TKeyboard; + +typedef struct _Misc { + char *geo_metry; + char *T_geometry; + char *f_n; + char *f_b; +#ifdef ALLOWLOGGING + Boolean log_on; +#endif + Boolean login_shell; + Boolean re_verse; + Boolean re_verse0; /* initial value of "-rv" */ + XtGravity resizeGravity; + Boolean reverseWrap; + Boolean autoWrap; + Boolean logInhibit; + Boolean signalInhibit; +#if OPT_TEK4014 + Boolean tekInhibit; + Boolean tekSmall; /* start tek window in small size */ +#endif + Boolean scrollbar; +#ifdef SCROLLBAR_RIGHT + Boolean useRight; +#endif + Boolean titeInhibit; + Boolean appcursorDefault; + Boolean appkeypadDefault; +#if OPT_INPUT_METHOD + char* input_method; + char* preedit_type; + Boolean open_im; +#endif + Boolean dynamicColors; + Boolean shared_ic; +#ifndef NO_ACTIVE_ICON + Boolean active_icon; /* use application icon window */ + int icon_border_width; + Pixel icon_border_pixel; +#endif /* NO_ACTIVE_ICON */ +#if OPT_DEC_SOFTFONT + Boolean font_loadable; +#endif +#if OPT_SHIFT_KEYS + Boolean shift_keys; /* true if we interpret shifted special-keys */ +#endif +#if OPT_NUM_LOCK + Boolean real_NumLock; /* true if we treat NumLock key specially */ + unsigned long num_lock; /* modifier for Num_Lock */ + unsigned long alt_left; /* modifier for Alt_L */ + unsigned long alt_right; /* modifier for Alt_R */ + Boolean meta_trans; /* true if Meta is used in translations */ + unsigned long meta_left; /* modifier for Meta_L */ + unsigned long meta_right; /* modifier for Meta_R */ +#endif +} Misc; + +typedef struct {int foo;} XtermClassPart, TekClassPart; + +typedef struct _XtermClassRec { + CoreClassPart core_class; + XtermClassPart xterm_class; +} XtermClassRec; + +extern WidgetClass xtermWidgetClass; + +#define IsXtermWidget(w) (XtClass(w) == xtermWidgetClass) + +#if OPT_TEK4014 +typedef struct _TekClassRec { + CoreClassPart core_class; + TekClassPart tek_class; +} TekClassRec; +#endif + +/* define masks for keyboard.flags */ +#define MODE_KAM 0x01 /* keyboard action mode */ +#define MODE_DECKPAM 0x02 /* keypad application mode */ +#define MODE_DECCKM 0x04 /* cursor keys */ +#define MODE_SRM 0x08 /* send-receive mode */ +#define MODE_DECBKM 0x10 /* backarrow */ + + +#define N_MARGINBELL 10 +#define MAX_TABS 320 +#define TAB_ARRAY_SIZE 10 /* number of ints to provide MAX_TABS bits */ + +typedef unsigned Tabs [TAB_ARRAY_SIZE]; + +typedef struct _XtermWidgetRec { + CorePart core; + TKeyboard keyboard; /* terminal keyboard */ + TScreen screen; /* terminal screen */ + unsigned flags; /* mode flags */ + int cur_foreground; /* current foreground color */ + int cur_background; /* current background color */ + Pixel dft_foreground; /* default foreground color */ + Pixel dft_background; /* default background color */ +#if OPT_ISO_COLORS + int sgr_foreground; /* current SGR foreground color */ +#endif +#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS + int num_ptrs; /* number of pointers per row in 'ScrnBuf' */ +#endif + unsigned initflags; /* initial mode flags */ + Tabs tabs; /* tabstops of the terminal */ + Misc misc; /* miscellaneous parameters */ +} XtermWidgetRec, *XtermWidget; + +#if OPT_TEK4014 +typedef struct _TekWidgetRec { + CorePart core; + TekPart tek; +} TekWidgetRec, *TekWidget; +#endif /* OPT_TEK4014 */ + +/* + * terminal flags + * There are actually two namespaces mixed together here. + * One is the set of flags that can go in screen->visbuf attributes + * and which must fit in a char. + * The other is the global setting stored in + * term->flags and screen->save_modes. This need only fit in an unsigned. + */ + +/* global flags and character flags (visible character attributes) */ +#define INVERSE 0x01 /* invert the characters to be output */ +#define UNDERLINE 0x02 /* true if underlining */ +#define BOLD 0x04 +#define BLINK 0x08 +/* global flags (also character attributes) */ +#define BG_COLOR 0x10 /* true if background set */ +#define FG_COLOR 0x20 /* true if foreground set */ + +/* character flags (internal attributes) */ +#define PROTECTED 0x40 /* a character is drawn that cannot be erased */ +#define CHARDRAWN 0x80 /* a character has been drawn here on the + screen. Used to distinguish blanks from + empty parts of the screen when selecting */ + + /* mask: user-visible attributes */ +#define ATTRIBUTES (INVERSE|UNDERLINE|BOLD|BLINK|BG_COLOR|FG_COLOR|INVISIBLE|PROTECTED) + +#define WRAPAROUND 0x400 /* true if auto wraparound mode */ +#define REVERSEWRAP 0x800 /* true if reverse wraparound mode */ +#define REVERSE_VIDEO 0x1000 /* true if screen white on black */ +#define LINEFEED 0x2000 /* true if in auto linefeed mode */ +#define ORIGIN 0x4000 /* true if in origin mode */ +#define INSERT 0x8000 /* true if in insert mode */ +#define SMOOTHSCROLL 0x10000 /* true if in smooth scroll mode */ +#define IN132COLUMNS 0x20000 /* true if in 132 column mode */ +#define INVISIBLE 0x40000 /* true if writing invisible text */ +#define NATIONAL 0x100000 /* true if writing national charset */ + +/* + * Per-line flags + */ +#define LINEWRAPPED 0x01 /* used once per line to indicate that it wraps + * onto the next line so we can tell the + * difference between lines that have wrapped + * around and lines that have ended naturally + * with a CR at column max_col. + */ +/* + * If we've set protected attributes with the DEC-style DECSCA, then we'll have + * to use DECSED or DECSEL to erase preserving protected text. (The normal ED, + * EL won't preserve protected-text). If we've used SPA, then normal ED and EL + * will preserve protected-text. To keep things simple, just remember the last + * control that was used to begin protected-text, and use that to determine how + * erases are performed (otherwise we'd need 2 bits per protected character). + */ +#define OFF_PROTECT 0 +#define DEC_PROTECT 1 +#define ISO_PROTECT 2 + +#ifdef SCROLLBAR_RIGHT +#define OriginX(screen) (((term->misc.useRight)?0:Scrollbar(screen)) + screen->border) +#else +#define OriginX(screen) (Scrollbar(screen) + screen->border) +#endif + +#define CursorX(screen,col) ((col) * FontWidth(screen) + OriginX(screen)) +#define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \ + + screen->border) + +#ifndef NO_ACTIVE_ICON +#define IsIcon(screen) ((screen)->whichVwin == &(screen)->iconVwin) +#define VWindow(screen) ((screen)->whichVwin->window) +#define VShellWindow XtWindow(SHELL_OF(term)) +#define TWindow(screen) ((screen)->whichTwin->window) +#define TShellWindow XtWindow(SHELL_OF(tekWidget)) +#define Width(screen) ((screen)->whichVwin->width) +#define Height(screen) ((screen)->whichVwin->height) +#define FullWidth(screen) ((screen)->whichVwin->fullwidth) +#define FullHeight(screen) ((screen)->whichVwin->fullheight) +#define FontWidth(screen) ((screen)->whichVwin->f_width) +#define FontHeight(screen) ((screen)->whichVwin->f_height) +#define FontAscent(screen) (IsIcon(screen) ? (screen)->fnt_icon->ascent \ + : (screen)->fnt_norm->ascent) +#define FontDescent(screen) (IsIcon(screen) ? (screen)->fnt_icon->descent \ + : (screen)->fnt_norm->descent) +#define Scrollbar(screen) ((screen)->whichVwin->scrollbar) +#define NormalGC(screen) ((screen)->whichVwin->normalGC) +#define ReverseGC(screen) ((screen)->whichVwin->reverseGC) +#define NormalBoldGC(screen) ((screen)->whichVwin->normalboldGC) +#define ReverseBoldGC(screen) ((screen)->whichVwin->reverseboldGC) +#define TWidth(screen) ((screen)->whichTwin->width) +#define THeight(screen) ((screen)->whichTwin->height) +#define TFullWidth(screen) ((screen)->whichTwin->fullwidth) +#define TFullHeight(screen) ((screen)->whichTwin->fullheight) +#define TekScale(screen) ((screen)->whichTwin->tekscale) + +#else /* NO_ACTIVE_ICON */ + +#define IsIcon(screen) (False) +#define VWindow(screen) ((screen)->fullVwin.window) +#define VShellWindow XtWindow(SHELL_OF(term)) +#define TWindow(screen) ((screen)->fullTwin.window) +#define TShellWindow XtWindow(SHELL_OF(tekWidget)) +#define Width(screen) ((screen)->fullVwin.width) +#define Height(screen) ((screen)->fullVwin.height) +#define FullWidth(screen) ((screen)->fullVwin.fullwidth) +#define FullHeight(screen) ((screen)->fullVwin.fullheight) +#define FontWidth(screen) ((screen)->fullVwin.f_width) +#define FontHeight(screen) ((screen)->fullVwin.f_height) +#define FontAscent(screen) ((screen)->fnt_norm->ascent) +#define FontDescent(screen) ((screen)->fnt_norm->descent) +#define Scrollbar(screen) ((screen)->fullVwin.scrollbar) +#define NormalGC(screen) ((screen)->fullVwin.normalGC) +#define ReverseGC(screen) ((screen)->fullVwin.reverseGC) +#define NormalBoldGC(screen) ((screen)->fullVwin.normalboldGC) +#define ReverseBoldGC(screen) ((screen)->fullVwin.reverseboldGC) +#define TWidth(screen) ((screen)->fullTwin.width) +#define THeight(screen) ((screen)->fullTwin.height) +#define TFullWidth(screen) ((screen)->fullTwin.fullwidth) +#define TFullHeight(screen) ((screen)->fullTwin.fullheight) +#define TekScale(screen) ((screen)->fullTwin.tekscale) + +#endif /* NO_ACTIVE_ICON */ + +#if OPT_TEK4014 +#define TEK_LINK_BLOCK_SIZE 1024 + +typedef struct Tek_Link +{ + struct Tek_Link *next; /* pointer to next TekLink in list + NULL <=> this is last TekLink */ + short fontsize; /* character size, 0-3 */ + short count; /* number of chars in data */ + char *ptr; /* current pointer into data */ + char data [TEK_LINK_BLOCK_SIZE]; +} TekLink; +#endif /* OPT_TEK4014 */ + +/* flags for cursors */ +#define OFF 0 +#define ON 1 +#define BLINKED_OFF 2 +#define CLEAR 0 +#define TOGGLE 1 + +/* flags for inhibit */ +#ifdef ALLOWLOGGING +#define I_LOG 0x01 +#endif +#define I_SIGNAL 0x02 +#define I_TEK 0x04 + +#endif /* included_ptyx_h */ |