xterm-146.patch.txt

# ------------------------------------------------------------------------------
# button.c       |   18 +++++++++---------
# charproc.c     |    3 ++-
# screen.c       |   26 ++++++++++++--------------
# version.h      |    2 +-
# xterm.log.html |   12 ++++++++++++
# 5 files changed, 36 insertions(+), 25 deletions(-)
# ------------------------------------------------------------------------------
Index: button.c
--- xterm-145+/button.c Mon Sep 11 05:40:11 2000
+++ xterm-146/button.c  Tue Sep 12 21:48:54 2000
@@ -1533,8 +1533,8 @@
         * pretend it happened on the left half.
         */
        if (col > 0
-        && iswide(getXtermCell(screen, row, col-1))
-        && (getXtermCell(screen, row, col) == HIDDEN_CHAR)) {
+        && iswide(XTERM_CELL(row, col-1))
+        && (XTERM_CELL(row, col) == HIDDEN_CHAR)) {
                col -= 1;
        }
 #endif
@@ -1674,7 +1674,7 @@
 }
 #define ClassSelects(screen, row, col, cclass) \
         (class_of(screen, row, col) == cclass \
-        || getXtermCell(screen, row, col) == HIDDEN_CHAR)
+        || XTERM_CELL(row, col) == HIDDEN_CHAR)
 #else
 #define class_of(screen,row,col) charClass[XTERM_CELL(row, col)]
 #define ClassSelects(screen, row, col, cclass) \
@@ -1700,15 +1700,15 @@
 
 #if OPT_WIDE_CHARS
        if (startCol > 1
-        && iswide(getXtermCell(screen, startRow, startCol-1))
-        && getXtermCell(screen, startRow, startCol-0) == HIDDEN_CHAR) {
+        && iswide(XTERM_CELL(startRow, startCol-1))
+        && XTERM_CELL(startRow, startCol-0) == HIDDEN_CHAR) {
                fprintf(stderr, "Adjusting start. Changing downwards from %i.\n", startCol);
                startCol -= 1;
                if (endCol == (startCol+1)) endCol--;
        }
 
-       if (iswide(getXtermCell(screen, endRow, endCol-1))
-        && getXtermCell(screen, endRow, endCol) == HIDDEN_CHAR) {
+       if (iswide(XTERM_CELL(endRow, endCol-1))
+        && XTERM_CELL(endRow, endCol) == HIDDEN_CHAR) {
                endCol += 1;
        }
 #endif
@@ -1755,7 +1755,7 @@
                        }
 
 #if OPT_WIDE_CHARS
-                       if (startSCol && getXtermCell(screen, startSRow, startSCol) == HIDDEN_CHAR)
+                       if (startSCol && XTERM_CELL(startSRow, startSCol) == HIDDEN_CHAR)
                                startSCol++;
 #endif
 
@@ -1786,7 +1786,7 @@
                        }
 
 #if OPT_WIDE_CHARS
-                       if (endSCol && getXtermCell(screen, endSRow, endSCol) == HIDDEN_CHAR)
+                       if (endSCol && XTERM_CELL(endSRow, endSCol) == HIDDEN_CHAR)
                                endSCol++;
 #endif
 
Index: charproc.c
--- xterm-145+/charproc.c       Mon Sep 11 05:42:15 2000
+++ xterm-146/charproc.c        Tue Sep 12 21:39:04 2000
@@ -818,7 +818,8 @@
            c = doinput();
 
 #if OPT_WIDE_CHARS
-           if (my_wcwidth(c) == 0) {
+           if (screen->wide_chars
+            && my_wcwidth(c) == 0) {
                unsigned single = 0;
                int prev, precomposed;
 
Index: screen.c
--- xterm-145+/screen.c Sun Sep 10 22:06:31 2000
+++ xterm-146/screen.c  Tue Sep 12 21:30:38 2000
@@ -296,7 +296,7 @@
        int wrappedbit;
        Char starcol, starcol2; 
 #if OPT_WIDE_CHARS
-       Char *comb1l, *comb1h, *comb2l, *comb2h;
+       Char *comb1l = 0, *comb1h = 0, *comb2l = 0, *comb2h = 0;
 #endif
  
 #if OPT_WIDE_CHARS
@@ -313,13 +313,12 @@
        col   = SCRN_BUF_CHARS(screen, screen->cur_row) + screen->cur_col;
        attrs = SCRN_BUF_ATTRS(screen, screen->cur_row) + screen->cur_col;
 
-#if OPT_WIDE_CHARS
-       comb1l   = SCRN_BUF_COM1L(screen, screen->cur_row) + screen->cur_col;
-       comb1h   = SCRN_BUF_COM1H(screen, screen->cur_row) + screen->cur_col;
-
-       comb2l   = SCRN_BUF_COM2L(screen, screen->cur_row) + screen->cur_col;
-       comb2h   = SCRN_BUF_COM2H(screen, screen->cur_row) + screen->cur_col;
-#endif
+       if_OPT_WIDE_CHARS(screen,{
+               comb1l   = SCRN_BUF_COM1L(screen, screen->cur_row) + screen->cur_col;
+               comb1h   = SCRN_BUF_COM1H(screen, screen->cur_row) + screen->cur_col;
+               comb2l   = SCRN_BUF_COM2L(screen, screen->cur_row) + screen->cur_col;
+               comb2h   = SCRN_BUF_COM2H(screen, screen->cur_row) + screen->cur_col;
+       })
 
        if_OPT_EXT_COLORS(screen,{
                fbf = SCRN_BUF_FGRND(screen, screen->cur_row) + screen->cur_col;
@@ -420,13 +419,12 @@
        flags |= CHARDRAWN;
        memset( attrs, flags,  real_width);
 
-if_OPT_WIDE_CHARS(screen, {
-       memset( comb1l,   0, real_width);
-       memset( comb2l,   0, real_width);
-       memset( comb1h,   0, real_width);
-       memset( comb2h,   0, real_width);
+       if_OPT_WIDE_CHARS(screen,{
+               memset( comb1l,   0, real_width);
+               memset( comb2l,   0, real_width);
+               memset( comb1h,   0, real_width);
+               memset( comb2h,   0, real_width);
        })
-
        if_OPT_EXT_COLORS(screen,{
                memset( fbf,  cur_fg_bg >> 8, real_width);
                memset( fbb,  cur_fg_bg & 0xff, real_width);
Index: version.h
--- xterm-145+/version.h        Mon Sep 11 05:44:25 2000
+++ xterm-146/version.h Tue Sep 12 21:26:48 2000
@@ -6,5 +6,5 @@
  * XFree86 to which this version of xterm has been built.  The number in
  * parentheses is my patch number (T.Dickey).
  */
-#define XTERM_PATCH   145
+#define XTERM_PATCH   146
 #define XFREE86_VERSION "XFree86 4.0.1c"
Index: xterm.log.html
--- xterm-145+/xterm.log.html   Mon Sep 11 05:40:01 2000
+++ xterm-146/xterm.log.html    Tue Sep 12 21:54:04 2000
@@ -42,6 +42,7 @@
 xc/programs/Xserver/hw/xfree86).
 
 <UL>
+<LI><A HREF="#xterm_146">Patch #146 - 2000/9/12 - XFree86 4.0.1c</A>
 <LI><A HREF="#xterm_145">Patch #145 - 2000/9/11 - XFree86 4.0.1c</A>
 <LI><A HREF="#xterm_144">Patch #144 - 2000/8/23 - XFree86 4.0.1b</A>
 <LI><A HREF="#xterm_143">Patch #143 - 2000/8/19 - XFree86 4.0.1b</A>
@@ -189,6 +190,17 @@
 <LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
 <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
 </UL>
+
+<H1><A NAME="xterm_146">Patch #146 - 2000/9/12 - XFree86 4.0.1c</A></H1>
+<ul>
+       <li>correct two instances overlooked from patch #141 which assumed
+         UTF-8 mode without checking, causing a core dump in non-UTF-8 mode
+         (one instance was reported by Tommi Virtanen &lt;tv@debian.org&gt;).
+
+       <li>correct a problem selecting from the scrollback buffer in UTF-8
+         mode by changing remaining getXtermCell() calls to XTERM_CELL() as in
+         the non-UTF-8 cases (report by Markus Kuhn, patch by Robert Brady).
+</ul>
 
 <H1><A NAME="xterm_145">Patch #145 - 2000/9/11 - XFree86 4.0.1c</A></H1>
 <ul>