]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/lib_acs.c
ncurses 6.2 - patch 20210911
[ncurses.git] / ncurses / tinfo / lib_acs.c
index d8fdedca843f182569c0eb7e96d13ae633ae66b4..4ede53f6b995b96426bb77985cdb569c39361fbd 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc.              *
+ * Copyright 2018-2019,2020 Thomas E. Dickey                                *
+ * Copyright 1998-2014,2017 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            *
@@ -39,7 +40,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_acs.c,v 1.43 2010/12/25 23:00:45 tom Exp $")
+MODULE_ID("$Id: lib_acs.c,v 1.50 2020/02/02 23:34:34 tom Exp $")
 
 #if BROKEN_LINKER || USE_REENTRANT
 #define MyBuffer _nc_prescreen.real_acs_map
@@ -166,13 +167,12 @@ NCURSES_SP_NAME(_nc_init_acs) (NCURSES_SP_DCL0)
     real_map['E'] = '+';       /* large plus or crossover */
 
 #ifdef USE_TERM_DRIVER
-    CallDriver_2(SP_PARM, initacs, real_map, fake_map);
+    CallDriver_2(SP_PARM, td_initacs, real_map, fake_map);
 #else
     if (ena_acs != NULL) {
-       TPUTS_TRACE("ena_acs");
-       putp(ena_acs);
+       NCURSES_PUTP2("ena_acs", ena_acs);
     }
-#if NCURSES_EXT_FUNCS
+#if NCURSES_EXT_FUNCS && defined(enter_pc_charset_mode) && defined(exit_pc_charset_mode)
     /*
      * Linux console "supports" the "PC ROM" character set by the coincidence
      * that smpch/rmpch and smacs/rmacs have the same values.  ncurses has
@@ -206,8 +206,13 @@ NCURSES_SP_NAME(_nc_init_acs) (NCURSES_SP_DCL0)
        while (i + 1 < length) {
            if (acs_chars[i] != 0 && UChar(acs_chars[i]) < ACS_LEN) {
                real_map[UChar(acs_chars[i])] = UChar(acs_chars[i + 1]) | A_ALTCHARSET;
-               if (SP != 0)
+               T(("#%d real_map[%s] = %s",
+                  (int) i,
+                  _tracechar(UChar(acs_chars[i])),
+                  _tracechtype(real_map[UChar(acs_chars[i])])));
+               if (SP != 0) {
                    SP->_screen_acs_map[UChar(acs_chars[i])] = TRUE;
+               }
            }
            i += 2;
        }
@@ -250,3 +255,72 @@ _nc_init_acs(void)
     NCURSES_SP_NAME(_nc_init_acs) (CURRENT_SCREEN);
 }
 #endif
+
+#if !NCURSES_WCWIDTH_GRAPHICS
+NCURSES_EXPORT(int)
+_nc_wacs_width(unsigned ch)
+{
+    int result;
+    switch (ch) {
+    case 0x00a3:               /* FALLTHRU - ncurses pound-sterling symbol */
+    case 0x00b0:               /* FALLTHRU - VT100 degree symbol */
+    case 0x00b1:               /* FALLTHRU - VT100 plus/minus */
+    case 0x00b7:               /* FALLTHRU - VT100 bullet */
+    case 0x03c0:               /* FALLTHRU - ncurses greek pi */
+    case 0x2190:               /* FALLTHRU - Teletype arrow pointing left */
+    case 0x2191:               /* FALLTHRU - Teletype arrow pointing up */
+    case 0x2192:               /* FALLTHRU - Teletype arrow pointing right */
+    case 0x2193:               /* FALLTHRU - Teletype arrow pointing down */
+    case 0x2260:               /* FALLTHRU - ncurses not-equal */
+    case 0x2264:               /* FALLTHRU - ncurses less-than-or-equal-to */
+    case 0x2265:               /* FALLTHRU - ncurses greater-than-or-equal-to */
+    case 0x23ba:               /* FALLTHRU - VT100 scan line 1 */
+    case 0x23bb:               /* FALLTHRU - ncurses scan line 3 */
+    case 0x23bc:               /* FALLTHRU - ncurses scan line 7 */
+    case 0x23bd:               /* FALLTHRU - VT100 scan line 9 */
+    case 0x2500:               /* FALLTHRU - VT100 horizontal line */
+    case 0x2501:               /* FALLTHRU - thick horizontal line */
+    case 0x2502:               /* FALLTHRU - VT100 vertical line */
+    case 0x2503:               /* FALLTHRU - thick vertical line */
+    case 0x250c:               /* FALLTHRU - VT100 upper left corner */
+    case 0x250f:               /* FALLTHRU - thick upper left corner */
+    case 0x2510:               /* FALLTHRU - VT100 upper right corner */
+    case 0x2513:               /* FALLTHRU - thick upper right corner */
+    case 0x2514:               /* FALLTHRU - VT100 lower left corner */
+    case 0x2517:               /* FALLTHRU - thick lower left corner */
+    case 0x2518:               /* FALLTHRU - VT100 lower right corner */
+    case 0x251b:               /* FALLTHRU - thick lower right corner */
+    case 0x251c:               /* FALLTHRU - VT100 tee pointing left */
+    case 0x2523:               /* FALLTHRU - thick tee pointing left */
+    case 0x2524:               /* FALLTHRU - VT100 tee pointing right */
+    case 0x252b:               /* FALLTHRU - thick tee pointing right */
+    case 0x252c:               /* FALLTHRU - VT100 tee pointing down */
+    case 0x2533:               /* FALLTHRU - thick tee pointing down */
+    case 0x2534:               /* FALLTHRU - VT100 tee pointing up */
+    case 0x253b:               /* FALLTHRU - thick tee pointing up */
+    case 0x253c:               /* FALLTHRU - VT100 large plus or crossover */
+    case 0x254b:               /* FALLTHRU - thick large plus or crossover */
+    case 0x2550:               /* FALLTHRU - double horizontal line */
+    case 0x2551:               /* FALLTHRU - double vertical line */
+    case 0x2554:               /* FALLTHRU - double upper left corner */
+    case 0x2557:               /* FALLTHRU - double upper right corner */
+    case 0x255a:               /* FALLTHRU - double lower left corner */
+    case 0x255d:               /* FALLTHRU - double lower right corner */
+    case 0x2560:               /* FALLTHRU - double tee pointing right */
+    case 0x2563:               /* FALLTHRU - double tee pointing left */
+    case 0x2566:               /* FALLTHRU - double tee pointing down */
+    case 0x2569:               /* FALLTHRU - double tee pointing up */
+    case 0x256c:               /* FALLTHRU - double large plus or crossover */
+    case 0x2592:               /* FALLTHRU - VT100 checker board (stipple) */
+    case 0x25ae:               /* FALLTHRU - Teletype solid square block */
+    case 0x25c6:               /* FALLTHRU - VT100 diamond */
+    case 0x2603:               /* FALLTHRU - Teletype lantern symbol */
+       result = 1;
+       break;
+    default:
+       result = wcwidth(ch);
+       break;
+    }
+    return result;
+}
+#endif /* !NCURSES_WCWIDTH_GRAPHICS */