xterm-101.patch.txt

# ------------------------------------------------------------------------------
#  Imakefile      |    8 -
#  Makefile.in    |    2 
#  Tekproc.c      |   11 -
#  aclocal.m4     |    6 -
#  button.c       |  321 ++++++++++++++++++++++++++++++-------------------------
#  charproc.c     |   48 +++-----
#  config.guess   |   20 ++-
#  config.sub     |    6 -
#  configure      |    4 
#  configure.in   |    2 
#  data.h         |   16 --
#  main.c         |   25 ++--
#  misc.c         |    2 
#  ptydata.c      |   41 ++++++-
#  ptyx.h         |    8 -
#  resize.c       |    8 +
#  screen.c       |    2 
#  util.c         |    2 
#  version.h      |    6 -
#  xterm.h        |   23 +++
#  xterm.log.html |   60 ++++++++--
#  xterm.man      |   40 ++++++
#  22 files changed, 413 insertions, 248 deletions
# ------------------------------------------------------------------------------
Index: Imakefile
--- xterm-100+/Imakefile        Mon May  3 21:18:34 1999
+++ xterm-101/Imakefile Fri May  7 06:41:05 1999
@@ -52,7 +52,7 @@
          PTYLIB = -lpucc
 #endif
 
-#if (LinuxCLibMajorVersion >= 6 && LinuxCLibMinorVersion >= 1)
+#if ((LinuxCLibMajorVersion >= 6) && (LinuxCLibMinorVersion >= 1))
          PTYLIB = -lutil
 #endif
 
@@ -109,7 +109,7 @@
 
 #ifndef TermcapLibrary
 #if SystemV && !defined(MacIIArchitecture)
-#if defined(CrayArchitecture) || (defined(HPArchitecture) && OSMajorVersion < 10) || defined(RsArchitecture)
+#if defined(CrayArchitecture) || (defined(HPArchitecture) && (OSMajorVersion < 10)) || defined(RsArchitecture)
 #define TermcapLibrary -lcurses                /* special cases of System V */
 #else
 #define TermcapLibrary -ltermlib       /* usually in here */
@@ -135,9 +135,9 @@
 NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
 #endif
 
-#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && OSMajorVersion < 5
+#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
 #if AlternateUsrLibDir
-#if OSMajorVersion == 4 && OSMinorVersion >= 1
+#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
 LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
 #else
 #if HasGcc
Index: Makefile.in
--- xterm-100+/Makefile.in      Mon May  3 21:18:34 1999
+++ xterm-101/Makefile.in       Sun May  9 21:31:22 1999
@@ -1,4 +1,4 @@
-## $XFree86: xc/programs/xterm/Makefile.in,v 3.21 1999/04/29 09:14:00 dawes Exp $ ##
+## $XFree86: xc/programs/xterm/Makefile.in,v 3.22 1999/05/09 10:52:03 dawes Exp $ ##
 
 #### Start of system configuration section. ####
 
Index: Tekproc.c
--- xterm-100+/Tekproc.c        Mon May  3 21:28:04 1999
+++ xterm-101/Tekproc.c Sun May  9 21:31:22 1999
@@ -1,6 +1,6 @@
 /*
  * $XConsortium: Tekproc.c /main/120 1996/11/29 10:33:20 swick $
- * $XFree86: xc/programs/xterm/Tekproc.c,v 3.24 1999/04/29 09:14:00 dawes Exp $
+ * $XFree86: xc/programs/xterm/Tekproc.c,v 3.25 1999/05/09 10:52:04 dawes Exp $
  *
  * Warning, there be crufty dragons here.
  */
@@ -1143,9 +1143,9 @@
     register int y)
 {
     register TScreen *screen = &term->screen;
-    int pty = screen->respond;
-    char cplot [7];
+    Char cplot [7];
     int len = 5;
+    int adj = (status != 0) ? 0 : 1;
 
     cplot[0] = status;
     /* Translate x and y to Tektronix code */
@@ -1159,10 +1159,7 @@
     if (screen->gin_terminator == GIN_TERM_EOT)
        cplot[len++] = '\004';
 
-    if(cplot[0])
-       v_write(pty, cplot, len);
-    else
-       v_write(pty, cplot+1, len-1);
+    v_write(screen->respond, cplot+adj, len-adj);
 }
 
 void
Index: aclocal.m4
--- xterm-100+/aclocal.m4       Mon May  3 06:47:18 1999
+++ xterm-101/aclocal.m4        Sun May  9 21:31:22 1999
@@ -1,5 +1,5 @@
 dnl
-dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.19 1999/04/11 13:11:28 dawes Exp $
+dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.20 1999/05/09 10:52:07 dawes Exp $
 dnl
 dnl ---------------------------------------------------------------------------
 dnl 
@@ -53,7 +53,7 @@
        AC_TRY_COMPILE(
 [
 #ifndef CC_HAS_PROTOS
-#if !defined(__STDC__) || __STDC__ != 1
+#if !defined(__STDC__) || (__STDC__ != 1)
 choke me
 #endif
 #endif
@@ -409,7 +409,7 @@
        changequote(,)dnl
        cat > conftest.$ac_ext <<EOF
 #line __oline__ "configure"
-int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
 EOF
        changequote([,])dnl
        AC_CHECKING([for gcc warning options])
Index: button.c
--- xterm-100+/button.c Sun Apr 11 16:38:14 1999
+++ xterm-101/button.c  Mon May 10 05:51:43 1999
@@ -199,20 +199,20 @@
        String *params GCC_UNUSED,      /* selections */
        Cardinal *num_params GCC_UNUSED)
 {      /* ^XM-G<line+' '><col+' '> */
-       register TScreen *screen = &term->screen;
-       int pty = screen->respond;
-       char Line[ 6 ];
-       register unsigned line, col;
-
-    if (event->type != ButtonPress && event->type != ButtonRelease)
-       return;
-    strcpy( Line, "\030\033G  " );
+    register TScreen *screen = &term->screen;
+    Char Line[ 6 ];
+    register unsigned line, col;
 
+    if (event->type == ButtonPress || event->type == ButtonRelease) {
        line = ( event->xbutton.y - screen->border ) / FontHeight( screen );
        col  = ( event->xbutton.x - OriginX(screen)) / FontWidth( screen );
+       Line[0] = CTRL('X');
+       Line[1] = ESC;
+       Line[2] = 'G';
        Line[3] = ' ' + col;
        Line[4] = ' ' + line;
-       v_write(pty, Line, 5 );
+       v_write(screen->respond, Line, 5 );
+    }
 }
 
 void
@@ -222,28 +222,29 @@
        String *params GCC_UNUSED,      /* selections */
        Cardinal *num_params GCC_UNUSED)
 {      /* ^XM-G<line+' '><col+' '> */
-       register TScreen *screen = &term->screen;
-       int pty = screen->respond;
-       char Line[ 6 ];
-       register int line;
+    register TScreen *screen = &term->screen;
+    int pty = screen->respond;
+    Char Line[ 6 ];
+    register int line;
 
-    if (event->type != ButtonPress && event->type != ButtonRelease)
-       return;
+    if (event->type == ButtonPress || event->type == ButtonRelease) {
 
        line = screen->cur_row -
                (( event->xbutton.y - screen->border ) / FontHeight( screen ));
-       if ( ! line ) return;
-       Line[ 1 ] = 0;
-       Line[ 0 ] = 27;
-       v_write(pty, Line, 1 );
-
-       Line[ 0 ] = CTRL('p');
+       if (line != 0) {
+           Line[0] = ESC;      /* force an exit from insert-mode */
+           v_write(pty, Line, 1 );
 
-       if ( line < 0 ) {
+           if ( line < 0 ) {
                line = -line;
-               Line[ 0 ] = CTRL('n');
+               Line[0] = CTRL('n');
+           } else {
+               Line[0] = CTRL('p');
+           }
+           while ( --line >= 0 )
+               v_write(pty, Line, 1 );
        }
-       while ( --line >= 0 ) v_write(pty, Line, 1 );
+    }
 }
 
 
@@ -356,7 +357,7 @@
       case XA_CUT_BUFFER5: cutbuffer = 5; break;
       case XA_CUT_BUFFER6: cutbuffer = 6; break;
       case XA_CUT_BUFFER7: cutbuffer = 7; break;
-      default:        cutbuffer = -1;
+      default:            cutbuffer = -1;
     }
     if (cutbuffer >= 0) {
        int inbytes;
@@ -396,8 +397,8 @@
        int *format GCC_UNUSED)
 {
     int pty;
-    register char *lag, *cp, *end;
-    char *line = (char*)value;
+    register Char *lag, *cp, *end;
+    Char *line = (Char*)value;
 
     if (!IsXtermWidget(w))
        return;
@@ -420,12 +421,13 @@
     end = &line[*length];
     lag = line;
     for (cp = line; cp != end; cp++)
-       {
-           if (*cp != '\n') continue;
+    {
+       if (*cp == '\n') {
            *cp = '\r';
            v_write(pty, lag, cp - lag + 1);
            lag = cp + 1;
        }
+    }
     if (lag != end)
        v_write(pty, lag, end - lag);
 
@@ -637,7 +639,7 @@
                                line[count++] = ' ' + col + 1;
                                line[count++] = ' ' + row + 1;
                        }
-                       v_write(screen->respond, (char *)line, count);
+                       v_write(screen->respond, line, count);
                        TrackText(0, 0, 0, 0);
                }
        }
@@ -800,17 +802,17 @@
        }
 
     scroll_update_one(startRRow, startRCol);
-    scroll_update_one(endRRow, endRCol);
+    scroll_update_one(endRRow,   endRCol);
     scroll_update_one(startSRow, startSCol);
-    scroll_update_one(endSRow, endSCol);
+    scroll_update_one(endSRow,   endSCol);
 
     scroll_update_one(rawRow, rawCol);
 
     scroll_update_one(screen->startHRow, screen->startHCol);
-    scroll_update_one(screen->endHRow, screen->endHCol);
+    scroll_update_one(screen->endHRow,   screen->endHCol);
 
     screen->startHCoord = Coordinate (screen->startHRow, screen->startHCol);
-    screen->endHCoord = Coordinate (screen->endHRow, screen->endHCol);
+    screen->endHCoord   = Coordinate (screen->endHRow,   screen->endHCol);
 }
 
 
@@ -875,6 +877,11 @@
              i >= 0 && !(*ch & CHARDRAWN) ;
              ch--, i--)
            ;
+#if OPT_DEC_CHRSET
+       if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
+               i *= 2;
+       }
+#endif
        return(i);
 }
 
@@ -967,6 +974,25 @@
     return (0);
 }
 
+#if OPT_WIDE_CHARS
+static int class_of(TScreen *screen, int row, int col)
+{
+    int value;
+#if OPT_DEC_CHRSET
+    if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
+       col /= 2;
+    }
+#endif
+    value = getXtermCell(screen, row, col);
+    if_OPT_WIDE_CHARS(screen,{
+       /*FIXME: extend the character-class table */
+    })
+    return charClass[value & ((sizeof(charClass)/sizeof(charClass[0]))-1)];
+}
+#else
+#define class_of(screen,row,col) charClass[getXtermCell(screen,row,col)]
+#endif
+
 /*
  * sets startSRow startSCol endSRow endSCol
  * ensuring that they have legal values
@@ -981,7 +1007,6 @@
        Bool extend)
 {
        register TScreen *screen = &term->screen;
-       register Char *ptr;
        register int length;
        register int cclass;
 
@@ -1013,21 +1038,16 @@
                                startSCol = 0;
                                startSRow++;
                        } else {
-                               ptr = SCRN_BUF_CHARS(screen, startSRow+screen->topline)
-                                + startSCol;
-                               cclass = charClass[*ptr];
+                               cclass = class_of(screen,startSRow,startSCol);
                                do {
-                                       --startSCol;
-                                       --ptr;
-                                       if (startSCol <= 0
-                                           && ScrnTstWrapped(screen, startSRow - 1)) {
-                                               --startSRow;
-                                               startSCol = LastTextCol(startSRow);
-                                               ptr = SCRN_BUF_CHARS(screen, startSRow+screen->topline)
-                                                + startSCol;
-                                       }
+                                   --startSCol;
+                                   if (startSCol <= 0
+                                    && ScrnTstWrapped(screen, startSRow - 1)) {
+                                       --startSRow;
+                                       startSCol = LastTextCol(startSRow);
+                                   }
                                } while (startSCol >= 0
-                                && charClass[*ptr] == cclass);
+                                && class_of(screen,startSRow,startSCol) == cclass);
                                ++startSCol;
                        }
                        if (endSCol > (LastTextCol(endSRow) + 1)) {
@@ -1035,22 +1055,17 @@
                                endSRow++;
                        } else {
                                length = LastTextCol(endSRow);
-                               ptr = SCRN_BUF_CHARS(screen, endSRow+screen->topline)
-                                + endSCol;
-                               cclass = charClass[*ptr];
+                               cclass = class_of(screen,endSRow,endSCol);
                                do {
-                                       ++endSCol;
-                                       ++ptr;
-                                       if (endSCol > length
-                                           && ScrnTstWrapped(screen, endSRow)) {
-                                               endSCol = 0;
-                                               ++endSRow;
-                                               length = LastTextCol(endSRow);
-                                               ptr = SCRN_BUF_CHARS(screen, endSRow+screen->topline)
-                                                + endSCol;
-                                       }
+                                   ++endSCol;
+                                   if (endSCol > length
+                                    && ScrnTstWrapped(screen, endSRow)) {
+                                       endSCol = 0;
+                                       ++endSRow;
+                                       length = LastTextCol(endSRow);
+                                   }
                                } while (endSCol <= length
-                                && charClass[*ptr] == cclass);
+                                && class_of(screen,endSRow,endSCol) == cclass);
                                /* Word select selects if pointing to any char
                                   in "word", especially in that it includes
                                   the last character in a word.  So no --endSCol
@@ -1195,60 +1210,70 @@
     /* Guaranteed that (crow, ccol) <= (row, col), and that both points are valid
        (may have row = screen->max_row+1, col = 0) */
 {
-       register TScreen *screen = &term->screen;
-       register int i, j = 0;
-       int eol;
-       char *line, *lp;
-
-       if (crow == row && ccol > col) {
-           int tmp = ccol;
-           ccol = col;
-           col = tmp;
-       }
-
-       --col;
-       /* first we need to know how long the string is before we can save it*/
-
-       if ( row == crow ) j = Length(screen, crow, ccol, col);
-       else {  /* two cases, cut is on same line, cut spans multiple lines */
-               j += Length(screen, crow, ccol, screen->max_col) + 1;
-               for(i = crow + 1; i < row; i++)
-                       j += Length(screen, i, 0, screen->max_col) + 1;
-               if (col >= 0)
-                       j += Length(screen, row, 0, col);
-       }
-
-       /* now get some memory to save it in */
-
-       if (screen->selection_size <= j) {
-           if((line = (char *)malloc((unsigned) j + 1)) == 0)
-               SysError(ERROR_BMALLOC2);
-           XtFree(screen->selection);
-           screen->selection = line;
-           screen->selection_size = j + 1;
-       } else line = screen->selection;
-       if (!line || j < 0) return;
-
-       line[j] = '\0';         /* make sure it is null terminated */
-       lp = line;              /* lp points to where to save the text */
-       if ( row == crow ) lp = SaveText(screen, row, ccol, col, lp, &eol);
-       else {
-               lp = SaveText(screen, crow, ccol, screen->max_col, lp, &eol);
-               if (eol)
-                       *lp ++ = '\n';  /* put in newline at end of line */
-               for(i = crow +1; i < row; i++) {
-                       lp = SaveText(screen, i, 0, screen->max_col, lp, &eol);
-                       if (eol)
-                               *lp ++ = '\n';
-                       }
-               if (col >= 0)
-                       lp = SaveText(screen, row, 0, col, lp, &eol);
+    register TScreen *screen = &term->screen;
+    register int i, j = 0;
+    int eol;
+    char *line, *lp;
+
+    if (crow == row && ccol > col) {
+       int tmp = ccol;
+       ccol = col;
+       col = tmp;
+    }
+
+    --col;
+    /* first we need to know how long the string is before we can save it*/
+
+    if ( row == crow ) {
+       j = Length(screen, crow, ccol, col);
+    } else { /* two cases, cut is on same line, cut spans multiple lines */
+       j += Length(screen, crow, ccol, screen->max_col) + 1;
+       for (i = crow + 1; i < row; i++)
+           j += Length(screen, i, 0, screen->max_col) + 1;
+       if (col >= 0)
+           j += Length(screen, row, 0, col);
+    }
+
+    /* UTF-8 may require more space */
+    if_OPT_WIDE_CHARS(screen,{j *= 4;})
+
+    /* now get some memory to save it in */
+
+    if (screen->selection_size <= j) {
+       if((line = (char *)malloc((unsigned) j + 1)) == 0)
+           SysError(ERROR_BMALLOC2);
+       XtFree(screen->selection_data);
+       screen->selection_data = line;
+       screen->selection_size = j + 1;
+    } else {
+       line = screen->selection_data;
+    }
+
+    if ((line == 0)
+     || (j < 0))
+       return;
+
+    line[j] = '\0';            /* make sure it is null terminated */
+    lp = line;                 /* lp points to where to save the text */
+    if ( row == crow ) {
+       lp = SaveText(screen, row, ccol, col, lp, &eol);
+    } else {
+       lp = SaveText(screen, crow, ccol, screen->max_col, lp, &eol);
+       if (eol)
+           *lp ++ = '\n';      /* put in newline at end of line */
+       for(i = crow +1; i < row; i++) {
+           lp = SaveText(screen, i, 0, screen->max_col, lp, &eol);
+           if (eol)
+               *lp ++ = '\n';
        }
-       *lp = '\0';             /* make sure we have end marked */
+       if (col >= 0)
+           lp = SaveText(screen, row, 0, col, lp, &eol);
+    }
+    *lp = '\0';                        /* make sure we have end marked */
 
-       TRACE(("Salted TEXT:%.*s\n", lp - line, line))
-       screen->selection_length = (lp - line);
-       _OwnSelection(term, params, num_params);
+    TRACE(("Salted TEXT:%.*s\n", lp - line, line))
+    screen->selection_length = (lp - line);
+    _OwnSelection(term, params, num_params);
 }
 
 static Boolean
@@ -1268,9 +1293,11 @@
        return False;
 
     screen = &((XtermWidget)w)->screen;
-    if (screen->selection == NULL) return False; /* can this happen? */
 
-    if (*target == XA_TARGETS(d)) {
+    if (screen->selection_data == NULL) {
+       return False;           /* can this happen? */
+
+    } else if (*target == XA_TARGETS(d)) {
        Atom* targetP;
        Atom* std_targets;
        unsigned long std_length;
@@ -1298,7 +1325,7 @@
        if (*target == XA_COMPOUND_TEXT(d)) {
            XTextProperty textprop;
 
-           *value = (XtPointer) screen->selection;
+           *value = (XtPointer) screen->selection_data;
            if (XmbTextListToTextProperty (d, (char**)value, 1,
                                           XCompoundTextStyle, &textprop)
                        < Success) return False;
@@ -1307,7 +1334,7 @@
            *type = *target;
        } else {
            *type = XA_STRING;
-           *value = screen->selection;
+           *value = screen->selection_data;
            *length = screen->selection_length;
        }
        *format = 8;
@@ -1444,7 +1471,8 @@
                        "%s: selection too big (%d bytes), not storing in CUT_BUFFER%d\n",
                        xterm_name, termw->screen.selection_length, cutbuffer);
            else
-               XStoreBuffer( XtDisplay((Widget)termw), termw->screen.selection,
+               XStoreBuffer( XtDisplay((Widget)termw),
+                             termw->screen.selection_data,
                              termw->screen.selection_length, cutbuffer );
        else if (!replyToEmacs) {
            have_selection |=
@@ -1515,33 +1543,38 @@
     register char *lp,         /* pointer to where to put the text */
     int *eol)
 {
-       register int i = 0;
-       register Char *ch = SCRN_BUF_CHARS(screen, row + screen->topline);
-       register int c;
+    int i = 0;
+    int c;
 
-       i = Length(screen, row, scol, ecol);
-       ecol = scol + i;
+    i = Length(screen, row, scol, ecol);
+    ecol = scol + i;
 #if OPT_DEC_CHRSET
-       if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
-               scol = (scol + 0) / 2;
-               ecol = (ecol + 1) / 2;
-       }
+    if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
+       scol = (scol + 0) / 2;
+       ecol = (ecol + 1) / 2;
+    }
 #endif
-       *eol = !ScrnTstWrapped(screen, row);
-       for (i = scol; i < ecol; i++) {
-               c = ch[i];
-               if (c == 0)
-                       c = ' ';
-               else if(c < ' ') {
-                       if(c == '\036')
-                               c = '#'; /* char on screen is pound sterling */
-                       else
-                               c += 0x5f; /* char is from DEC drawing set */
-               } else if(c == 0x7f)
-                       c = 0x5f;
-               *lp++ = c;
-       }
-       return(lp);
+    *eol = !ScrnTstWrapped(screen, row);
+    for (i = scol; i < ecol; i++) {
+       c = getXtermCell(screen,row,i);
+       if (c == 0) {
+           c = ' ';
+       } else if (c < ' ') {
+           if (c == '\036')
+               c = '#';        /* char on screen is pound sterling */
+           else
+               c += 0x5f;      /* char is from DEC drawing set */
+       } else if (c == 0x7f) {
+           c = 0x5f;
+       }
+#if OPT_WIDE_CHARS
+       if (screen->utf8_mode)
+           lp = convertToUTF8(lp, c);
+       else
+#endif
+       *lp++ = c;
+    }
+    return(lp);
 }
 
 static int
@@ -1631,7 +1664,7 @@
        line[count++] = ' ' + row + 1;
 
        /* Transmit key sequence to process running under xterm */
-       v_write(pty, (char *)line, count);
+       v_write(pty, line, count);
 }
 
 
Index: charproc.c
--- xterm-100+/charproc.c       Mon May  3 21:27:36 1999
+++ xterm-101/charproc.c        Mon May 10 05:11:53 1999
@@ -1,6 +1,6 @@
 /*
  * $XConsortium: charproc.c /main/196 1996/12/03 16:52:46 swick $
- * $XFree86: xc/programs/xterm/charproc.c,v 3.79 1999/05/03 12:16:10 dawes Exp $
+ * $XFree86: xc/programs/xterm/charproc.c,v 3.80 1999/05/09 10:52:08 dawes Exp $
  */
 
 /*
@@ -409,10 +409,11 @@
  !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \n\
      ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
           ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
+                 Meta <Btn2Down>:clear-saved-lines() \n\
               ~Meta <Btn3Motion>:select-extend()      \n\
                          <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
                        <BtnDown>:bell(0) \
-";
+"; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
 
 static XtActionsRec actionsList[] = {
     { "allow-send-events",     HandleAllowSends },
@@ -630,7 +631,7 @@
        XtRString, (XtPointer) "xterm"},
 {XtNanswerbackString,XtCAnswerbackString, XtRString, sizeof(String),
        XtOffsetOf(XtermWidgetRec, screen.answer_back),
-       XtRString, (XtPointer) DFT_TERMTYPE},
+       XtRString, (XtPointer) ""},
 #ifdef OPT_PRINT_COLORS
 {XtNprintAttributes,XtCPrintAttributes, XtRInt, sizeof(int),
        XtOffsetOf(XtermWidgetRec, screen.print_attributes),
@@ -2282,17 +2283,16 @@
        }
 }
 
-static char *v_buffer;         /* pointer to physical buffer */
-static char *v_bufstr = NULL;  /* beginning of area to write */
-static char *v_bufptr;         /* end of area to write */
-static char *v_bufend;         /* end of physical buffer */
-#define        ptymask()       (v_bufptr > v_bufstr ? pty_mask : 0)
+static Char *v_buffer;         /* pointer to physical buffer */
+static Char *v_bufstr = NULL;  /* beginning of area to write */
+static Char *v_bufptr;         /* end of area to write */
+static Char *v_bufend;         /* end of physical buffer */
 
 /* Write data to the pty as typed by the user, pasted with the mouse,
    or generated by us in response to a query ESC sequence. */
 
 int
-v_write(int f, char *d, int len)
+v_write(int f, Char *data, int len)
 {
        int riten;
        int c = len;
@@ -2307,17 +2307,18 @@
        if (debug) {
            fprintf(stderr, "v_write called with %d bytes (%d left over)",
                    len, v_bufptr - v_bufstr);
-           if (len > 1  &&  len < 10) fprintf(stderr, " \"%.*s\"", len, d);
+           if (len > 1  &&  len < 10)
+               fprintf(stderr, " \"%.*s\"", len, (char *)data);
            fprintf(stderr, "\n");
        }
 #endif
 
 #ifndef AMOEBA
        if (!FD_ISSET (f, &pty_mask))
-               return(write(f, d, len));
+               return(write(f, (char *)data, len));
 #else
        if (term->screen.respond != f)
-               return(write(f, d, len));
+               return(write(f, (char *)data, len));
 #endif
 
        /*
@@ -2347,7 +2348,7 @@
                    /* still won't fit: get more space */
                    /* Don't use XtRealloc because an error is not fatal. */
                    int size = v_bufptr - v_buffer; /* save across realloc */
-                   v_buffer = (char *)realloc(v_buffer, size + len);
+                   v_buffer = (Char *)realloc(v_buffer, size + len);
                    if (v_buffer) {
 #ifdef DEBUG
                        if (debug)
@@ -2368,7 +2369,7 @@
            }
            if (v_bufend >= v_bufptr + len) {
                /* new stuff will fit */
-               memmove( v_bufptr, d, len);
+               memmove( v_bufptr, data, len);
                v_bufptr += len;
            }
        }
@@ -2427,7 +2428,7 @@
            int size = v_bufptr - v_buffer;
            int allocsize = size ? size : 1;
 
-           v_buffer = (char *)realloc(v_buffer, allocsize);
+           v_buffer = (Char *)realloc(v_buffer, allocsize);
            if (v_buffer) {
                v_bufstr = v_buffer + start;
                v_bufptr = v_buffer + size;
@@ -2526,7 +2527,7 @@
 
        /* if there is room to write more data to the pty, go write more */
        if (FD_ISSET (screen->respond, &write_mask)) {
-           v_write(screen->respond, (char *)0, 0); /* flush buffer */
+           v_write(screen->respond, (Char *)0, 0); /* flush buffer */
        }
 
        /* if there are X events already in our queue, it
@@ -3539,6 +3540,7 @@
 void
 unparseputc(int c, int fd)
 {
+       register TScreen *screen = &term->screen;
        IChar   buf[2];
        register int i = 1;
 
@@ -3549,20 +3551,10 @@
                buf[1] = '\n';
                i++;
        }
-#if OPT_WIDE_CHARS
-       {
-       char buffer[2];
-       buffer[0] = buf[0];
-       buffer[1] = buf[1];
-       v_write(fd, buffer, i);
-       }
-#else
-       v_write(fd, (char *)buf, i);
-#endif
+       writePtyData(fd, buf, i);
 
        /* If send/receive mode is reset, we echo characters locally */
        if ((term->keyboard.flags & MODE_SRM) == 0) {
-               register TScreen *screen = &term->screen;
                dotext(screen, screen->gsets[(int)(screen->curgl)], buf, i);
        }
 }
@@ -4133,7 +4125,7 @@
 
 static void VTDestroy (Widget w)
 {
-    XtFree(((XtermWidget)w)->screen.selection);
+    XtFree(((XtermWidget)w)->screen.selection_data);
 }
 
 /*ARGSUSED*/
Index: config.guess
--- xterm-100+/config.guess     Sun Jan 17 10:46:35 1999
+++ xterm-101/config.guess      Fri May  7 18:34:55 1999
@@ -372,7 +372,7 @@
        case "${UNAME_MACHINE}" in
            9000/31? )            HP_ARCH=m68000 ;;
            9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/6?? | 9000/7?? | 9000/80[24] | 9000/8?[13679] | 9000/892 )
+           9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[13679] | 9000/892 )
               sed 's/^              //' << EOF >dummy.c
               #include <stdlib.h>
               #include <unistd.h>
@@ -657,7 +657,7 @@
 {
 #ifdef __ELF__
 # ifdef __GLIBC__
-#  if __GLIBC__ >= 2
+#  if (__GLIBC__ >= 2)
     printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
 #  else
     printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
@@ -687,9 +687,23 @@
         # Use sysv4.2uw... so that sysv4* matches it.
        echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
        exit 0 ;;
+    # SysVr5/Unixware7
+    i?86:*:5*:* | i?86:SYSTEM_V:5*:*)
+        if uname -a | grep SCO >/dev/null 2>/dev/null ; then
+           (/bin/uname -s|egrep UnixWare >/dev/null) && UNAME_VER=uw${UNAME_VERSION}
+           if /bin/uname -X 2>/dev/null >/dev/null ; then
+               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+           fi
+               echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}${UNAME_VER}
+       else
+               echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
+       fi
+       exit 0 ;;
     i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+               echo ${UNAME_MACHINE}-univel-sysv4.2uw${UNAME_VERSION}
        else
                echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
        fi
Index: config.sub
--- xterm-100+/config.sub       Sun Jan 17 10:49:12 1999
+++ xterm-101/config.sub        Fri May  7 06:54:55 1999
@@ -151,7 +151,8 @@
        # Some are omitted here because they have special meanings below.
        tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
                | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
-               | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
+               | 580 | i960 | h8300 \
+               | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w \
                | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
                | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
                | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
@@ -175,7 +176,8 @@
              | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
              | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
              | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
-             | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
+             | xmp-* | ymp-* \
+             | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
              | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
              | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
              | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
Index: configure
--- xterm-100+/configure        Mon May  3 06:56:13 1999
+++ xterm-101/configure Fri May  7 06:41:05 1999
@@ -2104,7 +2104,7 @@
 #include "confdefs.h"
 
 #ifndef CC_HAS_PROTOS
-#if !defined(__STDC__) || __STDC__ != 1
+#if !defined(__STDC__) || (__STDC__ != 1)
 choke me
 #endif
 #endif
@@ -4924,7 +4924,7 @@
 then
                cat > conftest.$ac_ext <<EOF
 #line 4927 "configure"
-int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
 EOF
                echo "checking for gcc warning options" 1>&6
 echo "configure:4931: checking for gcc warning options" >&5
Index: configure.in
--- xterm-100+/configure.in     Mon May  3 21:18:34 1999
+++ xterm-101/configure.in      Sun May  9 21:31:22 1999
@@ -1,5 +1,5 @@
 dnl
-dnl $XFree86: xc/programs/xterm/configure.in,v 3.23 1999/04/29 09:14:03 dawes Exp $
+dnl $XFree86: xc/programs/xterm/configure.in,v 3.24 1999/05/09 10:52:09 dawes Exp $
 dnl
 dnl ---------------------------------------------------------------------------
 dnl
Index: data.h
--- xterm-100+/data.h   Mon May  3 21:18:34 1999
+++ xterm-101/data.h    Fri May  7 07:10:23 1999
@@ -28,21 +28,7 @@
 #ifndef included_data_h
 #define included_data_h 1
 
-#include <ptyx.h>
-
-#if XtSpecificationRelease >= 6 && !defined(NO_XPOLL_H)
-#include <X11/Xpoll.h>
-#else
-#define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval *)t)
-#define XFD_COPYSET(src,dst) bcopy((src)->fds_bits, (dst)->fds_bits, sizeof(fd_set))
-#endif
-
-#ifdef USE_SYS_SELECT_H
-#include <sys/types.h>
-#include <sys/select.h>
-#endif
-
-#include <setjmp.h>
+#include <xterm.h>
 
 extern XtAppContext app_con;
 
Index: main.c
--- xterm-100+/main.c   Mon May  3 21:18:34 1999
+++ xterm-101/main.c    Sun May  9 21:31:22 1999
@@ -64,7 +64,7 @@
 
 ******************************************************************/
 
-/* $XFree86: xc/programs/xterm/main.c,v 3.89 1999/05/03 12:16:11 dawes Exp $ */
+/* $XFree86: xc/programs/xterm/main.c,v 3.90 1999/05/09 10:52:10 dawes Exp $ */
 
 
 /* main.c */
@@ -260,7 +260,7 @@
 #endif
 #define USE_TERMCAP_ENVVARS    /* every one uses this except SYSV maybe */
 
-#if defined(__sgi) && OSMAJORVERSION >= 5
+#if defined(__sgi) && (OSMAJORVERSION >= 5)
 #undef TIOCLSET                                /* defined, but not useable */
 #endif
 
@@ -343,7 +343,9 @@
 
 #ifndef linux
 #ifndef USE_POSIX_TERMIOS
+#ifndef USE_SYSV_TERMIO
 #include <sgtty.h>
+#endif
 #endif /* USE_POSIX_TERMIOS */
 #ifndef Lynx
 #include <sys/resource.h>
@@ -398,7 +400,7 @@
 #include <sys/utsname.h>
 #endif /* __hpux */
 
-#if defined(apollo) && OSMAJORVERSION == 10 && OSMINORVERSION < 4
+#if defined(apollo) && (OSMAJORVERSION == 10) && (OSMINORVERSION < 4)
 #define ttyslot() 1
 #endif /* apollo */
 
@@ -426,7 +428,7 @@
 #endif
 #endif
 #include <utmp.h>
-#if defined(_CRAY) && OSMAJORVERSION < 8
+#if defined(_CRAY) && (OSMAJORVERSION < 8)
 extern struct utmp *getutid __((struct utmp *_Id));
 #endif
 
@@ -554,6 +556,9 @@
 ** to eliminate any assumptions about the internal order of their
 ** contents.
 */
+#ifndef ICRNL
+#include <sys/termio.h>
+#endif
 static struct termio d_tio;
 #ifdef HAS_LTCHARS
 static struct ltchars d_ltc;
@@ -685,7 +690,7 @@
 static int parse_tty_modes (char *s, struct _xttymodes *modelist);
 
 #ifdef USE_SYSV_UTMP
-#if defined(X_NOT_STDC_ENV) || (defined(AIXV3) && OSMAJORVERSION < 4)
+#if defined(X_NOT_STDC_ENV) || (defined(AIXV3) && (OSMAJORVERSION < 4))
 extern struct utmp *getutent();
 extern struct utmp *getutid();
 extern struct utmp *getutline();
@@ -1801,7 +1806,7 @@
        screen->inhibit = inhibit;
 
 #ifdef AIXV3
-#if OSMAJORVERSION < 4
+#if (OSMAJORVERSION < 4)
        /* In AIXV3, xterms started from /dev/console have CLOCAL set.
         * This means we need to clear CLOCAL so that SIGHUP gets sent
         * to the slave-pty process when xterm exits.
@@ -1898,7 +1903,7 @@
 {
 #if defined(__osf__) || (defined(linux) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1))
     int tty;
-    return (openpty(pty, &tty, ttydev, NULL, NULL));
+    return (openpty(pty, &tty, NULL, NULL, NULL));
 #elif defined(SYSV) && defined(i386) && !defined(SVR4)
         /*
          The order of this code is *important*.  On SYSV/386 we want to open
@@ -1942,7 +1947,7 @@
        }
        strcpy(ttydev, ttyname(*pty));
        return 0;
-#elif defined(__sgi) && OSMAJORVERSION >= 4
+#elif defined(__sgi) && (OSMAJORVERSION >= 4)
        {
            char    *tty_name;
 
@@ -1968,7 +1973,7 @@
        }
 #elif defined(USE_GET_PSEUDOTTY)
        return ((*pty = getpseudotty (&ttydev, &ptydev)) >= 0 ? 0 : 1);
-#elif (defined(__sgi) && OSMAJORVERSION < 4) || (defined(umips) && defined (SYSTYPE_SYSV))
+#elif (defined(__sgi) && (OSMAJORVERSION < 4)) || (defined(umips) && defined (SYSTYPE_SYSV))
        struct stat fstat_buf;
 
        *pty = open ("/dev/ptc", O_RDWR);
@@ -4017,7 +4022,7 @@
 #endif
        char* ptyname;
        char* ptynameptr = 0;
-#if defined(WTMP) && !defined(SVR4) && !(defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && __GLIBC__ == 2 && (__GLIBC_MINOR__ == 0)))
+#if defined(WTMP) && !defined(SVR4) && !(defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
        int fd;                 /* for /etc/wtmp */
        int i;
 #endif
Index: misc.c
--- xterm-100+/misc.c   Mon May  3 21:18:34 1999
+++ xterm-101/misc.c    Fri May  7 06:41:05 1999
@@ -78,7 +78,7 @@
 #include <fontutils.h>
 #include <xcharmouse.h>
 
-#if XtSpecificationRelease < 6
+#if (XtSpecificationRelease < 6)
 #ifndef X_GETTIMEOFDAY
 #define X_GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *)0)
 #endif
Index: ptydata.c
--- xterm-100+/ptydata.c        Mon May  3 21:18:34 1999
+++ xterm-101/ptydata.c Sun May  9 20:06:20 1999
@@ -34,7 +34,6 @@
 
 ********************************************************/
 
-#include <xterm.h>
 #include <data.h>
 
 /*
@@ -193,3 +192,43 @@
 {
     return (data->ptr - DecodedData(data));
 }
+
+#if OPT_WIDE_CHARS
+Char * convertToUTF8(Char *lp, int c)
+{
+    if (c < 0x80) {            /*  0*******  */
+       *lp++ = (c);
+    } else if (c < 0x800) {    /*  110***** 10******  */
+       *lp++ = (0xc0 | (c >> 6));
+       *lp++ = (0x80 | (c & 0x3f));
+    } else {                   /*  1110**** 10****** 10******  */
+       *lp++ = (0xe0 | (c >> 12));
+       *lp++ = (0x80 | ((c >> 6) & 0x3f));
+       *lp++ = (0x80 | (c & 0x3f));
+    }
+    /*
+     * UTF-8 is defined for words of up to 31 bits, but we need only 16
+     * bits here, since that's all that X11R6 supports.
+     */
+    return lp;
+}
+
+/*
+ * Write data back to the PTY
+ */
+void writePtyData(int f, IChar *d, unsigned len)
+{
+    static Char *dbuf;
+    static unsigned dlen;
+    unsigned n = (len << 1);
+
+    if (dlen <= len) {
+       dlen = n;
+       dbuf = (Char *)XtRealloc((char *)dbuf, dlen);
+    }
+
+    for (n = 0; n < len; n++)
+       dbuf[n] = d[n];
+    v_write(f, dbuf, n);
+}
+#endif
Index: ptyx.h
--- xterm-100+/ptyx.h   Mon May  3 21:18:34 1999
+++ xterm-101/ptyx.h    Sun May  9 19:22:16 1999
@@ -329,7 +329,7 @@
 
 /***====================================================================***/
 
-#if XtSpecificationRelease < 6
+#if (XtSpecificationRelease < 6)
 #ifndef NO_ACTIVE_ICON
 #define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */
 #endif
@@ -358,7 +358,7 @@
 #endif
 
 #ifndef OPT_I18N_SUPPORT
-#if XtSpecificationRelease >= 6
+#if (XtSpecificationRelease >= 6)
 #define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */
 #else
 #define OPT_I18N_SUPPORT 0
@@ -370,7 +370,7 @@
 #endif
 
 #ifndef OPT_INPUT_METHOD
-#if XtSpecificationRelease >= 6
+#if (XtSpecificationRelease >= 6)
 #define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */
 #else
 #define OPT_INPUT_METHOD 0
@@ -920,7 +920,7 @@
        Boolean         cutNewline;     /* whether or not line cut has \n */
        Boolean         cutToBeginningOfLine;  /* line cuts to BOL? */
        Boolean         highlight_selection; /* controls appearance of selection */
-       char            *selection;     /* the current selection */
+       char            *selection_data; /* the current selection */
        int             selection_size; /* size of allocated buffer */
        int             selection_length; /* number of significant bytes */
        Time            selection_time; /* latest event timestamp */
Index: resize.c
--- xterm-100+/resize.c Mon Mar 29 13:36:18 1999
+++ xterm-101/resize.c  Fri May  7 06:37:17 1999
@@ -72,13 +72,17 @@
 
 #ifdef SCO
 #define USE_TERMCAP
-#define USE_TERMINFO
 #endif
 
 #ifdef linux
 #define USE_TERMIOS
-#define USE_TERMINFO
 #define USE_SYSV_UTMP
+#endif
+
+#ifndef USE_TERMINFO
+#if defined(SCO) || defined(linux)
+#define USE_TERMINFO
+#endif
 #endif
 
 #if defined(SYSV) || defined(Lynx) || defined(__CYGWIN32__)
Index: screen.c
--- xterm-100+/screen.c Mon May  3 21:18:34 1999
+++ xterm-101/screen.c  Sun May  9 21:20:15 1999
@@ -560,7 +560,7 @@
            memset(ptr + size - n, curXtermChrSet(row), n);
        })
        if_OPT_WIDE_CHARS(screen,{
-           ptr = BUF_CSETS(sb, row);
+           ptr = BUF_WIDEC(sb, row);
            memmove(ptr + col, ptr + col + n, nbytes);
            memset(ptr + size - n, 0, n);
        })
Index: util.c
--- xterm-100+/util.c   Mon May  3 21:27:50 1999
+++ xterm-101/util.c    Sun May  9 21:31:22 1999
@@ -1,6 +1,6 @@
 /*
  *     $XConsortium: util.c /main/33 1996/12/01 23:47:10 swick $
- *     $XFree86: xc/programs/xterm/util.c,v 3.39 1999/05/03 12:16:13 dawes Exp $
+ *     $XFree86: xc/programs/xterm/util.c,v 3.40 1999/05/09 10:52:11 dawes Exp $
  */
 
 /*
Index: version.h
--- xterm-100+/version.h        Mon May  3 21:18:34 1999
+++ xterm-101/version.h Sun May  9 21:32:01 1999
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/xterm/version.h,v 3.24 1999/05/03 12:16:13 dawes Exp $ */
+/* $XFree86: xc/programs/xterm/version.h,v 3.25 1999/05/09 10:52:11 dawes Exp $ */
 
 /*
  * These definitions are used to build the string that's printed in response to
@@ -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   100
-#define XFREE86_VERSION "XFree86 3.9Pk"
+#define XTERM_PATCH   101
+#define XFREE86_VERSION "XFree86 3.9Pm"
Index: xterm.h
--- xterm-100+/xterm.h  Mon May  3 21:18:34 1999
+++ xterm-101/xterm.h   Sun May  9 20:06:28 1999
@@ -125,6 +125,20 @@
 #include <proto.h>
 #include <ptyx.h>
 
+#if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H)
+#include <X11/Xpoll.h>
+#else
+#define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval *)t)
+#define XFD_COPYSET(src,dst) bcopy((src)->fds_bits, (dst)->fds_bits, sizeof(fd_set))
+#endif
+
+#ifdef USE_SYS_SELECT_H
+#include <sys/types.h>
+#include <sys/select.h>
+#endif
+
+#include <setjmp.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -168,7 +182,7 @@
 
 /* charproc.c */
 extern int VTInit (void);
-extern int v_write (int f, char *d, int len);
+extern int v_write (int f, Char *d, int len);
 extern void FindFontSelection (char *atom_name, Bool justprobe);
 extern void HideCursor (void);
 extern void ShowCursor (void);
@@ -313,6 +327,13 @@
 extern int nextPtyData (PtyData *data);
 extern unsigned usedPtyData(PtyData *data);
 extern void initPtyData (PtyData *data);
+
+#if OPT_WIDE_CHARS
+extern Char * convertToUTF8(Char *lp, int c);
+extern void writePtyData(int f, IChar *d, unsigned len);
+#else
+#define writePtyData(f,d,len) v_write(f,d,len)
+#endif
 
 /* screen.c */
 extern Bool non_blank_line (ScrnBuf sb, int row, int col, int len);
Index: xterm.log.html
--- xterm-100+/xterm.log.html   Mon May  3 21:21:03 1999
+++ xterm-101/xterm.log.html    Mon May 10 05:44:18 1999
@@ -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.            *
  *****************************************************************************
-  $XFree86: xc/programs/xterm/xterm.log.html,v 1.23 1999/05/03 12:16:14 dawes Exp $
+  $XFree86: xc/programs/xterm/xterm.log.html,v 1.24 1999/05/09 10:52:12 dawes Exp $
   -->
 <HTML>
 <HEAD>
@@ -41,6 +41,7 @@
 xc/programs/Xserver/hw/xfree86).
 
 <UL>
+<LI><A HREF="#xterm_101">Patch #101 - 1999/5/10 - XFree86 3.9Pm</A>
 <LI><A HREF="#xterm_100">Patch #100 - 1999/5/3 - XFree86 3.9Pl</A>
 <LI><A HREF="#xterm_99">Patch #99 - 1999/5/2 - XFree86 3.9Pk</A>
 <LI><A HREF="#xterm_98">Patch #98 - 1999/4/26 - XFree86 3.9Pk</A>
@@ -144,6 +145,45 @@
 <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
 </UL>
 
+<H1><A NAME="xterm_101">Patch #101 - 1999/5/10 - XFree86 3.9Pm</A></H1>
+<ul>
+       <li>moved includes and definitions for 'select' from data.h to xterm.h
+         to fix problem introduced by prototype for getPtyData, part of UTF-8
+         changes (reported by Jens Schleusener &lt;Jens.Schleusener@dlr.de&gt;)
+
+       <li>added "Meta &lt;Btn2Down&gt;:clear-saved-lines()" default
+         translation (patch by H Merijn Brand)
+
+       <li>fixes to configure script and ifdef's in main.c to build on a
+         HP9000/D390 (hppa-2.0w) running HP-UX 11.00 (64 bit) with egcs 1.1.2
+         and HP's ANSI C compiler (patch by H Merijn Brand
+         &lt;PROCURA_BV@CompuServe.com&gt;)
+
+       <li>add more parentheses in ifdef's (patch by Bob Maynard).
+
+       <li>eliminate conflicting definitions for USE_TERMINFO in resize.c
+         (reported by Jeremy Buhler).
+
+       <li>change openpty call to pass NULL rather than ttydev parameter,
+         since that was used only to estimate the length of the
+         corresponding data, and may not really be long enough
+         (reported by Andreas Jaeger)
+
+       <li>update description in xterm manpage for character class table,
+         which said it handles only 7-bit codes.
+
+       <li>correct a typo in ScrnDeleteChar() which made it not clear the
+         high byte of wide-character data.
+
+       <li>add logic to convert selection to UTF-8 form when appropriate.
+         This makes select/paste "work", but further work is needed to
+         make UTF-8 recognized as a locale in Xlib.
+
+       <li>correct right-limit check when selecting double-width characters.
+
+       <li>change default answerback response to an empty string.
+</ul>
+
 <H1><A NAME="xterm_100">Patch #100 - 1999/5/3 - XFree86 3.9Pl</A></H1>
 <ul>
        <li>Correct a typo in the default resource value for
@@ -853,7 +893,7 @@
 
 Again, most of the bulk of this patch is for ANSI conversion.  I used the
 IRIX compiler's -wlint option to find the remaining functions that use
-K&R syntax (since gcc does not do this properly).
+K&amp;R syntax (since gcc does not do this properly).
 
 Also, I changed the logic in the print code slightly to close unwanted files
 before opening a pipe to the printer.  This may help in some configurations
@@ -861,7 +901,7 @@
 
 <H1><A NAME="xterm_77">Patch #77 - 1998/5/26 - XFree86 3.9Ah and 3.3.2</A></H1>
 
-Most of the bulk of this patch is to convert the extended C (K&R functions
+Most of the bulk of this patch is to convert the extended C (K&amp;R functions
 with prototypes) to ANSI.  I verified that on Linux by comparing object
 files, to ensure that I did not, for example, interchange parameters in
 the function declarations.
@@ -962,7 +1002,7 @@
          application.  Also use this value in install rule "make install-ti",
          for the standalone configure script.
 
-         (patch & feedback from Tor Lillqvist &lt;tml@hemuli.tte.vtt.fi&gt;)
+         (patch &amp; feedback from Tor Lillqvist &lt;tml@hemuli.tte.vtt.fi&gt;)
 
        <li>change ifdef's for "hpux" to "__hpux" (patch by Tor Lillqvist).  The
          imake configuration uses the former, but the latter is predefined by
@@ -1122,7 +1162,7 @@
 <H1><A NAME="xterm_69">Patch #69 - 1998/3/16 - XFree86 3.9Ad and 3.3.2</A></H1>
 
 This corrects the problem in xterm with utmp, reported by Olivier Calle
-&lt;olivier@tc.fluke.com&gt
+&lt;olivier@tc.fluke.com&gt;
 as well as some other people after the XFree86 3.3.2 release.
 <P>
 The error was introduced by my patch #53 in XFree86 3.9r (October 1997).
@@ -1180,7 +1220,7 @@
        <LI>add a configure option, --enable-logfile-exec, which allows the
          user to specify a pipe for logfile.  This defines ALLOWLOGFILEEXEC.
 
-       <LI>makes the ALLOWLOGFILEEXEC code compile & run, if configured.
+       <LI>makes the ALLOWLOGFILEEXEC code compile &amp; run, if configured.
 
        <LI>minor documentation nits.
 </UL>
@@ -1653,7 +1693,7 @@
          circumstances.
 
        <LI>adds more special-case tokens to the standalone configure script's
-         imake-option filter (e.g., "&&", since a "make -n main.o" on my IRIX
+         imake-option filter (e.g., "&amp;&amp;", since a "make -n main.o" on my IRIX
          system uses that shell construct).
 
        <LI>adds a '--enable-logging' option for the standalone configure script.
@@ -1884,7 +1924,7 @@
 &lt;roland@spinnaker.rhein.de&gt;:
 <UL>
        <LI>handle SGR 22, 24 and 25 in combination with colorUL and colorBD
-         resources.  Also noted & fixed reset of colored underline/bold
+         resources.  Also noted &amp; fixed reset of colored underline/bold
          with SGR 0.
 
        <LI>a typo in the termcap (missing '['), from 3.1.2Dj (my error)
@@ -2047,7 +2087,7 @@
        <LI>minor tweak to the screen-repainting when resizing (I still cannot
          entirely get rid of flicker).
 
-       <LI>still more fixes to terminfo & termcap (I corrected my error for
+       <LI>still more fixes to terminfo &amp; termcap (I corrected my error for
          the hpa code and added some other stuff by comparing to ncurses'
          description and rxvt's).
 
@@ -2122,7 +2162,7 @@
        <LI>in both, corrected home/end keys to match the code correction made
          by Thomas Mueller in 3.1.2Bk
 
-         =&gt; (I'm still considering modifying the code & description to match
+         <P>=&gt; (I'm still considering modifying the code &amp; description to match
              the rxvt program).
 </UL>
 
Index: xterm.man
--- xterm-100+/xterm.man        Mon May  3 21:18:34 1999
+++ xterm-101/xterm.man Mon May 10 05:12:26 1999
@@ -814,7 +814,7 @@
 .B "answerbackString (\fPclass\fB AnswerbackString)"
 Specifies the string that xterm sends in response to an ENQ (control/E)
 character from the host.
-The default is the terminal name, e.g., ``xterm''.
+The default is a blank string, i.e., ``''.
 A hardware VT100 implements this feature as a setup option.
 .TP 8
 .B "alwaysHighlight (\fPclass\fB AlwaysHighlight)"
@@ -1774,7 +1774,7 @@
 series of comma-separated
 of \fIrange\fP:\fIvalue\fP pairs.  The
 \fIrange\fP is either a single number or \fIlow\fP-\fIhigh\fP in the range of 0
-to 127, corresponding to the ASCII code for the character or characters to be
+to 255, corresponding to the 8-bit code for the character or characters to be
 set.  The \fIvalue\fP is arbitrary, although the default table uses the
 character number of the first character occurring in the set.
 .PP
@@ -1783,7 +1783,7 @@
 .in +8
 .ft C                  \" Courier
 .nf
-static int charClass[128] = {
+static int charClass[256] = {
 /* NUL  SOH  STX  ETX  EOT  ENQ  ACK  BEL */
     32,   1,   1,   1,   1,   1,   1,   1,
 /*  BS   HT   NL   VT   NP   CR   SO   SI */
@@ -1815,7 +1815,39 @@
 /*   p    q    r    s    t    u    v    w */
     48,  48,  48,  48,  48,  48,  48,  48,
 /*   x    y    z    {    |    }    ~  DEL */
-    48,  48,  48, 123, 124, 125, 126,   1};
+    48,  48,  48, 123, 124, 125, 126,   1,
+/* x80  x81  x82  x83  IND  NEL  SSA  ESA */
+     1,   1,   1,   1,   1,   1,   1,   1,
+/* HTS  HTJ  VTS  PLD  PLU   RI  SS2  SS3 */
+     1,   1,   1,   1,   1,   1,   1,   1,
+/* DCS  PU1  PU2  STS  CCH   MW  SPA  EPA */
+     1,   1,   1,   1,   1,   1,   1,   1,
+/* x98  x99  x9A  CSI   ST  OSC   PM  APC */
+     1,   1,   1,   1,   1,   1,   1,   1,
+/*   -    i   c/    L   ox   Y-    |   So */
+   160, 161, 162, 163, 164, 165, 166, 167,
+/*  ..   c0   ip   <<    _        R0    - */
+   168, 169, 170, 171, 172, 173, 174, 175,
+/*   o   +-    2    3    '    u   q|    . */
+   176, 177, 178, 179, 180, 181, 182, 183,
+/*   ,    1    2   >>  1/4  1/2  3/4    ? */
+   184, 185, 186, 187, 188, 189, 190, 191,
+/*  A`   A'   A^   A~   A:   Ao   AE   C, */
+    48,  48,  48,  48,  48,  48,  48,  48,
+/*  E`   E'   E^   E:   I`   I'   I^   I: */
+    48,  48,  48,  48,  48,  48,  48,  48,
+/*  D-   N~   O`   O'   O^   O~   O:    X */
+    48,  48,  48,  48,  48,  48,  48, 216,
+/*  O/   U`   U'   U^   U:   Y'    P    B */
+    48,  48,  48,  48,  48,  48,  48,  48,
+/*  a`   a'   a^   a~   a:   ao   ae   c, */
+    48,  48,  48,  48,  48,  48,  48,  48,
+/*  e`   e'   e^   e:    i`  i'   i^   i: */
+    48,  48,  48,  48,  48,  48,  48,  48,
+/*   d   n~   o`   o'   o^   o~   o:   -: */
+    48,  48,  48,  48,  48,  48,  48,  248,
+/*  o/   u`   u'   u^   u:   y'    P   y: */
+    48,  48,  48,  48,  48,  48,  48,  48};
 .fi
 .ft P
 .in -8