xterm-122.patch.txt

# ------------------------------------------------------------------------------
#  INSTALL        |    2 
#  XTerm.ad       |   16 -------
#  button.c       |   15 ++++++-
#  charproc.c     |   35 ++++++++++++----
#  configure      |   82 +++++++++++++++++++-------------------
#  configure.in   |    2 
#  ctlseqs.ms     |   11 +++--
#  cursor.c       |   14 +-----
#  input.c        |   94 +++++++++++++++++++++++++++++++++++---------
#  menu.c         |   22 ++++++++++
#  menu.h         |    7 +++
#  misc.c         |    4 +
#  ptydata.c      |   11 -----
#  ptyx.h         |   16 ++++++-
#  screen.c       |   20 ---------
#  termcap        |   68 ++++++++++++++++++++++++++------
#  terminfo       |   14 ++----
#  util.c         |  116 ++++++++++++++++++-------------------------------------
#  version.h      |    4 -
#  xterm.h        |   51 ++++++++++++++++++------
#  xterm.log.html |  112 +++++++++++++++++++++++++++++++++++++----------------
#  xterm.man      |   81 +++++++++++++++++++++++++-------------
#  22 files changed, 488 insertions, 309 deletions
# ------------------------------------------------------------------------------
Index: INSTALL
--- xterm-121+/INSTALL  Mon Sep 27 16:12:18 1999
+++ xterm-122/INSTALL   Tue Dec 28 18:15:22 1999
@@ -147,6 +147,8 @@
        quirks of the keyboard tables.  Use the ``numLock'' resource to
        disable this feature if you must customize xterm in some other way.
 
+       (The same ifdef controls the metaSendsEscape support).
+
   --disable-rightbar      disable right-scrollbar support
 
        Do not compile-in code that supports a scrollbar on the right.
Index: XTerm.ad
--- xterm-121+/XTerm.ad Fri Nov 19 15:27:18 1999
+++ xterm-122/XTerm.ad  Tue Dec 28 20:05:15 1999
@@ -24,6 +24,7 @@
 *mainMenu*8-bit control*Label: 8-Bit Controls
 *mainMenu*backarrow key*Label: Backarrow Key
 *mainMenu*num-lock*Label: Alt/NumLock Modifiers
+*mainMenu*meta-esc*Label: Meta Sends Escape
 *mainMenu*sun function-keys*Label: Sun Function-Keys
 *mainMenu*sun keyboard*Label: VT220 Keyboard
 *mainMenu*hp function-keys*Label: HP Function-Keys
@@ -133,18 +134,3 @@
 *VT100*color15: white
 *VT100*colorUL: yellow
 *VT100*colorBD: white
-
-!This can be useful if you have an IntelliMouse.  It maps the button
-!events generated by the wheel
-*VT100*translations:   #override \
-       !Ctrl                   <Btn4Down>:     scroll-back(1,halfpage) \n\
-       !Lock Ctrl              <Btn4Down>:     scroll-back(1,halfpage) \n\
-       !Lock @Num_Lock Ctrl    <Btn4Down>:     scroll-back(1,halfpage) \n\
-       ! @Num_Lock Ctrl        <Btn4Down>:     scroll-back(1,halfpage) \n\
-                               <Btn4Down>:     scroll-back(5,line) \n\
-       !Ctrl                   <Btn5Down>:     scroll-forw(1,halfpage) \n\
-       !Lock Ctrl              <Btn5Down>:     scroll-forw(1,halfpage) \n\
-       !Lock @Num_Lock Ctrl    <Btn5Down>:     scroll-forw(1,halfpage) \n\
-       ! @Num_Lock Ctrl        <Btn5Down>:     scroll-forw(1,halfpage) \n\
-                               <Btn5Down>:     scroll-forw(5,line)
-
Index: button.c
--- xterm-121+/button.c Fri Nov 19 15:27:18 1999
+++ xterm-122/button.c  Tue Dec 28 20:32:53 1999
@@ -80,7 +80,7 @@
 #define XTERM_CELL(row,col) getXtermCell(screen, row + screen->topline, col)
 
       /*
-       * We reserve shift modifier for cut/paste operations.  In principal we
+       * We reserve shift modifier for cut/paste operations.  In principle we
        * can pass through control and meta modifiers, but in practice, the
        * popup menu uses control, and the window manager is likely to use meta,
        * so those events are not delivered to SendMousePosition.
@@ -2303,6 +2303,7 @@
 
        /* If button event, get button # adjusted for DEC compatibility */
        button = event->button - 1;
+       if (button >= 3) button++;
 
        /* Compute character position of mouse pointer */
        row = (event->y - screen->border) / FontHeight(screen);
@@ -2345,7 +2346,14 @@
                line[count++] = BtnCode(event, screen->mouse_button = button);
                break;
            case ButtonRelease:
-               line[count++] = BtnCode(event, screen->mouse_button = -1);
+               /*
+                * Wheel mouse interface generates release-events for buttons
+                * 4 and 5, coded here as 3 and 4 respectively.  We change the
+                * release for buttons 1..3 to a -1.
+                */
+               if (button < 3)
+                       button = -1;
+               line[count++] = BtnCode(event, screen->mouse_button = button);
                break;
            case MotionNotify:
                /* BTN_EVENT_MOUSE and ANY_EVENT_MOUSE modes send motion
@@ -2367,6 +2375,9 @@
        /* Add pointer position to key sequence */
        line[count++] = ' ' + col + 1;
        line[count++] = ' ' + row + 1;
+
+       TRACE(("mouse at %d,%d button+mask = %#x\n", row, col,
+               (screen->control_eight_bits) ? line[2] : line[3]))
 
        /* Transmit key sequence to process running under xterm */
        v_write(pty, line, count);
Index: charproc.c
--- xterm-121+/charproc.c       Fri Nov 19 15:27:18 1999
+++ xterm-122/charproc.c        Tue Dec 28 19:45:28 1999
@@ -224,17 +224,11 @@
 static int     default_NUM_CHRSET = NUM_CHRSET;
 #endif
 
-/*
- * Warning, the following must be kept under 1024 bytes or else some
- * compilers (particularly AT&T 6386 SVR3.2) will barf).  Workaround is to
- * declare a static buffer and copy in at run time (the Athena text widget
- * does).  Yuck.
- */
 static char defaultTranslations[] =
 "\
           Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
            Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
-         Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY , CUT_BUFFER0) \n\
+         Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY, CUT_BUFFER0) \n\
          Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \n\
                 ~Meta <KeyPress>:insert-seven-bit() \n\
                  Meta <KeyPress>:insert-eight-bit() \n\
@@ -249,14 +243,24 @@
  !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \n\
      ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
           ~Ctrl ~Meta <Btn2Down>:ignore() \n\
+                 Meta <Btn2Down>:clear-saved-lines() \n\
             ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \n\
                 !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
            !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
  !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\
+                 Ctrl <Btn4Down>:scroll-back(1,halfpage) \n\
+            Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \n\
+  Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \n\
+       @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \n\
+                      <Btn4Down>:scroll-back(5,line)     \n\
+                 Ctrl <Btn5Down>:scroll-forw(1,halfpage) \n\
+            Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \n\
+  Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \n\
+       @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \n\
+                      <Btn5Down>:scroll-forw(5,line)     \n\
                          <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
                        <BtnDown>:bell(0) \
 "; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
@@ -431,6 +435,9 @@
 {XtNeightBitControl, XtCEightBitControl, XtRBoolean, sizeof(Boolean),
        XtOffsetOf(XtermWidgetRec, screen.control_eight_bits),
        XtRBoolean, (XtPointer) &defaultFALSE},
+{XtNmetaSendsEscape, XtCMetaSendsEscape, XtRBoolean, sizeof(Boolean),
+       XtOffsetOf(XtermWidgetRec, screen.meta_sends_esc),
+       XtRBoolean, (XtPointer) &defaultFALSE},
 {XtNgeometry,XtCGeometry, XtRString, sizeof(char *),
        XtOffsetOf(XtermWidgetRec, misc.geo_metry),
        XtRString, (XtPointer) NULL},
@@ -2266,7 +2273,8 @@
 
                 case CASE_REP:
                        /* REP */
-                       if (lastchar >= 0 && isprint(lastchar)) {
+                       if (lastchar >= 0 &&
+                               groundtable[E2A(lastchar)] == CASE_PRINT) {
                            IChar repeated[2];
                            count = (param[0] < 1) ? 1 : param[0];
                            repeated[0] = lastchar;
@@ -3150,6 +3158,9 @@
                case 1035:
                        term->misc.real_NumLock = (func == bitset) ? ON : OFF;
                        break;
+               case 1036:
+                       screen->meta_sends_esc = (func == bitset) ? ON : OFF;
+                       break;
 #endif
                case 1048:
                        if (!termw->misc.titeInhibit) {
@@ -4089,6 +4100,9 @@
    wnew->misc.num_lock = 0;
    wnew->misc.alt_left = 0;
    wnew->misc.alt_right = 0;
+   wnew->misc.meta_trans = False;
+   wnew->misc.meta_left = 0;
+   wnew->misc.meta_right = 0;
 #endif
 #if OPT_SHIFT_KEYS
    wnew->misc.shift_keys = request->misc.shift_keys;
@@ -4128,6 +4142,7 @@
    wnew->screen.output_eight_bits = request->screen.output_eight_bits;
    wnew->screen.control_eight_bits = request->screen.control_eight_bits;
    wnew->screen.backarrow_key = request->screen.backarrow_key;
+   wnew->screen.meta_sends_esc = request->screen.meta_sends_esc;
    wnew->screen.allowSendEvents = request->screen.allowSendEvents;
 #ifndef NO_ACTIVE_ICON
    wnew->screen.fnt_icon = request->screen.fnt_icon;
@@ -5265,6 +5280,8 @@
        Cardinal *param_count)  /* 0 or 1 */
 {
     int percent = (*param_count) ? atoi(params[0]) : 0;
+
+    TRACE(("BELL %d action\n", percent))
 
 #ifdef XKB
     int which= XkbBI_TerminalBell;
Index: configure
--- xterm-121+/configure        Fri Nov 19 15:27:18 1999
+++ xterm-122/configure Tue Dec 28 11:41:12 1999
@@ -4636,6 +4636,8 @@
        else
                echo "configure: warning: not a directory" 1>&2
        fi
+elif test "$prefix" != NONE ; then
+       TERMINFO_DIR='${prefix}/lib/terminfo'
 elif test -d /usr/lib/terminfo ; then
        TERMINFO_DIR=/usr/lib/terminfo
 else
@@ -4651,7 +4653,7 @@
 
 ###    checks for optional features
 echo $ac_n "checking if you want active-icons""... $ac_c" 1>&6
-echo "configure:4655: checking if you want active-icons" >&5
+echo "configure:4657: checking if you want active-icons" >&5
 
 # Check whether --enable-active-icon or --disable-active-icon was given.
 if test "${enable_active_icon+set}" = set; then
@@ -4677,7 +4679,7 @@
 fi
 
 echo $ac_n "checking if you want ANSI color""... $ac_c" 1>&6
-echo "configure:4681: checking if you want ANSI color" >&5
+echo "configure:4683: checking if you want ANSI color" >&5
 
 # Check whether --enable-ansi-color or --disable-ansi-color was given.
 if test "${enable_ansi_color+set}" = set; then
@@ -4703,7 +4705,7 @@
 if test $enable_ansi_color = yes ; then
 
        echo $ac_n "checking if you want 16 colors like aixterm""... $ac_c" 1>&6
-echo "configure:4707: checking if you want 16 colors like aixterm" >&5
+echo "configure:4709: checking if you want 16 colors like aixterm" >&5
        
 # Check whether --enable-16-color or --disable-16-color was given.
 if test "${enable_16_color+set}" = set; then
@@ -4727,7 +4729,7 @@
 
 
        echo $ac_n "checking if you want 256 colors""... $ac_c" 1>&6
-echo "configure:4731: checking if you want 256 colors" >&5
+echo "configure:4733: checking if you want 256 colors" >&5
        
 # Check whether --enable-256-color or --disable-256-color was given.
 if test "${enable_256_color+set}" = set; then
@@ -4754,7 +4756,7 @@
 
        else
        echo $ac_n "checking if you want 88 colors""... $ac_c" 1>&6
-echo "configure:4758: checking if you want 88 colors" >&5
+echo "configure:4760: checking if you want 88 colors" >&5
        
 # Check whether --enable-88-color or --disable-88-color was given.
 if test "${enable_88_color+set}" = set; then
@@ -4785,7 +4787,7 @@
 fi
 
 echo $ac_n "checking if you want blinking cursor""... $ac_c" 1>&6
-echo "configure:4789: checking if you want blinking cursor" >&5
+echo "configure:4791: checking if you want blinking cursor" >&5
 
 # Check whether --enable-blink-cursor or --disable-blink-cursor was given.
 if test "${enable_blink_cursor+set}" = set; then
@@ -4811,7 +4813,7 @@
 if test $enable_ansi_color = yes ; then
 
        echo $ac_n "checking if you want bold colors mapped like IBM PC""... $ac_c" 1>&6
-echo "configure:4815: checking if you want bold colors mapped like IBM PC" >&5
+echo "configure:4817: checking if you want bold colors mapped like IBM PC" >&5
        
 # Check whether --enable-bold-color or --disable-bold-color was given.
 if test "${enable_bold_color+set}" = set; then
@@ -4835,7 +4837,7 @@
 
 
        echo $ac_n "checking if you want color-mode enabled by default""... $ac_c" 1>&6
-echo "configure:4839: checking if you want color-mode enabled by default" >&5
+echo "configure:4841: checking if you want color-mode enabled by default" >&5
        
 # Check whether --enable-color-mode or --disable-color-mode was given.
 if test "${enable_color_mode+set}" = set; then
@@ -4861,7 +4863,7 @@
 fi
 
 echo $ac_n "checking if you want support for color highlighting""... $ac_c" 1>&6
-echo "configure:4865: checking if you want support for color highlighting" >&5
+echo "configure:4867: checking if you want support for color highlighting" >&5
 
 # Check whether --enable-highlighting or --disable-highlighting was given.
 if test "${enable_highlighting+set}" = set; then
@@ -4885,7 +4887,7 @@
 
 
 echo $ac_n "checking if you want support for doublesize characters""... $ac_c" 1>&6
-echo "configure:4889: checking if you want support for doublesize characters" >&5
+echo "configure:4891: checking if you want support for doublesize characters" >&5
 
 # Check whether --enable-doublechars or --disable-doublechars was given.
 if test "${enable_doublechars+set}" = set; then
@@ -4909,7 +4911,7 @@
 
 
 echo $ac_n "checking if you want fallback-support for box characters""... $ac_c" 1>&6
-echo "configure:4913: checking if you want fallback-support for box characters" >&5
+echo "configure:4915: checking if you want fallback-support for box characters" >&5
 
 # Check whether --enable-boxchars or --disable-boxchars was given.
 if test "${enable_boxchars+set}" = set; then
@@ -4933,7 +4935,7 @@
 
 
 echo $ac_n "checking if you want support for HP-style function keys""... $ac_c" 1>&6
-echo "configure:4937: checking if you want support for HP-style function keys" >&5
+echo "configure:4939: checking if you want support for HP-style function keys" >&5
 
 # Check whether --enable-hp-fkeys or --disable-hp-fkeys was given.
 if test "${enable_hp_fkeys+set}" = set; then
@@ -4959,7 +4961,7 @@
 fi
 
 echo $ac_n "checking if you want support for internationalization""... $ac_c" 1>&6
-echo "configure:4963: checking if you want support for internationalization" >&5
+echo "configure:4965: checking if you want support for internationalization" >&5
 
 # Check whether --enable-i18n or --disable-i18n was given.
 if test "${enable_i18n+set}" = set; then
@@ -4985,7 +4987,7 @@
 fi
 
 echo $ac_n "checking if you want support for initial-erase setup""... $ac_c" 1>&6
-echo "configure:4989: checking if you want support for initial-erase setup" >&5
+echo "configure:4991: checking if you want support for initial-erase setup" >&5
 
 # Check whether --enable-initial-erase or --disable-initial-erase was given.
 if test "${enable_initial_erase+set}" = set; then
@@ -5011,7 +5013,7 @@
 fi
 
 echo $ac_n "checking if you want support for input-method""... $ac_c" 1>&6
-echo "configure:5015: checking if you want support for input-method" >&5
+echo "configure:5017: checking if you want support for input-method" >&5
 
 # Check whether --enable-input-method or --disable-input-method was given.
 if test "${enable_input_method+set}" = set; then
@@ -5031,13 +5033,13 @@
 echo "$ac_t""$enable_ximp" 1>&6
 
 echo $ac_n "checking if X libraries support input-method""... $ac_c" 1>&6
-echo "configure:5035: checking if X libraries support input-method" >&5
+echo "configure:5037: checking if X libraries support input-method" >&5
 if eval "test \"`echo '$''{'cf_cv_input_method'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 5041 "configure"
+#line 5043 "configure"
 #include "confdefs.h"
 
 #include <X11/IntrinsicP.h>
@@ -5064,7 +5066,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_input_method=yes
 else
@@ -5087,7 +5089,7 @@
 fi
 
 echo $ac_n "checking if you want support for logging""... $ac_c" 1>&6
-echo "configure:5091: checking if you want support for logging" >&5
+echo "configure:5093: checking if you want support for logging" >&5
 
 # Check whether --enable-logging or --disable-logging was given.
 if test "${enable_logging+set}" = set; then
@@ -5111,7 +5113,7 @@
 EOF
 
        echo $ac_n "checking if you want to allow logging via a pipe""... $ac_c" 1>&6
-echo "configure:5115: checking if you want to allow logging via a pipe" >&5
+echo "configure:5117: checking if you want to allow logging via a pipe" >&5
        
 # Check whether --enable-logfile-exec or --disable-logfile-exec was given.
 if test "${enable_logfile_exec+set}" = set; then
@@ -5138,7 +5140,7 @@
 fi
 
 echo $ac_n "checking if you want support for iconify/maximize translations""... $ac_c" 1>&6
-echo "configure:5142: checking if you want support for iconify/maximize translations" >&5
+echo "configure:5144: checking if you want support for iconify/maximize translations" >&5
 
 # Check whether --enable-maximize or --disable-maximize was given.
 if test "${enable_maximize+set}" = set; then
@@ -5162,7 +5164,7 @@
 
 
 echo $ac_n "checking if you want NumLock to override keyboard tables""... $ac_c" 1>&6
-echo "configure:5166: checking if you want NumLock to override keyboard tables" >&5
+echo "configure:5168: checking if you want NumLock to override keyboard tables" >&5
 
 # Check whether --enable-num-lock or --disable-num-lock was given.
 if test "${enable_num_lock+set}" = set; then
@@ -5186,7 +5188,7 @@
 
 
 echo $ac_n "checking if you want support for right-scrollbar""... $ac_c" 1>&6
-echo "configure:5190: checking if you want support for right-scrollbar" >&5
+echo "configure:5192: checking if you want support for right-scrollbar" >&5
 
 # Check whether --enable-rightbar or --disable-rightbar was given.
 if test "${enable_rightbar+set}" = set; then
@@ -5212,7 +5214,7 @@
 fi
 
 echo $ac_n "checking if you want check for redundant name-change""... $ac_c" 1>&6
-echo "configure:5216: checking if you want check for redundant name-change" >&5
+echo "configure:5218: checking if you want check for redundant name-change" >&5
 
 # Check whether --enable-samename or --disable-samename was given.
 if test "${enable_samename+set}" = set; then
@@ -5236,7 +5238,7 @@
 
 
 echo $ac_n "checking if you want support for tek4014""... $ac_c" 1>&6
-echo "configure:5240: checking if you want support for tek4014" >&5
+echo "configure:5242: checking if you want support for tek4014" >&5
 
 # Check whether --enable-tek4014 or --disable-tek4014 was given.
 if test "${enable_tek4014+set}" = set; then
@@ -5266,7 +5268,7 @@
 fi
 
 echo $ac_n "checking if you want pulldown menus with a toolbar""... $ac_c" 1>&6
-echo "configure:5270: checking if you want pulldown menus with a toolbar" >&5
+echo "configure:5272: checking if you want pulldown menus with a toolbar" >&5
 
 # Check whether --enable-toolbar or --disable-toolbar was given.
 if test "${enable_toolbar+set}" = set; then
@@ -5290,7 +5292,7 @@
 
 
 echo $ac_n "checking if you want VT52 emulation""... $ac_c" 1>&6
-echo "configure:5294: checking if you want VT52 emulation" >&5
+echo "configure:5296: checking if you want VT52 emulation" >&5
 
 # Check whether --enable-vt52 or --disable-vt52 was given.
 if test "${enable_vt52+set}" = set; then
@@ -5314,7 +5316,7 @@
 
 
 echo $ac_n "checking if you want wide-character support""... $ac_c" 1>&6
-echo "configure:5318: checking if you want wide-character support" >&5
+echo "configure:5320: checking if you want wide-character support" >&5
 
 # Check whether --enable-wide-chars or --disable-wide-chars was given.
 if test "${enable_wide_chars+set}" = set; then
@@ -5343,7 +5345,7 @@
 fi
 
 echo $ac_n "checking if you want DECterm Locator support""... $ac_c" 1>&6
-echo "configure:5347: checking if you want DECterm Locator support" >&5
+echo "configure:5349: checking if you want DECterm Locator support" >&5
 
 # Check whether --enable-dec-locator or --disable-dec-locator was given.
 if test "${enable_dec_locator+set}" = set; then
@@ -5369,7 +5371,7 @@
 fi
 
 echo $ac_n "checking if you want -ziconbeep option""... $ac_c" 1>&6
-echo "configure:5373: checking if you want -ziconbeep option" >&5
+echo "configure:5375: checking if you want -ziconbeep option" >&5
 
 # Check whether --enable-ziconbeep or --disable-ziconbeep was given.
 if test "${enable_ziconbeep+set}" = set; then
@@ -5394,7 +5396,7 @@
 
 # development/testing aids
 echo $ac_n "checking if you want debugging traces""... $ac_c" 1>&6
-echo "configure:5398: checking if you want debugging traces" >&5
+echo "configure:5400: checking if you want debugging traces" >&5
 
 # Check whether --enable-trace or --disable-trace was given.
 if test "${enable_trace+set}" = set; then
@@ -5423,7 +5425,7 @@
 
 
 echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
-echo "configure:5427: checking if you want to see long compiling messages" >&5
+echo "configure:5429: checking if you want to see long compiling messages" >&5
 
 # Check whether --enable-echo or --disable-echo was given.
 if test "${enable_echo+set}" = set; then
@@ -5463,7 +5465,7 @@
 
 
 echo $ac_n "checking if you want magic cookie emulation""... $ac_c" 1>&6
-echo "configure:5467: checking if you want magic cookie emulation" >&5
+echo "configure:5469: checking if you want magic cookie emulation" >&5
 
 # Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
 if test "${enable_xmc_glitch+set}" = set; then
@@ -5492,7 +5494,7 @@
 
 if test -n "$GCC" ; then
 echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
-echo "configure:5496: checking if you want to turn on gcc warnings" >&5
+echo "configure:5498: checking if you want to turn on gcc warnings" >&5
 
 # Check whether --enable-warnings or --disable-warnings was given.
 if test "${enable_warnings+set}" = set; then
@@ -5532,9 +5534,9 @@
 if test -n "$GCC"
 then
        echo "checking for gcc __attribute__ directives" 1>&6
-echo "configure:5536: checking for gcc __attribute__ directives" >&5
+echo "configure:5538: checking for gcc __attribute__ directives" >&5
        cat > conftest.$ac_ext <<EOF
-#line 5538 "configure"
+#line 5540 "configure"
 #include "confdefs.h"
 #include "conftest.h"
 #include "conftest.i"
@@ -5572,7 +5574,7 @@
 EOF
                        ;;
                esac
-               if { (eval echo configure:5576: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+               if { (eval echo configure:5578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
                        test -n "$verbose" && echo "$ac_t""... $cf_attribute" 1>&6
                        cat conftest.h >>confdefs.h
 #              else
@@ -5589,11 +5591,11 @@
 if test -n "$GCC"
 then
                cat > conftest.$ac_ext <<EOF
-#line 5593 "configure"
+#line 5595 "configure"
 int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
 EOF
                echo "checking for gcc warning options" 1>&6
-echo "configure:5597: checking for gcc warning options" >&5
+echo "configure:5599: checking for gcc warning options" >&5
        cf_save_CFLAGS="$CFLAGS"
        EXTRA_CFLAGS="-W -Wall"
        cf_warn_CONST=""
@@ -5611,7 +5613,7 @@
                Wstrict-prototypes $cf_warn_CONST
        do
                CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
-               if { (eval echo configure:5615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+               if { (eval echo configure:5617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
                        test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
                        EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
                        test "$cf_opt" = Wcast-qual && EXTRA_CFLAGS="$EXTRA_CFLAGS -DXTSTRINGDEFINES"
Index: configure.in
--- xterm-121+/configure.in     Fri Nov 19 15:27:18 1999
+++ xterm-122/configure.in      Tue Dec 28 11:39:34 1999
@@ -163,6 +163,8 @@
        else
                AC_MSG_WARN(not a directory)
        fi
+elif test "$prefix" != NONE ; then
+       TERMINFO_DIR='${prefix}/lib/terminfo'
 elif test -d /usr/lib/terminfo ; then
        TERMINFO_DIR=/usr/lib/terminfo
 else
Index: ctlseqs.ms
--- xterm-121+/ctlseqs.ms       Fri Nov 19 15:27:18 1999
+++ xterm-122/ctlseqs.ms        Tue Dec 28 21:04:06 1999
@@ -738,6 +738,8 @@
   \*(Ps = \*1\*0\*1\*0 \(-> Scroll to bottom on tty output (rxvt).
   \*(Ps = \*1\*0\*1\*1 \(-> Scroll to bottom on key press (rxvt).
   \*(Ps = \*1\*0\*3\*5 \(-> Enable special modifiers for Alt and NumLock keys.
+  \*(Ps = \*1\*0\*3\*6 \(-> Send ESC when Meta modifies a key
+(enables the \fBmetaSendsEscape\fP resource).
   \*(Ps = \*1\*0\*4\*7 \(-> Use Alternate Screen Buffer (unless
 disabled by the \fBtiteInhibit\fP resource)
   \*(Ps = \*1\*0\*4\*8 \(-> Save cursor as in DECSC (unless
@@ -805,6 +807,8 @@
   \*(Ps = \*1\*0\*1\*0 \(-> Don't scroll to bottom on tty output (rxvt).
   \*(Ps = \*1\*0\*1\*1 \(-> Don't scroll to bottom on key press (rxvt).
   \*(Ps = \*1\*0\*3\*5 \(-> Disable special modifiers for Alt and NumLock keys.
+  \*(Ps = \*1\*0\*3\*6 \(-> Don't send ESC when Meta modifies a key
+(disables the \fBmetaSendsEscape\fP resource).
   \*(Ps = \*1\*0\*4\*7 \(-> Use Normal Screen Buffer, clearing screen
 first if in the Alternate Screen (unless
 disabled by the \fBtiteInhibit\fP resource)
@@ -1369,7 +1373,7 @@
 Manifest constants for the parameter values
 are defined in \fBxcharmouse.h\fP as follows:
 .
-.DS
+.DS B
 #define SET_X10_MOUSE               9
 #define SET_VT200_MOUSE             1000
 #define SET_VT200_HIGHLIGHT_MOUSE   1001
@@ -1457,9 +1461,8 @@
 On button press or release, \fIxterm\fP sends the same codes used by normal
 tracking mode.  On button-motion events, \fIxterm\fP adds 32 to the event code
 (the third character, \*(Cb).
-The low two bits of the event code encode the button information.
-The third bit is set to indicate motion.
-Additional bits specify modifier keys as in normal mode.
+The low three bits of the event code encode the button information;
+additional bits specify modifier keys as in normal mode.
 For example, motion into cell x,y with button 1
 down is reported as \*(Cs\*M\*@\*(Cx\*(Cy.
 ( \*@ = 32 + 0 (button 1) + 32 (motion indicator) ).
Index: cursor.c
--- xterm-121+/cursor.c Mon Jul 12 13:43:45 1999
+++ xterm-122/cursor.c  Tue Dec 28 09:51:31 1999
@@ -45,17 +45,11 @@
  * prevent the application from changing the screen contents under the
  * highlighted region.
  */
-static void _CheckSelection (register TScreen *screen)
-{
-    if ((screen->cur_row < screen->endHRow) ||
-       (screen->cur_row == screen->endHRow &&
-        screen->cur_col < screen->endHCol))
-    {
+#define _CheckSelection(screen) \
+    if ((screen->cur_row < screen->endHRow) || \
+       (screen->cur_row == screen->endHRow && \
+        screen->cur_col < screen->endHCol)) \
        DisownSelection(term);
-    }
-}
-
-
 
 /*
  * Moves the cursor to the specified position, checking for bounds.
Index: input.c
--- xterm-121+/input.c  Fri Nov 19 15:27:18 1999
+++ xterm-122/input.c   Tue Dec 28 17:20:05 1999
@@ -302,14 +302,15 @@
 #endif
         ) {
            Status status_return;
-           nbytes = XmbLookupString (screen->xic, event, strbuf, STRBUFSIZE,
+           nbytes = XmbLookupString (screen->xic, event,
+                                     strbuf, sizeof(strbuf),
                                      &keysym, &status_return);
        }
        else
 #endif
        {
            static XComposeStatus compose_status = {NULL, 0};
-           nbytes = XLookupString (event, strbuf, STRBUFSIZE,
+           nbytes = XLookupString (event, strbuf, sizeof(strbuf),
                                    &keysym, &compose_status);
        }
 
@@ -399,6 +400,22 @@
        }
 #endif
 
+#if OPT_NUM_LOCK
+       /*
+        * Send ESC if we have a META modifier and metaSendsEcape is true.
+        * This is similar to the effect of 'eightbit' when eightBitInput
+        * is false, except that we do this for all keys, including function
+        * keys.
+        */
+       if (screen->meta_sends_esc
+        && !term->misc.meta_trans
+        && (event->state & term->misc.meta_left
+         || event->state & term->misc.meta_right)) {
+               TRACE(("...input is modified by META\n"))
+               eightbit = False;
+               unparseputc (ESC, pty);  /* escape */
+       }
+#endif
        /*
         * If we are in the normal (possibly Sun/PC) keyboard state, allow
         * modifiers to add a parameter to the function-key control sequences.
@@ -587,6 +604,22 @@
                }
 #endif
                if (nbytes == 1) {
+#if OPT_NUM_LOCK
+                       /*
+                        * Send ESC if we have a META modifier and
+                        * metaSendsEcape is true.  This case applies only if
+                        * we decided to not modify function keys because META
+                        * is used in translations.
+                        */
+                       if (eightbit
+                        && screen->meta_sends_esc
+                        && (event->state & term->misc.meta_left
+                         || event->state & term->misc.meta_right)) {
+                               TRACE(("...input-char is modified by META\n"))
+                               eightbit = False;
+                               unparseputc (ESC, pty);  /* escape */
+                       }
+#endif
                        if (eightbit && screen->input_eight_bits) {
                                if (CharOf(*string) < 128) {
                                        TRACE(("...input shift from %d to %d\n",
@@ -785,8 +818,17 @@
 }
 
 #if OPT_NUM_LOCK
+/*
+ * Note that this can only retrieve translations that are given as resource
+ * values; the default translations in charproc.c for example are not
+ * retrievable by any interface to X.
+ *
+ * Also:  We can retrieve only the most-specified translation resource.  For
+ * example, if the resource file specifies both "*translations" and
+ * "XTerm*translations", we see only the latter.
+ */
 static Bool
-TranslationsUseAlt(Widget w)
+TranslationsUseKeyword(Widget w, const char *keyword)
 {
     static String data;
     static XtResource key_resources[] = {
@@ -796,10 +838,9 @@
     Bool result = False;
 
     XtGetSubresources( w, (XtPointer)&data, "vt100", "VT100",
-                  key_resources, (Cardinal)1, NULL, (Cardinal)0 );
+                  key_resources, XtNumber(key_resources), NULL, (Cardinal)0 );
 
     if (data != 0) {
-       static const char keyword[] = "alt";
        char *p = data;
        int state = 0;
        int now = ' ', prv;
@@ -830,6 +871,11 @@
     return result;
 }
 
+#define SaveMask(name) term->misc.name = mask;\
+                       TRACE(("%s mask %#lx is%s modifier\n", \
+                               #name, \
+                               term->misc.name, \
+                               ModifierName(term->misc.name)))
 /*
  * Determine which modifier mask (if any) applies to the Num_Lock keysym.
  *
@@ -844,30 +890,26 @@
     int i, j, k;
     Display *dpy = XtDisplay(term);
     XModifierKeymap *keymap = XGetModifierMapping(dpy);
+    unsigned long mask;
 
     if (keymap != 0) {
 
        TRACE(("VTInitModifiers\n"))
-       for (i = k = 0; i < 8; i++) {
+       for (i = k = 0, mask = 1; i < 8; i++, mask <<= 1) {
            for (j = 0; j < keymap->max_keypermod; j++) {
                KeyCode code = keymap->modifiermap[k];
                if (code != 0) {
                    KeySym keysym = XKeycodeToKeysym(dpy,code,0);
                    if (keysym == XK_Num_Lock) {
-                       term->misc.num_lock = (1<<i);
-                       TRACE(("numlock mask %#lx is%s modifier\n",
-                               term->misc.num_lock,
-                               ModifierName(term->misc.num_lock)))
+                       SaveMask(num_lock);
                    } else if (keysym == XK_Alt_L) {
-                       term->misc.alt_left = (1<<i);
-                       TRACE(("alt_left mask %#lx is%s modifier\n",
-                               term->misc.alt_left,
-                               ModifierName(term->misc.alt_left)))
+                       SaveMask(alt_left);
                    } else if (keysym == XK_Alt_R) {
-                       term->misc.alt_right = (1<<i);
-                       TRACE(("alt_right mask %#lx is%s modifier\n",
-                               term->misc.alt_right,
-                               ModifierName(term->misc.alt_right)))
+                       SaveMask(alt_right);
+                   } else if (keysym == XK_Meta_L) {
+                       SaveMask(meta_left);
+                   } else if (keysym == XK_Meta_R) {
+                       SaveMask(meta_right);
                    }
                }
                k++;
@@ -880,11 +922,23 @@
         */
        if ((term->misc.alt_left != 0
          || term->misc.alt_right != 0)
-        && (TranslationsUseAlt(toplevel)
-         || TranslationsUseAlt((Widget)term))) {
+        && (TranslationsUseKeyword(toplevel, "alt")
+         || TranslationsUseKeyword((Widget)term, "alt"))) {
            TRACE(("ALT is used as a modifier in translations (ignore mask)\n"))
            term->misc.alt_left = 0;
            term->misc.alt_right = 0;
+       }
+
+       /*
+        * If the Meta modifier is used in translations, we would rather not
+        * use it to modify function-keys.
+        */
+       if ((term->misc.meta_left != 0
+         || term->misc.meta_right != 0)
+        && (TranslationsUseKeyword(toplevel, "meta")
+         || TranslationsUseKeyword((Widget)term, "meta"))) {
+           TRACE(("META is used as a modifier in translations\n"))
+           term->misc.meta_trans = True;
        }
 
        XFreeModifiermap(keymap);
Index: menu.c
--- xterm-121+/menu.c   Fri Nov 19 15:27:18 1999
+++ xterm-122/menu.c    Tue Dec 28 18:14:12 1999
@@ -137,6 +137,7 @@
 
 #if OPT_NUM_LOCK
 static void do_num_lock        PROTO_XT_CALLBACK_ARGS;
+static void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
 #endif
 
 #if OPT_SUNPC_KBD
@@ -179,6 +180,7 @@
     { "backarrow key", do_backarrow,   NULL },
 #if OPT_NUM_LOCK
     { "num-lock",      do_num_lock,    NULL },
+    { "meta-esc",      do_meta_esc,    NULL },
 #endif
     { "sun function-keys",do_sun_fkeys,        NULL },
 #if OPT_SUNPC_KBD
@@ -464,6 +466,7 @@
            update_8bit_control();
            update_decbkm();
            update_num_lock();
+           update_meta_esc();
            update_sun_kbd();
            if (screen->terminal_id < 200) {
                set_sensitivity (mw,
@@ -730,6 +733,15 @@
     term->misc.real_NumLock = ! term->misc.real_NumLock;
     update_num_lock();
 }
+
+static void do_meta_esc (
+       Widget gw GCC_UNUSED,
+       XtPointer closure GCC_UNUSED,
+       XtPointer data GCC_UNUSED)
+{
+    term->screen.meta_sends_esc = ! term->screen.meta_sends_esc;
+    update_meta_esc();
+}
 #endif
 
 
@@ -1479,6 +1491,16 @@
        Cardinal *param_count)
 {
     handle_toggle (do_num_lock, (int) term->misc.real_NumLock,
+                  params, *param_count, w, (XtPointer)0, (XtPointer)0);
+}
+
+void HandleMetaEsc(
+       Widget w,
+       XEvent *event GCC_UNUSED,
+       String *params,
+       Cardinal *param_count)
+{
+    handle_toggle (do_meta_esc, (int) term->screen.meta_sends_esc,
                   params, *param_count, w, (XtPointer)0, (XtPointer)0);
 }
 #endif
Index: menu.h
--- xterm-121+/menu.h   Sun Aug 22 14:20:13 1999
+++ xterm-122/menu.h    Tue Dec 28 17:44:11 1999
@@ -93,6 +93,7 @@
 extern void HandleHpFunctionKeys   PROTO_XT_ACTIONS_ARGS;
 extern void HandleJumpscroll       PROTO_XT_ACTIONS_ARGS;
 extern void HandleLogging          PROTO_XT_ACTIONS_ARGS;
+extern void HandleMetaEsc          PROTO_XT_ACTIONS_ARGS;
 extern void HandleNumLock          PROTO_XT_ACTIONS_ARGS;
 extern void HandleMarginBell       PROTO_XT_ACTIONS_ARGS;
 extern void HandlePopupMenu        PROTO_XT_ACTIONS_ARGS;
@@ -141,6 +142,7 @@
     mainMenu_backarrow,
 #if OPT_NUM_LOCK
     mainMenu_num_lock,
+    mainMenu_meta_esc,
 #endif
     mainMenu_sun_fkeys,
 #if OPT_SUNPC_KBD
@@ -301,8 +303,13 @@
   update_menu_item (term->screen.mainMenu, \
                    mainMenuEntries[mainMenu_num_lock].widget, \
                    term->misc.real_NumLock)
+#define update_meta_esc() \
+  update_menu_item (term->screen.mainMenu, \
+                   mainMenuEntries[mainMenu_meta_esc].widget, \
+                   term->screen.meta_sends_esc)
 #else
 #define update_num_lock() /*nothing*/
+#define update_meta_esc() /*nothing*/
 #endif
 
 #define update_sun_fkeys() \
Index: misc.c
--- xterm-121+/misc.c   Fri Oct 15 06:17:06 1999
+++ xterm-122/misc.c    Tue Dec 28 19:24:16 1999
@@ -451,6 +451,8 @@
     struct timeval curtime;
     long now_msecs;
 
+    TRACE(("BELL %d\n", percent))
+
     /* has enough time gone by that we are allowed to ring
        the bell again? */
     if(screen->bellSuppressTime) {
@@ -1410,7 +1412,7 @@
 char *
 udk_lookup(int keycode, int *len)
 {
-       if (keycode < MAX_UDK) {
+       if (keycode >= 0 && keycode < MAX_UDK) {
                *len = user_keys[keycode].len;
                return user_keys[keycode].str;
        }
Index: ptydata.c
--- xterm-121+/ptydata.c        Fri Nov 19 15:27:18 1999
+++ xterm-122/ptydata.c Tue Dec 28 09:35:52 1999
@@ -194,17 +194,6 @@
     return 0;
 }
 
-int morePtyData(PtyData *data)
-{
-    return (data->cnt > 0);
-}
-
-int nextPtyData(PtyData *data)
-{
-    (data->cnt)--;
-    return(*(data->ptr)++);
-}
-
 void initPtyData(PtyData *data)
 {
     data->cnt = 0;
Index: ptyx.h
--- xterm-121+/ptyx.h   Fri Nov 19 15:27:18 1999
+++ xterm-122/ptyx.h    Tue Dec 28 14:32:18 1999
@@ -344,6 +344,10 @@
 #define OPT_BOX_CHARS  1 /* true if xterm can simulate box-characters */
 #endif
 
+#ifndef OPT_CLIP_BOLD
+#define OPT_CLIP_BOLD  1 /* true if xterm uses clipping to avoid bold-trash */
+#endif
+
 #ifndef OPT_DEC_CHRSET
 #define OPT_DEC_CHRSET  1 /* true if xterm is configured for DEC charset */
 #endif
@@ -569,16 +573,18 @@
 #define CSET_NORMAL(code)  ((code) == CSET_SWL)
 #define CSET_DOUBLE(code)  (!CSET_NORMAL(code) && !CSET_EXTEND(code))
 #define CSET_EXTEND(code)  ((code) > CSET_DWL)
+       /* for doublesize characters, the first cell in a row holds the info */
+#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0])
 #define CurMaxCol(screen, row) \
-       (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row)[0]) \
+       (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
        ? (screen->max_col / 2) \
        : (screen->max_col))
 #define CurCursorX(screen, row, col) \
-       (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row)[0]) \
+       (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
        ? CursorX(screen, 2*(col)) \
        : CursorX(screen, (col)))
 #define CurFontWidth(screen, row) \
-       (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row)[0]) \
+       (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
        ? 2*FontWidth(screen) \
        : FontWidth(screen))
 #else
@@ -1071,6 +1077,7 @@
        Boolean         output_eight_bits; /* honor all bits or strip */
        Boolean         control_eight_bits; /* send CSI as 8-bits */
        Boolean         backarrow_key;          /* backspace/delete */
+       Boolean         meta_sends_esc;         /* Meta-key sends ESC prefix */
        Pixmap          menu_item_bitmap;       /* mask for checking items */
        String          menu_font_names[NMENUFONTS];
        unsigned long   menu_font_sizes[NMENUFONTS];
@@ -1152,6 +1159,9 @@
     unsigned long num_lock;    /* modifier for Num_Lock */
     unsigned long alt_left;    /* modifier for Alt_L */
     unsigned long alt_right;   /* modifier for Alt_R */
+    Boolean meta_trans;                /* true if Meta is used in translations */
+    unsigned long meta_left;   /* modifier for Meta_L */
+    unsigned long meta_right;  /* modifier for Meta_R */
 #endif
 } Misc;
 
Index: screen.c
--- xterm-121+/screen.c Fri Oct 15 06:16:01 1999
+++ xterm-122/screen.c  Tue Dec 28 10:18:13 1999
@@ -1112,26 +1112,6 @@
        return (0);
 }
 
-void
-ScrnClrWrapped(TScreen *screen, int row)
-{
-       long value = (long)SCRN_BUF_FLAGS(screen, row + screen->topline) & ~ LINEWRAPPED;
-       SCRN_BUF_FLAGS(screen, row + screen->topline) = (Char *)value;
-}
-
-void
-ScrnSetWrapped(TScreen *screen, int row)
-{
-       long value = (long)SCRN_BUF_FLAGS(screen, row + screen->topline) | LINEWRAPPED;
-       SCRN_BUF_FLAGS(screen, row + screen->topline) = (Char *)value;
-}
-
-Bool
-ScrnTstWrapped(TScreen *screen, int row)
-{
-       return (long)SCRN_BUF_FLAGS(screen, row + screen->topline) & LINEWRAPPED;
-}
-
 /*
  * Return true if any character cell starting at [row,col], for len-cells is
  * nonnull.
Index: termcap
--- xterm-121+/termcap  Fri Oct 15 06:16:35 1999
+++ xterm-122/termcap   Mon Dec 27 14:31:03 1999
@@ -28,13 +28,12 @@
        :im=\E[4h:ei=\E[4l:mi:\
        :ks=\E[?1h\E=:ke=\E[?1l\E>:\
        :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
-       :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:\
-       :k;=\E[21~:F1=\E[23~:F2=\E[24~:\
-       :kn#12:\
+       :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
+       :k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\
+       :kn#12:km:\
        :kH=\EOF::@7=\EOF:kh=\EOH:\
        :@0=\EOH:kI=\E[2~:kD=^?:\
        :*6=\EOF:kP=\E[5~:kN=\E[6~:\
-       :km:\
        :kb=^H:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\
        :li#24:md=\E[1m:me=\E[m^O:mr=\E[7m:ms:nd=\E[C:\
        :eA=\E)0:as=^N:ae=^O:ml=\El:mu=\Em:\
@@ -76,7 +75,7 @@
 #
 # Alternate terminal description that "works" for interactive shells such as
 # tcsh and bash.
-xterm-noapp|xterm with cursor keys in normal mode:\
+xn|xterm-noapp|xterm with cursor keys in normal mode:\
        kl=\E[D:kd=\E[B:kr=\E[C:ku=\E[A:ks=\E=:ke=\E>:ti@:te@:tc=xterm:
 #
 # This should work for the commonly used "color xterm" variations (XFree86
@@ -87,6 +86,54 @@
 vc|xterm-color|generic "ANSI" color xterm:\
        :Co#8:NC@:pa#64:op=\E[m:AB=\E[4%dm:AF=\E[3%dm:tc=xterm-r6:
 #
+# These aliases are for compatibility with the terminfo; termcap cannot provide
+# the extra features, but termcap applications still want the names.
+v5|xterm-vt52|xterm alias:tc=vt52:
+x1|xterm-16color|xterm alias:tc=xterm:
+x2|xterm-88color|xterm alias:tc=xterm:
+x3|xterm-256color|xterm alias:tc=xterm:
+xm|xterm-mono|xterm alias:tc=xtermm:
+xn|xterm-nrc|xterm alias:tc=xterm:
+xr|xterm-rep|xterm alias:tc=xterm:
+xx|xterm-xmc|xterm alias:sg#1:tc=xterm:
+#
+# An 8-bit description is doable with termcap, but there are probably no
+# termcap (or BSD curses) applications that are able to use it.
+x8|xterm-8bit|xterm terminal emulator 8-bit controls (X Window System):\
+       :am:km:mi:ms:xn:\
+       :co#80:it#8:li#24:\
+       :AL=\233%dL:DC=\233%dP:DL=\233%dM:DO=\233%dB:IC=\233%d@:LE=\233%dD:\
+       :RI=\233%dC:UP=\233%dA:ae=^O:al=\233L:as=^N:bl=^G:bt=\233Z:\
+       :cd=\233J:ce=\233K:cl=\233H\2332J:cm=\233%i%d;%dH:cr=^M:\
+       :cs=\233%i%d;%dr:ct=\2333g:dc=\233P:dl=\233M:do=^J:\
+       :ei=\2334l:ho=\233H:im=\2334h:\
+       :is=\E7\E G\233r\233m\233?7h\233?1;3;4;6l\2334l\E8\E>:\
+       :k1=\23311~:k2=\23312~:k3=\23313~:k4=\23314~:k5=\23315~:\
+       :k6=\23317~:k7=\23318~:k8=\23319~:k9=\23320~:kD=\2333~:\
+       :kI=\2332~:kN=\2336~:kP=\2335~:kb=^H:kd=\217B:\
+       :ke=\233?1l\E>:kh=\2331~:kl=\217D:kr=\217C:ks=\233?1h\E=:\
+       :ku=\217A:le=^H:mb=\2335m:md=\2331m:me=\233m^O:mr=\2337m:\
+       :nd=\233C:rc=\E8:sc=\E7:se=\23327m:sf=^J:so=\2337m:sr=\215:\
+       :st=\210:ta=^I:te=\233?1049l:ti=\233?1049h:ue=\23324m:\
+       :up=\233A:us=\2334m:vb=\233?5h\233?5l:ve=\233?25h:\
+       :vi=\233?25l:vs=\233?25h:
+#
+hp|xterm-hp|XFree86 xterm with hpterm function keys:\
+       :k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:\
+       :k6=\Eu:k7=\Ev:k8=\Ew:\
+       :kC=\EJ:kD=\EP:@7=\EF:\
+       :kI=\EQ:kN=\ES:kP=\ET:kh=\Eh:\
+       :kd=\EB:kl=\ED:kr=\EC:ku=\EA:tc=xterm:
+#
+# This won't come close to fitting unless we cancel the alternate character set.
+# The function keys F1-F12, plus editing keypad are then usable:
+xs|xterm-sun|xterm with Sun functionkeys:\
+       :k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:\
+       :k5=\E[228z:k6=\E[229z:k7=\E[230z:k8=\E[231z:\
+       :k9=\E[232z:k;=\E[233z:F1=\E[192z:F2=\E[193z:\
+       :%1=\E[196z:&8=\E[195z:@0=\E[200z:kI=\E[2z:\
+       :kN=\E[222z:kP=\E[216z:kh=\E[214z:as@:ae@:ac@:tc=xterm:
+#
 # vi may work better with this entry, because vi doesn't use insert mode much.
 # |xterm-ic|xterm-vi|xterm with insert character instead of insert mode:\
 vi|xterm-ic|xterm-vi|xterm with insert char:\
@@ -102,17 +149,14 @@
        :bs:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:co#80:\
        :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:ho=\E[H:\
        :im=\E[4h:ei=\E[4l:mi:\
-       :ks=\E[?1h\E=:ke=\E[?1l\E>:\
-       :@7=\E[4~:kh=\E[1~:\
-       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
-       :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:\
-       :k;=\E[21~:\
+       :ks=\E[?1h\E=:ke=\E[?1l\E>:@7=\E[4~:kh=\E[1~:\
+       :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
+       :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\
        :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\
        :F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:\
-       :kn#20:\
+       :kn#20:km:\
        :@0=\E[1~:kI=\E[2~:kD=^?:\
        :*6=\E[4~:kP=\E[5~:kN=\E[6~:\
-       :km:\
        :kb=^H:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\
        :li#24:md=\E[1m:me=\E[m:mr=\E[7m:ms:nd=\E[C:pt:\
        :eA=\E)0:as=^N:ae=^O:\
Index: terminfo
--- xterm-121+/terminfo Fri Nov 19 15:27:18 1999
+++ xterm-122/terminfo  Sat Nov 27 16:21:29 1999
@@ -545,15 +545,13 @@
 #
 # OPT_PC_MODE should be settable with OSC, and the init for this
 # should turn it off; then ncv could be 0.
-# This uses RGB values 0..255; terminfo(5) says they're terminal-dependant
-# if curses assumes something else (0..1000, like the API?) then this needs
-# to be modified
+# This uses RGB values 0..1000
 xterm-256color|xterm with 256 colors,
        ccc,
        colors#256,
        ncv#32,
        pairs#256,
-       initc=\E]4;%p1%d;rgb\:%p2%2.2X/%p3%2.2X/%p4%2.2X\E\\,
+       initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
        setab=\E[48;5;%p1%dm,
        setaf=\E[38;5;%p1%dm,
        setb=\E[48;5;%p1%dm,
@@ -755,7 +753,7 @@
        kcuu1=\EOA,
        kdch1=\177,
        kend=\E[4~,
-       kf1=\EOP,
+       kf1=\E[11~,
        kf10=\E[21~,
        kf11=\E[23~,
        kf12=\E[24~,
@@ -766,10 +764,10 @@
        kf17=\E[31~,
        kf18=\E[32~,
        kf19=\E[33~,
-       kf2=\EOQ,
+       kf2=\E[12~,
        kf20=\E[34~,
-       kf3=\EOR,
-       kf4=\EOS,
+       kf3=\E[13~,
+       kf4=\E[14~,
        kf5=\E[15~,
        kf6=\E[17~,
        kf7=\E[18~,
Index: util.c
--- xterm-121+/util.c   Fri Oct 15 06:16:19 1999
+++ xterm-122/util.c    Tue Dec 28 10:28:47 1999
@@ -1576,12 +1576,38 @@
                                x, y, sbuf, len);
                } else
 #endif
+               {
                XDrawImageString(screen->display, VWindow(screen), gc,
                        x, y,  (char *)text, len);
 
-               if ((flags & (BOLD|BLINK)) && screen->enbolden)
+               if ((flags & (BOLD|BLINK)) && screen->enbolden) {
+#if OPT_CLIP_BOLD
+                       /*
+                        * This special case is a couple of percent slower, but
+                        * avoids a lot of pixel trash in rxcurses' hanoi.cmd
+                        * demo (e.g., 10x20 font).
+                        */
+                       if (screen->fnt_wide > 2) {
+                               XRectangle clip;
+                               int clip_x = x;
+                               int clip_y = y - FontHeight(screen) + FontDescent(screen);
+                               clip.x = 0;
+                               clip.y = 0;
+                               clip.height = FontHeight(screen);
+                               clip.width = screen->fnt_wide * len;
+                               XSetClipRectangles(screen->display, gc,
+                                       clip_x, clip_y,
+                                       &clip, 1, Unsorted);
+                       }
+#endif
                        XDrawString(screen->display, VWindow(screen), gc,
-                               x+1, y,  (char *)text, len);
+                               x + 1, y, (char *)text, len);
+#if OPT_CLIP_BOLD
+                       XSetClipMask(screen->display, gc, None);
+#endif
+               }
+               }
+
                if ((flags & UNDERLINE) && screen->underline) {
                        if (FontDescent(screen) > 1)
                                y++;
@@ -1743,16 +1769,6 @@
        return fg;
 }
 
-int
-extract_bg (unsigned color)
-{
-#if OPT_EXT_COLORS
-       return (int) (color & 0xff);
-#else
-       return (int) (color & 0xf);
-#endif
-}
-
 /*
  * Combine the current foreground and background into a single 8-bit number.
  * Note that we're storing the SGR foreground, since cur_foreground may be set
@@ -1774,48 +1790,6 @@
 #endif
 }
 
-unsigned
-xtermColorPair (void)
-{
-       /* FIXME? */
-       return makeColorPair(term->sgr_foreground, term->cur_background);
-}
-
-Pixel
-getXtermForeground(int flags, int color)
-{
-       Pixel fg = (flags & FG_COLOR) && (color >= 0)
-                       ? term->screen.Acolors[color]
-                       : term->screen.foreground;
-
-       return fg;
-}
-
-Pixel
-getXtermBackground(int flags, int color)
-{
-       Pixel bg = (flags & BG_COLOR) && (color >= 0)
-                       ? term->screen.Acolors[color]
-                       : term->core.background_pixel;
-       return bg;
-}
-
-/*
- * Update the screen's background (for XClearArea)
- *
- * If the argument is true, sets the window's background to the value set
- * in the current SGR background. Otherwise, reset to the window's default
- * background.
- */
-void useCurBackground(Bool flag)
-{
-       TScreen *screen = &term->screen;
-       int color = flag ? term->cur_background : -1;
-       Pixel   bg = getXtermBackground(term->flags, color);
-
-       XSetWindowBackground(screen->display, VWindow(screen), bg);
-}
-
 /*
  * Using the "current" SGR background, clear a rectangle.
  */
@@ -1826,34 +1800,20 @@
        unsigned height,
        unsigned width)
 {
-       useCurBackground(TRUE);
+       XSetWindowBackground(
+               screen->display,
+               VWindow(screen),
+               getXtermBackground(term->flags, term->cur_background));
+
        XClearArea (screen->display, VWindow(screen),
                left, top, width, height, FALSE);
-       useCurBackground(FALSE);
-}
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_DEC_CHRSET
-int
-getXtermChrSet(int row, int col)
-{
-       TScreen *screen = &term->screen;
-       Char set = SCRN_BUF_CSETS(screen, row)[0];
-       if (!CSET_DOUBLE(set))
-               set = SCRN_BUF_CSETS(screen, row)[col];
-       return set;
-}
 
-int
-curXtermChrSet(int row)
-{
-       TScreen *screen = &term->screen;
-       Char set = SCRN_BUF_CSETS(screen, row)[0];
-       if (!CSET_DOUBLE(set))
-               set = screen->cur_chrset;
-       return set;
+       XSetWindowBackground(
+               screen->display,
+               VWindow(screen),
+               getXtermBackground(term->flags, -1));
 }
-#endif /* OPT_DEC_CHRSET */
+#endif /* OPT_ISO_COLORS */
 
 #if OPT_WIDE_CHARS
 /*
Index: version.h
--- xterm-121+/version.h        Fri Nov 19 15:27:18 1999
+++ xterm-122/version.h Tue Dec 28 20:34:12 1999
@@ -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   121
-#define XFREE86_VERSION "XFree86 3.9.16c"
+#define XTERM_PATCH   122
+#define XFREE86_VERSION "XFree86 3.9.16f"
Index: xterm.h
--- xterm-121+/xterm.h  Fri Nov 19 15:27:18 1999
+++ xterm-122/xterm.h   Tue Dec 28 13:01:31 1999
@@ -266,6 +266,7 @@
 #define XtNmarginBell          "marginBell"
 #define XtNmenuBar             "menuBar"
 #define XtNmenuHeight          "menuHeight"
+#define XtNmetaSendsEscape     "metaSendsEscape"
 #define XtNmultiClickTime      "multiClickTime"
 #define XtNmultiScroll         "multiScroll"
 #define XtNnMarginBell         "nMarginBell"
@@ -345,6 +346,7 @@
 #define XtCMarginBell          "MarginBell"
 #define XtCMenuBar             "MenuBar"
 #define XtCMenuHeight          "MenuHeight"
+#define XtCMetaSendsEscape     "MetaSendsEscape"
 #define XtCMultiClickTime      "MultiClickTime"
 #define XtCMultiScroll         "MultiScroll"
 #define XtCNumLock             "NumLock"
@@ -588,11 +590,12 @@
 
 /* ptydata.c */
 extern int getPtyData (TScreen *screen, fd_set *select_mask, PtyData *data);
-extern int morePtyData (PtyData *data);
-extern int nextPtyData (PtyData *data);
 extern unsigned usedPtyData(PtyData *data);
 extern void initPtyData (PtyData *data);
 
+#define nextPtyData(data) ((data)->cnt)--, (*((data)->ptr)++)
+#define morePtyData(data) ((data)->cnt > 0)
+
 #if OPT_WIDE_CHARS
 extern Char * convertToUTF8(Char *lp, unsigned c);
 extern void writePtyData(int f, IChar *d, unsigned len);
@@ -604,17 +607,25 @@
 extern Bool non_blank_line (ScrnBuf sb, int row, int col, int len);
 extern ScrnBuf Allocate (int nrow, int ncol, Char **addr);
 extern int ScreenResize (TScreen *screen, int width, int height, unsigned *flags);
-extern int ScrnTstWrapped (TScreen *screen, int row);
 extern size_t ScrnPointers (TScreen *screen, size_t len);
 extern void ClearBufRows (TScreen *screen, int first, int last);
 extern void ScreenWrite (TScreen *screen, PAIRED_CHARS(Char *str, Char *str2), unsigned flags, unsigned cur_fg_bg, int length);
-extern void ScrnClrWrapped (TScreen *screen, int row);
 extern void ScrnDeleteChar (TScreen *screen, int n, int size);
 extern void ScrnDeleteLine (TScreen *screen, ScrnBuf sb, int n, int last, int size, int where);
 extern void ScrnInsertChar (TScreen *screen, int n, int size);
 extern void ScrnInsertLine (TScreen *screen, ScrnBuf sb, int last, int where, int n, int size);
 extern void ScrnRefresh (TScreen *screen, int toprow, int leftcol, int nrows, int ncols, int force);
-extern void ScrnSetWrapped (TScreen *screen, int row);
+
+#define ScrnClrWrapped(screen, row) \
+       SCRN_BUF_FLAGS(screen, row + screen->topline) = \
+               (Char *)((long)SCRN_BUF_FLAGS(screen, row + screen->topline) & ~ LINEWRAPPED)
+
+#define ScrnSetWrapped(screen, row) \
+       SCRN_BUF_FLAGS(screen, row + screen->topline) = \
+               (Char *)(((long)SCRN_BUF_FLAGS(screen, row + screen->topline) | LINEWRAPPED))
+
+#define ScrnTstWrapped(screen, row) \
+       (((long)SCRN_BUF_FLAGS(screen, row + screen->topline) & LINEWRAPPED) != 0)
 
 /* scrollbar.c */
 extern void DoResizeScreen (XtermWidget xw);
@@ -667,12 +678,27 @@
 
 extern Pixel getXtermBackground (int flags, int color);
 extern Pixel getXtermForeground (int flags, int color);
-extern int extract_bg (unsigned color);
 extern int extract_fg (unsigned color, unsigned flags);
 extern unsigned makeColorPair (int fg, int bg);
-extern unsigned xtermColorPair (void);
 extern void ClearCurBackground (TScreen *screen, int top, int left, unsigned height, unsigned width);
-extern void useCurBackground (Bool flag);
+
+#define xtermColorPair() makeColorPair(term->sgr_foreground, term->cur_background)
+
+#define getXtermForeground(flags, color) \
+       (((flags) & FG_COLOR) && ((color) >= 0) \
+                       ? term->screen.Acolors[color] \
+                       : term->screen.foreground)
+
+#define getXtermBackground(flags, color) \
+       (((flags) & BG_COLOR) && ((color) >= 0) \
+                       ? term->screen.Acolors[color] \
+                       : term->core.background_pixel)
+
+#if OPT_EXT_COLORS
+#define extract_bg(color) ((int)((color) & 0xff))
+#else
+#define extract_bg(color) ((int)((color) & 0xf))
+#endif
 
 #else /* !OPT_ISO_COLORS */
 
@@ -689,15 +715,14 @@
 #define makeColorPair(fg, bg) 0
 #define xtermColorPair() 0
 
-#define useCurBackground(flag) /*nothing*/
-
 #endif /* OPT_ISO_COLORS */
 
 #if OPT_DEC_CHRSET
-extern int getXtermChrSet (int row, int col);
-extern int curXtermChrSet (int row);
+#define curXtermChrSet(row) \
+       ((CSET_DOUBLE(SCRN_ROW_CSET((&term->screen), row))) \
+               ? SCRN_ROW_CSET((&term->screen), row) \
+               : (term->screen).cur_chrset)
 #else
-#define getXtermChrSet(row, col) 0
 #define curXtermChrSet(row) 0
 #endif
 
Index: xterm.log.html
--- xterm-121+/xterm.log.html   Fri Nov 19 15:27:18 1999
+++ xterm-122/xterm.log.html    Tue Dec 28 20:08:26 1999
@@ -41,6 +41,7 @@
 xc/programs/Xserver/hw/xfree86).
 
 <UL>
+<LI><A HREF="#xterm_122">Patch #122 - 1999/12/28 - XFree86 3.9.16f</A>
 <LI><A HREF="#xterm_121">Patch #121 - 1999/11/14 - XFree86 3.9.16c</A>
 <LI><A HREF="#xterm_120">Patch #120 - 1999/10/28 - XFree86 3.9.16c</A>
 <LI><A HREF="#xterm_119">Patch #119 - 1999/10/16 - XFree86 3.9.16c</A>
@@ -165,6 +166,51 @@
 <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
 </UL>
 
+<H1><A NAME="xterm_122">Patch #122 - 1999/12/28 - XFree86 3.9.16f</A></H1>
+<ul>
+       <li>move the suggested wheel-mouse button translations into charproc.c
+         to simplify customization.  Correct some minor logic errors in the
+         support for buttons 4 and 5, used for wheel mice (reported by
+         Bram Moolenaar).
+
+       <li>implement <em>metaSendsEscape</em> resource, with corresponding
+         control sequence and menu entry.  Like <em>eightBitInput</em>, this
+         causes xterm to send ESC prefixing the given key, but applies to
+         all keys and is independent of the 8-bit/7-bit terminal setting.
+         (requests by Alexander V Lukyanov and Marc Feeley).
+
+       <li>correct potential indexing with negative subscript in udk_lookup(),
+         (reported by Ian Collier &lt;Ian.Collier@comlab.ox.ac.uk&gt;).
+
+       <li>modify configure script that sets TERMINFO_DIR to use ${prefix}
+         rather than /usr if the --prefix option was specified (request by
+         Zdenek Sekera &lt;zs@sgi.com&gt;).
+
+       <li>modify checks for repeat-character control sequence to test the
+         character class against xterm's state table, rather than the
+         isprint() macro (patch by Alexander V Lukyanov).
+
+       <li>change several functions to macros to improve speed
+
+       <li>two corrections to simulation of bold font via overstriking:
+       <ul>
+         <li>use clipping to avoid leaving trash at end of the text, and
+         <li>add brackets so wide-character logic does not fall-through
+           into the overstriking logic (reported by 
+           Marc Feeley &lt;feeley@IRO.UMontreal.CA&gt;)
+       </ul>
+
+       <li>add several entries to termcap file to make it have the same set
+        of aliases as the terminfo file.
+
+       <li>scale the color values used for xterm-256color terminfo entry to
+        0..1000, as expected by ncurses.
+
+       <li>change xterm-r6 terminfo definitions for F1-F4 to match program.
+
+       <li>Add QNX/Neutrino support (Frank Guangxin Liu
+        &lt;frank@ctcqnx4.ctc.cummins.com&gt;)
+</ul>
 <H1><A NAME="xterm_121">Patch #121 - 1999/11/14 - XFree86 3.9.16c</A></H1>
 <ul>
        <li>change label on "Sun/PC Keyboard" popup menu entry to "VT220
@@ -339,7 +385,7 @@
          David Green &lt;greendjf@cvhp152.marconicomms.com&gt; and
          David Ellement &lt;ellement@sdd.hp.com&gt; both on HP-UX, whose
          compiler does care about syntax).
-         
+
        <li>change ifdef's using __CYGWIN32__ to __CYGWIN__ (reported by Suhaib
          M. Siddiqi &lt;Ssiddiqi@InspirePharm.Com&gt;, who is told that the
          next Cygnus release will drop that symbol in their next release).
@@ -351,14 +397,14 @@
         problem report:
        <blockquote>
        xterm consumes cpu when selecting text with mouse (holding
-       down left mouse button) and when a program working under the 
-       xterm outputs something to stdout. 
-       <p> 
+       down left mouse button) and when a program working under the
+       xterm outputs something to stdout.
+       <p>
        Easy way to reproduce:<br>
                <code>while :; do echo aaa; sleep 1; done</code><br>
-       (while this runs, select text and hold down left mouse button) 
+       (while this runs, select text and hold down left mouse button)
        watch cpu load.<br>
-       release left mouse button - spinning stops. 
+       release left mouse button - spinning stops.
        </blockquote>
 </ul>
 
@@ -372,7 +418,7 @@
          xterm; some platforms use the -g option of ls to toggle group off
          rather than on (reported by Greg Smith).
 
-       <li>minor improvement to toolbar geometry, to make it not resizable. 
+       <li>minor improvement to toolbar geometry, to make it not resizable.
          This still is not satisfactory (but is usable) since the toolbar
          overlaps the xterm widget if the window is resized to make it
          smaller.  It appears that some work is needed for the xterm widget's
@@ -387,33 +433,33 @@
          winterm provides this option).
 
        <li>integrated change by Steve Wall to
-         add support for DEC Locator control sequences for xterm: 
+         add support for DEC Locator control sequences for xterm:
          <pre>
- 
-               DECEFR - Enable Filter Rectangle 
-               DECELR - Enable Locator Reports 
-               DECSLE - Select Locator Events 
-               DECRQLP - Request Locator Position 
-         </pre>  
-         This allows the xterm mouse to be used with applications that use the 
-         DEC Locator sequences, such as VAX Tpu, or SMG$ based applications. 
+
+               DECEFR - Enable Filter Rectangle
+               DECELR - Enable Locator Reports
+               DECSLE - Select Locator Events
+               DECRQLP - Request Locator Position
+         </pre>
+         This allows the xterm mouse to be used with applications that use the
+         DEC Locator sequences, such as VAX Tpu, or SMG$ based applications.
 
        <li>patch from Matthias Baake &lt;Matthias.Baake@gmx.de&gt;, for print
          action.  From his notes:
          <ul>
-           <li>Bug 1: 
-             Underlined text is preceded by ESC [0;2m . This should be ESC [0;4m , ESC 
-             [2m doesn't seem to have any effect. (print.c/send_SGR) 
-        
-           <li>Bug 2: 
-             The check for the last non-empty column (while (last &gt; 0) ... in 
-             print.c/printLine) omits the rightmost column of the screen, the loop must 
-             start with last = screen-&gt;max_col+1 instead of last = screen-&gt;max_col. 
-        
-           <li>Bug 3: 
-             Any attributes of the first character (and of all immediately following 
-             characters with the same attributes) are ignored. The variable attr 
-             (print.c/printLine) should be initialized with 0, not with *a &amp; SGR_MASK. 
+           <li>Bug 1:
+             Underlined text is preceded by ESC [0;2m . This should be ESC [0;4m , ESC
+             [2m doesn't seem to have any effect. (print.c/send_SGR)
+
+           <li>Bug 2:
+             The check for the last non-empty column (while (last &gt; 0) ... in
+             print.c/printLine) omits the rightmost column of the screen, the loop must
+             start with last = screen-&gt;max_col+1 instead of last = screen-&gt;max_col.
+
+           <li>Bug 3:
+             Any attributes of the first character (and of all immediately following
+             characters with the same attributes) are ignored. The variable attr
+             (print.c/printLine) should be initialized with 0, not with *a &amp; SGR_MASK.
          </ul>
 </ul>
 
@@ -441,9 +487,9 @@
 
        <li>add configure script checks for Athena headers and libraries under
          /usr/contrib to work on HPUX (reported by several people:
-               David Nixon &lt;djn@csc.liv.ac.uk&gt; 
-               Aryeh Koenigsberg &lt;aryeh.koenigsberg@telrad.co.il&gt; 
-               Johannes M&#x00E4;hner &lt;johanm@camline.com&gt; 
+               David Nixon &lt;djn@csc.liv.ac.uk&gt;
+               Aryeh Koenigsberg &lt;aryeh.koenigsberg@telrad.co.il&gt;
+               Johannes M&#x00E4;hner &lt;johanm@camline.com&gt;
                Andrew Gaylard &lt;andrew.gaylard@bsw.co.za&gt;).
 
        <li>add check to configure script if xterm is installed setgid rather
@@ -564,7 +610,7 @@
            responses; when in 7-bit mode, only the final byte of ST was seen.
 
          <li>Allow multiple color #;name pairs in OSC 4,
-           and document changes to match. 
+           and document changes to match.
        </ul>
 </ul>
 
Index: xterm.man
--- xterm-121+/xterm.man        Fri Nov 19 15:27:18 1999
+++ xterm-122/xterm.man Tue Dec 28 19:45:58 1999
@@ -1085,8 +1085,11 @@
 .B "eightBitInput (\fPclass\fB EightBitInput\fP)"
 If ``true'', Meta characters input from the keyboard are presented as a
 single character with the eighth bit turned on.
+The terminal is put into 8-bit mode.
 If ``false'', Meta characters are converted into a two-character
 sequence with the character itself preceded by ESC.
+The terminal is put into 7-bit mode.
+The \fBmetaSendsEscape\fP resource may override this.
 The default is ``true.''
 .TP 8
 .B "eightBitOutput (\fPclass\fB EightBitOutput\fP)"
@@ -1192,6 +1195,15 @@
 Specifies whether or not the bell should be run when the user types near the
 right margin.  The default is ``false.''
 .TP 8
+.B "metaSendsEscape (\fPclass\fB MetaSendsEscape\fP)"
+If ``true'', Meta characters are converted into a two-character
+sequence with the character itself preceded by ESC.
+This applies as well to function key control sequences, unless \fIxterm\fP
+sees that \fBMeta\fP is used in your key translations.
+If ``false'', Meta characters input from the keyboard are handled according
+to the \fBeightBitInput\fP resource.
+The default is ``false.''
+.TP 8
 .B "multiClickTime (\fPclass\fB MultiClickTime)"
 Specifies the maximum time in milliseconds between multi-click select
 events.  The default is 250 milliseconds.
@@ -2018,7 +2030,9 @@
 .B "insert-eight-bit()"
 This action inserts an eight-bit (Meta) version of the character or string
 associated with the key that was pressed.
-The exact action depends on the value of the \fBeightBitInput\fP resource.
+The exact action depends on the value of
+the \fBmetaSendsEscape\fP and
+the \fBeightBitInput\fP resources.
 .TP 8
 .B "insert-selection(\fIsourcename\fP [, ...])"
 This action inserts the string found in the selection or cutbuffer indicated
@@ -2316,33 +2330,44 @@
 .TA 2.5i
 .ta 2.5i
 .nf
-          Shift <KeyPress> Prior:      scroll-back(1,halfpage) \\n\\
-           Shift <KeyPress> Next:      scroll-forw(1,halfpage) \\n\\
-         Shift <KeyPress> Select:      select-cursor-start() \\
-                                        select-cursor-end(PRIMARY, CUT_BUFFER0) \\n\\
-         Shift <KeyPress> Insert:      insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
-                 ~Meta<KeyPress>:      insert-seven-bit() \\n\\
-                  Meta<KeyPress>:      insert-eight-bit() \\n\\
-                !Ctrl <Btn1Down>:      popup-menu(mainMenu) \\n\\
-           !Lock Ctrl <Btn1Down>:      popup-menu(mainMenu) \\n\\
- !Lock Ctrl @Num_Lock <Btn1Down>:      popup-menu(mainMenu) \\n\\
-     ! @Num_Lock Ctrl <Btn1Down>:      popup-menu(mainMenu) \\n\\
-                ~Meta <Btn1Down>:      select-start() \\n\\
-              ~Meta <Btn1Motion>:      select-extend() \\n\\
-                !Ctrl <Btn2Down>:      popup-menu(vtMenu) \\n\\
-           !Lock Ctrl <Btn2Down>:      popup-menu(vtMenu) \\n\\
- !Lock Ctrl @Num_Lock <Btn2Down>:      popup-menu(vtMenu) \\n\\
-     ! @Num_Lock Ctrl <Btn2Down>:      popup-menu(vtMenu) \\n\\
-          ~Ctrl ~Meta <Btn2Down>:      ignore() \\n\\
-            ~Ctrl ~Meta <Btn2Up>:      insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
-                !Ctrl <Btn3Down>:      popup-menu(fontMenu) \\n\\
-           !Lock Ctrl <Btn3Down>:      popup-menu(fontMenu) \\n\\
- !Lock Ctrl @Num_Lock <Btn3Down>:      popup-menu(fontMenu) \\n\\
-     ! @Num_Lock Ctrl <Btn3Down>:      popup-menu(fontMenu) \\n\\
-          ~Ctrl ~Meta <Btn3Down>:      start-extend() \\n\\
-              ~Meta <Btn3Motion>:      select-extend() \\n\\
-                         <BtnUp>:      select-end(PRIMARY, CUT_BUFFER0) \\n\\
-                       <BtnDown>:      bell(0)
+          Shift <KeyPress> Prior:scroll-back(1,halfpage) \\n\\
+           Shift <KeyPress> Next:scroll-forw(1,halfpage) \\n\\
+         Shift <KeyPress> Select:select-cursor-start() \\
+                                 select-cursor-end(PRIMARY, CUT_BUFFER0) \\n\\
+         Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+                ~Meta <KeyPress>:insert-seven-bit() \\n\\
+                 Meta <KeyPress>:insert-eight-bit() \\n\\
+                !Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\
+           !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\
+ !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \\n\\
+     ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\
+                ~Meta <Btn1Down>:select-start() \\n\\
+              ~Meta <Btn1Motion>:select-extend() \\n\\
+                !Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\
+           !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\
+ !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \\n\\
+     ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\
+          ~Ctrl ~Meta <Btn2Down>:ignore() \\n\\
+                 Meta <Btn2Down>:clear-saved-lines() \n\
+            ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+                !Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\
+           !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\
+ !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \\n\\
+     ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\
+          ~Ctrl ~Meta <Btn3Down>:start-extend() \\n\\
+              ~Meta <Btn3Motion>:select-extend() \\n\\
+                 Ctrl <Btn4Down>:scroll-back(1,halfpage) \\n\\
+            Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \\n\\
+  Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \\n\\
+       @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage) \\n\\
+                      <Btn4Down>:scroll-back(5,line)     \\n\\
+                 Ctrl <Btn5Down>:scroll-forw(1,halfpage) \\n\\
+            Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \\n\\
+  Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \\n\\
+       @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage) \\n\\
+                      <Btn5Down>:scroll-forw(5,line)     \\n\\
+                         <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \\n\\
+                       <BtnDown>:bell(0)
 .fi
 .DE
 .sp