MANIFEST | 2 XTerm-col.ad | 5 - XTerm.ad | 8 +-- configure | 4 - configure.in | 4 - ptyx.h | 11 +++- screen.c | 146 +++++++++++++++++++++++++++------------------------------ util.c | 13 +---- version.h | 4 - xterm.log.html | 61 +++++++++++++++++++++++ xterm.man | 6 +- 11 files changed, 157 insertions(+), 107 deletions(-)
New commits: commit d61ca8392fc732381c31aa8a02b34471707ffd1d Author: Julien Cristau <jcris...@debian.org> Date: Mon Aug 17 10:22:36 2009 +0200 Import xterm 246 diff --git a/MANIFEST b/MANIFEST index 6fe78c4..bcd71a7 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-245, version xterm-245 +MANIFEST for xterm-246, version xterm-246 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/XTerm-col.ad b/XTerm-col.ad index a21fee9..9de5098 100644 --- a/XTerm-col.ad +++ b/XTerm-col.ad @@ -1,5 +1,4 @@ -! $XTermId: XTerm-col.ad,v 1.20 2006/06/24 14:57:29 tom Exp $ -! $XFree86: xc/programs/xterm/XTerm-col.ad,v 3.7 2005/09/18 23:48:12 dickey Exp $ +! $XTermId: XTerm-col.ad,v 1.21 2009/08/15 15:56:29 tom Exp $ #include "XTerm" @@ -20,7 +19,7 @@ ! leave the foreground/background colors alone (at the mercy of your desktop ! designer). -! Color the popup/pulldown menu border to match the text widget's foreground. +! Color the popup/pulldown menu border to match the text widget foreground. !*SimpleMenu*borderColor: gray15 ! Uncomment this to use color for underline attribute diff --git a/XTerm.ad b/XTerm.ad index b5659fc..f186e66 100644 --- a/XTerm.ad +++ b/XTerm.ad @@ -1,4 +1,4 @@ -! $XTermId: XTerm.ad,v 1.88 2009/02/13 00:14:13 tom Exp $ +! $XTermId: XTerm.ad,v 1.89 2009/08/15 15:58:44 tom Exp $ *saveLines: 1024 @@ -148,7 +148,7 @@ ! vt100/VT100 ! tektronix/TopLevelShell ! shellext/VendorShellExt -! tek4014/Tek4014 +! tek4014/Tek4014 ! ! If built without a toolbar, the widget hierarchy is simpler, because there ! is no form, and the popup menu widgets are created only when they are first @@ -163,7 +163,7 @@ ! vt100/VT100 ! tektronix/TopLevelShell ! shellext/VendorShellExt -! tek4014/Tek4014 +! tek4014/Tek4014 ! ! A more complete list of the widget/class names can be obtained using editres ! to dump a file. Some widget names are not available until the corresponding @@ -193,7 +193,7 @@ ! Alternatively, !*on2Clicks: regex [[:alpha:]]+://([[:alnum:]!#+,./=...@_~-]|(%[[:xdigit:]][[:xdigit:]]))+ -! vt100's and similar terminals recognize escape sequences and control +! VT100s and similar terminals recognize escape sequences and control ! characters to which they reply to the host with other escape sequences, ! to provide information. The "resize" program uses this feature. ! diff --git a/configure b/configure index 6ee07ab..c28534d 100755 --- a/configure +++ b/configure @@ -11948,11 +11948,11 @@ if test "${enable_16bit_chars+set}" = set; then if test "$enableval" != "no" ; then enable_16bit_chars=yes else - enable_16bit_chars=$no + enable_16bit_chars=no fi else enableval=no - enable_16bit_chars=$no + enable_16bit_chars=no fi; echo "$as_me:11958: result: $enable_16bit_chars" >&5 diff --git a/configure.in b/configure.in index 622b7c4..53dcf69 100644 --- a/configure.in +++ b/configure.in @@ -1,4 +1,4 @@ -dnl $XTermId: configure.in,v 1.251 2009/08/06 00:37:38 tom Exp $ +dnl $XTermId: configure.in,v 1.252 2009/08/13 19:41:01 tom Exp $ dnl dnl --------------------------------------------------------------------------- dnl @@ -812,7 +812,7 @@ AC_MSG_CHECKING(if you want only 16-bit character support) CF_ARG_ENABLE(16bit-chars, [ --enable-16bit-chars enable 16-bit character support], [enable_16bit_chars=yes], - [enable_16bit_chars=$no]) + [enable_16bit_chars=no]) AC_MSG_RESULT($enable_16bit_chars) if test "$enable_16bit_chars" = yes ; then diff --git a/ptyx.h b/ptyx.h index 28085df..909e9c6 100644 --- a/ptyx.h +++ b/ptyx.h @@ -1,4 +1,4 @@ -/* $XTermId: ptyx.h,v 1.623 2009/08/08 14:24:27 tom Exp $ */ +/* $XTermId: ptyx.h,v 1.625 2009/08/14 23:14:26 tom Exp $ */ /* * Copyright 1999-2008,2009 by Thomas E. Dickey @@ -1126,7 +1126,7 @@ typedef struct { #if OPT_ISO_COLORS #if OPT_256_COLORS || OPT_88_COLORS #define COLOR_BITS 8 -typedef unsigned CellColor; +typedef unsigned short CellColor; #else #define COLOR_BITS 4 typedef Char CellColor; @@ -1148,7 +1148,12 @@ typedef Char RowData; /* wrap/blink, and DEC single-double chars */ #define LINEFLAG_MASK BITS2MASK(LINEFLAG_BITS) #define GetLineFlags(ld) ((ld)->bufHead & LINEFLAG_MASK) -#define SetLineFlags(ld,xx) (ld)->bufHead |= (RowData) (xx & LINEFLAG_MASK) + +#if OPT_DEC_CHRSET +#define SetLineFlags(ld,xx) (ld)->bufHead = (RowData) ((ld->bufHead & (DBLCS_MASK << LINEFLAG_BITS)) | (xx & LINEFLAG_MASK)) +#else +#define SetLineFlags(ld,xx) (ld)->bufHead = (RowData) (xx & LINEFLAG_MASK) +#endif typedef IChar CharData; diff --git a/screen.c b/screen.c index 31a32e9..26ad604 100644 --- a/screen.c +++ b/screen.c @@ -1,4 +1,4 @@ -/* $XTermId: screen.c,v 1.389 2009/08/13 00:30:01 tom Exp $ */ +/* $XTermId: screen.c,v 1.394 2009/08/16 18:16:45 tom Exp $ */ /* * Copyright 1999-2008,2009 by Thomas E. Dickey @@ -100,19 +100,32 @@ #define VisBuf(screen) scrnHeadAddr(screen, screen->saveBuf_index, (unsigned) savelines) #endif +/* + * ScrnPtr's can point to different types of data. + */ +#define SizeofScrnPtr(name) \ + sizeof(*((LineData *)0)->name) + +/* + * The pointers in LineData point into a block of text allocated as a single + * chunk for the given number of rows. Ensure that these pointers are aligned + * at least to int-boundaries. + */ +#define AlignMask() (sizeof(int) - 1) +#define IsAligned(value) (((unsigned long) (value) & AlignMask()) == 0) + +#define AlignValue(value) \ + if (!IsAligned(value)) \ + value = (value | AlignMask()) + 1 + #define SetupScrnPtr(dst,src,type) \ dst = (type *) src; \ - src += ((unsigned) ncol * sizeof(*dst)) + assert(IsAligned(dst)); \ + src += skipNcol##type #define ScrnBufAddr(ptrs, offset) (ScrnBuf) ((char *) (ptrs) + (offset)) #define LineDataAddr(ptrs, offset) (LineData *) ((char *) (ptrs) + (offset)) -#if OPT_WIDE_CHARS -#define ExtraScrnSize(screen) ((screen)->wide_chars ? (unsigned) (screen)->max_combining : 0) -#else -#define ExtraScrnSize(screen) 0 -#endif - #if OPT_TRACE > 1 static void traceScrnBuf(const char *tag, TScreen * screen, ScrnBuf sb, unsigned len) @@ -175,6 +188,18 @@ setupLineData(TScreen * screen, ScrnBuf base, Char * data, unsigned nrow, unsign #if OPT_WIDE_CHARS unsigned j; #endif + /* these names are based on types */ + unsigned skipNcolChar = (ncol * SizeofScrnPtr(attribs)); + unsigned skipNcolCharData = (ncol * SizeofScrnPtr(charData)); +#if OPT_ISO_COLORS + unsigned skipNcolCellColor = (ncol * SizeofScrnPtr(color)); +#endif + + AlignValue(skipNcolChar); +#if OPT_ISO_COLORS + AlignValue(skipNcolCellColor); +#endif + AlignValue(skipNcolCharData); for (i = 0; i < nrow; i++, offset += jump) { ptr = LineDataAddr(base, offset); @@ -188,13 +213,14 @@ setupLineData(TScreen * screen, ScrnBuf base, Char * data, unsigned nrow, unsign #if OPT_ISO_COLORS SetupScrnPtr(ptr->color, data, CellColor); #endif - SetupScrnPtr(ptr->charData, data, IChar); + SetupScrnPtr(ptr->charData, data, CharData); #if OPT_WIDE_CHARS if (screen->wide_chars) { - unsigned extra = ExtraScrnSize(screen); + unsigned extra = (unsigned) screen->max_combining; + ptr->combSize = (Char) extra; for (j = 0; j < extra; ++j) { - SetupScrnPtr(ptr->combData[j], data, IChar); + SetupScrnPtr(ptr->combData[j], data, CharData); } } #endif @@ -250,32 +276,38 @@ allocScrnHead(TScreen * screen, unsigned nrow) } /* - * ScrnPtr's can point to different types of data. - */ -#define SizeofScrnPtr(name) \ - sizeof(*((LineData *)0)->name) - -/* * Return the size of a line's data. */ static unsigned sizeofScrnRow(TScreen * screen, unsigned ncol) { - unsigned result = (SizeofScrnPtr(attribs) + unsigned result = 1; + unsigned sizeAttribs; #if OPT_ISO_COLORS - + SizeofScrnPtr(color) + unsigned sizeColors; #endif - + SizeofScrnPtr(charData)); (void) screen; #if OPT_WIDE_CHARS if (screen->wide_chars) { - result += (SizeofScrnPtr(combData[0]) * ExtraScrnSize(screen)); + result += (unsigned) screen->max_combining; } #endif + result = (ncol * result * sizeof(CharData)); + AlignValue(result); + + sizeAttribs = (ncol * SizeofScrnPtr(attribs)); + AlignValue(sizeAttribs); + result += sizeAttribs; + +#if OPT_ISO_COLORS + sizeColors = (ncol * SizeofScrnPtr(color)); + AlignValue(sizeColors); + result += sizeColors; +#endif - return ncol * result; + return result; } Char * @@ -392,7 +424,6 @@ Reallocate(XtermWidget xw, unsigned oldcol) { TScreen *screen = TScreenOf(xw); - LineData *ptrs; ScrnBuf oldBufHead; ScrnBuf newBufHead; Char *newBufData; @@ -401,12 +432,6 @@ Reallocate(XtermWidget xw, Char *oldBufData; int move_down = 0, move_up = 0; - /* save/restore row-flags */ - RowData *saveFlags; - int saveFlagLo = -1; - int saveFlagHi = -1; - unsigned jump = scrnHeadSize(screen, 1); - if (sbuf == NULL || *sbuf == NULL) { return 0; } @@ -416,30 +441,6 @@ Reallocate(XtermWidget xw, TRACE(("Reallocate %dx%d -> %dx%d\n", oldrow, oldcol, nrow, ncol)); /* - * Save the row flags, to reapply after calling setupLineData. - */ - saveFlags = TypeCallocN(RowData, nrow + oldrow); - if (saveFlags != NULL) { - int j; - - ptrs = (LineData *) (*sbuf); - for (j = 0; j < (int) oldrow; ++j) { - RowData thisFlag = ptrs->bufHead; - if (GetLineFlags(ptrs) != 0) { - if (saveFlagLo < 0) - saveFlagLo = j; - saveFlagHi = j; - saveFlags[j] = thisFlag; - } - ptrs = LineDataAddr(ptrs, jump); - } - if (saveFlagHi < 0) { - free(saveFlags); - saveFlags = 0; - } - } - - /* * realloc sbuf, the pointers to all the lines. * If the screen shrinks, remove lines off the top of the buffer * if resizeGravity resource says to do so. @@ -498,27 +499,6 @@ Reallocate(XtermWidget xw, ); free(oldBufHead); - if (saveFlags != NULL) { - int j, k; - int adjust = 0; - - if (move_down) { - adjust = move_down; - } else if (move_up) { - adjust = -move_up; - } - - ptrs = LineDataAddr(newBufHead, jump * (unsigned) (saveFlagLo + adjust)); - for (j = saveFlagLo; j <= saveFlagHi; ++j) { - k = j + adjust; - if (k >= 0 && k < (int) nrow) { - ptrs->bufHead = saveFlags[j]; - } - ptrs = LineDataAddr(ptrs, jump); - } - free(saveFlags); - } - /* Now free the old data */ free(oldBufData); @@ -1343,6 +1323,10 @@ ScrnRefresh(XtermWidget xw, if ((ld = getLineData(screen, ROW2INX(screen, lastind))) == 0) break; + if (maxcol >= ld->lineSize) { + maxcol = ld->lineSize - 1; + hi_col = maxcol; + } chars = ld->charData; attrs = ld->attribs; diff --git a/util.c b/util.c index a110397..7f59053 100644 --- a/util.c +++ b/util.c @@ -1,4 +1,4 @@ -/* $XTermId: util.c,v 1.485 2009/08/09 12:30:47 tom Exp $ */ +/* $XTermId: util.c,v 1.486 2009/08/15 00:40:38 tom Exp $ */ /* * Copyright 1999-2008,2009 by Thomas E. Dickey @@ -3483,15 +3483,10 @@ extract_bg(XtermWidget xw, CellColor color, unsigned flags) CellColor makeColorPair(int fg, int bg) { - if (fg == -1) - fg = 0; - if (bg == -1) - bg = 0; + unsigned my_bg = (bg >= 0) && (bg < NUM_ANSI_COLORS) ? (unsigned) bg : 0; + unsigned my_fg = (fg >= 0) && (fg < NUM_ANSI_COLORS) ? (unsigned) fg : my_bg; - assert(fg >= 0 && fg < (1 << COLOR_BITS)); - assert(bg >= 0 && bg < (1 << COLOR_BITS)); - - return (CellColor) (fg | (bg << COLOR_BITS)); + return (CellColor) (my_fg | (my_bg << COLOR_BITS)); } /* diff --git a/version.h b/version.h index cd5390e..51ae53a 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ -/* $XTermId: version.h,v 1.301 2009/08/13 00:46:46 tom Exp $ */ +/* $XTermId: version.h,v 1.302 2009/08/14 09:04:02 tom Exp $ */ /* * These definitions are used to build the string that's printed in response to @@ -6,7 +6,7 @@ * version of X to which this version of xterm has been built. The number in * parentheses is my patch number (Thomas E. Dickey). */ -#define XTERM_PATCH 245 +#define XTERM_PATCH 246 #ifndef __vendorversion__ #define __vendorversion__ "XTerm" diff --git a/xterm.log.html b/xterm.log.html index 606da7e..132314f 100644 --- a/xterm.log.html +++ b/xterm.log.html @@ -20,7 +20,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * ***************************************************************************** - $XTermId: xterm.log.html,v 1.772 2009/08/13 01:23:33 tom Exp $ + $XTermId: xterm.log.html,v 1.781 2009/08/16 22:51:21 tom Exp $ --> <HTML> <HEAD> @@ -45,6 +45,7 @@ Most of these are summarized in the XFree86 CHANGELOG is the latest version of this file. <UL> +<LI><A HREF="#xterm_246">Patch #246 - 2009/8/16</A> <LI><A HREF="#xterm_245">Patch #245 - 2009/8/12</A> <LI><A HREF="#xterm_244">Patch #244 - 2009/8/9</A> <LI><A HREF="#xterm_243">Patch #243 - 2009/3/28</A> @@ -293,6 +294,44 @@ is the latest version of this file. <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A> </UL> +<H1><A NAME="xterm_246">Patch #246 - 2009/8/16</A></H1> +<ul> + <li>remove obsolete logic for saving/restoring wrapping flags, which + did not work on 64-bit platform. Wrapping flags (stored in the + line-index) are now copied with line-data (Debian #541160). + + <li>modify comments in app-defaults files to avoid problem with + C preprocessor used by <code>xrdb</code> (Debian #541603). + + <li>restore special case in <code>makeColorPair</code>, + needed for <code>colorBDMode</code> resource (Debian #541089). + + <li>correct <code>SetLineFlags()</code> macro, broken in + <a href="#xterm_244">patch #244</a> + when recoding to avoid gcc-specific bitfields (Debian #541236). + + <li>modify initialization of screen buffers to ensure that pointers + align to int-boundaries. + This fixes a problem introduced in + <a href="#xterm_244">patch #244</a> + where the color- and character-arrays + (stored after the video-attributes in each row) + might be misaligned (report by Rajeev V Pillai). + + <li>add limit-check in <code>ScrnRefresh</code> for handling + saved-lines from the circular buffer which are repainted on a + screen whose width has increased. To improve performance, circular + buffer entries are not resized (report by Rajeev V Pillai). + + <li>correct type for <code>CellColor</code> (a late change in + <a href="#xterm_244">patch #244</a> + to avoid gcc-specifc enums made that unsigned + rather than unsigned short, for the 256-color option). + + <li>fix typo in configure option --enable-16bit-chars (report by + Rajeev V. Pillai). +</ul> + <H1><A NAME="xterm_245">Patch #245 - 2009/8/12</A></H1> <ul> <li>correct a special case in saving FIFO-lines from @@ -359,7 +398,7 @@ is the latest version of this file. when vt52 support is not compiled (report by Olaf 'Rhialto' Seibert). - <li>save/restore line-wrapping flags when converting from ISL-8859-1 + <li>save/restore line-wrapping flags when converting from ISO-8859-1 encoding to UTF-8 encoding, as well as when resizing screen. <li>remove extra adjustment of position in fix for Debian #418324. commit 15c5ad38380354f6efaee4bd2227f0eefff6e92b Author: Julien Cristau <jcris...@debian.org> Date: Mon Aug 17 10:21:56 2009 +0200 Import xterm 245 diff --git a/MANIFEST b/MANIFEST index d311717..6fe78c4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-244, version xterm-244 +MANIFEST for xterm-245, version xterm-245 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/screen.c b/screen.c index 0b7e3d5..31a32e9 100644 --- a/screen.c +++ b/screen.c @@ -1,4 +1,4 @@ -/* $XTermId: screen.c,v 1.388 2009/08/07 23:20:07 tom Exp $ */ +/* $XTermId: screen.c,v 1.389 2009/08/13 00:30:01 tom Exp $ */ /* * Copyright 1999-2008,2009 by Thomas E. Dickey @@ -1787,8 +1787,17 @@ ScreenResize(XtermWidget xw, ScrnBuf dst = screen->saveBuf_index; #if OPT_FIFO_LINES - /* move line-data from visible-buffer to save-buffer */ - saveEditBufLines(screen, dst, move_up); + int amount = ((MaxRows(screen) - (int) move_up - 1) + - screen->cur_row); + + if (amount < 0) { + /* move line-data from visible-buffer to save-buffer */ + saveEditBufLines(screen, dst, -amount); + move_up = -amount; + move_down_by = amount; + } else { + move_down_by = 0; + } #else /* !OPT_FIFO_LINES */ int amount = screen->savelines - (int) move_up; @@ -1898,6 +1907,7 @@ ScreenResize(XtermWidget xw, /* copy line-data from save-buffer to visible-buffer */ unsaveEditBufLines(screen, dst, move_down); + TRACE_SCRNBUF("copied", screen, dst, rows); #if OPT_FIFO_LINES unsave_fifo = (long) move_down; diff --git a/version.h b/version.h index 90d7b19..cd5390e 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ -/* $XTermId: version.h,v 1.300 2009/03/29 13:49:44 tom Exp $ */ +/* $XTermId: version.h,v 1.301 2009/08/13 00:46:46 tom Exp $ */ /* * These definitions are used to build the string that's printed in response to @@ -6,7 +6,7 @@ * version of X to which this version of xterm has been built. The number in * parentheses is my patch number (Thomas E. Dickey). */ -#define XTERM_PATCH 244 +#define XTERM_PATCH 245 #ifndef __vendorversion__ #define __vendorversion__ "XTerm" diff --git a/xterm.log.html b/xterm.log.html index 9702d95..606da7e 100644 --- a/xterm.log.html +++ b/xterm.log.html @@ -20,7 +20,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * ***************************************************************************** - $XTermId: xterm.log.html,v 1.770 2009/08/09 20:50:21 tom Exp $ + $XTermId: xterm.log.html,v 1.772 2009/08/13 01:23:33 tom Exp $ --> <HTML> <HEAD> @@ -45,6 +45,7 @@ Most of these are summarized in the XFree86 CHANGELOG is the latest version of this file. <UL> +<LI><A HREF="#xterm_245">Patch #245 - 2009/8/12</A> <LI><A HREF="#xterm_244">Patch #244 - 2009/8/9</A> <LI><A HREF="#xterm_243">Patch #243 - 2009/3/28</A> <LI><A HREF="#xterm_242">Patch #242 - 2009/2/15</A> @@ -292,6 +293,23 @@ is the latest version of this file. <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A> </UL> +<H1><A NAME="xterm_245">Patch #245 - 2009/8/12</A></H1> +<ul> + <li>correct a special case in saving FIFO-lines from + <a href="#xterm_244">patch #244</a>. + If the screen was shrunk, xterm used the wrong amount for copying + to FIFO-lines, and then used this amount to adjust the current + row on the screen. That was both a visible defect (Debian #541109) + as well as a potential addressing error (Debian #541132, #541160, + and #541236). + + <li>add clarification in xterm manual about the + various <code>allow<em>XXX</em>Ops</code> resources, which + are disabled when the + <code>allowSendEvents</code> resource is active (patch by + Julien Cristau, Debian #531597). +</ul> + <H1><A NAME="xterm_244">Patch #244 - 2009/8/9</A></H1> <ul> <li>refactored storage of saved-lines, providing a configure option diff --git a/xterm.man b/xterm.man index 132d23d..f7a41aa 100644 --- a/xterm.man +++ b/xterm.man @@ -1,5 +1,5 @@ '\" t -.\" $XTermId: xterm.man,v 1.432 2009/08/09 21:04:09 tom Exp $ +.\" $XTermId: xterm.man,v 1.433 2009/08/13 01:18:00 tom Exp $ .\" .\" Copyright 1996-2008,2009 by Thomas E. Dickey .\" @@ -1500,8 +1500,8 @@ The default is \*(``true.\*('' Specifies whether or not synthetic key and button events (generated using the X protocol SendEvent request) should be interpreted or discarded. The default is \*(``false\*('' meaning they are discarded. -Note that allowing -such events creates a very large security hole. +Note that allowing such events creates a very large security hole, and +forcefully disables the \fBallow\fP\fIXXX\fP\fBOps\fR resources. The default is \*(``false.\*('' .TP .B "allowTcapOps (\fPclass\fB AllowTcapOps)" -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org