Imakefile | 20 +++- MANIFEST | 2 Makefile.in | 26 ++++-- NEWS | 22 +++++ Tekparse.h | 90 +++++---------------- VTparse.h | 200 ----------------------------------------------- charproc.c | 17 ++- ctlseqs.ms | 8 - ctlseqs.txt | 6 - main.c | 169 +++++++++++++++++++++++++++++++++++---- misc.c | 8 - package/debian/changelog | 6 + package/freebsd/Makefile | 2 package/xterm.spec | 4 ptyx.h | 9 +- trace.c | 42 +++++++++ trace.h | 4 util.c | 8 - version.h | 6 - xterm.log.html | 36 ++++++++ xterm.man | 8 + 21 files changed, 374 insertions(+), 319 deletions(-)
New commits: commit 1a027e1ec651c4298f19f92a8fdef55225e4049c Author: Sven Joachim <[email protected]> Date: Sat Oct 8 08:40:13 2016 +0200 Imported Upstream version 327 diff --git a/Imakefile b/Imakefile index bbe389a..daf250e 100644 --- a/Imakefile +++ b/Imakefile @@ -1,4 +1,4 @@ -XCOMM $XTermId: Imakefile,v 1.112 2016/01/28 01:56:53 Jens.Schweikhardt Exp $ +XCOMM $XTermId: Imakefile,v 1.113 2016/10/06 00:56:32 tom Exp $ XCOMM XCOMM Attention xterm porters XCOMM @@ -244,11 +244,21 @@ TERMCAPDEFINES=-DUSE_TERMINFO -DHAVE_TIGETSTR AllTarget($(PROGRAMS)) +VTPARSE_H = VTparse.h VTparse.hin +TEKPARSE_H = Tekparse.h Tekparse.hin + +.SUFFIXES : .def .hin +.def.hin : + awk '/^CASE_/{printf "#define %s %d\n", $$1, n++}' < $< >$@ + SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES)) SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES)) -SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES)) -SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES)) +SpecialCObjectRule(misc,$(VTPARSE_H),$(MISC_DEFINES)) +SpecialCObjectRule(VTPrsTbl,$(VTPARSE_H),$(MISC_DEFINES)) +SpecialCObjectRule(charproc,$(VTPARSE_H),$(MISC_DEFINES)) SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES)) +SpecialCObjectRule(TekPrsTbl,$(TEKPARSE_H),$(MISC_DEFINES)) +SpecialCObjectRule(TekProc,$(TEKPARSE_H),$(MISC_DEFINES)) #if InstallXtermSetUID SetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB)) @@ -319,4 +329,8 @@ InstallAppDefaults(UXTerm) InstallAppDefaultsLong(XTerm-col,XTerm-color) InstallManPage(xterm,$(MANDIR)) InstallManPage(resize,$(MANDIR)) + +cleandir:: + $(RM) *parse.hin + DependTarget() diff --git a/MANIFEST b/MANIFEST index 9f99009..bd690d0 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-326, version xterm-326 +MANIFEST for xterm-327, version xterm-327 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/Makefile.in b/Makefile.in index 17b273d..5fcbfab 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -## $XTermId: Makefile.in,v 1.235 2016/05/15 16:45:53 tom Exp $ +## $XTermId: Makefile.in,v 1.238 2016/10/06 00:28:15 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # @@ -125,7 +125,7 @@ EXTRAOBJ = @EXTRAOBJS@ all : $(PROGRAMS) ################################################################################ -.SUFFIXES : .i .def .hin .$(manext) .ms .man .txt @MAN2HTML_NOTE@ .html @GROFF_NOTE@ .ps .pdf +.SUFFIXES : .i .def .cin .hin .$(manext) .ms .man .txt @MAN2HTML_NOTE@ .html @GROFF_NOTE@ .ps .pdf .c$o : @RULE_CC@ @@ -135,8 +135,11 @@ all : $(PROGRAMS) @RULE_CC@ @ECHO_CC@$(CPP) -C $(CPPFLAGS) $*.c >$@ +.def.cin : + $(AWK) '/^CASE_/{printf "{ %d, \"%s\" },\n", n++, $$1; }' < $< >$@ + .def.hin : - grep '^CASE_' $< | $(AWK) '{printf "#define %s %d\n", $$1, n++}' >$@ + $(AWK) '/^CASE_/{printf "#define %s %d\n", $$1, n++}' < $< >$@ .man.$(manext) : $(SHELL) ./minstall "$(INSTALL_DATA)" $< $@ $(appsdir) $(CLASS) $* $* $(pixmapdir) @@ -169,6 +172,10 @@ all : $(PROGRAMS) @[email protected] : @GROFF_NOTE@ ps2pdf $*.ps ################################################################################ + +VTPARSE_H = VTparse.h VTparse.hin +TEKPARSE_H = Tekparse.h Tekparse.hin + main$o : main.h misc$o : version.h @@ -189,10 +196,19 @@ resize$x : $(OBJS2) -$(RM) $@ perl $(srcdir)/88colres.pl > $@ -charproc$o : main.h @CHARPROC_DEPS@ +charproc$o : $(VTPARSE_H) main.h @CHARPROC_DEPS@ +graphics_regis$o : $(VTPARSE_H) +graphics_sixel$o : $(VTPARSE_H) +misc$o : $(VTPARSE_H) +VTPrsTbl$o : $(VTPARSE_H) + +TekPrsTbl$o : $(TEKPARSE_H) +Tekproc$o : $(TEKPARSE_H) misc$o : builtin_icons.h +trace$o : VTparse.cin Tekparse.cin + # do this to quiet gcc -Wcast-qual warnings builtin_icons.h : @echo "#if OPT_BUILTIN_XPMS" >$@ @@ -500,7 +516,7 @@ mostlyclean : -$(RM) *$o *.[is] XtermLog.* .pure core *~ *.bak *.BAK *.out *.tmp clean : mostlyclean - -$(RM) $(PROGRAMS) builtin_icons.h + -$(RM) $(PROGRAMS) builtin_icons.h *.cin *parse.hin distclean :: clean -$(RM) Makefile config.status config.cache config.log xtermcfg.h diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..0fa030a --- /dev/null +++ b/NEWS @@ -0,0 +1,22 @@ +The NEWS file was generated from xterm.log.html, which serves as the changelog +for xterm. +-------------------------------------------------------------------------------- + Patch #327 - 2016/10/07 + + * add a check in the function which handles end-of-line wrapping to + ensure that C1 controls are allocated one column when + allowC1Printable is set (Debian #738794). + * use consistent error-checking after strtol calls, fixes a case + where a query with OSC 6 did not ensure there was a valid color + number (report by Alex Smith). + * add -baudrate option, for testing ncurses. + * always generate the CASE_xxx symbols in VTparse.h and Tekparse.h, + as part of a change to improve debug-logging. This makes the build + always depend upon awk. + * modify allowC1Printable to disallow codes 160-254 as being + equivalent to codes 32-126 when parsing escape sequences (Debian + #839220). + * amend fix from patch #326 for TrueType fonts to exclude the hidden + character used for double-width cells (report by Grady Martin). + * fix a typo in ctlseqs.ms + diff --git a/Tekparse.h b/Tekparse.h index 9c706ce..aac9851 100644 --- a/Tekparse.h +++ b/Tekparse.h @@ -1,31 +1,34 @@ -/* $XTermId: Tekparse.h,v 1.7 2006/02/13 01:14:57 tom Exp $ */ +/* $XTermId: Tekparse.h,v 1.8 2016/10/06 00:32:30 tom Exp $ */ /* - * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + * Copyright 1998-2006,2016 by Thomas E. Dickey * * 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. + * 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. * - * 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. + * 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. */ -/* $XFree86: xc/programs/xterm/Tekparse.h,v 1.6 2006/02/13 01:14:57 dickey Exp $ */ - - -/* @(#)Tekparse.h X10/6.6 11/7/86 */ #ifndef included_Tekparse_h #define included_Tekparse_h 1 @@ -47,51 +50,6 @@ extern Const int Tplttable[]; extern Const int Tpttable[]; extern Const int Tspttable[]; -/* - * The following list of definitions is generated from Tekparse.def using the - * following command line: - * - * egrep -v '^CASE_' Tekparse.def | \ - * awk 'BEGIN {n = 0;} {printf "#define %s %d\n", $1, n; n++}' - * - * You you need to change something, change Tekparse.def and regenerate the - * definitions. This would have been automatic, but since this doesn't change - * very often, it isn't worth the makefile hassle. - */ - -#define CASE_REPORT 0 -#define CASE_VT_MODE 1 -#define CASE_SPT_STATE 2 -#define CASE_GIN 3 -#define CASE_BEL 4 -#define CASE_BS 5 -#define CASE_PT_STATE 6 -#define CASE_PLT_STATE 7 -#define CASE_TAB 8 -#define CASE_IPL_STATE 9 -#define CASE_ALP_STATE 10 -#define CASE_UP 11 -#define CASE_COPY 12 -#define CASE_PAGE 13 -#define CASE_BES_STATE 14 -#define CASE_BYP_STATE 15 -#define CASE_IGNORE 16 -#define CASE_ASCII 17 -#define CASE_APL 18 -#define CASE_CHAR_SIZE 19 -#define CASE_BEAM_VEC 20 -#define CASE_CURSTATE 21 -#define CASE_PENUP 22 -#define CASE_PENDOWN 23 -#define CASE_IPL_POINT 24 -#define CASE_PLT_VEC 25 -#define CASE_PT_POINT 26 -#define CASE_SPT_POINT 27 -#define CASE_CR 28 -#define CASE_ESC_STATE 29 -#define CASE_LF 30 -#define CASE_SP 31 -#define CASE_PRINT 32 -#define CASE_OSC 33 +#include <Tekparse.hin> #endif /* included_Tekparse_h */ diff --git a/VTparse.h b/VTparse.h index 7f9170e..316e0c4 100644 --- a/VTparse.h +++ b/VTparse.h @@ -1,7 +1,7 @@ -/* $XTermId: VTparse.h,v 1.65 2015/02/16 00:10:39 tom Exp $ */ +/* $XTermId: VTparse.h,v 1.66 2016/10/06 00:37:11 tom Exp $ */ /* - * Copyright 2002-2014,2015 by Thomas E. Dickey + * Copyright 1996-2015,2016 by Thomas E. Dickey * * All Rights Reserved * @@ -28,28 +28,6 @@ * 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_VTparse_h @@ -106,178 +84,6 @@ extern Const PARSE_T esc_pct_table[]; extern Const PARSE_T scs_pct_table[]; #endif -/* - * The following list of definitions is generated from VTparse.def using the - * following command line: - * - * grep '^CASE_' VTparse.def | awk '{printf "#define %s %d\n", $1, n++}' - * - * If you need to change something, change VTparse.def and regenerate the - * definitions. This would have been automatic, but since this doesn't change - * very often, it isn't worth the makefile hassle. - */ - -#define CASE_GROUND_STATE 0 -#define CASE_IGNORE 1 -#define CASE_BELL 2 -#define CASE_BS 3 -#define CASE_CR 4 -#define CASE_ESC 5 -#define CASE_VMOT 6 -#define CASE_TAB 7 -#define CASE_SI 8 -#define CASE_SO 9 -#define CASE_SCR_STATE 10 -#define CASE_SCS0_STATE 11 -#define CASE_SCS1_STATE 12 -#define CASE_SCS2_STATE 13 -#define CASE_SCS3_STATE 14 -#define CASE_ESC_IGNORE 15 -#define CASE_ESC_DIGIT 16 -#define CASE_ESC_SEMI 17 -#define CASE_DEC_STATE 18 -#define CASE_ICH 19 -#define CASE_CUU 20 -#define CASE_CUD 21 -#define CASE_CUF 22 -#define CASE_CUB 23 -#define CASE_CUP 24 -#define CASE_ED 25 -#define CASE_EL 26 -#define CASE_IL 27 -#define CASE_DL 28 -#define CASE_DCH 29 -#define CASE_DA1 30 -#define CASE_TRACK_MOUSE 31 -#define CASE_TBC 32 -#define CASE_SET 33 -#define CASE_RST 34 -#define CASE_SGR 35 -#define CASE_CPR 36 -#define CASE_DECSTBM 37 -#define CASE_DECREQTPARM 38 -#define CASE_DECSET 39 -#define CASE_DECRST 40 -#define CASE_DECALN 41 -#define CASE_GSETS 42 -#define CASE_DECSC 43 -#define CASE_DECRC 44 -#define CASE_DECKPAM 45 -#define CASE_DECKPNM 46 -#define CASE_IND 47 -#define CASE_NEL 48 -#define CASE_HTS 49 -#define CASE_RI 50 -#define CASE_SS2 51 -#define CASE_SS3 52 -#define CASE_CSI_STATE 53 -#define CASE_OSC 54 -#define CASE_RIS 55 -#define CASE_LS2 56 -#define CASE_LS3 57 -#define CASE_LS3R 58 -#define CASE_LS2R 59 -#define CASE_LS1R 60 -#define CASE_PRINT 61 -#define CASE_XTERM_SAVE 62 -#define CASE_XTERM_RESTORE 63 -#define CASE_XTERM_TITLE 64 -#define CASE_DECID 65 -#define CASE_HP_MEM_LOCK 66 -#define CASE_HP_MEM_UNLOCK 67 -#define CASE_HP_BUGGY_LL 68 -#define CASE_HPA 69 -#define CASE_VPA 70 -#define CASE_XTERM_WINOPS 71 -#define CASE_ECH 72 -#define CASE_CHT 73 -#define CASE_CPL 74 -#define CASE_CNL 75 -#define CASE_CBT 76 -#define CASE_SU 77 -#define CASE_SD 78 -#define CASE_S7C1T 79 -#define CASE_S8C1T 80 -#define CASE_ESC_SP_STATE 81 -#define CASE_ENQ 82 -#define CASE_DECSCL 83 -#define CASE_DECSCA 84 -#define CASE_DECSED 85 -#define CASE_DECSEL 86 -#define CASE_DCS 87 -#define CASE_PM 88 -#define CASE_SOS 89 -#define CASE_ST 90 -#define CASE_APC 91 -#define CASE_EPA 92 -#define CASE_SPA 93 -#define CASE_CSI_QUOTE_STATE 94 -#define CASE_DSR 95 -#define CASE_ANSI_LEVEL_1 96 -#define CASE_ANSI_LEVEL_2 97 -#define CASE_ANSI_LEVEL_3 98 -#define CASE_MC 99 -#define CASE_DEC2_STATE 100 -#define CASE_DA2 101 -#define CASE_DEC3_STATE 102 -#define CASE_DECRPTUI 103 -#define CASE_VT52_CUP 104 -#define CASE_REP 105 -#define CASE_CSI_EX_STATE 106 -#define CASE_DECSTR 107 -#define CASE_DECDHL 108 -#define CASE_DECSWL 109 -#define CASE_DECDWL 110 -#define CASE_DEC_MC 111 -#define CASE_ESC_PERCENT 112 -#define CASE_UTF8 113 -#define CASE_CSI_TICK_STATE 114 -#define CASE_DECELR 115 -#define CASE_DECRQLP 116 -#define CASE_DECEFR 117 -#define CASE_DECSLE 118 -#define CASE_CSI_IGNORE 119 -#define CASE_VT52_IGNORE 120 -#define CASE_VT52_FINISH 121 -#define CASE_CSI_DOLLAR_STATE 122 -#define CASE_DECCRA 123 -#define CASE_DECERA 124 -#define CASE_DECFRA 125 -#define CASE_DECSERA 126 -#define CASE_DECSACE 127 -#define CASE_DECCARA 128 -#define CASE_DECRARA 129 -#define CASE_CSI_STAR_STATE 130 -#define CASE_SET_MOD_FKEYS 131 -#define CASE_SET_MOD_FKEYS0 132 -#define CASE_HIDE_POINTER 133 -#define CASE_SCS1A_STATE 134 -#define CASE_SCS2A_STATE 135 -#define CASE_SCS3A_STATE 136 -#define CASE_CSI_SPACE_STATE 137 -#define CASE_DECSCUSR 138 -#define CASE_SM_TITLE 139 -#define CASE_RM_TITLE 140 -#define CASE_DECSMBV 141 -#define CASE_DECSWBV 142 -#define CASE_DECLL 143 -#define CASE_DECRQM 144 -#define CASE_RQM 145 -#define CASE_CSI_DEC_DOLLAR_STATE 146 -#define CASE_SL 147 -#define CASE_SR 148 -#define CASE_DECDC 149 -#define CASE_DECIC 150 -#define CASE_DECBI 151 -#define CASE_DECFI 152 -#define CASE_DECRQCRA 153 -#define CASE_HPR 154 -#define CASE_VPR 155 -#define CASE_ANSI_SC 156 -#define CASE_ANSI_RC 157 -#define CASE_ESC_COLON 158 -#define CASE_SCS_PERCENT 159 -#define CASE_GSETS_PERCENT 160 -#define CASE_GRAPHICS_ATTRIBUTES 161 +#include <VTparse.hin> #endif /* included_VTparse_h */ diff --git a/charproc.c b/charproc.c index bc103db..983ec6f 100644 --- a/charproc.c +++ b/charproc.c @@ -1,4 +1,4 @@ -/* $XTermId: charproc.c,v 1.1422 2016/09/23 20:13:11 tom Exp $ */ +/* $XTermId: charproc.c,v 1.1426 2016/10/07 21:14:54 tom Exp $ */ /* * Copyright 1999-2015,2016 by Thomas E. Dickey @@ -2110,10 +2110,13 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) * provided that they are not intermixed with an escape sequence. */ if (screen->c1_printable - && (c >= 128 && c < 160)) { + && (c >= 128 && c < 256)) { sp->nextstate = (sp->parsestate == esc_table ? CASE_ESC_IGNORE : sp->parsestate[E2A(160)]); + TRACE(("allowC1Printable %04X %s ->%s\n", + c, which_table(sp->parsestate), + visibleVTparse(sp->nextstate))); } #endif @@ -2216,8 +2219,8 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) } DumpParams(); - TRACE(("parse %04X -> %d %s (used=%lu)\n", - c, sp->nextstate, + TRACE(("parse %04X -> %s %s (used=%lu)\n", + c, visibleVTparse(sp->nextstate), which_table(sp->parsestate), (unsigned long) sp->string_used)); @@ -4992,6 +4995,10 @@ dotext(XtermWidget xw, if (!screen->utf8_mode || (screen->vt100_graphics && charset == '0')) { last_chomp = 1; + } else if (screen->c1_printable && + buf[chars_chomped + offset] >= 0x80 && + buf[chars_chomped + offset] <= 0xa0) { + last_chomp = 1; } else { last_chomp = my_wcwidth((wchar_t) buf[chars_chomped + offset]); } @@ -7554,7 +7561,7 @@ set_flags_from_list(char *target, char *temp; value = (int) strtol(next, &temp, 0); - if (!IsEmpty(temp)) { + if (!FullS2L(next, temp)) { xtermWarning("Expected a number: %s\n", next); } else { for (n = 0; n < limit; ++n) { diff --git a/ctlseqs.ms b/ctlseqs.ms index cedc426..f35c612 100644 --- a/ctlseqs.ms +++ b/ctlseqs.ms @@ -1,6 +1,6 @@ .\"#! troff -ms $1 -*- Nroff -*- .\" "Xterm Control Sequences" document -.\" $XTermId: ctlseqs.ms,v 1.331 2016/09/08 09:16:28 tom Exp $ +.\" $XTermId: ctlseqs.ms,v 1.333 2016/10/02 23:19:00 tom Exp $ .\" .\" .\" Copyright 1996-2015,2016 by Thomas E. Dickey @@ -70,7 +70,7 @@ .ds XT XTerm .ds xt xterm .ds LF Patch #326 -.ds RF 2016/09/08 +.ds RF 2016/10/02 .\" .if n .pl 9999v \" no page breaks in nroff .ND @@ -679,7 +679,7 @@ Invoke the G1 Character Set as GR (LS1R). .Ed . .St -.Ss Application Program-Control functions +.Ss Application Program-Command functions .IP \\*(AP\\*(Pt\\*s\\*(ST None. \fIxterm\fP implements no \*(AP functions; \*(Pt is ignored. \*(Pt need not be printable characters. @@ -1633,7 +1633,7 @@ Delete \*(Ps Column(s) (default = 1) (DECDC), VT420 and up. .Ed . .St -.Ss Operating System Controls +.Ss Operating System Commands . .IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(ST .IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(Be diff --git a/ctlseqs.txt b/ctlseqs.txt index 428f164..932744e 100644 --- a/ctlseqs.txt +++ b/ctlseqs.txt @@ -21,7 +21,7 @@ Thomas Dickey XFree86 Project (1996-2006) invisible-island.net (2006-2016) - updated for XTerm Patch #326 (2016/09/08) + updated for XTerm Patch #326 (2016/10/02) @@ -241,7 +241,7 @@ ESC | Invoke the G3 Character Set as GR (LS3R). ESC } Invoke the G2 Character Set as GR (LS2R). ESC ~ Invoke the G1 Character Set as GR (LS1R). -Application Program-Control functions +Application Program-Command functions APC Pt ST None. xterm implements no APC functions; Pt is ignored. Pt need not be printable characters. @@ -1037,7 +1037,7 @@ CSI Pm ' } CSI Pm ' ~ Delete Ps Column(s) (default = 1) (DECDC), VT420 and up. -Operating System Controls +Operating System Commands OSC Ps ; Pt ST OSC Ps ; Pt BEL Set Text Parameters. For colors and font, if Pt is a "?", the diff --git a/main.c b/main.c index ce50c69..8ea0bdb 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $XTermId: main.c,v 1.781 2016/06/01 09:13:46 tom Exp $ */ +/* $XTermId: main.c,v 1.784 2016/10/07 00:40:34 tom Exp $ */ /* * Copyright 2002-2015,2016 by Thomas E. Dickey @@ -445,7 +445,8 @@ extern char *ptsname(int); #ifndef VMS static void reapchild(int /* n */ ); -static int spawnXTerm(XtermWidget /* xw */ ); +static int spawnXTerm(XtermWidget /* xw */ + ,unsigned /* line_speed */ ); static void remove_termcap_entry(char *, const char *); #ifdef USE_PTY_SEARCH static int pty_search(int * /* pty */ ); @@ -1115,6 +1116,7 @@ static XrmOptionDescRec optionDescList[] = { /* options that we process ourselves */ {"-help", NULL, XrmoptionSkipNArgs, (XPointer) NULL}, {"-version", NULL, XrmoptionSkipNArgs, (XPointer) NULL}, +{"-baudrate", NULL, XrmoptionSkipArg, (XPointer) NULL}, {"-class", NULL, XrmoptionSkipArg, (XPointer) NULL}, {"-e", NULL, XrmoptionSkipLine, (XPointer) NULL}, {"-into", NULL, XrmoptionSkipArg, (XPointer) NULL}, @@ -1159,6 +1161,7 @@ static OptionHelp xtermOptions[] = { #endif { "-iconic", "start iconic" }, { "-name string", "client instance, icon, and title strings" }, +{ "-baudrate rate", "set line-speed (default 38400)" }, { "-class string", "class string (XTerm)" }, { "-title string", "title string" }, { "-xrm resourcestring", "additional resource specifications" }, @@ -1357,9 +1360,10 @@ decode_keyvalue(char **ptr, int termcap) } ++string; } else if (termcap && (*string == '\\')) { + char *s = (string + 1); char *d; - int temp = (int) strtol(string + 1, &d, 8); - if (temp > 0 && d != string) { + int temp = (int) strtol(s, &d, 8); + if (PartS2L(s, d) && temp > 0) { value = temp; string = d; } @@ -1971,6 +1975,124 @@ complex_command(char **args) } #endif +static unsigned +lookup_baudrate(const char *value) +{ + struct speed { + unsigned given_speed; /* values for 'ospeed' */ + unsigned actual_speed; /* the actual speed */ + }; + +#define DATA(number) { B##number, number } + + static struct speed const speeds[] = + { + DATA(0), + DATA(50), + DATA(75), + DATA(110), + DATA(134), + DATA(150), + DATA(200), + DATA(300), + DATA(600), + DATA(1200), + DATA(1800), + DATA(2400), + DATA(4800), + DATA(9600), +#ifdef B19200 + DATA(19200), +#elif defined(EXTA) + {EXTA, 19200}, +#endif +#ifdef B28800 + DATA(28800), +#endif +#ifdef B38400 + DATA(38400), +#elif defined(EXTB) + {EXTB, 38400}, +#endif +#ifdef B57600 + DATA(57600), +#endif +#ifdef B76800 + DATA(76800), +#endif +#ifdef B115200 + DATA(115200), +#endif +#ifdef B153600 + DATA(153600), +#endif +#ifdef B230400 + DATA(230400), +#endif +#ifdef B307200 + DATA(307200), +#endif +#ifdef B460800 + DATA(460800), +#endif +#ifdef B500000 + DATA(500000), +#endif +#ifdef B576000 + DATA(576000), +#endif +#ifdef B921600 + DATA(921600), +#endif +#ifdef B1000000 + DATA(1000000), +#endif +#ifdef B1152000 + DATA(1152000), +#endif +#ifdef B1500000 + DATA(1500000), +#endif +#ifdef B2000000 + DATA(2000000), +#endif +#ifdef B2500000 + DATA(2500000), +#endif +#ifdef B3000000 + DATA(3000000), +#endif +#ifdef B3500000 + DATA(3500000), +#endif +#ifdef B4000000 + DATA(4000000), +#endif + }; +#undef DATA + unsigned result = 0; + long check; + char *next; + if (x_toupper(*value) == 'B') + value++; + if (isdigit(CharOf(*value))) { + check = strtol(value, &next, 10); + if (FullS2L(value, next) && (check > 0)) { + Cardinal n; + for (n = 0; n < XtNumber(speeds); ++n) { + if (speeds[n].actual_speed == (unsigned) check) { + result = speeds[n].given_speed; + break; + } + } + } + } + if (result == 0) { + fprintf(stderr, "unsupported value for baudrate: %s\n", value); + } + return result; +} + int main(int argc, char *argv[]ENVP_ARG) { @@ -1989,6 +2111,7 @@ main(int argc, char *argv[]ENVP_ARG) TScreen *screen; int mode; char *my_class = x_strdup(DEFCLASS); + unsigned line_speed = VAL_LINE_SPEED; Window winToEmbedInto = None; ProgramName = argv[0]; @@ -2070,6 +2193,11 @@ main(int argc, char *argv[]ENVP_ARG) } else if (!strcmp(option_ptr->option, "-help")) { Help(); quit = True; + } else if (!strcmp(option_ptr->option, "-baudrate")) { + if ((line_speed = lookup_baudrate(option_value)) == 0) { + Help(); + quit = True; + } } else if (!strcmp(option_ptr->option, "-class")) { free(my_class); if ((my_class = x_strdup(option_value)) == 0) { @@ -2079,6 +2207,10 @@ main(int argc, char *argv[]ENVP_ARG) } else if (!strcmp(option_ptr->option, "-into")) { char *endPtr; winToEmbedInto = (Window) strtol(option_value, &endPtr, 0); + if (!FullS2L(option_value, endPtr)) { + Help(); + quit = True; + } } } if (quit) @@ -2126,7 +2258,7 @@ main(int argc, char *argv[]ENVP_ARG) } } #if defined(macII) || defined(ATT) || defined(CRAY) /* { */ - d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL; + d_tio.c_cflag = line_speed | CS8 | CREAD | PARENB | HUPCL; d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK; #ifdef ECHOKE d_tio.c_lflag |= ECHOKE | IEXTEN; @@ -2153,12 +2285,12 @@ main(int argc, char *argv[]ENVP_ARG) #ifdef BAUD_0 /* { */ d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL; #else /* }{ !BAUD_0 */ - d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL; + d_tio.c_cflag = line_speed | CS8 | CREAD | PARENB | HUPCL; #endif /* } !BAUD_0 */ #else /* USE_POSIX_TERMIOS */ d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL; - cfsetispeed(&d_tio, VAL_LINE_SPEED); - cfsetospeed(&d_tio, VAL_LINE_SPEED); + cfsetispeed(&d_tio, line_speed); + cfsetospeed(&d_tio, line_speed); #endif d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK; #ifdef ECHOKE @@ -2349,6 +2481,11 @@ main(int argc, char *argv[]ENVP_ARG) debug = True; continue; #endif /* DEBUG */ + case 'b': + if (strcmp(argv[0], "-baudrate")) + Syntax(*argv); + argc--, argv++; + continue; case 'c': if (strcmp(argv[0], "-class")) Syntax(*argv); @@ -2506,7 +2643,7 @@ main(int argc, char *argv[]ENVP_ARG) } }); - spawnXTerm(term); + spawnXTerm(term, line_speed); #ifndef VMS /* Child process is out there, let's catch its termination */ @@ -3304,7 +3441,7 @@ resetShell(char *oldPath) * If slave, the pty named in passedPty is already open for use */ static int -spawnXTerm(XtermWidget xw) +spawnXTerm(XtermWidget xw, unsigned line_speed) { TScreen *screen = TScreenOf(xw); Cardinal nn; @@ -4009,13 +4146,13 @@ spawnXTerm(XtermWidget xw) #ifdef BAUD_0 /* baud rate is 0 (don't care) */ #elif defined(HAVE_TERMIO_C_ISPEED) - tio.c_ispeed = tio.c_ospeed = VAL_LINE_SPEED; + tio.c_ispeed = tio.c_ospeed = line_speed; #else /* !BAUD_0 */ - tio.c_cflag |= VAL_LINE_SPEED; + tio.c_cflag |= line_speed; #endif /* !BAUD_0 */ #else /* USE_POSIX_TERMIOS */ - cfsetispeed(&tio, VAL_LINE_SPEED); - cfsetospeed(&tio, VAL_LINE_SPEED); + cfsetispeed(&tio, line_speed); + cfsetospeed(&tio, line_speed); #ifdef __MVS__ /* turn off bits that can't be set from the slave side */ tio.c_cflag &= ~(PACKET | PKT3270 | PTU3270 | PKTXTND); @@ -4096,8 +4233,8 @@ spawnXTerm(XtermWidget xw) sg.sg_flags &= ~(ALLDELAY | XTABS | CBREAK | RAW); sg.sg_flags |= ECHO | CRMOD; /* make sure speed is set on pty so that editors work right */ - sg.sg_ispeed = VAL_LINE_SPEED; - sg.sg_ospeed = VAL_LINE_SPEED; + sg.sg_ispeed = line_speed; + sg.sg_ospeed = line_speed; /* reset t_brkc to default value */ tc.t_brkc = -1; #ifdef LPASS8 diff --git a/misc.c b/misc.c index 81105a3..75cf81a 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $XTermId: misc.c,v 1.742 2016/09/08 23:39:58 Joe.Peterson Exp $ */ +/* $XTermId: misc.c,v 1.743 2016/10/07 00:41:14 tom Exp $ */ /* * Copyright 1999-2015,2016 by Thomas E. Dickey @@ -2766,7 +2766,7 @@ ResetAnsiColorRequest(XtermWidget xw, char *buf, int start) char *next; color = (int) (strtol) (buf, &next, 10); - if ((next == buf) || (color < 0)) + if (!PartS2L(buf, next) || (color < 0)) break; /* no number at all */ if (next != 0) { if (strchr(";", *next) == 0) @@ -3666,7 +3666,7 @@ do_osc(XtermWidget xw, Char *oscbuf, size_t len, int final) ++buf; } else { which = strtol(buf, &next, 10); - if (next == 0) + if (!PartS2L(buf, next) || (which < 0)) break; buf = next; if (*buf == ';') @@ -3676,7 +3676,7 @@ do_osc(XtermWidget xw, Char *oscbuf, size_t len, int final) ++buf; } else { value = strtol(buf, &next, 10); - if (next == 0) + if (!PartS2L(buf, next) || (which < 0)) break; buf = next; if (*buf == ';') diff --git a/package/debian/changelog b/package/debian/changelog index df450a5..e97dbbe 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,3 +1,9 @@ +xterm-dev (327) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <[email protected]> Sun, 02 Oct 2016 19:18:09 -0400 + xterm-dev (326) unstable; urgency=low * maintenance updates diff --git a/package/freebsd/Makefile b/package/freebsd/Makefile index 5e1b471..dea332f 100644 --- a/package/freebsd/Makefile +++ b/package/freebsd/Makefile @@ -5,7 +5,7 @@ # and "make makesum". PORTNAME= xterm -PORTVERSION= 326 +PORTVERSION= 327 CATEGORIES= x11 MASTER_SITES= ftp://invisible-island.net/xterm/ \ CRITICAL diff --git a/package/xterm.spec b/package/xterm.spec index 0b35106..7ad34d1 100644

