patch 9.1.0321: Garbled output on serial terminals with XON/XOFF flow control

Problem:  When used terminal with XON/XOFF flow control, vim tries to
          still make CTRL-S mapping available, which results in severe
          screen corruption, especially on large redraws, and even
          spurious inputs (John Tsiombikas)
Solution: Disallow CTRL-S mapping if such terminal is recognized.
          Don't remove IXON from the bitmask inversion.
          (Anton Sharonov)

*** When started like this:

    TERM=vt420 vim

:set termcap

    shows "t_xon=y"

map <C-S> :echo "abc"<CR>

    does nothing (after <C-S> output freezes and subsequent <C-Q>
    unfreezes it)

*** When started like this:

    TERM=xterm vim

:set termcap

    shows "t_xon="

map <C-S> :echo "abc"<CR>

    works (after <C-S> one see "abc" string echo-ed)

fixes: #12674
closes: #14542

Signed-off-by: Anton Sharonov <anton.sharonov@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/termdefs.h b/src/termdefs.h
index f28fd19..2b65abb 100644
--- a/src/termdefs.h
+++ b/src/termdefs.h
@@ -115,10 +115,11 @@
     KS_SRI,	// restore icon text
     KS_FD,	// disable focus event tracking
     KS_FE,	// enable focus event tracking
-    KS_CF	// set terminal alternate font
+    KS_CF,	// set terminal alternate font
+    KS_XON	// terminal uses xon/xoff handshaking
 };
 
-#define KS_LAST	    KS_CF
+#define KS_LAST	    KS_XON
 
 /*
  * the terminal capabilities are stored in this array
@@ -224,6 +225,7 @@
 #define T_SRI	(TERM_STR(KS_SRI))	// restore icon text
 #define T_FD	(TERM_STR(KS_FD))	// disable focus event tracking
 #define T_FE	(TERM_STR(KS_FE))	// enable focus event tracking
+#define T_XON	(TERM_STR(KS_XON))	// terminal uses xon/xoff handshaking
 
 typedef enum {
     TMODE_COOK,	    // terminal mode for external cmds and Ex mode