summaryrefslogtreecommitdiff
path: root/app/xterm/ptyx.h
diff options
context:
space:
mode:
Diffstat (limited to 'app/xterm/ptyx.h')
-rw-r--r--app/xterm/ptyx.h280
1 files changed, 206 insertions, 74 deletions
diff --git a/app/xterm/ptyx.h b/app/xterm/ptyx.h
index 3ea84ed15..12e18bef1 100644
--- a/app/xterm/ptyx.h
+++ b/app/xterm/ptyx.h
@@ -1,7 +1,7 @@
-/* $XTermId: ptyx.h,v 1.1082 2023/01/02 13:24:41 tom Exp $ */
+/* $XTermId: ptyx.h,v 1.1124 2024/05/21 23:30:59 tom Exp $ */
/*
- * Copyright 1999-2022,2023 by Thomas E. Dickey
+ * Copyright 1999-2023,2024 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -389,6 +389,7 @@ typedef struct {
#define ANSI_OSC 0x9D
#define ANSI_PM 0x9E
#define ANSI_APC 0x9F
+#define XTERM_PUA 0xEEEE /* internal mapping for DEC Technical */
#define BAD_ASCII '?'
#define NonLatin1(c) (((c) != ANSI_LF) && \
@@ -397,6 +398,9 @@ typedef struct {
((c) >= ANSI_DEL && (c) <= ANSI_APC)))
#define OnlyLatin1(c) (NonLatin1(c) ? BAD_ASCII : (c))
+#define L_BLOK '['
+#define R_BLOK ']'
+
#define L_CURL '{'
#define R_CURL '}'
@@ -445,6 +449,12 @@ typedef struct {
typedef short ParmType;
typedef unsigned short UParm; /* unparseputn passes ParmType */
+#define MaxSParm 0x7fff /* limit if a signed value is needed */
+#define MaxUParm 0xffff /* limit if unsigned value is needed */
+
+#define SParmOf(n) ((int)(ParmType)(n))
+#define UParmOf(n) ((unsigned)(UParm)(n))
+
typedef struct {
Char a_type; /* CSI, etc., see unparseq() */
Char a_pintro; /* private-mode char, if any */
@@ -485,15 +495,14 @@ typedef struct {
int height;
} BitmapBits;
-/* bit-assignments for extensions to DECRQCRA */
+/* bit-assignments for extensions to DECRQCRA, to omit DEC features */
typedef enum {
csDEC = 0
- ,csPOSITIVE = xBIT(0)
- ,csATTRIBS = xBIT(1)
- ,csNOTRIM = xBIT(2)
- ,csDRAWN = xBIT(3)
- ,csBYTE = xBIT(4)
- ,cs8TH = xBIT(5)
+ ,csPOSITIVE = xBIT(0) /* do not negate the result */
+ ,csATTRIBS = xBIT(1) /* do not report the VT100 video attributes */
+ ,csNOTRIM = xBIT(2) /* do not omit checksum for blanks */
+ ,csDRAWN = xBIT(3) /* do not skip uninitialized cells */
+ ,csBYTE = xBIT(4) /* do not mask cell value to 8 bits or ignore combining chars */
} CSBITS;
#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
@@ -830,6 +839,10 @@ typedef enum {
#define OPT_WIDE_ATTRS 1 /* true if xterm supports 16-bit attributes */
#endif
+#ifndef OPT_VT525_COLORS
+#define OPT_VT525_COLORS 1 /* true if xterm is configured for VT525 colors */
+#endif
+
#ifndef OPT_WIDE_CHARS
#define OPT_WIDE_CHARS 1 /* true if xterm supports 16-bit characters */
#endif
@@ -923,7 +936,7 @@ typedef enum {
, gcBoldReverse
, gcFiller
, gcBorder
-#if OPT_BOX_CHARS
+#if OPT_BOX_CHARS || OPT_WIDE_CHARS
, gcLine
, gcDots
#endif
@@ -1028,6 +1041,7 @@ typedef enum {
,nrc_DEC_Supp /* vt2xx */
,nrc_DEC_Supp_Graphic /* vt3xx */
,nrc_DEC_Technical /* vt3xx */
+ ,nrc_DEC_UPSS /* vt3xx */
,nrc_Dutch /* vt2xx */
,nrc_Finnish /* vt2xx */
,nrc_Finnish2 /* vt2xx */
@@ -1043,7 +1057,7 @@ typedef enum {
,nrc_Hebrew /* vt5xx */
,nrc_ISO_Hebrew_Supp /* vt5xx */
,nrc_Italian /* vt2xx */
- ,nrc_ISO_Latin_1_Supp /* vt5xx */
+ ,nrc_ISO_Latin_1_Supp /* vt3xx */
,nrc_ISO_Latin_2_Supp /* vt5xx */
,nrc_ISO_Latin_5_Supp /* vt5xx */
,nrc_ISO_Latin_Cyrillic /* vt5xx */
@@ -1063,18 +1077,25 @@ typedef enum {
} DECNRCM_codes;
/*
+ * Default and alternate codes for user-preferred supplemental set.
+ */
+#define DFT_UPSS nrc_DEC_Supp_Graphic
+#define ALT_UPSS nrc_ISO_Latin_1_Supp
+#define PreferredUPSS(screen) ((screen)->prefer_latin1 ? ALT_UPSS : DFT_UPSS)
+
+/*
* Use this enumerated type to check consistency among dpmodes(), savemodes()
* restoremodes() and do_dec_rqm().
*/
typedef enum {
- srm_DECCKM = 1
- ,srm_DECANM = 2
- ,srm_DECCOLM = 3
- ,srm_DECSCLM = 4
- ,srm_DECSCNM = 5
- ,srm_DECOM = 6
- ,srm_DECAWM = 7
- ,srm_DECARM = 8
+ srm_DECCKM = 1 /* Cursor Keys Mode */
+ ,srm_DECANM = 2 /* ANSI Mode */
+ ,srm_DECCOLM = 3 /* Column Mode */
+ ,srm_DECSCLM = 4 /* Scrolling Mode */
+ ,srm_DECSCNM = 5 /* Screen Mode */
+ ,srm_DECOM = 6 /* Origin Mode */
+ ,srm_DECAWM = 7 /* Autowrap Mode */
+ ,srm_DECARM = 8 /* Autorepeat Mode */
,srm_X10_MOUSE = SET_X10_MOUSE
#if OPT_TOOLBAR
,srm_RXVT_TOOLBAR = 10
@@ -1084,19 +1105,21 @@ typedef enum {
,srm_CURSOR_BLINK_OPS = 13
,srm_XOR_CURSOR_BLINKS = 14
#endif
- ,srm_DECPFF = 18
- ,srm_DECPEX = 19
- ,srm_DECTCEM = 25
+ ,srm_DECPFF = 18 /* Print Form Feed Mode */
+ ,srm_DECPEX = 19 /* Printer Extent Mode */
+ ,srm_DECTCEM = 25 /* Text Cursor Enable Mode */
,srm_RXVT_SCROLLBAR = 30
+ ,srm_DECRLM = 34 /* vt510:Cursor Right to Left Mode */
#if OPT_SHIFT_FONTS
- ,srm_RXVT_FONTSIZE = 35
+ ,srm_RXVT_FONTSIZE = 35 /* also vt520:DECHEBM */
#endif
+ ,srm_DECHEM = 36 /* vt510:Hebrew Encoding Mode */
#if OPT_TEK4014
,srm_DECTEK = 38
#endif
,srm_132COLS = 40
,srm_CURSES_HACK = 41
- ,srm_DECNRCM = 42
+ ,srm_DECNRCM = 42 /* National Replacement Character Set Mode */
#if OPT_PRINT_GRAPHICS
,srm_DECGEPM = 43 /* Graphics Expanded Print Mode */
#endif
@@ -1108,13 +1131,40 @@ typedef enum {
,srm_DECGPBM = 46 /* Graphics Print Background Mode */
#endif
,srm_ALTBUF = 47 /* also DECGRPM (Graphics Rotated Print Mode) */
- ,srm_DECNKM = 66
- ,srm_DECBKM = 67
- ,srm_DECLRMM = 69
+ ,srm_DECNAKB = 57 /* vt510:Greek/N-A Keyboard Mapping */
+ ,srm_DECIPEM = 58 /* vt510:IBM ProPrinter Emulation Mode */
+ ,srm_DECHCCM = 60 /* vt420:Horizontal Cursor-Coupling Mode */
+ ,srm_DECVCCM = 61 /* vt420:Vertical Cursor-Coupling Mode */
+ ,srm_DECPCCM = 64 /* vt420:Page Cursor-Coupling Mode */
+ ,srm_DECNKM = 66 /* vt420:Numeric Keypad Mode */
+ ,srm_DECBKM = 67 /* vt420:Backarrow Key mode */
+ ,srm_DECKBUM = 68 /* vt420:Keyboard Usage mode */
+ ,srm_DECLRMM = 69 /* vt420:Vertical Split Screen Mode (DECVSSM) */
+ ,srm_DECXRLM = 73 /* vt420:Transmit Rate Limiting */
#if OPT_SIXEL_GRAPHICS
,srm_DECSDM = 80 /* Sixel Display Mode */
#endif
- ,srm_DECNCSM = 95
+ ,srm_DECKPM = 81 /* vt420:Key Position Mode */
+ ,srm_DECNCSM = 95 /* vt510:No Clearing Screen On Column Change */
+ ,srm_DECRLCM = 96 /* vt510:Right-to-Left Copy */
+ ,srm_DECCRTSM = 97 /* vt510:CRT Save Mode */
+ ,srm_DECARSM = 98 /* vt510:Auto Resize Mode */
+ ,srm_DECMCM = 99 /* vt510:Modem Control Mode */
+ ,srm_DECCAAM = 100 /* vt510:Auto Answerback Mode */
+ ,srm_DECCANSM = 101 /* vt510:Conceal Answerback Message Mode */
+ ,srm_DECNULM = 102 /* vt510:Ignoring Null Mode */
+ ,srm_DECHDPXM = 103 /* vt510:Half-Duplex Mode */
+ ,srm_DECOSCNM = 106 /* vt510:Overscan Mode */
+ ,srm_DECNUMLK = 108 /* vt510:Num Lock Mode */
+ ,srm_DECCAPSLK = 109 /* vt510:Caps Lock Mode */
+ ,srm_DECKLHIM = 110 /* vt510:Keyboard LEDs Host Indicator Mode */
+ ,srm_DECFWM = 111 /* vt520:Framed Windows Mode */
+ ,srm_DECRPL = 112 /* vt520:Review Previous Lines */
+ ,srm_DECHWUM = 113 /* vt520:Host Wake-Up */
+ ,srm_DECATCUM = 114 /* vt520:Alternate Text Color Underline */
+ ,srm_DECATCBM = 115 /* vt520:Alternate Text Color Blink */
+ ,srm_DECBBSM = 116 /* vt520:Bold and Blink Style Mode */
+ ,srm_DECECM = 117 /* vt520:Erase Color Mode */
,srm_VT200_MOUSE = SET_VT200_MOUSE
,srm_VT200_HIGHLIGHT_MOUSE = SET_VT200_HIGHLIGHT_MOUSE
,srm_BTN_EVENT_MOUSE = SET_BTN_EVENT_MOUSE
@@ -1129,6 +1179,7 @@ typedef enum {
,srm_ALTERNATE_SCROLL = SET_ALTERNATE_SCROLL
,srm_RXVT_SCROLL_TTY_OUTPUT = 1010
,srm_RXVT_SCROLL_TTY_KEYPRESS = 1011
+ ,srm_FAST_SCROLL = 1014
,srm_EIGHT_BIT_META = 1034
#if OPT_NUM_LOCK
,srm_REAL_NUMLOCK = 1035
@@ -1143,6 +1194,7 @@ typedef enum {
,srm_BELL_IS_URGENT = 1042
,srm_POP_ON_BELL = 1043
,srm_KEEP_CLIPBOARD = 1044
+ ,srm_REVERSEWRAP2 = 1045 /* reverse-wrap without limits */
,srm_ALLOW_ALTBUF = 1046
,srm_OPT_ALTBUF = 1047
,srm_SAVE_CURSOR = 1048
@@ -1295,6 +1347,7 @@ typedef enum {
/* aliases */
, DATA(C0)
, DATA(DEL)
+ , DATA(STTY)
#undef DATA
, epLAST
} PasteControls;
@@ -1531,10 +1584,10 @@ typedef enum {
#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 CSET_SWL 0 /* character set: single-width line */
+#define CSET_DHL_TOP 1 /* character set: double-height top line */
+#define CSET_DHL_BOT 2 /* character set: double-height bottom line */
+#define CSET_DWL 3 /* character set: double-width line */
#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */
/* Use remaining bits for encoding the other character-sets */
@@ -1584,6 +1637,14 @@ typedef enum {
/***====================================================================***/
+#if OPT_DEC_RECTOPS
+#define if_OPT_DEC_RECTOPS(stmt) stmt
+#else
+#define if_OPT_DEC_RECTOPS(stmt) /* nothing */
+#endif
+
+/***====================================================================***/
+
#if OPT_EBCDIC
extern int E2A(int);
extern int A2E(int);
@@ -1594,6 +1655,9 @@ extern int A2E(int);
#define CONTROL(a) (A2E(E2A(a)&037))
+#define XTERM_ERASE A2E(CONTROL('H'))
+#define XTERM_LNEXT A2E(CONTROL('V'))
+
/***====================================================================***/
#if OPT_TEK4014
@@ -1652,15 +1716,24 @@ typedef unsigned char IAttr; /* at least 8 bits */
#if OPT_WIDE_CHARS
#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow
-#define NARROW_ICHAR 0xffff
+#define NARROW_ICHAR 0xffff
#if OPT_WIDER_ICHAR
-#define WIDEST_ICHAR 0x1fffff
-typedef unsigned IChar; /* for 8-21 bit characters */
+#define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
+ (((c) & 0xffff) >= 0xfffe))
+#define is_UCS_SPECIAL(c) ((c) >= 0xfff0 && (c) <= 0xffff)
+#define WIDEST_ICHAR 0x1fffff
+typedef unsigned IChar; /* for 8-21 bit characters */
#else
-#define WIDEST_ICHAR NARROW_ICHAR
+#define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
+ ((c) >= 0xfffe && (c) <= 0xffff))
+#define is_UCS_SPECIAL(c) ((c) >= 0xfff0)
+#define WIDEST_ICHAR NARROW_ICHAR
typedef unsigned short IChar; /* for 8-16 bit characters */
#endif
-#else
+#else /* !OPT_WIDE_CHARS */
+#undef OPT_WIDER_ICHAR
+#define OPT_WIDER_ICHAR 0
+#define is_NON_CHAR(c) ((c) > 255)
#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow
typedef unsigned char IChar; /* for 8-bit characters */
@@ -1811,16 +1884,20 @@ typedef IChar CharData;
*/
typedef struct {
Dimension lineSize; /* number of columns in this row */
- RowData bufHead; /* flag for wrapped lines */
+ RowData bufHead; /* flag for wrapped lines */
#if OPT_WIDE_CHARS
- Char combSize; /* number of items in combData[] */
+ Char combSize; /* number of items in combData[] */
#endif
- IAttr *attribs; /* video attributes */
+#if OPT_DEC_RECTOPS
+ Char *charSets; /* SCS code (DECNRCM_codes) */
+ Char *charSeen; /* pre-SCS value */
+#endif
+ IAttr *attribs; /* video attributes */
#if OPT_ISO_COLORS
CellColor *color; /* foreground+background color numbers */
#endif
CharData *charData; /* cell's base character */
- CharData *combData[1]; /* first enum past fixed-offsets */
+ CharData *combData[1]; /* first field past fixed-offsets */
} LineData;
typedef const LineData CLineData;
@@ -1830,12 +1907,16 @@ typedef const LineData CLineData;
* variable.
*/
typedef struct {
- IAttr attribs;
+ IAttr attribs; /* video attributes */
#if OPT_WIDE_CHARS
- Char combSize; /* number of items in combData[] */
+ Char combSize; /* number of items in combData[] */
+#endif
+#if OPT_DEC_RECTOPS
+ Char charSets; /* SCS code (DECNRCM_codes) */
+ Char charSeen; /* pre-SCS value */
#endif
#if OPT_ISO_COLORS
- CellColor color; /* color-array */
+ CellColor color; /* foreground+background color numbers */
#endif
CharData charData; /* cell's base character */
CharData combData[1]; /* array of combining chars */
@@ -2018,6 +2099,7 @@ typedef enum {
DP_DECTCEM,
DP_DELETE_IS_DEL,
DP_EIGHT_BIT_META,
+ DP_FAST_SCROLL,
DP_KEEP_CLIPBOARD,
DP_KEEP_SELECTION,
DP_KEYBOARD_TYPE,
@@ -2038,6 +2120,7 @@ typedef enum {
DP_X_MOUSE,
DP_X_NCSM,
DP_X_REVWRAP,
+ DP_X_REVWRAP2,
DP_X_X10MSE,
#if OPT_BLINK_CURS
DP_CRS_BLINK,
@@ -2138,6 +2221,10 @@ typedef struct {
} ScrnColors;
#define NUM_GSETS 4
+#define NUM_GSETS2 (NUM_GSETS + 1) /* include user-preferred */
+#define gsets_upss gsets[4]
+
+#define SAVED_CURSORS 2
typedef struct {
Boolean saved;
@@ -2146,7 +2233,7 @@ typedef struct {
IFlags flags; /* VTxxx saves graphics rendition */
Char curgl;
Char curgr;
- DECNRCM_codes gsets[NUM_GSETS];
+ DECNRCM_codes gsets[NUM_GSETS2];
Boolean wrap_flag;
#if OPT_ISO_COLORS
int cur_foreground; /* current foreground color */
@@ -2163,7 +2250,12 @@ typedef struct _SaveTitle {
char *windowName;
} SaveTitle;
-#define SAVED_CURSORS 2
+#define MAX_SAVED_TITLES 10
+
+typedef struct {
+ int used; /* index to current item */
+ SaveTitle data[MAX_SAVED_TITLES];
+} SavedTitles;
typedef struct {
int width; /* if > 0, width of scrollbar, */
@@ -2330,6 +2422,7 @@ typedef struct {
IChar *unparse_bfr;
unsigned unparse_len;
unsigned unparse_max; /* limitResponse resource */
+ unsigned strings_max; /* maxStringParse resource */
#if OPT_TCAP_QUERY
int tc_query_code;
@@ -2365,6 +2458,14 @@ typedef struct {
#if OPT_WIDE_ATTRS && OPT_SGR2_HASH
Boolean faint_relative; /* faint is relative? */
#endif
+#if OPT_VT525_COLORS
+ int assigned_fg; /* DECAC */
+ int assigned_bg;
+ struct {
+ int fg; /* 0..15 */
+ int bg; /* 0..15 */
+ } alt_colors[16]; /* DECATC if DECSTGLT is 1 or 2 */
+#endif
#endif /* OPT_ISO_COLORS */
#if OPT_DEC_CHRSET
Boolean font_doublesize;/* enable font-scaling */
@@ -2404,9 +2505,10 @@ typedef struct {
Boolean char_was_written;
int last_written_col;
int last_written_row;
- TypedBuffer(XChar2b);
- TypedBuffer(char);
#endif
+ TypedBuffer(IChar);
+ TypedBuffer(Char);
+ TypedBuffer(XChar2b);
#if OPT_BROKEN_OSC
Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */
#endif
@@ -2533,7 +2635,8 @@ typedef struct {
Cursor pointer_cursor; /* current pointer cursor */
Cursor hidden_cursor; /* hidden cursor in window */
- String answer_back; /* response to ENQ */
+ String answer_back; /* response to ENQ */
+ Boolean prefer_latin1; /* preference for UPSS */
PrinterState printer_state; /* actual printer state */
PrinterFlags printer_flags; /* working copy of printer flags */
@@ -2547,10 +2650,13 @@ typedef struct {
#if OPT_BOX_CHARS
Boolean force_box_chars;/* true if we assume no boxchars */
Boolean broken_box_chars;/* true if broken boxchars */
- Boolean force_all_chars;/* true to outline missing chars */
Boolean assume_all_chars;/* true to allow missing chars */
Boolean allow_packing; /* true to allow packed-fonts */
#endif
+#if OPT_BOX_CHARS || OPT_WIDE_CHARS
+ Boolean force_all_chars;/* true to outline missing chars */
+#endif
+
Dimension fnt_wide;
Dimension fnt_high;
float scale_height; /* scaling for font-height */
@@ -2572,6 +2678,7 @@ typedef struct {
int cursor_state; /* ON, OFF, or BLINKED_OFF */
int cursor_busy; /* do not redraw... */
Boolean cursor_underline; /* true if cursor is in underline mode */
+ Boolean cursor_bar; /* true if cursor is in bar mode */
XtCursorShape cursor_shape;
#if OPT_BLINK_CURS
BlinkOps cursor_blink; /* cursor blink enable */
@@ -2685,16 +2792,17 @@ typedef struct {
int title_modes; /* control set/get of titles */
int title_modes0; /* ...initial value */
- SaveTitle *save_title;
+ SavedTitles saved_titles;
/* Improved VT100 emulation stuff. */
String keyboard_dialect; /* default keyboard dialect */
- DECNRCM_codes gsets[NUM_GSETS]; /* G0 through G3. */
+ DECNRCM_codes gsets[NUM_GSETS2]; /* G0 through G3, plus UPSS */
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 display_da1; /* 100=vt100, 220=vt220, etc. */
int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */
int ansi_level; /* dpANSI levels 1,2,3 */
int protected_mode; /* 0=off, 1=DEC, 2=ISO */
@@ -2743,11 +2851,14 @@ typedef struct {
#if OPT_SIXEL_GRAPHICS
Boolean sixel_scrolling; /* sixel scrolling */
Boolean sixel_scrolls_right; /* sixel scrolling moves cursor to right */
+ Boolean sixel_scrolls_right0; /* initial sixelScrolling mode */
#endif
#if OPT_GRAPHICS
int numcolorregisters; /* number of supported color registers */
Boolean privatecolorregisters; /* private color registers for each graphic */
+ Boolean privatecolorregisters0; /* initial privateColorRegisters */
+ Boolean incremental_graphics; /* draw graphics incrementally */
#endif
/* Graphics Printing */
@@ -2782,10 +2893,10 @@ typedef struct {
if (IsStatusShown(screen) && (screen)->status_active) stmt
Boolean status_timeout; /* status timeout needs service */
- Boolean status_active; /* DECSASD */
+ int status_active; /* DECSASD */
int status_type; /* DECSSDT */
int status_shown; /* last-displayed type */
- SavedCursor status_data[2];
+ SavedCursor status_data[2]; /* main- and status-cursors */
char * status_fmt; /* format for indicator-status */
#else /* !OPT_STATUS_LINE */
@@ -2804,7 +2915,7 @@ typedef struct {
Char vt52_save_curgl;
Char vt52_save_curgr;
Char vt52_save_curss;
- DECNRCM_codes vt52_save_gsets[NUM_GSETS];
+ DECNRCM_codes vt52_save_gsets[NUM_GSETS2];
#endif
/* Testing */
#if OPT_XMC_GLITCH
@@ -3230,6 +3341,7 @@ typedef struct _Misc {
float face_size[NMENUFONTS];
char *render_font_s;
int limit_fontsets;
+ int limit_fontheight;
int limit_fontwidth;
#endif
} Misc;
@@ -3286,6 +3398,14 @@ typedef struct _Work {
ScrnColors *oldColors;
Boolean palette_changed;
Boolean broken_box_chars;
+ /* data write dotext/WriteText */
+ IChar *write_text; /* points to print_area */
+#if OPT_DEC_RECTOPS
+ Char *write_sums; /* if non-null, points to buffer_sums */
+ Char *buffer_sums; /* data for ->charSeen[] */
+ Char *buffer_sets; /* data for ->charSets[] */
+ size_t sizeof_sums; /* allocated size of buffer_sums */
+#endif
} Work;
typedef struct {int foo;} XtermClassPart, TekClassPart;
@@ -3326,7 +3446,7 @@ extern WidgetClass tekWidgetClass;
#define TAB_ARRAY_SIZE (1024 / TAB_BITS_WIDTH)
#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
-#define OkTAB(c) ((c) >= 0 && (c) < MAX_TABS)
+#define OkTAB(c) ((c) > 0 && (c) < MAX_TABS)
typedef unsigned Tabs [TAB_ARRAY_SIZE];
@@ -3429,45 +3549,57 @@ typedef struct _TekWidgetRec {
the screen. Used to distinguish
blanks from empty parts of the
screen when selecting */
+/*
+ * This does not fit in a byte with the other (more important) attributes, but
+ * if wide-attributes are configured, it is possible to maintain it there.
+ */
+#define INVISIBLE AttrBIT(8) /* true if writing invisible text */
#if OPT_WIDE_ATTRS
-#define ATR_FAINT AttrBIT(8)
-#define ATR_ITALIC AttrBIT(9)
-#define ATR_STRIKEOUT AttrBIT(10)
-#define ATR_DBL_UNDER AttrBIT(11)
-#define ATR_DIRECT_FG AttrBIT(12)
-#define ATR_DIRECT_BG AttrBIT(13)
+#define ATR_FAINT AttrBIT(9)
+#define ATR_ITALIC AttrBIT(10)
+#define ATR_STRIKEOUT AttrBIT(11)
+#define ATR_DBL_UNDER AttrBIT(12)
+#define ATR_DIRECT_FG AttrBIT(13)
+#define ATR_DIRECT_BG AttrBIT(14)
#define SGR_MASK2 (ATR_FAINT | ATR_ITALIC | ATR_STRIKEOUT | ATR_DBL_UNDER | ATR_DIRECT_FG | ATR_DIRECT_BG)
+#define AttrEND 15
#else
#define SGR_MASK2 0
+#define AttrEND 9
#endif
/*
* Other flags
*/
-#define WRAPAROUND MiscBIT(0) /* true if auto wraparound mode */
-#define REVERSEWRAP MiscBIT(1) /* true if reverse wraparound mode */
-#define REVERSE_VIDEO MiscBIT(2) /* true if screen white on black */
-#define LINEFEED MiscBIT(3) /* true if in auto linefeed mode */
-#define ORIGIN MiscBIT(4) /* true if in origin mode */
-#define INSERT MiscBIT(5) /* true if in insert mode */
-#define SMOOTHSCROLL MiscBIT(6) /* true if in smooth scroll mode */
-#define IN132COLUMNS MiscBIT(7) /* true if in 132 column mode */
-#define INVISIBLE MiscBIT(8) /* true if writing invisible text */
+#define REVERSE_VIDEO MiscBIT(0) /* true if screen white on black */
+#define WRAPAROUND MiscBIT(1) /* true if auto wraparound mode */
+#define REVERSEWRAP MiscBIT(2) /* true if reverse wraparound mode */
+#define REVERSEWRAP2 MiscBIT(3) /* true if extended reverse wraparound */
+#define LINEFEED MiscBIT(4) /* true if in auto linefeed mode */
+#define ORIGIN MiscBIT(5) /* true if in origin mode */
+#define INSERT MiscBIT(6) /* true if in insert mode */
+#define SMOOTHSCROLL MiscBIT(7) /* true if in smooth scroll mode */
+#define IN132COLUMNS MiscBIT(8) /* true if in 132 column mode */
#define NATIONAL MiscBIT(9) /* true if writing national charset */
#define LEFT_RIGHT MiscBIT(10) /* true if left/right margin mode */
#define NOCLEAR_COLM MiscBIT(11) /* true if no clear on DECCOLM change */
-#define DrawBIT(n) xBIT(n + 8) /* XTermDraw.draw_flags */
+/*
+ * Drawing-bits start after the video/color attributes, and are independent
+ * of the miscellaneous flags.
+ */
+#define DrawBIT(n) xBIT(n + AttrEND) /* XTermDraw.draw_flags */
/* The following attributes are used in the argument of drawXtermText() */
#define NOBACKGROUND DrawBIT(0) /* Used for overstrike */
#define NOTRANSLATION DrawBIT(1) /* No scan for chars missing in font */
#define DOUBLEWFONT DrawBIT(2) /* The actual X-font is double-width */
#define DOUBLEHFONT DrawBIT(3) /* The actual X-font is double-height */
-#define CHARBYCHAR DrawBIT(4) /* Draw chars one-by-one */
+#define DOUBLEFIRST DrawBIT(4) /* Draw chars one-by-one */
+#define CHARBYCHAR DrawBIT(5) /* Draw chars one-by-one */
/* The following attribute is used in the argument of xtermSpecialFont etc */
-#define NORESOLUTION DrawBIT(5) /* find the font without resolution */
+#define NORESOLUTION DrawBIT(6) /* find the font without resolution */
/*
* Groups of attributes