View | Details | Raw Unified | Return to bug 1214282
Collapse All | Expand All

(-)a/MANIFEST (-1 / +1 lines)
Lines 1-4 Link Here
1
MANIFEST for xterm, version xterm-379b
1
MANIFEST for xterm, version xterm-379c
2
--------------------------------------------------------------------------------
2
--------------------------------------------------------------------------------
3
MANIFEST                        this file
3
MANIFEST                        this file
4
256colres.h                     resource-definitions for 256-color mode
4
256colres.h                     resource-definitions for 256-color mode
(-)a/charclass.c (-2 / +2 lines)
Lines 1-4 Link Here
1
/* $XTermId: charclass.c,v 1.46 2023/01/04 09:26:46 tom Exp $ */
1
/* $XTermId: charclass.c,v 1.48 2023/03/07 09:29:16 tom Exp $ */
2
2
3
/*
3
/*
4
 * Copyright 2002-2022,2023 by Thomas E. Dickey
4
 * Copyright 2002-2022,2023 by Thomas E. Dickey
Lines 311-317 expected_class(int wch) Link Here
311
{
311
{
312
    int result = wch;
312
    int result = wch;
313
    wint_t ch = (wint_t) wch;
313
    wint_t ch = (wint_t) wch;
314
    if (ch == '\0' || ch == '\t') {
314
    if (wch < 0 || ch == '\0' || ch == '\t') {
315
	result = BLANK;
315
	result = BLANK;
316
    } else if (iswcntrl(ch)) {
316
    } else if (iswcntrl(ch)) {
317
	result = CNTRL;
317
	result = CNTRL;
(-)a/charproc.c (-20 / +24 lines)
Lines 1-4 Link Here
1
/* $XTermId: charproc.c,v 1.1934 2023/02/15 00:10:20 tom Exp $ */
1
/* $XTermId: charproc.c,v 1.1935 2023/03/07 00:56:20 tom Exp $ */
2
2
3
/*
3
/*
4
 * Copyright 1999-2022,2023 by Thomas E. Dickey
4
 * Copyright 1999-2022,2023 by Thomas E. Dickey
Lines 1660-1684 dump_params(void) Link Here
1660
		} \
1660
		} \
1661
		size = new_length
1661
		size = new_length
1662
1662
1663
#define WriteNow() {						\
1663
#define WriteNow() {							\
1664
	    unsigned single = 0;				\
1664
	    unsigned single = 0;					\
1665
								\
1665
									\
1666
	    if (screen->curss) {				\
1666
	    if (screen->curss) {					\
1667
		dotext(xw,					\
1667
		if (sp->print_area != NULL) {				\
1668
		       screen->gsets[(int) (screen->curss)],	\
1668
		    dotext(xw,						\
1669
		       sp->print_area,				\
1669
			   screen->gsets[(int) (screen->curss)],	\
1670
		       (Cardinal) 1);				\
1670
			   sp->print_area,				\
1671
		screen->curss = 0;				\
1671
			   (Cardinal) 1);				\
1672
		single++;					\
1672
		    single++;						\
1673
	    }							\
1673
		}							\
1674
	    if (sp->print_used > single) {			\
1674
		screen->curss = 0;					\
1675
		dotext(xw,					\
1675
	    }								\
1676
		       screen->gsets[(int) (screen->curgl)],	\
1676
	    if (sp->print_used > single) {				\
1677
		       sp->print_area + single,			\
1677
		if (sp->print_area != NULL) {				\
1678
		       (Cardinal) (sp->print_used - single));	\
1678
		    dotext(xw,						\
1679
	    }							\
1679
			   screen->gsets[(int) (screen->curgl)],	\
1680
	    sp->print_used = 0;					\
1680
			   sp->print_area + single,			\
1681
	}							\
1681
			   (Cardinal) (sp->print_used - single));	\
1682
		}							\
1683
	    }								\
1684
	    sp->print_used = 0;						\
1685
	}								\
1682
1686
1683
#define PARSE_SRM 1
1687
#define PARSE_SRM 1
1684
1688
(-)a/graphics_regis.c (-104 / +131 lines)
Lines 1-8 Link Here
1
/* $XTermId: graphics_regis.c,v 1.130 2022/05/16 23:31:18 tom Exp $ */
1
/* $XTermId: graphics_regis.c,v 1.139 2023/03/08 01:06:03 tom Exp $ */
2
2
3
/*
3
/*
4
 * Copyright 2014-2021,2022 by Ross Combs
4
 * Copyright 2014-2022,2023 by Ross Combs
5
 * Copyright 2014-2021,2022 by Thomas E. Dickey
5
 * Copyright 2014-2022,2023 by Thomas E. Dickey
6
 *
6
 *
7
 *                         All Rights Reserved
7
 *                         All Rights Reserved
8
 *
8
 *
Lines 119-124 typedef struct RegisTextControls { Link Here
119
    int       slant; /* for italic/oblique */
119
    int       slant; /* for italic/oblique */
120
} RegisTextControls;
120
} RegisTextControls;
121
121
122
#define S_QUOTE '\''
123
#define D_QUOTE '"'
124
125
#define isQuote(ch)   ((ch) == S_QUOTE || (ch) == D_QUOTE)
126
#define PickQuote(ch) ((ch) == S_QUOTE ? D_QUOTE : S_QUOTE)
127
128
#define isName(c) ((c) == '_' || isalnum(CharOf(c)))
129
122
#define FixedCopy(dst, src, len) strncpy(dst, src, len - 1)[len - 1] = '\0'
130
#define FixedCopy(dst, src, len) strncpy(dst, src, len - 1)[len - 1] = '\0'
123
#define CopyFontname(dst, src) FixedCopy(dst, src, (size_t) REGIS_FONTNAME_LEN)
131
#define CopyFontname(dst, src) FixedCopy(dst, src, (size_t) REGIS_FONTNAME_LEN)
124
132
Lines 538-545 draw_or_save_patterned_pixel(RegisGraphicsContext *context, int x, int y) Link Here
538
static int
546
static int
539
sort_points(void const *l, void const *r)
547
sort_points(void const *l, void const *r)
540
{
548
{
541
    RegisPoint const *const lp = (RegisPoint const *)l;
549
    RegisPoint const *const lp = (RegisPoint const *) l;
542
    RegisPoint const *const rp = (RegisPoint const *)r;
550
    RegisPoint const *const rp = (RegisPoint const *) r;
543
551
544
    if (lp->y < rp->y)
552
    if (lp->y < rp->y)
545
	return -1;
553
	return -1;
Lines 3151-3156 extract_regis_command(RegisDataFragment *input, char *command) Link Here
3151
    return 1;
3159
    return 1;
3152
}
3160
}
3153
3161
3162
/*
3163
 * Check a ReGIS alphabet name before reporting it, to pick an appropriate
3164
 * delimiter.  If the string is empty, or contains nonreportable characters,
3165
 * just return NUL.
3166
 */
3167
static int
3168
pick_quote(const char *value)
3169
{
3170
    Bool s_quote = False;
3171
    Bool d_quote = False;
3172
3173
    if (*value != '\0') {
3174
	while (*value != '\0') {
3175
	    int ch = CharOf(*value++);
3176
	    if (ch == D_QUOTE)
3177
		d_quote = True;
3178
	    else if (ch == S_QUOTE)
3179
		s_quote = True;
3180
	    else if (!isName(ch))
3181
		s_quote = d_quote = True;
3182
	}
3183
    } else {
3184
	s_quote = d_quote = True;
3185
    }
3186
    return ((s_quote && d_quote)
3187
	    ? 0
3188
	    : (s_quote
3189
	       ? D_QUOTE
3190
	       : S_QUOTE));
3191
}
3192
3154
static int
3193
static int
3155
extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
3194
extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
3156
{
3195
{
Lines 3166-3172 extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen) Link Here
3166
	return 0;
3205
	return 0;
3167
3206
3168
    ch = peek_fragment(input);
3207
    ch = peek_fragment(input);
3169
    if (ch != '\'' && ch != '"')
3208
    if (!isQuote(ch))
3170
	return 0;
3209
	return 0;
3171
    open_quote_ch = ch;
3210
    open_quote_ch = ch;
3172
    outlen = 0U;
3211
    outlen = 0U;
Lines 3246-3252 extract_regis_parenthesized_data(RegisDataFragment *input, Link Here
3246
    for (; input->pos < input->len; input->pos++, output->len++) {
3285
    for (; input->pos < input->len; input->pos++, output->len++) {
3247
	char prev_ch = ch;
3286
	char prev_ch = ch;
3248
	ch = input->start[input->pos];
3287
	ch = input->start[input->pos];
3249
	if (ch == '\'' || ch == '"') {
3288
	if (isQuote(ch)) {
3250
	    if (open_quote_ch == '\0') {
3289
	    if (open_quote_ch == '\0') {
3251
		open_quote_ch = ch;
3290
		open_quote_ch = ch;
3252
	    } else {
3291
	    } else {
Lines 3314-3320 extract_regis_option(RegisDataFragment *input, Link Here
3314
    if (ch == ';' || ch == ',' ||
3353
    if (ch == ';' || ch == ',' ||
3315
	ch == '(' || ch == ')' ||
3354
	ch == '(' || ch == ')' ||
3316
	ch == '[' || ch == ']' ||
3355
	ch == '[' || ch == ']' ||
3317
	ch == '"' || ch == '\'' ||
3356
	isQuote(ch) ||
3318
	isdigit(CharOf(ch))) {
3357
	isdigit(CharOf(ch))) {
3319
	return 0;
3358
	return 0;
3320
    }
3359
    }
Lines 3330-3336 extract_regis_option(RegisDataFragment *input, Link Here
3330
	TRACE(("looking at char '%c' in option '%c'\n", ch, *option));
3369
	TRACE(("looking at char '%c' in option '%c'\n", ch, *option));
3331
	/* FIXME: any special rules for commas? */
3370
	/* FIXME: any special rules for commas? */
3332
	/* FIXME: handle escaped quotes */
3371
	/* FIXME: handle escaped quotes */
3333
	if (ch == '\'' || ch == '"') {
3372
	if (isQuote(ch)) {
3334
	    if (open_quote_ch == ch) {
3373
	    if (open_quote_ch == ch) {
3335
		open_quote_ch = '\0';
3374
		open_quote_ch = '\0';
3336
	    } else {
3375
	    } else {
Lines 5008-5013 parse_regis_command(RegisParseState *state) Link Here
5008
static int
5047
static int
5009
parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
5048
parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
5010
{
5049
{
5050
    XtermWidget xw = context->display_graphic->xw;
5011
    RegisDataFragment optionarg;
5051
    RegisDataFragment optionarg;
5012
5052
5013
    if (!extract_regis_option(&state->input, &state->option, &optionarg))
5053
    if (!extract_regis_option(&state->input, &state->option, &optionarg))
Lines 5586-5598 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
5586
		       state->option, fragment_to_tempstr(&optionarg)));
5626
		       state->option, fragment_to_tempstr(&optionarg)));
5587
		break;
5627
		break;
5588
	    } {
5628
	    } {
5589
		char reply[64];
5629
		unsigned err_code = 0U;
5630
		unsigned err_char = 0U;
5590
5631
5591
		TRACE(("got report last error condition\n"));
5632
		TRACE(("got report last error condition\n"));
5592
		/* FIXME: implement after adding error tracking */
5633
		/* FIXME: implement after adding error tracking */
5593
		sprintf(reply, "\"%u,%u\"\r", 0U, 0U);
5634
		unparseputc(xw, D_QUOTE);
5594
		unparseputs(context->display_graphic->xw, reply);
5635
		unparseputn(xw, err_code);
5595
		unparse_end(context->display_graphic->xw);
5636
		unparseputc(xw, ',');
5637
		unparseputn(xw, err_char);
5638
		unparseputc(xw, D_QUOTE);
5639
		unparseputc(xw, '\r');
5640
		unparse_end(xw);
5596
	    }
5641
	    }
5597
	    break;
5642
	    break;
5598
	case 'I':
5643
	case 'I':
Lines 5639-5646 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
5639
		/* FIXME: implement arrow key movement */
5684
		/* FIXME: implement arrow key movement */
5640
		/* FIXME: implement button/key collection */
5685
		/* FIXME: implement button/key collection */
5641
5686
5642
		unparseputs(context->display_graphic->xw, "\r");
5687
		unparseputc(xw, '\r');
5643
		unparse_end(context->display_graphic->xw);
5688
		unparse_end(xw);
5644
5689
5645
		skip_regis_whitespace(&optionarg);
5690
		skip_regis_whitespace(&optionarg);
5646
		if (!fragment_consumed(&optionarg)) {
5691
		if (!fragment_consumed(&optionarg)) {
Lines 5657-5681 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
5657
	    if (!fragment_consumed(&optionarg)) {
5702
	    if (!fragment_consumed(&optionarg)) {
5658
		TRACE(("DATA_ERROR: unexpected arguments to ReGIS report command option '%c' arg \"%s\"\n",
5703
		TRACE(("DATA_ERROR: unexpected arguments to ReGIS report command option '%c' arg \"%s\"\n",
5659
		       state->option, fragment_to_tempstr(&optionarg)));
5704
		       state->option, fragment_to_tempstr(&optionarg)));
5660
		break;
5705
	    } else if (state->load_index == MAX_REGIS_ALPHABETS) {
5661
	    } {
5706
		/* If this happens something went wrong elsewhere. */
5662
		char buffer[32];
5707
		TRACE(("DATA_ERROR: unable to report current load alphabet\n"));
5663
5708
		unparseputs(xw, "A0\"\"\r");
5664
		if (state->load_index == MAX_REGIS_ALPHABETS) {
5709
		unparse_end(xw);
5665
		    /* If this happens something went wrong elsewhere. */
5710
	    } else {
5666
		    TRACE(("DATA_ERROR: unable to report current load alphabet\n"));
5711
		int delim = pick_quote(state->load_name);
5667
		    unparseputs(context->display_graphic->xw, "A0\"\"\r");
5712
		if (delim != '\0') {
5668
		    unparse_end(context->display_graphic->xw);
5713
		    unparseputs(xw, "A");
5669
		    break;
5714
		    unparseputn(xw, state->load_alphabet);
5715
		    unparseputc(xw, delim);
5716
		    unparseputs(xw, state->load_name);
5717
		    unparseputc(xw, delim);
5670
		}
5718
		}
5671
5719
		unparseputc(xw, '\r');
5672
		unparseputs(context->display_graphic->xw, "A");
5720
		unparse_end(xw);
5673
		sprintf(buffer, "%u", state->load_alphabet);
5674
		unparseputs(context->display_graphic->xw, buffer);
5675
		unparseputs(context->display_graphic->xw, "\"");
5676
		unparseputs(context->display_graphic->xw, state->load_name);
5677
		unparseputs(context->display_graphic->xw, "\"\r");
5678
		unparse_end(context->display_graphic->xw);
5679
	    }
5721
	    }
5680
	    break;
5722
	    break;
5681
	case 'M':
5723
	case 'M':
Lines 5717-5743 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
5717
		}
5759
		}
5718
5760
5719
		if (name == '=') {
5761
		if (name == '=') {
5720
		    char reply[64];
5762
		    unsigned max_available = 1000U;
5763
		    unsigned cur_available = max_available;
5721
5764
5722
		    TRACE(("got report macrograph storage request\n"));
5765
		    TRACE(("got report macrograph storage request\n"));
5723
		    /* FIXME: Implement when macrographs are supported. */
5766
		    /* FIXME: Implement when macrographs are supported. */
5724
		    sprintf(reply, "\"%u,%u\"\r", 1000U, 1000U);
5767
		    unparseputc(xw, D_QUOTE);
5725
		    unparseputs(context->display_graphic->xw, reply);
5768
		    unparseputn(xw, cur_available);
5726
		    unparse_end(context->display_graphic->xw);
5769
		    unparseputc(xw, ',');
5770
		    unparseputn(xw, max_available);
5771
		    unparseputc(xw, D_QUOTE);
5772
		    unparseputc(xw, '\r');
5773
		    unparse_end(xw);
5727
		} else if (name < 'A' || name > 'Z') {
5774
		} else if (name < 'A' || name > 'Z') {
5728
		    TRACE(("DATA_ERROR: invalid macrograph name: \"%c\"\n", name));
5775
		    TRACE(("DATA_ERROR: invalid macrograph name: \"%c\"\n", name));
5729
		    /* FIXME: what should happen? */
5776
		    /* FIXME: what should happen? */
5730
		    break;
5777
		    break;
5731
		} else {
5778
		} else {
5732
		    char temp[8];
5733
5734
		    TRACE(("got report macrograph request for name '%c'\n", name));
5779
		    TRACE(("got report macrograph request for name '%c'\n", name));
5735
		    sprintf(temp, "@=%c", name);
5780
		    unparseputs(xw, "@=");
5736
		    unparseputs(context->display_graphic->xw, temp);
5781
		    unparseputc(xw, name);
5737
		    /* FIXME: Allow this to be disabled for security reasons. */
5782
		    /* FIXME: Allow this to be disabled for security reasons. */
5738
		    /* FIXME: implement when macrographs are supported. */
5783
		    /* FIXME: implement when macrographs are supported. */
5739
		    unparseputs(context->display_graphic->xw, "@;\r");
5784
		    unparseputs(xw, "@;");
5740
		    unparse_end(context->display_graphic->xw);
5785
		    unparseputc(xw, '\r');
5786
		    unparse_end(xw);
5741
		}
5787
		}
5742
	    }
5788
	    }
5743
	    break;
5789
	    break;
Lines 5785-5862 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
5785
		TRACE(("got report cursor position (output=%d)\n", output));
5831
		TRACE(("got report cursor position (output=%d)\n", output));
5786
5832
5787
		/* FIXME: look into supporting ANSI locator reports (DECLRP) */
5833
		/* FIXME: look into supporting ANSI locator reports (DECLRP) */
5834
		unparseputc(xw, L_BLOK);
5788
		if (output == 1) {
5835
		if (output == 1) {
5789
		    char reply[64];
5836
		    /* FIXME: verify in absolute, not user, coordinates */
5837
		    unparseputn(xw, (unsigned) context->graphics_output_cursor_x);
5838
		    unparseputc(xw, ',');
5839
		    unparseputn(xw, (unsigned) context->graphics_output_cursor_y);
5840
		} else if (context->multi_input_mode) {
5841
		    /* FIXME: track input coordinates */
5842
		    unsigned x = 0, y = 0;	/* placeholders */
5790
5843
5844
		    /* send CSI240~[x,y]\r with current input cursor location */
5845
5846
		    /* FIXME: verify no leading char or button sequence */
5847
		    /* FIXME: should we ever send an eight-bit CSI? */
5791
		    /* FIXME: verify in absolute, not user, coordinates */
5848
		    /* FIXME: verify in absolute, not user, coordinates */
5792
		    sprintf(reply, "[%d,%d]\r",
5849
		    TRACE(("sending multi-mode input report at %u,%u\n", x, y));
5793
			    context->graphics_output_cursor_x,
5850
		    unparseputn(xw, x);
5794
			    context->graphics_output_cursor_y);
5851
		    unparseputc(xw, ',');
5795
		    unparseputs(context->display_graphic->xw, reply);
5852
		    unparseputn(xw, y);
5796
		    unparse_end(context->display_graphic->xw);
5797
		} else {
5853
		} else {
5798
		    char reply[64];
5854
		    char ch = ' ';	/* placeholder */
5799
		    int x, y;
5855
		    unsigned x = 0, y = 0;	/* placeholders */
5800
5856
5801
		    if (context->multi_input_mode) {
5857
		    /* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
5802
			/* FIXME: track input coordinates */
5858
		    /* send <key or button>[x,y]\r to report input cursor location */
5803
			x = y = 0;	/* placeholders */
5859
5804
5860
		    /* null button: CSI240~ */
5805
			/* send CSI240~[x,y]\r with current input cursor location */
5861
		    /* left button: CSI241~ */
5806
5862
		    /* middle button: CSI243~ */
5807
			/* FIXME: verify no leading char or button sequence */
5863
		    /* right button: CSI245~ */
5808
			/* FIXME: should we ever send an eight-bit CSI? */
5864
		    /* extra button: CSI247~ */
5809
			/* FIXME: verify in absolute, not user, coordinates */
5865
		    /* FIXME: support DECLBD to change button assignments */
5810
			TRACE(("sending multi-mode input report at %d,%d\n",
5866
		    /* FIXME: verify no leading char or button sequence */
5811
			       x, y));
5867
		    TRACE(("sending one-shot input report with %c at %u,%u\n",
5812
			sprintf(reply, "[%d,%d]\r", x, y);
5868
			   ch, x, y));
5813
			unparseputs(context->display_graphic->xw, reply);
5869
		    if (ch != '\177') {
5814
			unparse_end(context->display_graphic->xw);
5870
			unparseputn(xw, x);
5815
			break;
5871
			unparseputc(xw, ',');
5816
		    } else {
5872
			unparseputn(xw, y);
5817
			char ch;
5818
5819
			/* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
5820
			ch = ' ';	/* placeholder */
5821
			x = y = 0;	/* placeholders */
5822
5823
			/* send <key or button>[x,y]\r to report input cursor location */
5824
5825
			/* null button: CSI240~ */
5826
			/* left button: CSI241~ */
5827
			/* middle button: CSI243~ */
5828
			/* right button: CSI245~ */
5829
			/* extra button: CSI247~ */
5830
			/* FIXME: support DECLBD to change button assignments */
5831
			/* FIXME: verify no leading char or button sequence */
5832
			TRACE(("sending one-shot input report with %c at %d,%d\n",
5833
			       ch, x, y));
5834
#if 0				/* FIXME - dead code */
5835
			if (ch == '\r') {
5836
			    /* Return only reports the location. */
5837
			    sprintf(reply, "[%d,%d]\r", x, y);
5838
			} else if (ch == '\177') {
5839
			    /* DEL exits locator mode reporting nothing. */
5840
			    sprintf(reply, "\r");
5841
			} else
5842
#endif
5843
			{
5844
			    sprintf(reply, "%c[%d,%d]\r", ch, x, y);
5845
			}
5846
			unparseputs(context->display_graphic->xw, reply);
5847
			unparse_end(context->display_graphic->xw);
5848
			/* FIXME: exit one-shot mode and disable input cursor */
5849
			break;
5850
		    }
5873
		    }
5874
		    /* FIXME: exit one-shot mode and disable input cursor */
5851
		}
5875
		}
5876
		unparseputc(xw, R_BLOK);
5877
		unparseputc(xw, '\r');
5878
		unparse_end(xw);
5852
	    }
5879
	    }
5853
	    break;
5880
	    break;
5854
	default:
5881
	default:
5855
	    TRACE(("DATA_ERROR: sending empty report for unknown ReGIS report command option '%c' arg \"%s\"\n",
5882
	    TRACE(("DATA_ERROR: sending empty report for unknown ReGIS report command option '%c' arg \"%s\"\n",
5856
		   state->option, fragment_to_tempstr(&optionarg)));
5883
		   state->option, fragment_to_tempstr(&optionarg)));
5857
	    /* Unknown report request types must receive empty reports. */
5884
	    /* Unknown report request types must receive empty reports. */
5858
	    unparseputs(context->display_graphic->xw, "\r");
5885
	    unparseputs(xw, "\r");
5859
	    unparse_end(context->display_graphic->xw);
5886
	    unparse_end(xw);
5860
	    break;
5887
	    break;
5861
	}
5888
	}
5862
	break;
5889
	break;
Lines 6154-6160 parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) Link Here
6154
6181
6155
		TRACE(("using display page number: %d\n", page));
6182
		TRACE(("using display page number: %d\n", page));
6156
		context->display_page = (unsigned) page;
6183
		context->display_page = (unsigned) page;
6157
		map_regis_graphics_pages(context->display_graphic->xw, context);
6184
		map_regis_graphics_pages(xw, context);
6158
	    }
6185
	    }
6159
	    break;
6186
	    break;
6160
	case 'T':
6187
	case 'T':
(-)a/xterm.log.html (-2 / +13 lines)
Lines 30-36 Link Here
30
 * sale, use or other dealings in this Software without prior written        *
30
 * sale, use or other dealings in this Software without prior written        *
31
 * authorization.                                                            *
31
 * authorization.                                                            *
32
 *****************************************************************************
32
 *****************************************************************************
33
  $XTermId: xterm.log.html,v 1.2490 2023/02/27 01:22:21 tom Exp $
33
  $XTermId: xterm.log.html,v 1.2491 2023/03/07 01:03:37 tom Exp $
34
  -->
34
  -->
35
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
36
<html>
36
<html>
Lines 1041-1046 Link Here
1041
  <h1><a name="xterm_dev" id="xterm_dev">Development</a></h1>
1041
  <h1><a name="xterm_dev" id="xterm_dev">Development</a></h1>
1042
1042
1043
  <ul>
1043
  <ul>
1044
    <li>pointer/overflow fixes (reported David Leadbeater):
1045
      <ul>
1046
        <li>add null-pointer checks in <tt>WriteNow</tt> macro to
1047
        handle a case where <tt>SS2</tt> or <tt>SS3</tt> might be
1048
        in effect while processing a combining character.</li>
1049
1050
        <li>disallow ReGIS reporting for character-set names
1051
        containing characters other than alphanumerics or
1052
        underscore.</li>
1053
      </ul>
1054
    </li>
1055
1044
    <li>configure script improvements:
1056
    <li>configure script improvements:
1045
      <ul>
1057
      <ul>
1046
        <li>check for <tt>nfsd_t</tt></li>
1058
        <li>check for <tt>nfsd_t</tt></li>
1047
- 

Return to bug 1214282