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