]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tty/tty_update.c
ncurses 6.1 - patch 20190302
[ncurses.git] / ncurses / tty / tty_update.c
index fd35c47beb2e2bdd174f365736f70e04ab35ff46..b86dfe4eb9f8f414030177abee3ecad45723a60a 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2018,2019 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -84,7 +84,7 @@
 
 #include <ctype.h>
 
-MODULE_ID("$Id: tty_update.c,v 1.298 2018/05/05 19:11:55 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.300 2019/02/25 21:42:01 tom Exp $")
 
 /*
  * This define controls the line-breakout optimization.  Every once in a
@@ -373,9 +373,18 @@ PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch)
        } else
 #endif
        if (!SP_PARM->_screen_acs_map[c8]) {
+           /*
+            * If we found no mapping for a given alternate-character set item
+            * in the terminal description, attempt to use the ASCII fallback
+            * code which is populated in the _acs_map[] array.  If that did
+            * not correspond to a line-drawing, etc., graphics character, the
+            * array entry would be empty.
+            */
            chtype temp = UChar(SP_PARM->_acs_map[c8]);
-           RemAttr(attr, A_ALTCHARSET);
-           SetChar(my_ch, temp, AttrOf(attr));
+           if (temp) {
+               RemAttr(attr, A_ALTCHARSET);
+               SetChar(my_ch, temp, AttrOf(attr));
+           }
        }
 
        /*
@@ -677,8 +686,9 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
            } else if (repeat_char != 0 &&
 #if USE_WIDEC_SUPPORT
                       (!SP_PARM->_screen_unicode &&
-                       ((AttrOf(ntext0) & A_ALTCHARSET) == 0 ||
-                        (CharOf(ntext0) < ACS_LEN))) &&
+                       (CharOf(ntext0) < ((AttrOf(ntext0) & A_ALTCHARSET)
+                                          ? ACS_LEN
+                                          : 256))) &&
 #endif
                       runcount > SP_PARM->_rep_cost) {
                NCURSES_CH_T temp;