1 /****************************************************************************
2 * Copyright (c) 2002 Free Software Foundation, Inc. *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *
12 * The above copyright notice and this permission notice shall be included *
13 * in all copies or substantial portions of the Software. *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
18 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
21 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23 * Except as contained in this notice, the name(s) of the above copyright *
24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
27 ****************************************************************************/
29 /****************************************************************************
30 * Author: Thomas Dickey 2002 *
31 ****************************************************************************/
33 #include <curses.priv.h>
36 MODULE_ID("$Id: lib_wacs.c,v 1.5 2002/08/31 19:44:17 tom Exp $")
38 NCURSES_EXPORT_VAR(cchar_t) * _nc_wacs = 0;
41 _nc_unicode_locale(void)
44 if (((s = getenv("LC_ALL")) != 0 && *s != '\0')
45 || ((s = getenv("LC_ALL")) != 0 && *s != '\0')
46 || ((s = getenv("LC_ALL")) != 0 && *s != '\0')) {
47 if (strstr(s, ".UTF-8") != 0)
62 { 'l', { '+', 0x250c }}, /* upper left corner */
63 { 'm', { '+', 0x2514 }}, /* lower left corner */
64 { 'k', { '+', 0x2510 }}, /* upper right corner */
65 { 'j', { '+', 0x2518 }}, /* lower right corner */
66 { 't', { '+', 0x251c }}, /* tee pointing left */
67 { 'u', { '+', 0x2524 }}, /* tee pointing right */
68 { 'v', { '+', 0x2534 }}, /* tee pointing up */
69 { 'w', { '+', 0x252c }}, /* tee pointing down */
70 { 'q', { '-', 0x2500 }}, /* horizontal line */
71 { 'x', { '|', 0x2502 }}, /* vertical line */
72 { 'n', { '+', 0x253c }}, /* large plus or crossover */
73 { 'o', { '~', 0x23ba }}, /* scan line 1 */
74 { 's', { '_', 0x23bd }}, /* scan line 9 */
75 { '`', { '+', 0x25c6 }}, /* diamond */
76 { 'a', { ':', 0x2592 }}, /* checker board (stipple) */
77 { 'f', { '\'', 0x00b0 }}, /* degree symbol */
78 { 'g', { '#', 0x00b1 }}, /* plus/minus */
79 { '~', { 'o', 0x00b7 }}, /* bullet */
80 /* Teletype 5410v1 symbols */
81 { ',', { '<', 0x2190 }}, /* arrow pointing left */
82 { '+', { '>', 0x2192 }}, /* arrow pointing right */
83 { '.', { 'v', 0x2193 }}, /* arrow pointing down */
84 { '-', { '^', 0x2191 }}, /* arrow pointing up */
85 { 'h', { '#', 0x2592 }}, /* board of squares */
86 { 'i', { '#', 0x2603 }}, /* lantern symbol */
87 { '0', { '#', 0x25ae }}, /* solid square block */
88 /* these defaults were invented for ncurses */
89 { 'p', { '-', 0x23bb }}, /* scan line 3 */
90 { 'r', { '-', 0x23bc }}, /* scan line 7 */
91 { 'y', { '<', 0x2264 }}, /* less-than-or-equal-to */
92 { 'z', { '>', 0x2265 }}, /* greater-than-or-equal-to */
93 { '{', { '*', 0x03c0 }}, /* greek pi */
94 { '|', { '!', 0x2260 }}, /* not-equal */
95 { '}', { 'f', 0x00a3 }}, /* pound-sterling symbol */
100 int active = _nc_unicode_locale();
103 * If we're running in a UTF-8 locale, will use the Unicode equivalents
104 * rather than the terminfo information. Actually the terminfo should
105 * be the rule, but there are people who are offended by the notion that
106 * a Unicode-capable terminal would have something resembling a mode.
107 * So the smacs/rmacs may be disabled -- sometime.
109 T(("initializing WIDE-ACS map (Unicode is%s active)",
110 active ? "" : " not"));
112 _nc_wacs = typeCalloc(cchar_t, ACS_LEN);
113 for (n = 0; n < SIZEOF(table); ++n) {
116 SetChar(_nc_wacs[m], table[n].value[active], A_NORMAL);
117 } else if (acs_map[m] & A_ALTCHARSET) {
118 SetChar(_nc_wacs[m], m, A_ALTCHARSET);
120 SetChar(_nc_wacs[m], table[n].value[0], A_NORMAL);
122 T(("#%d, SetChar(%c, %#04x) = %s",
124 table[n].value[active],
125 _tracecchar_t(&_nc_wacs[m])));