#ifndef included_ptyx_h
#define included_ptyx_h 1
#ifdef HAVE_CONFIG_H
#include <xtermcfg.h>
#endif
#include <X11/IntrinsicP.h>
#include <X11/Shell.h>
#include <X11/StringDefs.h>
#include <X11/Xmu/Misc.h>
#include <X11/Xfuncs.h>
#include <X11/Xosdefs.h>
#include <X11/Xmu/Converters.h>
#ifdef XRENDERFONT
#include <X11/Xft/Xft.h>
#endif
#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 att
#define ATT
#endif
#ifdef SVR4
#undef SYSV
#define SYSV
#define ATT
#endif
#ifdef SYSV
#ifdef X_NOT_POSIX
#if !defined(CRAY) && !defined(SVR4)
#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : \
(close(fd2), fcntl(fd1, F_DUPFD, fd2)))
#endif
#endif
#endif
#if defined(XRENDERFONT) && defined(XFT_VERSION) && XFT_VERSION >= 20100
#define HAVE_TYPE_FCCHAR32 1
#define HAVE_TYPE_XFTCHARSPEC 1
#endif
#define USE_PTY_DEVICE 1
#define USE_PTY_SEARCH 1
#if defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) || defined(__NetBSD__)
#undef USE_PTY_DEVICE
#undef USE_PTY_SEARCH
#define USE_PTS_DEVICE 1
#elif defined(VMS)
#undef USE_PTY_DEVICE
#undef USE_PTY_SEARCH
#elif defined(PUCC_PTYD)
#undef USE_PTY_SEARCH
#endif
#if defined(SYSV) && defined(i386) && !defined(SVR4)
#define ATT
#define USE_HANDSHAKE 1
#define USE_ISPTS_FLAG 1
#endif
#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
#define USE_USG_PTYS
#define USE_HANDSHAKE 0
#elif (defined(ATT) && !defined(__sgi)) || defined(__MVS__) || (defined(SYSV) && defined(i386))
#define USE_USG_PTYS
#else
#define USE_HANDSHAKE 1
#endif
#ifndef USE_HANDSHAKE
#define USE_HANDSHAKE 1
#endif
#ifndef PTYDEV
#if defined(__hpux)
#define PTYDEV "/dev/ptym/ptyxx"
#elif defined(__MVS__)
#define PTYDEV "/dev/ptypxxxx"
#else
#define PTYDEV "/dev/ptyxx"
#endif
#endif
#ifndef TTYDEV
#if defined(__hpux)
#define TTYDEV "/dev/pty/ttyxx"
#elif defined(__MVS__)
#define TTYDEV "/dev/ptypxxxx"
#elif defined(USE_PTS_DEVICE)
#define TTYDEV "/dev/pts/0"
#else
#define TTYDEV "/dev/ttyxx"
#endif
#endif
#ifndef PTYCHAR1
#ifdef __hpux
#define PTYCHAR1 "zyxwvutsrqp"
#else
#ifdef __UNIXOS2__
#define PTYCHAR1 "pq"
#else
#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ"
#endif
#endif
#endif
#ifndef PTYCHAR2
#ifdef __hpux
#define PTYCHAR2 "fedcba9876543210"
#else
#ifdef __FreeBSD__
#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv"
#else
#define PTYCHAR2 "0123456789abcdef"
#endif
#endif
#endif
#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
#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
#ifndef PTYCHARLEN
#ifdef CRAY
#define PTYCHARLEN 3
#elif defined(__MVS__)
#define PTYCHARLEN 8
#else
#define PTYCHARLEN 2
#endif
#endif
#ifndef MAXPTTYS
#ifdef CRAY
#define MAXPTTYS 256
#else
#define MAXPTTYS 2048
#endif
#endif
typedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode;
typedef unsigned char Char;
typedef Char **ScrnBuf;
#define CharOf(n) ((unsigned char)(n))
#define INQ 0x05
#define BEL 0x07
#define FF 0x0C
#define LS1 0x0E
#define LS0 0x0F
#define NAK 0x15
#define CAN 0x18
#define SUB 0x1A
#define ESC 0x1B
#define XPOUND 0x1E
#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
#define CSI 0x9B
#define ST 0x9C
#define OSC 0x9D
#define PM 0x9E
#define APC 0x9F
#define RDEL 0xFF
#define MIN_DECID 52
#define MAX_DECID 420
#ifndef DFT_DECID
#define DFT_DECID "vt100"
#endif
#ifndef DFT_KBD_DIALECT
#define DFT_KBD_DIALECT "B"
#endif
#define UCS_REPL 0xfffd
#define UCS_LIMIT 0x80000000U
#define TERMCAP_SIZE 1500
#define NMENUFONTS 9
#define NBOX 5
#define NPARAM 30
typedef struct {
char *opt;
char *desc;
} OptionHelp;
typedef struct {
unsigned char a_type;
unsigned char a_pintro;
unsigned char a_final;
unsigned char a_inters;
char a_nparam;
short a_param[NPARAM];
} ANSI;
#define TEK_FONT_LARGE 0
#define TEK_FONT_2 1
#define TEK_FONT_3 2
#define TEK_FONT_SMALL 3
#define TEKNUMFONTS 4
#define TEKNUMLINES 4
typedef struct {
int x;
int y;
int fontsize;
unsigned 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
#define SCROLLLINES 1
#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))))))))
#ifndef RES_OFFSET
#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
#endif
#define RES_NAME(name) name
#define RES_CLASS(name) name
#define Bres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
#define Cres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRPixel, sizeof(Pixel), \
RES_OFFSET(offset), XtRString, (XtPointer) value}
#define Fres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRFontStruct, sizeof(XFontStruct *), \
RES_OFFSET(offset), XtRString, (XtPointer) value}
#define Ires(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
#define Sres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
RES_OFFSET(offset), XtRString, (XtPointer) value}
#if (XtSpecificationRelease < 6)
#ifndef NO_ACTIVE_ICON
#define NO_ACTIVE_ICON 1
#endif
#endif
#ifndef OPT_AIX_COLORS
#define OPT_AIX_COLORS 1
#endif
#ifndef OPT_BLINK_CURS
#define OPT_BLINK_CURS 1
#endif
#ifndef OPT_BOX_CHARS
#define OPT_BOX_CHARS 1
#endif
#ifndef OPT_BROKEN_OSC
#ifdef linux
#define OPT_BROKEN_OSC 1
#else
#define OPT_BROKEN_OSC 0
#endif
#endif
#ifndef OPT_BROKEN_ST
#define OPT_BROKEN_ST 1
#endif
#ifndef OPT_C1_PRINT
#define OPT_C1_PRINT 1
#endif
#ifndef OPT_CLIP_BOLD
#define OPT_CLIP_BOLD 1
#endif
#ifndef OPT_COLOR_CLASS
#define OPT_COLOR_CLASS 1
#endif
#ifndef OPT_COLOR_RES
#define OPT_COLOR_RES 1
#endif
#ifndef OPT_DEC_CHRSET
#define OPT_DEC_CHRSET 1
#endif
#ifndef OPT_DEC_LOCATOR
#define OPT_DEC_LOCATOR 0
#endif
#ifndef OPT_DEC_SOFTFONT
#define OPT_DEC_SOFTFONT 0
#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
#endif
#ifndef OPT_I18N_SUPPORT
#if (XtSpecificationRelease >= 5)
#define OPT_I18N_SUPPORT 1
#else
#define OPT_I18N_SUPPORT 0
#endif
#endif
#ifndef OPT_INITIAL_ERASE
#define OPT_INITIAL_ERASE 1
#endif
#ifndef OPT_INPUT_METHOD
#if (XtSpecificationRelease >= 6)
#define OPT_INPUT_METHOD 1
#else
#define OPT_INPUT_METHOD 0
#endif
#endif
#ifndef OPT_ISO_COLORS
#define OPT_ISO_COLORS 1
#endif
#ifndef OPT_256_COLORS
#define OPT_256_COLORS 0
#endif
#ifndef OPT_88_COLORS
#define OPT_88_COLORS 0
#endif
#ifndef OPT_HIGHLIGHT_COLOR
#define OPT_HIGHLIGHT_COLOR 1
#endif
#ifndef OPT_LOAD_VTFONTS
#define OPT_LOAD_VTFONTS 0
#endif
#ifndef OPT_LUIT_PROG
#define OPT_LUIT_PROG 0
#endif
#ifndef OPT_MAXIMIZE
#define OPT_MAXIMIZE 1
#endif
#ifndef OPT_MOD_FKEYS
#define OPT_MOD_FKEYS 1
#endif
#ifndef OPT_NUM_LOCK
#define OPT_NUM_LOCK 1
#endif
#ifndef OPT_PC_COLORS
#define OPT_PC_COLORS 1
#endif
#ifndef OPT_PTY_HANDSHAKE
#define OPT_PTY_HANDSHAKE USE_HANDSHAKE
#endif
#ifndef OPT_PRINT_COLORS
#define OPT_PRINT_COLORS 1
#endif
#ifndef OPT_READLINE
#define OPT_READLINE 0
#endif
#ifndef OPT_SAME_NAME
#define OPT_SAME_NAME 1
#endif
#ifndef OPT_SCO_FUNC_KEYS
#define OPT_SCO_FUNC_KEYS 0
#endif
#ifndef OPT_SESSION_MGT
#if defined(XtNdieCallback) && defined(XtNsaveCallback)
#define OPT_SESSION_MGT 1
#else
#define OPT_SESSION_MGT 0
#endif
#endif
#ifndef OPT_SHIFT_FONTS
#define OPT_SHIFT_FONTS 1
#endif
#ifndef OPT_SUNPC_KBD
#define OPT_SUNPC_KBD 1
#endif
#ifndef OPT_TCAP_QUERY
#define OPT_TCAP_QUERY 0
#endif
#ifndef OPT_TEK4014
#define OPT_TEK4014 1
#endif
#ifndef OPT_TOOLBAR
#define OPT_TOOLBAR 0
#endif
#ifndef OPT_TRACE
#define OPT_TRACE 0
#endif
#ifndef OPT_VT52_MODE
#define OPT_VT52_MODE 1
#endif
#ifndef OPT_WIDE_CHARS
#define OPT_WIDE_CHARS 0
#endif
#ifndef OPT_XMC_GLITCH
#define OPT_XMC_GLITCH 0
#endif
#ifndef OPT_ZICONBEEP
#define OPT_ZICONBEEP 1
#endif
#if OPT_AIX_COLORS && !OPT_ISO_COLORS
#undef OPT_AIX_COLORS
#define OPT_AIX_COLORS 0
#endif
#if OPT_PC_COLORS && !OPT_ISO_COLORS
#undef OPT_PC_COLORS
#define OPT_PC_COLORS 0
#endif
#if OPT_PRINT_COLORS && !OPT_ISO_COLORS
#undef OPT_PRINT_COLORS
#define OPT_PRINT_COLORS 0
#endif
#if OPT_256_COLORS && !OPT_ISO_COLORS
#undef OPT_256_COLORS
#define OPT_256_COLORS 0
#endif
#if OPT_88_COLORS && !OPT_ISO_COLORS
#undef OPT_88_COLORS
#define OPT_88_COLORS 0
#endif
#if OPT_88_COLORS && OPT_256_COLORS
#undef OPT_88_COLORS
#define OPT_88_COLORS 0
#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)
#define COLOR_UL (NUM_ANSI_COLORS+1)
#define COLOR_BL (NUM_ANSI_COLORS+2)
#define COLOR_RV (NUM_ANSI_COLORS+3)
#define MAXCOLORS (NUM_ANSI_COLORS+4)
#ifndef DFT_COLORMODE
#define DFT_COLORMODE TRUE
#endif
#define ReverseOrHilite(screen,flags,hilite) \
(( screen->colorRVMode && hilite ) || \
( !screen->colorRVMode && \
(( (flags & INVERSE) && !hilite) || \
(!(flags & INVERSE) && hilite)) ))
#if OPT_TCAP_QUERY
# define XK_COLORS 0x0003
#endif
#else
#define if_OPT_ISO_COLORS(screen, code)
#define TERM_COLOR_FLAGS 0
#define ReverseOrHilite(screen,flags,hilite) \
(( (flags & INVERSE) && !hilite) || \
(!(flags & INVERSE) && hilite))
#endif
#if OPT_AIX_COLORS
#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code
#else
#define if_OPT_AIX_COLORS(screen, code)
#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)
#elif OPT_ISO_COLORS
# define if_OPT_EXT_COLORS(screen, code)
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code
#else
# define if_OPT_EXT_COLORS(screen, code)
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code)
#endif
#define COLOR_RES_NAME(root) "color" root
#if OPT_COLOR_CLASS
#define COLOR_RES_CLASS(root) "Color" root
#else
#define COLOR_RES_CLASS(root) XtCForeground
#endif
#if OPT_COLOR_RES
#define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value)
#else
#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value)
#endif
#if OPT_DEC_CHRSET
#define if_OPT_DEC_CHRSET(code) code
#define CSET_SWL 0
#define CSET_DHL_TOP 1
#define CSET_DHL_BOT 2
#define CSET_DWL 3
#define NUM_CHRSET 8
#define CSET_NORMAL(code) ((code) == CSET_SWL)
#define CSET_DOUBLE(code) (!CSET_NORMAL(code) && !CSET_EXTEND(code))
#define CSET_EXTEND(code) ((code) > CSET_DWL)
#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)
#define CurMaxCol(screen, row) screen->max_col
#define CurCursorX(screen, row, col) CursorX(screen, col)
#define CurFontWidth(screen, row) FontWidth(screen)
#endif
#if OPT_LUIT_PROG && !OPT_WIDE_CHARS
#error Luit requires the wide-chars configuration
#endif
#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
#define BUF_PTRS (MAX_PTRS - BUF_HEAD)
#if OPT_EBCDIC
extern int E2A(int);
extern int A2E(int);
#else
#define E2A(a) (a)
#define A2E(a) (a)
#endif
#define CONTROL(a) (A2E(E2A(a)&037))
#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->vtXX_level == 0) code
#else
#define if_OPT_VT52_MODE(screen, code)
#endif
#if OPT_XMC_GLITCH
#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
#define XMC_GLITCH 1
#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD)
#else
#define if_OPT_XMC_GLITCH(screen, code)
#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;
#else
#define if_OPT_WIDE_CHARS(screen, code)
#define PAIRED_CHARS(a,b) a
typedef unsigned char IChar;
#endif
#define BUF_SIZE 4096
typedef struct {
int cnt;
IChar * ptr;
Char buf[BUF_SIZE];
#if OPT_WIDE_CHARS
IChar buf2[BUF_SIZE];
#define DecodedData(data) (data)->buf2
#else
#define DecodedData(data) (data)->buf
#endif
} PtyData;
#if OPT_TRACE
#include <trace.h>
#else
#ifndef TRACE
#define TRACE(p)
#endif
#ifndef TRACE_ARGV
#define TRACE_ARGV(tag,argv)
#endif
#ifndef TRACE_CHILD
#define TRACE_CHILD
#endif
#ifndef TRACE_HINTS
#define TRACE_HINTS(hints)
#endif
#ifndef TRACE_OPTS
#define TRACE_OPTS(opts,ress,lens)
#endif
#ifndef TRACE_TRANS
#define TRACE_TRANS(name,w)
#endif
#endif
typedef enum {
OFF_FLAGS = 0
, 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
, OFF_COM1L
, OFF_COM1H
, OFF_COM2L
, OFF_COM2H
#endif
} BufOffsets;
#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])
#define BUF_COM1L(buf, row) (buf[MAX_PTRS * (row) + OFF_COM1L])
#define BUF_COM1H(buf, row) (buf[MAX_PTRS * (row) + OFF_COM1H])
#define BUF_COM2L(buf, row) (buf[MAX_PTRS * (row) + OFF_COM2L])
#define BUF_COM2H(buf, row) (buf[MAX_PTRS * (row) + OFF_COM2H])
#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)
#define SCRN_BUF_COM1L(screen, row) BUF_COM1L(screen->visbuf, row)
#define SCRN_BUF_COM2L(screen, row) BUF_COM2L(screen->visbuf, row)
#define SCRN_BUF_COM1H(screen, row) BUF_COM1H(screen->visbuf, row)
#define SCRN_BUF_COM2H(screen, row) BUF_COM2H(screen->visbuf, row)
typedef struct {
unsigned chrset;
unsigned flags;
XFontStruct * fs;
GC gc;
char * fn;
} XTermFonts;
typedef enum {
DP_CRS_VISIBLE,
DP_DECANM,
DP_DECARM,
DP_DECAWM,
DP_DECBKM,
DP_DECCKM,
DP_DECCOLM,
DP_DECOM,
DP_DECPEX,
DP_DECPFF,
DP_DECSCLM,
DP_DECSCNM,
DP_DECTCEM,
DP_DECTEK,
DP_PRN_EXTENT,
DP_PRN_FORMFEED,
DP_X_ALTSCRN,
DP_X_DECCOLM,
DP_X_LOGGING,
DP_X_MARGIN,
DP_X_MORE,
DP_X_MOUSE,
DP_X_REVWRAP,
DP_X_X10MSE,
#if OPT_BLINK_CURS
DP_CRS_BLINK,
#endif
DP_LAST
} SaveModes;
#define DoSM(code,value) screen->save_modes[code] = value
#define DoRM(code,value) value = screen->save_modes[code]
typedef enum {
noMenu = -1,
mainMenu,
vtMenu,
fontMenu,
tekMenu
} MenuIndex;
#define NUM_POPUP_MENUS 4
#if OPT_COLOR_RES
typedef struct {
String resource;
Pixel value;
int mode;
} ColorRes;
#else
#define ColorRes Pixel
#endif
typedef struct {
unsigned which;
Pixel colors[NCOLORS];
char *names[NCOLORS];
} ScrnColors;
typedef struct {
Boolean saved;
int row;
int col;
unsigned flags;
char curgl;
char curgr;
char gsets[4];
#if OPT_ISO_COLORS
int cur_foreground;
int cur_background;
int sgr_foreground;
int sgr_background;
Boolean sgr_extended;
#endif
} SavedCursor;
typedef struct {
int width;
Boolean rv_cached;
int rv_active;
Pixel bg;
Pixel fg;
Pixel bdr;
Pixmap bdpix;
} SbInfo;
struct _vtwin {
Window window;
int width;
int height;
int fullwidth;
int fullheight;
int f_width;
int f_height;
int f_ascent;
int f_descent;
SbInfo sb_info;
GC normalGC;
GC reverseGC;
GC normalboldGC;
GC reverseboldGC;
#if OPT_TOOLBAR
Widget menu_bar;
Dimension menu_height;
#endif
};
struct _tekwin {
Window window;
int width;
int height;
int fullwidth;
int fullheight;
double tekscale;
};
typedef struct {
Display *display;
int respond;
#if OPT_TCAP_QUERY
int tc_query;
#endif
long pid;
int uid;
int gid;
GC cursorGC;
GC fillCursorGC;
GC reversecursorGC;
GC cursoroutlineGC;
Pixel foreground;
Pixel cursorcolor;
Pixel mousecolor;
Pixel mousecolorback;
#if OPT_ISO_COLORS
ColorRes Acolors[MAXCOLORS];
int veryBoldColors;
Boolean boldColors;
Boolean colorMode;
Boolean colorULMode;
Boolean colorBDMode;
Boolean colorBLMode;
Boolean colorRVMode;
Boolean colorAttrMode;
#endif
#if OPT_HIGHLIGHT_COLOR
Pixel highlightcolor;
#endif
#if OPT_DEC_CHRSET
Boolean font_doublesize;
int cache_doublesize;
Char cur_chrset;
int fonts_used;
XTermFonts double_fonts[NUM_CHRSET];
#endif
#if OPT_WIDE_CHARS
Boolean wide_chars;
Boolean vt100_graphics;
int utf8_mode;
int utf_count;
IChar utf_char;
#endif
#if OPT_BROKEN_OSC
Boolean brokenLinuxOSC;
#endif
#if OPT_BROKEN_ST
Boolean brokenStringTerm;
#endif
#if OPT_C1_PRINT
Boolean c1_printable;
#endif
int border;
Cursor arrow;
unsigned long event_mask;
unsigned short send_mouse_pos;
#if OPT_READLINE
unsigned click1_moves;
unsigned paste_moves;
unsigned dclick3_deletes;
unsigned paste_brackets;
unsigned paste_quotes;
unsigned paste_literal_nl;
#endif
#if OPT_DEC_LOCATOR
Boolean locator_reset;
Boolean locator_pixels;
unsigned short locator_events;
Boolean loc_filter;
int loc_filter_top;
int loc_filter_left;
int loc_filter_bottom;
int loc_filter_right;
#endif
int mouse_button;
int mouse_row;
int mouse_col;
int select;
Boolean visualbell;
Boolean poponbell;
Boolean allowSendEvents;
Boolean allowWindowOps;
Boolean awaitInput;
Boolean grabbedKbd;
#ifdef ALLOWLOGGING
int logging;
int logfd;
char *logfile;
IChar *logstart;
#endif
int inhibit;
Boolean Vshow;
struct _vtwin fullVwin;
#ifndef NO_ACTIVE_ICON
struct _vtwin iconVwin;
struct _vtwin * whichVwin;
#endif
Cursor pointer_cursor;
String answer_back;
String printer_command;
Boolean printer_autoclose;
Boolean printer_extent;
Boolean printer_formfeed;
int printer_controlmode;
int print_attributes;
Boolean fnt_prop;
Boolean fnt_boxes;
#if OPT_BOX_CHARS
Boolean force_box_chars;
#endif
Dimension fnt_wide;
Dimension fnt_high;
XFontStruct *fnt_norm;
XFontStruct *fnt_bold;
Boolean free_bold_box;
#if OPT_WIDE_CHARS
XFontStruct *fnt_dwd;
XFontStruct *fnt_dwdb;
#endif
#ifndef NO_ACTIVE_ICON
XFontStruct *fnt_icon;
#endif
int enbolden;
XPoint *box;
int cursor_state;
#if OPT_BLINK_CURS
Boolean cursor_blink;
int cursor_on;
int cursor_off;
XtIntervalId cursor_timer;
#endif
int cursor_set;
int cursor_col;
int cursor_row;
int cur_col;
int cur_row;
int max_col;
int max_row;
int top_marg;
int bot_marg;
Widget scrollWidget;
int topline;
int savedlines;
int savelines;
int scrolllines;
Boolean scrollttyoutput;
Boolean scrollkey;
ScrnBuf visbuf;
ScrnBuf allbuf;
Char *sbuf_address;
ScrnBuf altbuf;
Char *abuf_address;
Char **save_ptr;
size_t save_len;
Boolean alternate;
unsigned short do_wrap;
int incopy;
int copy_src_x;
int copy_src_y;
unsigned int copy_width;
unsigned int copy_height;
int copy_dest_x;
int copy_dest_y;
Boolean c132;
Boolean curses;
Boolean hp_ll_bc;
Boolean marginbell;
int nmarginbell;
int bellarmed;
Boolean multiscroll;
int scrolls;
SavedCursor sc[2];
int save_modes[DP_LAST];
String keyboard_dialect;
char gsets[4];
char curgl;
char curgr;
char curss;
String term_id;
int terminal_id;
int vtXX_level;
int ansi_level;
int scroll_amt;
int refresh_amt;
int protected_mode;
Boolean old_fkeys;
Boolean delete_is_del;
Boolean jumpscroll;
Boolean always_highlight;
Boolean underline;
Boolean bold_mode;
#if OPT_MAXIMIZE
Boolean restore_data;
unsigned restore_x;
unsigned restore_y;
unsigned restore_width;
unsigned restore_height;
#endif
#if OPT_VT52_MODE
int vt52_save_level;
char vt52_save_curgl;
char vt52_save_curgr;
char vt52_save_curss;
char vt52_save_gsets[4];
#endif
#if OPT_XMC_GLITCH
int xmc_glitch;
int xmc_attributes;
Boolean xmc_inline;
Boolean move_sgr_ok;
#endif
#if OPT_TEK4014
GC TnormalGC;
GC TcursorGC;
Pixel Tforeground;
Pixel Tbackground;
Pixel Tcursorcolor;
int Tcolor;
Boolean Tshow;
Boolean waitrefresh;
struct _tekwin fullTwin;
#ifndef NO_ACTIVE_ICON
struct _tekwin iconTwin;
struct _tekwin *whichTwin;
#endif
int xorplane;
GC linepat[TEKNUMLINES];
Boolean TekEmu;
int cur_X;
int cur_Y;
Tmodes cur;
Tmodes page;
int margin;
int pen;
char *TekGIN;
int gin_terminator;
#endif
int multiClickTime;
int visualBellDelay;
int bellSuppressTime;
Boolean bellInProgress;
char *charClass;
Boolean cutNewline;
Boolean cutToBeginningOfLine;
Boolean highlight_selection;
Boolean trim_selection;
Boolean i18nSelections;
Boolean brokenSelections;
Char *selection_data;
int selection_size;
int selection_length;
Time selection_time;
int startHRow, startHCol,
endHRow, endHCol,
startHCoord, endHCoord;
Atom* selection_atoms;
Cardinal sel_atoms_size;
Cardinal selection_count;
Boolean input_eight_bits;
Boolean output_eight_bits;
Boolean control_eight_bits;
Boolean backarrow_key;
Boolean meta_sends_esc;
Pixmap menu_item_bitmap;
String menu_font_names[NMENUFONTS];
long menu_font_sizes[NMENUFONTS];
int menu_font_number;
XIC xic;
#ifdef XRENDERFONT
XftFont *renderFont;
XftFont *renderFontBold;
XftDraw *renderDraw;
#endif
#if OPT_INPUT_METHOD
XFontSet fs;
int fs_ascent;
#endif
} TScreen;
typedef struct _TekPart {
XFontStruct * Tfont[TEKNUMFONTS];
int tobaseline[TEKNUMFONTS];
char * initial_font;
char * gin_terminator_str;
#if OPT_TOOLBAR
Widget menu_bar;
Dimension menu_height;
#endif
} TekPart;
#if OPT_READLINE
#define SCREEN_FLAG(screenp,f) (1&(screenp)->f)
#define SCREEN_FLAG_set(screenp,f) ((screenp)->f |= 1)
#define SCREEN_FLAG_unset(screenp,f) ((screenp)->f &= ~1L)
#define SCREEN_FLAG_save(screenp,f) \
((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f))
#define SCREEN_FLAG_restore(screenp,f) ((screenp)->f = (((screenp)->f)>>1))
#else
#define SCREEN_FLAG(screenp,f) (0)
#endif
#define INWINDOW 01
#define FOCUS 02
#define MULTICLICKTIME 250
typedef enum {
keyboardIsLegacy,
keyboardIsDefault,
keyboardIsHP,
keyboardIsSCO,
keyboardIsSun,
keyboardIsVT220
} xtermKeyboardType;
typedef struct
{
xtermKeyboardType type;
unsigned flags;
#if OPT_INITIAL_ERASE
int reset_DECBKM;
#endif
int modify_cursor_keys;
} TKeyboard;
typedef struct {
char *f_n;
char *f_b;
#if OPT_WIDE_CHARS
char *f_w;
char *f_wb;
#endif
} VTFontNames;
typedef struct _Misc {
VTFontNames default_font;
char *geo_metry;
char *T_geometry;
#if OPT_WIDE_CHARS
Boolean cjk_width;
#endif
#if OPT_LUIT_PROG
Boolean callfilter;
Boolean use_encoding;
char *locale_str;
char *localefilter;
#endif
#if OPT_INPUT_METHOD
char *f_x;
#endif
int limit_resize;
#ifdef ALLOWLOGGING
Boolean log_on;
#endif
Boolean login_shell;
Boolean re_verse;
Boolean re_verse0;
XtGravity resizeGravity;
Boolean reverseWrap;
Boolean autoWrap;
Boolean logInhibit;
Boolean signalInhibit;
#if OPT_TEK4014
Boolean tekInhibit;
Boolean tekSmall;
#endif
Boolean scrollbar;
#ifdef SCROLLBAR_RIGHT
Boolean useRight;
#endif
Boolean titeInhibit;
Boolean tiXtraScroll;
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;
int icon_border_width;
Pixel icon_border_pixel;
#endif
#if OPT_DEC_SOFTFONT
Boolean font_loadable;
#endif
#if OPT_SHIFT_FONTS
Boolean shift_fonts;
#endif
#if OPT_SUNPC_KBD
int ctrl_fkeys;
#endif
#if OPT_NUM_LOCK
Boolean real_NumLock;
Boolean alwaysUseMods;
unsigned long num_lock;
unsigned long alt_left;
unsigned long alt_right;
Boolean meta_trans;
unsigned long meta_left;
unsigned long meta_right;
#endif
#ifdef XRENDERFONT
char *face_name;
int face_size;
#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 MODE_KAM 0x01
#define MODE_DECKPAM 0x02
#define MODE_DECCKM 0x04
#define MODE_SRM 0x08
#define MODE_DECBKM 0x10
#define N_MARGINBELL 10
#define TAB_BITS_SHIFT 5
#define TAB_BITS_WIDTH (1 << TAB_BITS_SHIFT)
#define TAB_ARRAY_SIZE 10
#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
typedef unsigned Tabs [TAB_ARRAY_SIZE];
typedef struct _XtermWidgetRec {
CorePart core;
TKeyboard keyboard;
TScreen screen;
unsigned flags;
int cur_foreground;
int cur_background;
Pixel dft_foreground;
Pixel dft_background;
#if OPT_ISO_COLORS
int sgr_foreground;
int sgr_background;
Boolean sgr_extended;
#endif
#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
int num_ptrs;
#endif
unsigned initflags;
Tabs tabs;
Misc misc;
} XtermWidgetRec, *XtermWidget;
#if OPT_TEK4014
typedef struct _TekWidgetRec {
CorePart core;
TekPart tek;
} TekWidgetRec, *TekWidget;
#endif
#define INVERSE 0x01
#define UNDERLINE 0x02
#define BOLD 0x04
#define BLINK 0x08
#define BG_COLOR 0x10
#define FG_COLOR 0x20
#define PROTECTED 0x40
#define CHARDRAWN 0x80
#define NOBACKGROUND 0x100
#define NOTRANSLATION 0x200
#define NATIVEENCODING 0x400
#define DOUBLEWFONT 0x800
#define DOUBLEHFONT 0x1000
#define CHARBYCHAR 0x2000
#define DRAWX_MASK 0xff
#define NORESOLUTION 0x800000
#define ATTRIBUTES (INVERSE|UNDERLINE|BOLD|BLINK|BG_COLOR|FG_COLOR|INVISIBLE|PROTECTED)
#define WRAPAROUND 0x400
#define REVERSEWRAP 0x800
#define REVERSE_VIDEO 0x1000
#define LINEFEED 0x2000
#define ORIGIN 0x4000
#define INSERT 0x8000
#define SMOOTHSCROLL 0x10000
#define IN132COLUMNS 0x20000
#define INVISIBLE 0x40000
#define NATIONAL 0x100000
#define LINEWRAPPED 0x01
#define OFF_PROTECT 0
#define DEC_PROTECT 1
#define ISO_PROTECT 2
#ifdef SCROLLBAR_RIGHT
#define OriginX(screen) (((term->misc.useRight)?0:ScrollbarWidth(screen)) + screen->border)
#else
#define OriginX(screen) (ScrollbarWidth(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)->whichVwin->f_ascent)
#define FontDescent(screen) (IsIcon(screen) ? (screen)->fnt_icon->descent \
: (screen)->whichVwin->f_descent)
#define ScrollbarWidth(screen) ((screen)->whichVwin->sb_info.width)
#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
#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)->fullVwin.f_ascent)
#define FontDescent(screen) ((screen)->fullVwin.f_descent)
#define ScrollbarWidth(screen) ((screen)->fullVwin.sb_info.width)
#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
#if OPT_TEK4014
#define TEK_LINK_BLOCK_SIZE 1024
typedef struct Tek_Link
{
struct Tek_Link *next;
short fontsize;
short count;
char *ptr;
char data [TEK_LINK_BLOCK_SIZE];
} TekLink;
#endif
#define OFF 0
#define ON 1
#define BLINKED_OFF 2
#define CLEAR 0
#define TOGGLE 1
#ifdef ALLOWLOGGING
#define I_LOG 0x01
#endif
#define I_SIGNAL 0x02
#define I_TEK 0x04
#endif