xterm-46.patch.txt

XFree86 3.9h - xterm patch #46 - T.Dickey <dickey@clark.net>
 
This is a patch to provide test-support for some work I'm doing on ncurses.  It
does not modify the normal configuration of xterm; the code is compiled if the
standalone configure option "--enable-xmc-glitch" is specified.
 
--------------------------------------------------------------------------------
 charproc.c         |   50 +++++++-
 configure          |  304 ++++++++++++++++++++++++++++-----------------------
 configure.in       |   21 ++-
 ptyx.h             |   22 +++
 screen.c           |    4 
 terminfo           |    9 +
 xterm-46/testxmc.c |  220 ++++++++++++++++++++++++++++++++++++
 xterm.h            |    8 +
 xtermcfg.hin       |    1 
 9 files changed, 494 insertions, 145 deletions
--------------------------------------------------------------------------------
Index: charproc.c
--- xterm-45+/charproc.c        Wed Jul  2 21:59:37 1997
+++ xterm-46/charproc.c Fri Jul  4 11:37:09 1997
@@ -135,11 +135,11 @@
 static void VTNonMaskableEvent PROTO_XT_EV_HANDLER_ARGS;
 static void VTallocbuf PROTO((void));
 static void VTparse PROTO((void));
+static void WriteText PROTO((TScreen *screen, Char *str, int len));
 static void ansi_modes PROTO((XtermWidget termw, void (*func)(unsigned *p, unsigned mask)));
 static void bitclr PROTO((unsigned *p, unsigned mask));
 static void bitcpy PROTO((unsigned *p, unsigned q, unsigned mask));
 static void bitset PROTO((unsigned *p, unsigned mask));
-static void dotext PROTO((TScreen *screen, int charset, Char *buf, Char *ptr));
 static void dpmodes PROTO((XtermWidget termw, void (*func)(unsigned *p, unsigned mask)));
 static void report_win_label PROTO((TScreen *screen, int code, XTextProperty *text, Status ok));
 static void restoremodes PROTO((XtermWidget termw));
@@ -180,6 +180,10 @@
 #define XtNcharClass "charClass"
 #define XtNcurses "curses"
 #define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
+#define XtNxmcGlitch "xmcGlitch"
+#define XtNxmcAttributes "xmcAttributes"
+#define XtNxmcInline "xmcInline"
+#define XtNxmcMoveSGR "xmcMoveSGR"
 #define XtNcursorColor "cursorColor"
 #define XtNcursorBlinkTime "cursorBlinkTime"
 #define XtNcutNewline "cutNewline"
@@ -258,6 +262,10 @@
 #define XtCCharClass "CharClass"
 #define XtCCurses "Curses"
 #define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
+#define XtCXmcGlitch "XmcGlitch"
+#define XtCXmcAttributes "XmcAttributes"
+#define XtCXmcInline "XmcInline"
+#define XtCXmcMoveSGR "XmcMoveSGR"
 #define XtCCutNewline "CutNewline"
 #define XtCCutToBeginningOfLine "CutToBeginningOfLine"
 #define XtCCursorBlinkTime "CursorBlinkTime"
@@ -460,6 +468,20 @@
 {XtNhpLowerleftBugCompat, XtCHpLowerleftBugCompat, XtRBoolean, sizeof(Boolean),
        XtOffsetOf(XtermWidgetRec, screen.hp_ll_bc),
        XtRBoolean, (XtPointer) &defaultFALSE},
+#if OPT_XMC_GLITCH
+{XtNxmcGlitch, XtCXmcGlitch, XtRInt, sizeof(int),
+       XtOffsetOf(XtermWidgetRec, screen.xmc_glitch),
+        XtRString, "0"},
+{XtNxmcAttributes, XtCXmcAttributes, XtRInt, sizeof(int),
+       XtOffsetOf(XtermWidgetRec, screen.xmc_attributes),
+        XtRString, "1"},
+{XtNxmcInline, XtCXmcInline, XtRBoolean, sizeof(Boolean),
+       XtOffsetOf(XtermWidgetRec, screen.xmc_inline),
+       XtRBoolean, (XtPointer) &defaultFALSE},
+{XtNxmcMoveSGR, XtCXmcMoveSGR, XtRBoolean, sizeof(Boolean),
+       XtOffsetOf(XtermWidgetRec, screen.move_sgr_ok),
+       XtRBoolean, (XtPointer) &defaultTRUE},
+#endif
 {XtNcutNewline, XtCCutNewline, XtRBoolean, sizeof(Boolean),
        XtOffsetOf(XtermWidgetRec, screen.cutNewline),
        XtRBoolean, (XtPointer) &defaultTRUE},
@@ -1214,6 +1236,9 @@
 
                 case CASE_CUP:
                        /* CUP | HVP */
+                       if_OPT_XMC_GLITCH(screen,{
+                               Jump_XMC(screen);
+                       })
                        if((row = param[0]) < 1)
                                row = 1;
                        if(nparam < 2 || (col = param[1]) < 1)
@@ -1417,6 +1442,9 @@
                 case CASE_SGR:
                        /* SGR */
                        for (row=0; row<nparam; ++row) {
+                               if_OPT_XMC_GLITCH(screen,{
+                                       Mark_XMC(screen,param[row]);
+                               })
                                switch (param[row]) {
                                 case DEFAULT:
                                 case 0:
@@ -2335,7 +2363,7 @@
  * process a string of characters according to the character set indicated
  * by charset.  worry about end of line conditions (wraparound if selected).
  */
-static void
+void
 dotext(screen, charset, buf, ptr)
     register TScreen   *screen;
     char       charset;
@@ -2354,6 +2382,9 @@
                                *s = '\036';    /* UK pound sign*/
                break;
 
+#if OPT_XMC_GLITCH
+       case '?':
+#endif
        case '1':       /* Alternate Character ROM standard characters */
        case '2':       /* Alternate Character ROM special graphics */
        case 'B':       /* ASCII set                            */
@@ -2369,6 +2400,13 @@
                return;
        }
 
+       if_OPT_XMC_GLITCH(screen,{
+               if (charset != '?')
+                       for (s=buf; s<ptr; ++s)
+                               if (*s == XMC_GLITCH)
+                                       *s = XMC_GLITCH+1;
+       })
+
        len = ptr - buf; 
        ptr = buf;
        while (len > 0) {
@@ -2417,7 +2455,7 @@
        unsigned bg     = term->cur_background;
        GC      currentGC;
  
-       TRACE(("write (%2d,%2d) (%d) %3d:%.*s\n",
+       TRACE(("WriteText (%2d,%2d) (%d) %3d:%.*s\n",
                screen->cur_row,
                screen->cur_col,
                curXtermChrSet(screen->cur_row),
@@ -3413,6 +3451,12 @@
    new->screen.c132 = request->screen.c132;
    new->screen.curses = request->screen.curses;
    new->screen.hp_ll_bc = request->screen.hp_ll_bc;
+#if OPT_XMC_GLITCH
+   new->screen.xmc_glitch = request->screen.xmc_glitch;
+   new->screen.xmc_attributes = request->screen.xmc_attributes;
+   new->screen.xmc_inline = request->screen.xmc_inline;
+   new->screen.move_sgr_ok = request->screen.move_sgr_ok;
+#endif
    new->screen.foreground = request->screen.foreground;
    new->screen.cursorcolor = request->screen.cursorcolor;
 #if OPT_BLINK_CURS
Index: configure
--- xterm-45+/configure Mon Jun 30 08:51:00 1997
+++ xterm-46/configure  Fri Jul  4 08:32:58 1997
@@ -24,15 +24,17 @@
 ac_help="$ac_help
   --disable-16-color      disable 16-color support (default: on)"
 ac_help="$ac_help
-  --enable-color-mode     set default colorMode resource  (default: off)"
+  --enable-color-mode     set default colorMode resource (default: off)"
 ac_help="$ac_help
-  --disable-doublechars   disable support for double-size characters (default: on)"
+  --disable-doublechars   disable support for double-size chars (default: on)"
 ac_help="$ac_help
-  --enable-trace          set to enable debugging traces (default: off)"
+  --enable-trace          test: set to enable debugging traces (default: off)"
 ac_help="$ac_help
   --disable-vt52          disable VT52 emulation (default: on)"
 ac_help="$ac_help
-  --enable-warnings       turn on GCC compiler warnings (default: off)"
+  --enable-xmc-glitch     test: enable xmc magic-cookie emulation (default: off)"
+ac_help="$ac_help
+  --enable-warnings       test: turn on GCC compiler warnings (default: off)"
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -570,7 +572,7 @@
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:574: checking for $ac_word" >&5
+echo "configure:576: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -599,7 +601,7 @@
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:603: checking for $ac_word" >&5
+echo "configure:605: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -647,7 +649,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:651: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:653: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -657,11 +659,11 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 661 "configure"
+#line 663 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -681,12 +683,12 @@
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:685: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:687: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:690: checking whether we are using GNU C" >&5
+echo "configure:692: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -695,7 +697,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:699: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -710,7 +712,7 @@
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:714: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:716: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -738,7 +740,7 @@
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:742: checking how to run the C preprocessor" >&5
+echo "configure:744: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -753,13 +755,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 757 "configure"
+#line 759 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:763: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -770,13 +772,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 774 "configure"
+#line 776 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:780: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -800,13 +802,13 @@
 
 if test $ac_cv_prog_gcc = yes; then
     echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:804: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:806: checking whether ${CC-cc} needs -traditional" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     ac_pattern="Autoconf.*'x'"
   cat > conftest.$ac_ext <<EOF
-#line 810 "configure"
+#line 812 "configure"
 #include "confdefs.h"
 #include <sgtty.h>
 Autoconf TIOCGETP
@@ -824,7 +826,7 @@
 
   if test $ac_cv_prog_gcc_traditional = no; then
     cat > conftest.$ac_ext <<EOF
-#line 828 "configure"
+#line 830 "configure"
 #include "confdefs.h"
 #include <termio.h>
 Autoconf TCGETA
@@ -875,7 +877,7 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:879: checking for a BSD compatible install" >&5
+echo "configure:881: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -927,9 +929,9 @@
 
 ###    checks for UNIX variants that set C preprocessor variables
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:931: checking for AIX" >&5
+echo "configure:933: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 933 "configure"
+#line 935 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -951,7 +953,7 @@
 
 
 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:955: checking for POSIXized ISC" >&5
+echo "configure:957: checking for POSIXized ISC" >&5
 if test -d /etc/conf/kconfig.d &&
   grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
 then
@@ -973,17 +975,17 @@
 
 ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
-echo "configure:977: checking for minix/config.h" >&5
+echo "configure:979: checking for minix/config.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 982 "configure"
+#line 984 "configure"
 #include "confdefs.h"
 #include <minix/config.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1025,12 +1027,12 @@
 
 ###    checks for typedefs
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1029: checking for ANSI C header files" >&5
+echo "configure:1031: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1034 "configure"
+#line 1036 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1038,7 +1040,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1042: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1044: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1055,7 +1057,7 @@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1059 "configure"
+#line 1061 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1073,7 +1075,7 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1077 "configure"
+#line 1079 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1094,7 +1096,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1098 "configure"
+#line 1100 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1105,7 +1107,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:1109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -1129,12 +1131,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1133: checking for size_t" >&5
+echo "configure:1135: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1138 "configure"
+#line 1140 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1162,12 +1164,12 @@
 fi
 
 echo $ac_n "checking for time_t""... $ac_c" 1>&6
-echo "configure:1166: checking for time_t" >&5
+echo "configure:1168: checking for time_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_time_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1171 "configure"
+#line 1173 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1203,12 +1205,12 @@
        
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1207: checking for $ac_func" >&5
+echo "configure:1209: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1212 "configure"
+#line 1214 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1231,7 +1233,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:1235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1259,7 +1261,7 @@
 if test ".$ac_cv_func_memmove" != .yes ; then
        if test $ac_cv_func_bcopy = yes ; then
                echo $ac_n "checking if bcopy does overlapping moves""... $ac_c" 1>&6
-echo "configure:1263: checking if bcopy does overlapping moves" >&5
+echo "configure:1265: checking if bcopy does overlapping moves" >&5
                if eval "test \"`echo '$''{'cf_cv_good_bcopy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1268,7 +1270,7 @@
   cf_cv_good_bcopy=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 1272 "configure"
+#line 1274 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1281,7 +1283,7 @@
 }
                
 EOF
-if { (eval echo configure:1285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   cf_cv_good_bcopy=yes
 else
@@ -1315,7 +1317,7 @@
 
 
 echo $ac_n "checking for workable tgetent function""... $ac_c" 1>&6
-echo "configure:1319: checking for workable tgetent function" >&5
+echo "configure:1321: checking for workable tgetent function" >&5
 if eval "test \"`echo '$''{'cf_cv_func_tgetent'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1331,7 +1333,7 @@
         cf_cv_func_tgetent=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 1335 "configure"
+#line 1337 "configure"
 #include "confdefs.h"
 
 /* terminfo implementations ignore the buffer argument, making it useless for
@@ -1344,7 +1346,7 @@
        tgetent(buffer, "vt100");
        exit(buffer[0] == 0); }
 EOF
-if { (eval echo configure:1348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   echo "yes, there is a termcap/tgetent present" 1>&5
         cf_cv_func_tgetent=yes
@@ -1365,14 +1367,14 @@
        for cf_termlib in $cf_TERMLIB
        do
                cat > conftest.$ac_ext <<EOF
-#line 1369 "configure"
+#line 1371 "configure"
 #include "confdefs.h"
 
 int main() {
 tgetent(0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:1376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   echo "there is a terminfo/tgetent present" 1>&5
                         cf_cv_func_tgetent=$cf_termlib
@@ -1398,17 +1400,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1402: checking for $ac_hdr" >&5
+echo "configure:1404: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1407 "configure"
+#line 1409 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1412: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1447,12 +1449,12 @@
 
 ###    checks for compiler characteristics
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1451: checking for working const" >&5
+echo "configure:1453: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1456 "configure"
+#line 1458 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1501,7 +1503,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:1505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -1522,7 +1524,7 @@
 fi
 
 echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
-echo "configure:1526: checking for ${CC-cc} option to accept ANSI C" >&5
+echo "configure:1528: checking for ${CC-cc} option to accept ANSI C" >&5
 if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1539,7 +1541,7 @@
 do
        CFLAGS="$cf_save_CFLAGS $cf_arg"
        cat > conftest.$ac_ext <<EOF
-#line 1543 "configure"
+#line 1545 "configure"
 #include "confdefs.h"
 
 #ifndef CC_HAS_PROTOS
@@ -1554,7 +1556,7 @@
 struct s2 {int (*f) (double a);};
 ; return 0; }
 EOF
-if { (eval echo configure:1558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1560: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ansi_cc="$cf_arg"; break
 else
@@ -1581,7 +1583,7 @@
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:1585: checking for X" >&5
+echo "configure:1587: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -1643,12 +1645,12 @@
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 1647 "configure"
+#line 1649 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1717,14 +1719,14 @@
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1721 "configure"
+#line 1723 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:1728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -1830,17 +1832,17 @@
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:1834: checking whether -R must be followed by a space" >&5
+echo "configure:1836: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 1837 "configure"
+#line 1839 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -1856,14 +1858,14 @@
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 1860 "configure"
+#line 1862 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -1895,7 +1897,7 @@
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:1899: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:1901: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1903,7 +1905,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1907 "configure"
+#line 1909 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1914,7 +1916,7 @@
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:1918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1936,7 +1938,7 @@
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:1940: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:1942: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1944,7 +1946,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1948 "configure"
+#line 1950 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1955,7 +1957,7 @@
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1984,12 +1986,12 @@
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:1988: checking for gethostbyname" >&5
+echo "configure:1990: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1993 "configure"
+#line 1995 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -2012,7 +2014,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -2033,7 +2035,7 @@
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2037: checking for gethostbyname in -lnsl" >&5
+echo "configure:2039: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2041,7 +2043,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2045 "configure"
+#line 2047 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2052,7 +2054,7 @@
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2082,12 +2084,12 @@
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:2086: checking for connect" >&5
+echo "configure:2088: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2091 "configure"
+#line 2093 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -2110,7 +2112,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -2131,7 +2133,7 @@
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:2135: checking for connect in -lsocket" >&5
+echo "configure:2137: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2139,7 +2141,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2143 "configure"
+#line 2145 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2150,7 +2152,7 @@
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:2154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2174,12 +2176,12 @@
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:2178: checking for remove" >&5
+echo "configure:2180: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2183 "configure"
+#line 2185 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -2202,7 +2204,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -2223,7 +2225,7 @@
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:2227: checking for remove in -lposix" >&5
+echo "configure:2229: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2231,7 +2233,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2235 "configure"
+#line 2237 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2242,7 +2244,7 @@
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:2246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2266,12 +2268,12 @@
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:2270: checking for shmat" >&5
+echo "configure:2272: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2275 "configure"
+#line 2277 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -2294,7 +2296,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -2315,7 +2317,7 @@
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:2319: checking for shmat in -lipc" >&5
+echo "configure:2321: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2323,7 +2325,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2327 "configure"
+#line 2329 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2334,7 +2336,7 @@
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:2338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2367,7 +2369,7 @@
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:2371: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:2373: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2375,7 +2377,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lICE  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2379 "configure"
+#line 2381 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2386,7 +2388,7 @@
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:2390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2416,7 +2418,7 @@
 
 
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:2420: checking for XOpenDisplay in -lX11" >&5
+echo "configure:2422: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2424,7 +2426,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2428 "configure"
+#line 2430 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2435,7 +2437,7 @@
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:2439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2456,7 +2458,7 @@
 fi
 
 echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
-echo "configure:2460: checking for XtAppInitialize in -lXt" >&5
+echo "configure:2462: checking for XtAppInitialize in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtAppInitialize | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2464,7 +2466,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2468 "configure"
+#line 2470 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2475,7 +2477,7 @@
 XtAppInitialize()
 ; return 0; }
 EOF
-if { (eval echo configure:2479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2507,17 +2509,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2511: checking for $ac_hdr" >&5
+echo "configure:2513: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2516 "configure"
+#line 2518 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2544,7 +2546,7 @@
 done
 
 echo $ac_n "checking for XmuClientWindow in -lXmu""... $ac_c" 1>&6
-echo "configure:2548: checking for XmuClientWindow in -lXmu" >&5
+echo "configure:2550: checking for XmuClientWindow in -lXmu" >&5
 ac_lib_var=`echo Xmu'_'XmuClientWindow | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2552,7 +2554,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXmu  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2556 "configure"
+#line 2558 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2563,7 +2565,7 @@
 XmuClientWindow()
 ; return 0; }
 EOF
-if { (eval echo configure:2567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2591,7 +2593,7 @@
 fi
 
 echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
-echo "configure:2595: checking for XextCreateExtension in -lXext" >&5
+echo "configure:2597: checking for XextCreateExtension in -lXext" >&5
 ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2599,7 +2601,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXext  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2603 "configure"
+#line 2605 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2610,7 +2612,7 @@
 XextCreateExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:2614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2631,7 +2633,7 @@
 fi
 
 echo $ac_n "checking for XawSimpleMenuAddGlobalActions in -lXaw""... $ac_c" 1>&6
-echo "configure:2635: checking for XawSimpleMenuAddGlobalActions in -lXaw" >&5
+echo "configure:2637: checking for XawSimpleMenuAddGlobalActions in -lXaw" >&5
 ac_lib_var=`echo Xaw'_'XawSimpleMenuAddGlobalActions | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2639,7 +2641,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXaw $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2643 "configure"
+#line 2645 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2650,7 +2652,7 @@
 XawSimpleMenuAddGlobalActions()
 ; return 0; }
 EOF
-if { (eval echo configure:2654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2677,7 +2679,7 @@
 LIBS="$LIBS $X_EXTRA_LIBS"
 
 echo $ac_n "checking if we should use imake to help""... $ac_c" 1>&6
-echo "configure:2681: checking if we should use imake to help" >&5
+echo "configure:2683: checking if we should use imake to help" >&5
 # Check whether --enable-imake or --disable-imake was given.
 if test "${enable_imake+set}" = set; then
   enableval="$enable_imake"
@@ -2702,7 +2704,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2706: checking for $ac_word" >&5
+echo "configure:2708: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_IMAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2780,7 +2782,7 @@
 # macros do not work well enough to actually use the Makefile for a build, but
 # the definitions are usable (probably).
 echo $ac_n "checking for compiler options known to imake""... $ac_c" 1>&6
-echo "configure:2784: checking for compiler options known to imake" >&5
+echo "configure:2786: checking for compiler options known to imake" >&5
 if eval "test \"`echo '$''{'cf_cv_imake_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2826,7 +2828,7 @@
 
 
 echo $ac_n "checking for default terminal-id""... $ac_c" 1>&6
-echo "configure:2830: checking for default terminal-id" >&5
+echo "configure:2832: checking for default terminal-id" >&5
 # Check whether --with-terminal-id or --without-terminal-id was given.
 if test "${with_terminal_id+set}" = set; then
   withval="$with_terminal_id"
@@ -2847,7 +2849,7 @@
 
 ###    checks for optional features
 echo $ac_n "checking if you want ANSI color""... $ac_c" 1>&6
-echo "configure:2851: checking if you want ANSI color" >&5
+echo "configure:2853: 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
   enableval="$enable_ansi_color"
@@ -2870,7 +2872,7 @@
 
 
 echo $ac_n "checking if you want 16 colors like aixterm""... $ac_c" 1>&6
-echo "configure:2874: checking if you want 16 colors like aixterm" >&5
+echo "configure:2876: 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
   enableval="$enable_16_color"
@@ -2893,7 +2895,7 @@
 
 
 echo $ac_n "checking for default color-mode""... $ac_c" 1>&6
-echo "configure:2897: checking for default color-mode" >&5
+echo "configure:2899: checking for default color-mode" >&5
 # Check whether --enable-color-mode or --disable-color-mode was given.
 if test "${enable_color_mode+set}" = set; then
   enableval="$enable_color_mode"
@@ -2916,7 +2918,7 @@
 
 
 echo $ac_n "checking for doublesize characters""... $ac_c" 1>&6
-echo "configure:2920: checking for doublesize characters" >&5
+echo "configure:2922: checking for doublesize characters" >&5
 # Check whether --enable-doublechars or --disable-doublechars was given.
 if test "${enable_doublechars+set}" = set; then
   enableval="$enable_doublechars"
@@ -2939,7 +2941,7 @@
 
 
 echo $ac_n "checking if you want debugging traces""... $ac_c" 1>&6
-echo "configure:2943: checking if you want debugging traces" >&5
+echo "configure:2945: checking if you want debugging traces" >&5
 # Check whether --enable-trace or --disable-trace was given.
 if test "${enable_trace+set}" = set; then
   enableval="$enable_trace"
@@ -2966,7 +2968,7 @@
 fi
 
 echo $ac_n "checking if you want VT52 emulation""... $ac_c" 1>&6
-echo "configure:2970: checking if you want VT52 emulation" >&5
+echo "configure:2972: checking if you want VT52 emulation" >&5
 # Check whether --enable-vt52 or --disable-vt52 was given.
 if test "${enable_vt52+set}" = set; then
   enableval="$enable_vt52"
@@ -2988,9 +2990,37 @@
 EOF
 
 
+# this is only for testing purposes
+echo $ac_n "checking if you want magic cookie emulation""... $ac_c" 1>&6
+echo "configure:2996: 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
+  enableval="$enable_xmc_glitch"
+  test "$enableval" != yes && enableval=no
+  if test "$enableval" != "no" ; then
+    enable_xmc=yes 
+  else
+    enable_xmc=no
+  fi
+else
+  enableval=no 
+  enable_xmc=no
+  
+fi
+
+echo "$ac_t""$enable_xmc" 1>&6
+if test $enable_xmc = yes ; then
+       cat >> confdefs.h <<\EOF
+#define OPT_XMC_GLITCH 1
+EOF
+
+       EXTRASRCS="$EXTRASRCS testxmc.c"
+       EXTRAOBJS="$EXTRAOBJS testxmc.o"
+fi
+
 if test -n "$GCC" ; then
 echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
-echo "configure:2994: checking if you want to turn on gcc warnings" >&5
+echo "configure:3024: 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
   enableval="$enable_warnings"
@@ -3029,9 +3059,9 @@
 if test -n "$GCC"
 then
        echo "checking for gcc __attribute__ directives" 1>&6
-echo "configure:3033: checking for gcc __attribute__ directives" >&5
+echo "configure:3063: checking for gcc __attribute__ directives" >&5
        cat > conftest.$ac_ext <<EOF
-#line 3035 "configure"
+#line 3065 "configure"
 #include "confdefs.h"
 #include "conftest.h"
 #include "conftest.i"
@@ -3069,7 +3099,7 @@
 EOF
                        ;;
                esac
-               if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+               if { (eval echo configure:3103: \"$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
@@ -3083,11 +3113,11 @@
 
 
                cat > conftest.$ac_ext <<EOF
-#line 3087 "configure"
+#line 3117 "configure"
 int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
 EOF
                echo "checking for gcc warning options" 1>&6
-echo "configure:3091: checking for gcc warning options" >&5
+echo "configure:3121: checking for gcc warning options" >&5
        cf_save_CFLAGS="$CFLAGS"
        cf_warn_CFLAGS="-W -Wall"
        for cf_opt in \
@@ -3103,7 +3133,7 @@
                Wstrict-prototypes
        do
                CFLAGS="$cf_save_CFLAGS $cf_warn_CFLAGS -$cf_opt"
-               if { (eval echo configure:3107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+               if { (eval echo configure:3137: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
                        test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
                        cf_warn_CFLAGS="$cf_warn_CFLAGS -$cf_opt"
                        test "$cf_opt" = Wcast-qual && cf_warn_CFLAGS="$cf_warn_CFLAGS -DXTSTRINGDEFINES"
Index: configure.in
--- xterm-45+/configure.in      Mon Jun 30 08:51:00 1997
+++ xterm-46/configure.in       Fri Jul  4 08:32:58 1997
@@ -118,7 +118,7 @@
 
 AC_MSG_CHECKING(for default color-mode)
 CF_ARG_ENABLE(color-mode,
-       [  --enable-color-mode     set default colorMode resource ],
+       [  --enable-color-mode     set default colorMode resource],
        [default_colormode=TRUE],
        [default_colormode=FALSE])
 AC_MSG_RESULT($default_colormode)
@@ -126,7 +126,7 @@
 
 AC_MSG_CHECKING(for doublesize characters)
 CF_ARG_DISABLE(doublechars,
-       [  --disable-doublechars   disable support for double-size characters],
+       [  --disable-doublechars   disable support for double-size chars],
        [enable_doublechars=no],
        [enable_doublechars=yes])
 AC_MSG_RESULT($enable_doublechars)
@@ -134,7 +134,7 @@
 
 AC_MSG_CHECKING(if you want debugging traces)
 CF_ARG_ENABLE(trace,
-       [  --enable-trace          set to enable debugging traces],
+       [  --enable-trace          test: set to enable debugging traces],
        [enable_trace=yes],
        [enable_trace=no])
 AC_MSG_RESULT($enable_trace)
@@ -152,10 +152,23 @@
 AC_MSG_RESULT($enable_vt52)
 test $enable_vt52 = no && AC_DEFINE(OPT_VT52_MODE,0)
 
+# this is only for testing purposes
+AC_MSG_CHECKING(if you want magic cookie emulation)
+CF_ARG_ENABLE(xmc-glitch,
+       [  --enable-xmc-glitch     test: enable xmc magic-cookie emulation],
+       [enable_xmc=yes],
+       [enable_xmc=no])
+AC_MSG_RESULT($enable_xmc)
+if test $enable_xmc = yes ; then
+       AC_DEFINE(OPT_XMC_GLITCH,1)
+       EXTRASRCS="$EXTRASRCS testxmc.c"
+       EXTRAOBJS="$EXTRAOBJS testxmc.o"
+fi
+
 if test -n "$GCC" ; then
 AC_MSG_CHECKING(if you want to turn on gcc warnings)
 CF_ARG_ENABLE(warnings,
-       [  --enable-warnings       turn on GCC compiler warnings],
+       [  --enable-warnings       test: turn on GCC compiler warnings],
        [with_warnings=yes],
        [with_warnings=no])
 AC_MSG_RESULT($with_warnings)
Index: ptyx.h
--- xterm-45+/ptyx.h    Mon Jun 30 08:51:00 1997
+++ xterm-46/ptyx.h     Fri Jul  4 09:32:11 1997
@@ -310,6 +310,10 @@
 #define OPT_VT52_MODE   1 /* true if xterm supports VT52 emulation */
 #endif
 
+#ifndef OPT_XMC_GLITCH
+#define OPT_XMC_GLITCH 0 /* true if xterm supports xmc (magic cookie glitch) */
+#endif
+
 /***====================================================================***/
 
 #if OPT_AIX_COLORS && !OPT_ISO_COLORS
@@ -411,6 +415,16 @@
 
 /***====================================================================***/
 
+#if OPT_XMC_GLITCH
+#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
+#define XMC_GLITCH 1   /* the character we'll show */
+#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD)
+#else
+#define if_OPT_XMC_GLITCH(screen, code) /* nothing */
+#endif
+
+/***====================================================================***/
+
        /* ScrnBuf-level macros */
 #define BUF_CHARS(buf, row) (buf[MAX_PTRS * (row) + 0])
 #define BUF_ATTRS(buf, row) (buf[MAX_PTRS * (row) + 1])
@@ -577,6 +591,14 @@
        Boolean         jumpscroll;     /* whether we should jumpscroll */
        Boolean         always_highlight; /* whether to highlight cursor */
        Boolean         underline;      /* whether to underline text    */
+
+       /* Testing */
+#if OPT_XMC_GLITCH
+       int             xmc_glitch;     /* # of spaces to pad on SGR's  */
+       int             xmc_attributes; /* attrs that make a glitch     */
+       Boolean         xmc_inline;     /* SGR's propagate only to eol  */
+       Boolean         move_sgr_ok;    /* SGR is reset on move         */
+#endif
 
 /* Tektronix window parameters */
        GC              TnormalGC;      /* normal painting              */
Index: screen.c
--- xterm-45+/screen.c  Mon Jun 30 08:51:00 1997
+++ xterm-46/screen.c   Fri Jul  4 11:37:04 1997
@@ -258,6 +258,10 @@
 
        if (wrappedbit)
            *attrs |= LINEWRAPPED;
+
+       if_OPT_XMC_GLITCH(screen,{
+               Resolve_XMC(screen);
+       })
 }
 
 static void
Index: terminfo
--- xterm-45+/terminfo  Tue Jun  3 16:05:50 1997
+++ xterm-46/terminfo   Fri Jul  4 08:32:58 1997
@@ -164,6 +164,15 @@
        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,
+       xmc#1,
+       use=xterm,
+#
+# This one also is primarily for testing ncurses; while the ISO 6429 defines
+# the REP control, none of the DEC VTxxx terminals (VT52 through VT420) support
+# it.
 xterm-rep|xterm with repeat-character control,
        rep=%p1%c\E[%p2%{1}%-%db,
        use=xterm,
Index: testxmc.c
--- /dev/null   Sun Jul 17 19:46:18 1994
+++ xterm-46/testxmc.c  Fri Jul  4 11:37:17 1997
@@ -0,0 +1,220 @@
+/*
+ * $XFree86$
+ */
+
+/************************************************************
+
+Copyright 1997 by Thomas E. Dickey <dickey@clark.net>
+
+                        All Rights Reserved
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name(s) of the above copyright
+holders shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without prior written
+authorization.
+
+********************************************************/
+
+/*
+ * This module provides test support for curses applications that must work
+ * with terminals that have the xmc (magic cookie) glitch.  The xmc_glitch
+ * resource denotes the number of spaces that are emitted when switching to or
+ * from standout (reverse) mode.  Some terminals implement this by storing the
+ * attribute controls in the character cell that is skipped.  So if the cell is
+ * overwritten by text, then the attribute change in the cell is cancelled,
+ * causing attributes to the left of the change to propagate.
+ *
+ * We implement the glitch by writing a character that won't be mistaken for
+ * other normal characters (and mapping normal writes to that character to a
+ * different one).
+ *
+ * Since xmc isn't normally part of xterm, we document it here rather than in
+ * the man-page.  This module is driven by resources rather than by the
+ * termcap/terminfo description to make it a little more flexible for testing
+ * purposes.
+ *
+ * Resources:
+ *
+ * xmcGlitch (class XmcGlitch)
+ *     When true, enables this extension.  The default is `0', which disables
+ *     the module.  (termcap sg, terminfo xmc).
+ *
+ * xmcAttributes (class XmcAttributes)
+ *     The attributes for which we'll generate a glitch, as a bitmask.
+ *
+ *             INVERSE         1
+ *             UNDERLINE       2
+ *             BOLD            4
+ *
+ *     The default is `1' (INVERSE).  Some terminals emit glitches for
+ *     underline.
+ *
+ * xmcInline (class XmcInline)
+ *     When true, limits the extent of an SGR change to the current line.
+ *     The default is `false'.  (No termcap or terminfo equivalent, though
+ *     there are comments in some entries relating to this issue).
+ *
+ * xmcMoveSGR (class XmcMoveSGR)
+ *     When false, a cursor movement will leave a glitch when SGR's are
+ *     active.  The default is `true'.  (termcap ms, terminfo msgr).
+ *
+ * TODO:
+ *     When xmc is active, the terminfo max_attributes (ma) capability is
+ *     assumed to be 1.
+ *
+ *     The xmcAttributes resource should also apply to alternate character
+ *     sets and to color.
+ */
+#ifdef HAVE_CONFIG_H
+#include <xtermcfg.h>
+#endif
+
+#include <X11/Xos.h>
+
+#ifndef X_NOT_STDC_ENV
+#include <stdlib.h>
+#else
+extern char *malloc();
+#endif
+
+#include "ptyx.h"
+#include "data.h"
+#include "xterm.h"
+
+#define MARK_ON(a)  (my_attrs & a) != 0 && (term->flags & (whichone = a)) == 0
+#define MARK_OFF(a) (my_attrs & a) != 0 && (term->flags & (whichone = a)) != 0
+
+void Mark_XMC(register TScreen *screen, int param)
+{
+       static Char *glitch;
+       Boolean found = FALSE;
+       Char my_attrs = (screen->xmc_attributes & XMC_FLAGS);
+       Char whichone = 0;
+
+       if (glitch == 0) {
+               glitch = malloc(screen->xmc_glitch);
+               memset(glitch, XMC_GLITCH, screen->xmc_glitch);
+       }
+       switch (param) {
+       case -1:/* DEFAULT */
+       case 0: /* FALLTHRU */
+               found = MARK_OFF(XMC_FLAGS);
+               break;
+       case 1:
+               found = MARK_ON(BOLD);
+               break;
+       case 4:
+               found = MARK_ON(UNDERLINE);
+               break;
+       case 7:
+               found = MARK_ON(INVERSE);
+               break;
+       case 22:
+               found = MARK_OFF(BOLD);
+               break;
+       case 24:
+               found = MARK_OFF(UNDERLINE);
+               break;
+       case 27:
+               found = MARK_OFF(INVERSE);
+               break;
+       }
+
+       /*
+        * Write a glitch with the attributes temporarily set to the new(er)
+        * ones.
+        */
+       if (found) {
+               unsigned save = term->flags;
+               term->flags ^= whichone;
+               TRACE(("XMC Writing glitch (%d/%d)\n", my_attrs, whichone))
+               dotext(screen, '?', glitch, glitch + screen->xmc_glitch);
+               term->flags = save;
+       }
+}
+
+/*
+ * Force a glitch on cursor movement when we're in standout mode and not at the
+ * end of a line.
+ */
+void Jump_XMC(register TScreen *screen)
+{
+       if (!screen->move_sgr_ok
+        && screen->cur_col <= CurMaxCol(screen, screen->cur_row)) {
+               Mark_XMC(screen, -1);
+       }
+}
+
+/*
+ * After writing text to the screen, resolve mismatch between the current
+ * location and any attributes that would have been set by preceding locations.
+ */
+void Resolve_XMC(register TScreen *screen)
+{
+       Boolean changed = False;
+       Char start;
+       Char my_attrs = (screen->xmc_attributes & XMC_FLAGS);
+       int row = screen->cur_row;
+       int col = screen->cur_col;
+
+       /* Find the preceding cell.
+        */
+       if (SCRN_BUF_CHARS(screen, row)[col] != XMC_GLITCH) {
+               if (col != 0) {
+                       col--;
+               } else if (!screen->xmc_inline && row != 0) {
+                       row--;
+                       col = CurMaxCol(screen, row);
+               }
+       }
+       start = (SCRN_BUF_ATTRS(screen, row)[col] & my_attrs);
+
+       /* Now propagate the starting state until we reach a cell which holds
+        * a glitch.
+        */
+       for (;;) {
+               if (col < CurMaxCol(screen, row)) {
+                       col++;
+               } else if (!screen->xmc_inline && row < screen->max_row) {
+                       row++;
+                       col = 0;
+               } else
+                       break;
+               if (SCRN_BUF_CHARS(screen, row)[col] == XMC_GLITCH)
+                       break;
+               if ((SCRN_BUF_ATTRS(screen, row)[col] & my_attrs) != start) {
+                       SCRN_BUF_ATTRS(screen, row)[col] = start |
+                               (SCRN_BUF_ATTRS(screen, row)[col] & ~my_attrs);
+                       changed = True;
+               }
+       }
+
+       TRACE(("XMC %s (%s:%d/%d) from %d,%d to %d,%d\n",
+               changed ? "Ripple" : "Nochange",
+               term->flags & my_attrs ? "on" : "off",
+               my_attrs, start,
+               screen->cur_row, screen->cur_col, row, col))
+
+       if (changed) {
+               ScrnRefresh (screen, screen->cur_row, 0, row + 1 - screen->cur_row, screen->max_col + 1, True);
+       }
+}
Index: xterm.h
--- xterm-45+/xterm.h   Mon Jun 30 08:51:00 1997
+++ xterm-46/xterm.h    Fri Jul  4 10:49:22 1997
@@ -53,7 +53,7 @@
 extern void SwitchBufPtrs PROTO((TScreen *screen));
 extern void VTReset PROTO((int full));
 extern void VTRun PROTO((void));
-extern void WriteText PROTO(( TScreen *screen, Char *str, int len));
+extern void dotext PROTO((TScreen *screen, int charset, Char *buf, Char *ptr));
 extern void set_cursor_gcs PROTO((TScreen *screen));
 extern void unparseputc1 PROTO((int c, int fd));
 extern void unparseputc PROTO((int c, int fd));
@@ -247,6 +247,12 @@
 #else
 #define getXtermChrSet(row, col) 0
 #define curXtermChrSet(row) 0
+#endif
+
+#if OPT_XMC_GLITCH
+extern void Mark_XMC PROTO((TScreen *screen, int param));
+extern void Jump_XMC PROTO((TScreen *screen));
+extern void Resolve_XMC PROTO((TScreen *screen));
 #endif
 
 #endif /* included_xterm_h */
Index: xtermcfg.hin
--- xterm-45+/xtermcfg.hin      Mon Jun 30 08:51:00 1997
+++ xterm-46/xtermcfg.hin       Fri Jul  4 08:32:58 1997
@@ -39,6 +39,7 @@
 #undef OPT_ISO_COLORS  /* CF_ARG_DISABLE(ansi-color) */
 #undef OPT_TRACE       /* CF_ARG_ENABLE(trace) */
 #undef OPT_VT52_MODE   /* CF_ARG_DISABLE(vt52) */
+#undef OPT_XMC_GLITCH  /* CF_ARG_ENABLE(xmc-glitch) */
 #undef USE_MY_MEMMOVE  /* CF_FUNC_MEMMOVE */
 #undef USE_OK_BCOPY    /* CF_FUNC_MEMMOVE */
 #undef USE_TERMINFO    /* CF_FUNC_TGETENT */