xterm-79.patch.txt

# ------------------------------------------------------------------------------
#  Makefile.in    |    7 +-
#  charproc.c     |   60 +++++++++++++++------
#  input.c        |   61 ++++++++++++++-------
#  main.c         |   18 +++---
#  proto.h        |   18 +-----
#  ptyx.h         |    5 +
#  scrollbar.c    |    2 
#  termcap        |   19 +++++-
#  terminfo       |  154 +++++++++++++++++++++++++++++++++++++++++++------------
#  util.c         |    2 
#  version.h      |    2 
#  xterm.h        |    9 ---
#  xterm.log.html |   55 +++++++++++++++++++
#  xterm.man      |   10 ++-
#  14 files changed, 309 insertions, 113 deletions
# ------------------------------------------------------------------------------
Index: Makefile.in
--- xterm-78/Makefile.in        Fri Jun  5 16:23:53 1998
+++ xterm-79/Makefile.in        Sun Jun 28 21:38:53 1998
@@ -1,4 +1,4 @@
-## $XFree86: xc/programs/xterm/Makefile.in,v 3.12 1998/06/04 16:43:48 hohndel Exp $ ##
+## $XFree86: xc/programs/xterm/Makefile.in,v 3.11 1998/04/05 00:46:08 robin Exp $ ##
 
 #### Start of system configuration section. ####
 
@@ -14,6 +14,7 @@
 
 X_CFLAGS       = @X_CFLAGS@
 X_LIBS         = @X_LIBS@
+X_EXTRA_LIBS   = @X_EXTRA_LIBS@
 
 IMAKE_CFLAGS   = @IMAKE_CFLAGS@
 EXTRA_CFLAGS   = @EXTRA_CFLAGS@
@@ -77,10 +78,10 @@
 main.o: version.h
 
 xterm : $(OBJS1)
-       $(LINK) $(LDFLAGS) -o $@ $(OBJS1) $(X_LIBS) $(LIBS) $(EXTRA_LOADFLAGS)
+       $(LINK) $(LDFLAGS) -o $@ $(OBJS1) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS) $(EXTRA_LOADFLAGS)
 
 resize : $(OBJS2)
-       $(LINK) $(LDFLAGS) -o $@ $(OBJS2) $(X_LIBS) $(LIBS)
+       $(LINK) $(LDFLAGS) -o $@ $(OBJS2) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS)
 
 install: $(INSTALL_DIRS) xterm resize
        $(INSTALL_PROGRAM) -s -m 4711 xterm  $(bindir)/xterm
Index: charproc.c
--- xterm-78/charproc.c Fri Jun  5 16:23:53 1998
+++ xterm-79/charproc.c Sun Jun 28 22:32:45 1998
@@ -206,6 +206,7 @@
 #define XtNmultiClickTime      "multiClickTime"
 #define XtNmultiScroll         "multiScroll"
 #define XtNnMarginBell         "nMarginBell"
+#define XtNoldXtermFKeys       "oldXtermFKeys"
 #define XtNpointerColor                "pointerColor"
 #define XtNpointerColorBackground      "pointerColorBackground"
 #define XtNpointerShape                "pointerShape"
@@ -280,6 +281,7 @@
 #define XtCMarginBell          "MarginBell"
 #define XtCMultiClickTime      "MultiClickTime"
 #define XtCMultiScroll         "MultiScroll"
+#define XtCOldXtermFKeys       "OldXtermFKeys"
 #define XtCPrintAttributes     "PrintAttributes"
 #define XtCPrinterAutoClose    "PrinterAutoClose"
 #define XtCPrinterCommand      "PrinterCommand"
@@ -561,6 +563,9 @@
 {XtNjumpScroll, XtCJumpScroll, XtRBoolean, sizeof(Boolean),
        XtOffsetOf(XtermWidgetRec, screen.jumpscroll),
        XtRBoolean, (XtPointer) &defaultTRUE},
+{XtNoldXtermFKeys, XtCOldXtermFKeys, XtRBoolean, sizeof(Boolean),
+       XtOffsetOf(XtermWidgetRec, screen.old_fkeys),
+       XtRBoolean, (XtPointer) &defaultFALSE},
 #ifdef ALLOWLOGGING
 {XtNlogFile, XtCLogfile, XtRString, sizeof(char *),
        XtOffsetOf(XtermWidgetRec, screen.logfile),
@@ -3633,11 +3638,41 @@
    Boolean color_ok;
 #endif
 
-   /* Zero out the entire "screen" component of "new" widget,
-      then do field-by-field assigment of "screen" fields
-      that are named in the resource list. */
-
+   /* Zero out the entire "screen" component of "new" widget, then do
+    * field-by-field assigment of "screen" fields that are named in the
+    * resource list.
+    */
    bzero ((char *) &new->screen, sizeof(new->screen));
+
+   /* dummy values so that we don't try to Realize the parent shell with height
+    * or width of 0, which is illegal in X.  The real size is computed in the
+    * xtermWidget's Realize proc, but the shell's Realize proc is called first,
+    * and must see a valid size.
+    */
+   new->core.height = new->core.width = 1;
+
+   /*
+    * The definition of -rv now is that it changes the definition of
+    * XtDefaultForeground and XtDefaultBackground.  So, we no longer
+    * need to do anything special.
+    */
+   new->screen.display = new->core.screen->display;
+
+   /*
+    * We use the default foreground/background colors to compare/check if a
+    * color-resource has been set.
+    */
+#define MyBlackPixel(dpy) BlackPixel(dpy,DefaultScreen(dpy))
+#define MyWhitePixel(dpy) WhitePixel(dpy,DefaultScreen(dpy))
+
+   if (request->misc.re_verse) {
+       new->dft_foreground = MyWhitePixel(new->screen.display);
+       new->dft_background = MyBlackPixel(new->screen.display);
+   } else {
+       new->dft_foreground = MyBlackPixel(new->screen.display);
+       new->dft_background = MyWhitePixel(new->screen.display);
+   }
+
    new->screen.c132 = request->screen.c132;
    new->screen.curses = request->screen.curses;
    new->screen.hp_ll_bc = request->screen.hp_ll_bc;
@@ -3654,6 +3689,7 @@
 #endif
    new->screen.border = request->screen.border;
    new->screen.jumpscroll = request->screen.jumpscroll;
+   new->screen.old_fkeys = request->screen.old_fkeys;
 #ifdef ALLOWLOGGING
    new->screen.logfile = request->screen.logfile;
 #endif
@@ -3724,7 +3760,8 @@
 
    for (i = 0, color_ok = False; i < MAXCOLORS; i++) {
        new->screen.Acolors[i] = request->screen.Acolors[i];
-       if (new->screen.Acolors[i] != request->screen.foreground
+       if (new->screen.Acolors[i] != new->dft_foreground
+        && new->screen.Acolors[i] != request->screen.foreground
         && new->screen.Acolors[i] != request->core.background_pixel)
           color_ok = True;
    }
@@ -3757,19 +3794,6 @@
    new->keyboard.flags = MODE_SRM;
    if (new->screen.backarrow_key)
           new->keyboard.flags |= MODE_DECBKM;
-
-    /*
-     * The definition of -rv now is that it changes the definition of
-     * XtDefaultForeground and XtDefaultBackground.  So, we no longer
-     * need to do anything special.
-     */
-   new->screen.display = new->core.screen->display;
-   new->core.height = new->core.width = 1;
-      /* dummy values so that we don't try to Realize the parent shell
-        with height or width of 0, which is illegal in X.  The real
-        size is computed in the xtermWidget's Realize proc,
-        but the shell's Realize proc is called first, and must see
-        a valid size. */
 
    /* look for focus related events on the shell, because we need
     * to care about the shell's border being part of our focus.
Index: input.c
--- xterm-78/input.c    Fri Jun  5 16:23:53 1998
+++ xterm-79/input.c    Sun Jun 28 21:09:17 1998
@@ -1,6 +1,6 @@
 /*
  *     $XConsortium: input.c /main/21 1996/04/17 15:54:23 kaleb $
- *     $XFree86: xc/programs/xterm/input.c,v 3.20 1998/06/04 16:43:57 hohndel Exp $
+ *     $XFree86: xc/programs/xterm/input.c,v 3.19 1998/04/27 03:14:59 robin Exp $
  */
 
 /*
@@ -73,6 +73,29 @@
        }
 }
 
+/* returns true if the key is on the editing keypad */
+static Boolean
+IsEditFunctionKey(KeySym keysym)
+{
+       switch (keysym) {
+       case XK_Prior:
+       case XK_Next:
+       case XK_Insert:
+       case XK_Find:
+       case XK_Select:
+#ifdef DXK_Remove
+       case DXK_Remove:
+#endif
+#ifdef XK_KP_Delete
+       case XK_KP_Delete:
+       case XK_KP_Insert:
+#endif
+               return True;
+       default:
+               return False;
+       }
+}
+
 void
 Input (
        register TKeyboard *keyboard,
@@ -120,7 +143,6 @@
        if ((nbytes == 1)
         && !(term->keyboard.flags & MODE_DECBKM)
         && (keysym == XK_BackSpace)) {
-               keysym = XK_Delete;
                strbuf[0] = '\177';
        }
 
@@ -166,9 +188,16 @@
                VT52_CURSOR_KEYS
                unparseseq(&reply, pty);
                key = TRUE;
-        } else if (IsCursorKey(keysym) &&
-               keysym != XK_Prior && keysym != XK_Next) {
-                       if (keyboard->flags & MODE_DECCKM) {
+#if OPT_SUNPC_KBD
+       } else if (sunKeyboard
+               && screen->old_fkeys == False
+               && screen->ansi_level <= 1
+               && IsEditFunctionKey(keysym)) {
+               key = FALSE;    /* ignore editing-keypad in vt100 mode */
+#endif
+       } else if (IsCursorKey(keysym) &&
+               keysym != XK_Prior && keysym != XK_Next) {
+               if (keyboard->flags & MODE_DECCKM) {
                        reply.a_type = SS3;
                        reply.a_final = cur[keysym-XK_Home];
                        VT52_CURSOR_KEYS
@@ -180,17 +209,9 @@
                        unparseseq(&reply, pty);
                }
                key = TRUE;
-        } else if (IsFunctionKey(keysym) || IsMiscFunctionKey(keysym)
-               || keysym == XK_Prior
-               || keysym == XK_Next
-#ifdef DXK_Remove
-               || keysym == DXK_Remove
-#endif
-#ifdef XK_KP_Delete
-               || keysym == XK_KP_Delete
-               || keysym == XK_KP_Insert
-#endif
-               ) {
+        } else if (IsFunctionKey(keysym)
+               || IsMiscFunctionKey(keysym)
+               || IsEditFunctionKey(keysym)) {
 #if OPT_SUNPC_KBD
                if ((event->state & ControlMask)
                 && sunKeyboard
@@ -208,8 +229,8 @@
                /*
                 * Interpret F1-F4 as PF1-PF4 for VT52, VT100
                 */
-               else if (screen->ansi_level <= 1
-                 && (dec_code >= 11 && dec_code <= 14))
+               else if (screen->old_fkeys == False
+                && (dec_code >= 11 && dec_code <= 14))
                {
                        reply.a_type = SS3;
                        VT52_CURSOR_KEYS
@@ -243,7 +264,7 @@
                 && keysym == XK_KP_Add)
                        keysym = XK_KP_Separator;
 #endif
-               if ((keyboard->flags & MODE_DECKPAM) != 0) {
+               if ((keyboard->flags & MODE_DECKPAM) != 0) {
                        reply.a_type  = SS3;
                        reply.a_final = kypd_apl[keysym-XK_KP_Space];
                        VT52_KEYPAD
@@ -383,7 +404,7 @@
                case XK_R13:    return(220);
                case XK_R14:    return(221);
                case XK_R15:    return(222);
-  
+
                case XK_Find :  return(1);
                case XK_Insert: return(2);
                case XK_Delete: return(3);
Index: main.c
--- xterm-78/main.c     Fri Jun  5 16:23:53 1998
+++ xterm-79/main.c     Sun Jun 28 21:47:45 1998
@@ -64,7 +64,7 @@
 
 ******************************************************************/
 
-/* $XFree86: xc/programs/xterm/main.c,v 3.72 1998/06/04 16:43:58 hohndel Exp $ */
+/* $XFree86: xc/programs/xterm/main.c,v 3.71 1998/04/28 02:51:00 robin Exp $ */
 
 
 /* main.c */
@@ -3897,29 +3897,29 @@
            /* write it out only if it exists, and the pid's match */
            if (utptr && (utptr->ut_pid == screen->pid)) {
                    utptr->ut_type = DEAD_PROCESS;
+                   *utptr->ut_user = 0;
 #if defined(SVR4) || defined(SCO325) || (defined(linux) && __GLIBC__ >= 2)
-                   utmp.ut_session = getsid(0);
-                   utmp.ut_xtime = time ((time_t *) 0);
-                   utmp.ut_tv.tv_usec = 0;
+                   utptr->ut_session = getsid(0);
+                   utptr->ut_xtime = time ((time_t *) 0);
+                   utptr->ut_tv.tv_usec = 0;
 #else
-                   *utptr->ut_user=0;
                    utptr->ut_time = time((time_t *) 0);
 #endif
                    (void) pututline(utptr);
 #ifdef WTMP
 #if defined(SVR4) || defined(SCO325)
                    if (term->misc.login_shell)
-                       updwtmpx(WTMPX_FILE, &utmp);
+                       updwtmpx(WTMPX_FILE, utptr);
 #else
 #if defined(linux) && __GLIBC__ >= 2
-                   strncpy (utmp.ut_line, utptr->ut_line, sizeof (utmp.ut_line));
+                   strncpy (utmp.ut_line, utptr->ut_line, sizeof (utmp.ut_line));
                    if (term->misc.login_shell)
-                       updwtmp(etc_wtmp, &utmp);
+                       updwtmp(etc_wtmp, utptr);
 #else
                    /* set wtmp entry if wtmp file exists */
                    if (term->misc.login_shell &&
                        (fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
-                     i = write(fd, utptr, sizeof(utmp));
+                     i = write(fd, utptr, sizeof(*utptr));
                      i = close(fd);
                    }
 #endif
Index: proto.h
--- xterm-78/proto.h    Tue Apr 28 15:01:01 1998
+++ xterm-79/proto.h    Mon May 25 20:58:48 1998
@@ -5,28 +5,20 @@
 
 #include <X11/Xfuncproto.h>
 
-#if NeedFunctionPrototypes
-#define PROTO(p) p
-#else
-#define PROTO(p) ()
-#endif
-
-#define NOPROTO(p) (/*nothing*/)
-
 #define PROTO_XT_ACTIONS_ARGS \
-       PROTO((Widget w, XEvent *event, String *params, Cardinal *num_params))
+       (Widget w, XEvent *event, String *params, Cardinal *num_params)
 
 #define PROTO_XT_CALLBACK_ARGS \
-       PROTO((Widget gw, XtPointer closure, XtPointer data))
+       (Widget gw, XtPointer closure, XtPointer data)
 
 #define PROTO_XT_CVT_SELECT_ARGS \
-       PROTO((Widget w, Atom *selection, Atom *target, Atom *type, XtPointer *value, unsigned long *length, int *format))
+       (Widget w, Atom *selection, Atom *target, Atom *type, XtPointer *value, unsigned long *length, int *format)
 
 #define PROTO_XT_EV_HANDLER_ARGS \
-       PROTO((Widget w, XtPointer closure, XEvent *event, Boolean *cont))
+       (Widget w, XtPointer closure, XEvent *event, Boolean *cont)
 
 #define PROTO_XT_SEL_CB_ARGS \
-       PROTO((Widget w, XtPointer client_data, Atom *selection, Atom *type, XtPointer value, unsigned long *length, int *format))
+       (Widget w, XtPointer client_data, Atom *selection, Atom *type, XtPointer value, unsigned long *length, int *format)
 
 #ifdef SIGNALRETURNSINT
 #define SIGNAL_T int
Index: ptyx.h
--- xterm-78/ptyx.h     Fri Jun  5 16:23:53 1998
+++ xterm-79/ptyx.h     Sun Jun 28 19:34:09 1998
@@ -1,6 +1,6 @@
 /*
  *     $XConsortium: ptyx.h /main/67 1996/11/29 10:34:19 swick $
- *     $XFree86: xc/programs/xterm/ptyx.h,v 3.40 1998/06/04 16:44:00 hohndel Exp $
+ *     $XFree86: xc/programs/xterm/ptyx.h,v 3.39 1998/04/28 02:51:02 robin Exp $
  */
 
 /*
@@ -727,6 +727,7 @@
        int             scroll_amt;     /* amount to scroll             */
        int             refresh_amt;    /* amount to refresh            */
        int             protected_mode; /* 0=off, 1=DEC, 2=ISO          */
+       Boolean         old_fkeys;      /* true for compatible fkeys    */
        Boolean         jumpscroll;     /* whether we should jumpscroll */
        Boolean         always_highlight; /* whether to highlight cursor */
        Boolean         underline;      /* whether to underline text    */
@@ -901,6 +902,8 @@
     unsigned   flags;          /* mode flags                   */
     int         cur_foreground;        /* current foreground color     */
     int         cur_background;        /* current background color     */
+    Pixel       dft_foreground;        /* default foreground color     */
+    Pixel       dft_background;        /* default background color     */
 #if OPT_ISO_COLORS
     int         sgr_foreground;        /* current SGR foreground color */
 #endif
Index: scrollbar.c
--- xterm-78/scrollbar.c        Fri Jun  5 16:23:53 1998
+++ xterm-79/scrollbar.c        Sun Jun 28 22:47:38 1998
@@ -227,7 +227,7 @@
        args[1].value = (XtArgVal) bg;
        nargs--;                                /* don't set border_pixmap */
        if (bdpix == XtUnspecifiedPixmap) {     /* if not pixmap then pixel */
-           args[2].value = args[1].value;      /* set border to new fg */
+           args[2].value = (XtArgVal) bdr;     /* keep old border color */
        } else {                                /* ignore since pixmap */
            nargs--;                            /* don't set border pixel */
        }
Index: termcap
--- xterm-78/termcap    Fri Jun  5 16:23:53 1998
+++ xterm-79/termcap    Sun Jun 28 23:06:02 1998
@@ -8,7 +8,7 @@
 #      'xtermm' drops color in favor of additional function keys.  If you need
 #      both, use terminfo.
 #
-vs|xterm|xterm-24|xterms|vs100|xterm (X Window System):\
+xf|xterm-xfree86|xterm-new|xterm terminal emulator (XFree86):\
        :is=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>:\
        :rs=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>:\
        :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:DO=\E[%dB:UP=\E[%dA:\
@@ -40,18 +40,21 @@
        :up=\E[A:us=\E[4m:ue=\E[24m:xn:\
        :ut:Co#8:op=\E[39m\E49m:AB=\E[4%dm:AF=\E[3%dm:\
        :pa#64:Sf=\E[3%dm:Sb=\E[4%dm:
+v1|xterm-24|xterms|vs100|xterm terminal emulator (X Window System):\
+       :li#24:\
+       :tc=xterm:
 v2|xterm-65|xterm with tall window 65x80 (X Window System):\
        :li#65:tc=xterm:
 vb|xterm-bold|xterm with bold instead of underline (X Window System):\
        :us=\E[1m:tc=xterm:
 vb|xterm-boldso|xterm with bold for standout (X Window System):\
        :so=\E[1m:tc=xterm:
-xtermm|monochrome xterm (X Window System):\
+vm|xtermm|monochrome xterm (X Window System):\
        :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:\
        :st@:ut@:Co@:NC@:op@:AB@:AF@:pa@:Sf@:Sb@:tc=xterm:
-xterm-vt220|xterm emulating vt220:\
+vt|xterm-vt220|xterm emulating vt220:\
        :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:\
        :tc=xterm:
 #
@@ -61,7 +64,7 @@
        :im=:ei=:mi@:ic=\E[@:IC=\E[%d@:tc=xterm:
 #
 # Compatible with the R6 xterm
-xterm-r6|xterm-old|xterm X11R6 version:\
+r6|xterm-r6|xterm-old|xterm X11R6 version:\
        :is=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>:\
        :rs=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>:\
        :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:DO=\E[%dB:UP=\E[%dA:\
@@ -92,7 +95,7 @@
        :up=\E[A:us=\E[4m:ue=\E[m:xn:
 #
 # Compatible with the R5 xterm
-xterm-r5|xterm X11R5 version:\
+r5|xterm-r5|xterm X11R5 version:\
        :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:UP=\E[%dA:\
        :al=\E[L:am:\
        :bs:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:co#80:\
@@ -108,3 +111,9 @@
        :sc=\E7:rc=\E8:sf=\n:so=\E[7m:se=\E[m:sr=\EM:\
        :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:\
        :up=\E[A:us=\E[4m:ue=\E[m:xn:
+#
+# This is the only entry which you should have to customize, since "xterm"
+# is widely used for a variety of incompatible terminal emulations including
+# color_xterm and rxvt.
+v0|xterm|X Windows terminal emulator:\
+       :tc=xterm-xfree86:
Index: terminfo
--- xterm-78/terminfo   Fri Jun  5 16:23:53 1998
+++ xterm-79/terminfo   Sun Jun 28 22:25:31 1998
@@ -4,21 +4,57 @@
 # XFree86 updates/notes/new entries (including xterm-8bit, xterm-16color)
 # - Thomas E. Dickey <dickey@clark.net>
 #
-# meml locks memory above the cursor; memu unlocks (ala HP terminals)
+# Special Capabilities:
+# --------------------
+# ich has a corresponding capability that inserts a single blank.  We could
+#      have used ich1=\E[@, which works with ncurses, but that is not standard
+#      behavior.  If it is set, then SVr4 vi (e.g., Solaris 2.6) emits both
+#      smir/rmir and ich1.
+# meml locks memory above the cursor; memu unlocks (ala HP terminals).  This
+#      is not recognized by some older (e.g., SVr3) tic programs, but none
+#      do more than warn about it.  Ignore the warning.
 # rmcup clears memory before switching to the alternate screen.  The older
 #      (deprecated) \E[?47h did not do this, requiring applications to
 #      embed a \E[2J in the rmcup string.  However, that behavior cannot
 #      be disabled via titeInhibit, making that resource not function as
 #      intended on systems with terminfo.
 #
-# We could have used ich1=\E[@, which works with ncurses, but that is not
-# standard behavior.  If it is set, then SVr4 vi (e.g., Solaris 2.6) emits
-# both smir/rmir and ich1.
+# Editing Keypad:
+# --------------
+# XFree86 xterm emulates vt220 if the decTerminalID resource is set to 200 or
+# higher.  Otherwise it emulates a vt100 or vt52 depending on the value of the
+# resource.  When emulating a vt220, we support the editing keypad.  Sun and PC
+# keyboards have an editing keypad which is similar to the vt220:
+#
+#      VT220 editing keypad
+#      ----------------------------
+#      Find      Insert      Remove
+#      Select    Prev        Next
+#      ----------------------------
+#
+#      Sun/PC editing keypad
+#      ----------------------------
+#      Insert    Home        PageUp
+#      Delete    End         PageDn
+#      ----------------------------
+#
+# If the sunKeyboard resource is true, we map it this way (adjusting the values
+# of Home, End and Delete):
+#      VT220                 Sun/PC
+#      ----------------------------
+#      Find                  Home
+#      Select                End
+#      Insert                Insert
+#      Remove                Delete
+#      Prev                  PageUp
+#      Next                  PageDn
+#      ----------------------------
+#
+# Note that all of the keys on the editing keypad transmit escape sequences.  A
+# vt220 does this only when in vt220 mode; when emulating a vt100 the editing
+# keypad is inactive.
 #
-# The xterm-r6 entry does not define acsc, which is probably an error (but
-# it matches the X11R5 to X11R6.3 distributions).
-#
-xterm|xterm-24|xterms|vs100|xterm terminal emulator (X Window System),
+xterm-xfree86|xterm-new|xterm terminal emulator (XFree86),
        am,
        bce,
        km,
@@ -31,7 +67,7 @@
        it#8,
        lines#24,
        pairs#64,
-       acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+       acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G,
        blink=\E[5m,
        bold=\E[1m,
@@ -82,7 +118,7 @@
        kcud1=\EOB,
        kcuf1=\EOC,
        kcuu1=\EOA,
-       kdch1=\177,
+       kdch1=\E[3~,
        kend=\EOF,
        kent=\EOM,
        kf1=\EOP,
@@ -145,13 +181,37 @@
        smso=\E[7m,
        smul=\E[4m,
        tbc=\E[3g,
+       u6=\E[%i%d;%dR,
+       u7=\E[6n,
+       u8=\E[?1;2c,
+       u9=\E[c,
        vpa=\E[%i%p1%dd,
+#
+# The xterm-xfree86 description has all of the features, but is not completely
+# compatible with vt220.  If you are using a Sun or PC keyboard, set the
+# sunKeyboard resource to true:
+#      + maps the editing keypad
+#      + interprets control-function-key as a second array of keys, so a
+#        12-fkey keyboard can support vt220's 20-fkeys.
+#      + maps numeric keypad "+" to ",".
+#        
+xterm-vt220|XFree86 xterm emulating vt220,
+       kdch1=\E[3~,
+       kend=\E[4~,
+       kfnd=\E[1~,
+       khome=\E[1~,
+       kslt=\E[4~,
+       use=xterm-xfree86,
+
+# Other variants:
+xterm-24|xterms|vs100|xterm terminal emulator (X Window System),
+       lines#24,
+       use=xterm,
 xterm-65|xterm with tall window 65x80 (X Window System),
        lines#65,
        use=xterm,
 xterm-bold|xterm with bold instead of underline (X Window System),
-       rmul=\E[22m,
-       smul=\E[1m,
+       smso=\E[1m,
        use=xterm,
 xtermm|monochrome xterm (X Window System),
        colors@,
@@ -164,8 +224,20 @@
        setf@,
        sgr@,
        use=xterm,
+#
+# This should work for the commonly used "color xterm" variations (XFree86
+# xterm, color_xterm, nxterm, rxvt):
+xterm-color|generic "ANSI" color xterm (X Window System),
+       colors#8,
+       ncv@,
+       pairs#64,
+       op=\E[m,
+       setab=\E[4%p1%dm,
+       setaf=\E[3%p1%dm,
+       use=xterm-r6,
+#
 xterm-boldso|xterm with bold for standout (X Window System),
-       rmso=\E[22m,
+       rmso=\E[m,
        smso=\E[1m,
        use=xterm,
 #
@@ -179,13 +251,6 @@
        smir@,
        use=xterm,
 #
-xterm-vt220|xterm emulating vt220,
-       kf1=\E[11~,
-       kf2=\E[12~,
-       kf3=\E[13~,
-       kf4=\E[14~,
-       use=xterm,
-#
 # This is used only for testing (it's not relevant to DEC VTxxx terminals, but
 # to ncurses).
 xterm-xmc|xterm with magic-cookie glitch,
@@ -227,7 +292,7 @@
        setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
        setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
        setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
-       use=xterm,
+       use=xterm-xfree86,
 # This is an 8-bit version of xterm, which emulates DEC vt220 with ANSI color.
 # To use it, your decTerminalID resource must be set to 200 or above.
 #
@@ -249,9 +314,9 @@
        it#8,
        lines#24,
        pairs#64,
-       acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+       acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G,
-       blink=\23325m,
+       blink=\2335m,
        bold=\2331m,
        cbt=\233Z,
        civis=\233?25l,
@@ -363,9 +428,17 @@
        smso=\2337m,
        smul=\2334m,
        tbc=\2333g,
+       u6=\233[%i%d;%dR,
+       u7=\E[6n,
+       u8=\233[?1;2c,
+       u9=\E[c,
        vpa=\233%i%p1%dd,
 #
-# Compatible with the R6 xterm
+# Compatible with the R6 xterm, with the following changes:
+#      + added acsc (perhaps some versions of tic assume the standard vt100
+#        alternate character set)
+#      + added u6, u7, u8, u9 strings for Daniel Weaver's tack program.
+#      + added kmous string for ncurses.
 xterm-r6|xterm-old|xterm X11R6 version,
        am,
        km,
@@ -373,7 +446,9 @@
        msgr,
        xenl,
        cols#80,
+       it#8,
        lines#24,
+       acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G,
        blink@,
        bold=\E[1m,
@@ -430,6 +505,7 @@
        kf9=\E[20~,
        kfnd=\E[1~,
        kich1=\E[2~,
+       kmous=\E[M,
        knp=\E[6~,
        kpp=\E[5~,
        kslt=\E[4~,
@@ -454,8 +530,17 @@
        smso=\E[7m,
        smul=\E[4m,
        tbc=\E[3g,
-#
-# Compatible with the R5 xterm
+       u6=\E[%i%d;%dR,
+       u7=\E[6n,
+       u8=\E[?1;2c,
+       u9=\E[c,
+#
+# Compatible with the R5 xterm, with the following changes:
+#      + changed 'blink=@', to 'blink@' (the former meant that "@" would start
+#        a blink, the latter that it is not supported).
+#      + changed kf1 through kf4 to correspond with actual usage.  Though X
+#        supports keypad symbols for PF1 to PF4, and xterm interprets these
+#        correctly, the F1 to F4 codes are commonly (but incorrectly) used.
 xterm-r5|xterm R5 version,
        am,
        km,
@@ -465,7 +550,7 @@
        it#8,
        lines#24,
        bel=^G,
-       blink=@,
+       blink@,
        bold=\E[1m,
        clear=\E[H\E[2J,
        cr=^M,
@@ -502,13 +587,13 @@
        kdl1=\E[31~,
        kel=\E[8~,
        kf0=\EOq,
-       kf1=\EOP,
+       kf1=\E[11~,
        kf10=\E[21~,
        kf11=\E[23~,
        kf12=\E[24~,
-       kf2=\EOQ,
-       kf3=\EOR,
-       kf4=\EOS,
+       kf2=\E[12~,
+       kf3=\E[13~,
+       kf4=\E[14~,
        kf5=\E[15~,
        kf6=\E[17~,
        kf7=\E[18~,
@@ -531,3 +616,10 @@
        smkx=\E[?1h\E=,
        smso=\E[7m,
        tbc=\E[3g,
+#
+# This is the only entry which you should have to customize, since "xterm"
+# is widely used for a variety of incompatible terminal emulations including
+# color_xterm and rxvt.
+xterm|X Windows terminal emulator,
+       use=xterm-xfree86,
+#      use=xterm-r6,
Index: util.c
--- xterm-78/util.c     Fri Jun  5 16:23:53 1998
+++ xterm-79/util.c     Sun Jun 28 22:50:32 1998
@@ -1423,7 +1423,7 @@
                if (hi_pix != screen->foreground
                 && hi_pix != fg_pix
                 && hi_pix != bg_pix
-                && hi_pix != 0) {      /* FIXME: need a reliable undef-Pixel */
+                && hi_pix != term->dft_foreground) {
                        bg_pix = fg_pix;
                        fg_pix = hi_pix;
                }
Index: version.h
--- xterm-78/version.h  Fri Jun  5 16:23:53 1998
+++ xterm-79/version.h  Sun Jun 28 22:50:49 1998
@@ -6,4 +6,4 @@
  * version of xterm has been built.  The number in parentheses is my patch
  * number (T.Dickey).
  */
-#define XTERM_VERSION "XFree86 3.9Ah(78)"
+#define XTERM_VERSION "XFree86 3.9Ai(79)"
Index: xterm.h
--- xterm-78/xterm.h    Fri Jun  5 16:23:53 1998
+++ xterm-79/xterm.h    Sun Jun 28 22:13:09 1998
@@ -8,13 +8,6 @@
 #ifndef        included_xterm_h
 #define        included_xterm_h
 
-#ifdef __EMX__
-/* must be cleaned up through ANSIFICATION: X_NOT_STDC_ENV is wrong below,
- * because size_t mustn't be set to int. Xos.h sets it right
- */
-#include <X11/Xos.h>
-#endif
-
 #ifndef GCC_UNUSED
 #define GCC_UNUSED /* nothing */
 #endif
@@ -59,7 +52,7 @@
 extern void free();
 #endif
 
-#if defined(HAVE_UNISTD_H)
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
Index: xterm.log.html
--- xterm-78/xterm.log.html     Fri Jun  5 16:23:53 1998
+++ xterm-79/xterm.log.html     Sun Jun 28 23:15:19 1998
@@ -41,6 +41,7 @@
 xc/programs/Xserver/hw/xfree86).
 
 <UL>
+<LI><A HREF="#xterm_79">Patch #79 - 1998/6/28 - XFree86 3.9Ai</A>
 <LI><A HREF="#xterm_78">Patch #78 - 1998/6/3 - XFree86 3.9Ah and 3.3.2</A>
 <LI><A HREF="#xterm_77">Patch #77 - 1998/5/26 - XFree86 3.9Ah and 3.3.2</A>
 <LI><A HREF="#xterm_76">Patch #76 - 1998/5/8 - XFree86 3.9Ah and 3.3.2</A>
@@ -120,6 +121,60 @@
 <LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
 <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
 </UL>
+
+<H1><A NAME="xterm_79">Patch #79 - 1998/6/28 - XFree86 3.9Ai</A></H1>
+
+This patch fixes several small bugs:
+<ul>
+       <li>use X_EXTRA_LIBS in standalone Makefile.in (patch by Tomas Vanhala).
+ 
+       <li>add new resource 'oldXtermFKeys' which provides backward compatibility
+         for F1-F4 control sequences with TOG's xterm.
+ 
+       <li>determine the server's default foreground/background Pixel values,
+         needed if the -flipPixels X server option is used (reported by
+         David Dawes).
+
+       <li>correct logic for F1-F4 function keys so that they generate VT100
+         compatible escape sequences in VT220 mode, since that is what the
+         numeric keypad is supposed to do (reported by Ron Johnson, Jr. 
+         &lt;ronjohn@communique.net&gt;).
+
+       <li>modify logic for editing keypad to work more like VT220: don't
+         pass those codes in VT100-mode unless oldXtermFKeys mode is set.
+
+       <li>correct an interaction with the editing-keypad logic that prevented
+         backarrow key from sending a 127 for the delete key (the 'remove'
+         escape sequence was being sent instead).
+
+       <li>use return-value from getutid() rather than the parameter, to work on
+         systems which do not update the latter (patch by Kevin Buhr
+         &lt;buhr@mozart.stat.wisc.edu&gt;)
+
+       <li>correct scrollbar border color when toggling to/from secure keyboard
+         mode (patch by Jeff Uphoff &lt;juphoff@tarsier.cv.nrao.edu&gt;)
+
+       <li>modifications to terminfo file:
+<ul>
+         <li>rename description to xterm-xfree86, adding an entry 'xterm'
+           which is derived from xterm-xfree86 to simplify customization.
+
+         <li>change string for kdch1 from \177 to \E[3~, to address complaints
+           from Debian developers.  (This applies to the key labeled "Delete",
+           and does not affect the backarrow key).
+
+         <li>add user-strings u6, u7, u8, u9 to entries to make them work with
+           Daniel Weaver's "tack" program.
+
+         <li>modify xterm-24, xterm-bold, xterm-boldso entries to disentangle them from
+           explicit dependency upon xterm-xfree86.
+
+         <li>add generic 'xterm-color' entry.
+
+         <li>minor corrections to xterm-xfree86, xterm-8bit, xterm-r5 and
+           xterm-r6 entries.
+</ul>
+</ul>
 
 <H1><A NAME="xterm_78">Patch #78 - 1998/6/3 - XFree86 3.9Ah and 3.3.2</A></H1>
 
Index: xterm.man
--- xterm-78/xterm.man  Fri Jun  5 16:23:53 1998
+++ xterm-79/xterm.man  Sun Jun 28 22:51:14 1998
@@ -957,12 +957,18 @@
 events.  The default is 250 milliseconds.
 .TP 8
 .B "multiScroll (\fPclass\fB MultiScroll)"
-Specifies whether or not scrolling should be done asynchronously.  The default
-is ``false.''
+Specifies whether or not scrolling should be done asynchronously.
+The default is ``false.''
 .TP 8
 .B "nMarginBell (\fPclass\fB Column)"
 Specifies the number of characters from the right margin at which the margin
 bell should be rung, when enabled.
+.TP 8
+.B "oldXtermFKeys (\fPclass\fB OldXtermFKeys)"
+If true, xterm will use old-style control sequences for function keys F1 to F4,
+for compatibility with X Consortium xterm.  Otherwise, it uses the VT100-style
+codes for PF1 to PF4.
+The default is ``false.''
 .TP 8
 .B "pointerColor (\fPclass\fB Foreground)"
 Specifies the foreground color of the pointer.  The default is