1 /* Many of the following #defines are completely unused for the 2 nonce. For each character, its code point in code page 437, 3 Unicode, and page 8859-1 are given. The first is used for 4 non-wide builds in Win32 console, DOS, SDL, and OS/2. 5 Unicode is used for all wide builds, and for the non-wide 6 build of Win32a. Code page 8859-1 is used for non-wide X11. 7 8 All of these characters exist in CP437 and Unicode. Some 9 don't exist in 8859-1, in which case the last column is 'TBD'. 10 Only 32 are used in ncurses. So caution is advised. */ 11 12 #ifdef USE_ISO8859_CHARSET 13 #define CHOOSE( A, B, C) (C) 14 #define TBD '!' 15 #else 16 #define CHOOSE( A, B, C) (USE_UNICODE_ACS_CHARS ? B : A) 17 #endif 18 19 /* Codes found from https://en.wikipedia.org/wiki/Code_page_437 */ 20 21 #define SMILE CHOOSE( 0x01, 0x263a, 'O') 22 #define REV_SMILE CHOOSE( 0x02, 0x263b, 'O') 23 #define HEART CHOOSE( 0x03, 0x2665, 'H') 24 #define DIAMOND CHOOSE( 0x04, 0x2666, 0x01) 25 #define CLUB CHOOSE( 0x05, 0x2663, 'C') 26 #define SPADE CHOOSE( 0x06, 0x2660, 'S') 27 #define MEDIUM_BULLET CHOOSE( 0x07, 0x2022, 0xb7) 28 #define REV_BULLET CHOOSE( 0x08, 0x2508, 0xb7) 29 #define WHITE_BULLET CHOOSE( 0x09, 0x25cb, 7) 30 #define REV_WHITE_BULLET CHOOSE( 0x0a, 0x25D9, 7) 31 #define MALE_SYM CHOOSE( 0x0b, 0x2642, 'm') 32 #define FEMALE_SYM CHOOSE( 0x0c, 0x2640, 'f') 33 #define QTR_NOTE CHOOSE( 0x0d, 0x266a, 0xbc) 34 #define EIGHTH_NOTE CHOOSE( 0x0e, 0x266b, 0xbd) 35 #define SPLAT CHOOSE( 0x0f, 0xa4 , 0xa4) 36 #define RIGHT_TRIANGLE CHOOSE( 0x10, 0x25b6, '>') 37 #define LEFT_TRIANGLE CHOOSE( 0x11, 0x25c0, '<') 38 #define UP_DOWN_ARROW CHOOSE( 0x12, 0x2195, 0x19) 39 #define DBL_BANG CHOOSE( 0x13, 0x203c, '!') 40 #define PILCROW CHOOSE( 0x14, 0xb6 , 0xb6) 41 #define SECTION_SIGN CHOOSE( 0x15, 0xa7 , 0xa7) 42 #define LOW_QTR_BLOCK CHOOSE( 0x16, 0x25b2, '_') 43 #define UP_DOWN_ARROW_UNDERSCORED CHOOSE( 0x17, 0x21ab, 0x19) 44 #define UP_ARROW CHOOSE( 0x18, 0x2191, '^') 45 #define DOWN_ARROW CHOOSE( 0x19, 0x2193, 'v') 46 #define RIGHT_ARROW CHOOSE( 0x1a, 0x2192, '>') 47 #define LEFT_ARROW CHOOSE( 0x1b, 0x2190, '<') 48 #define RIGHT_ANGLE CHOOSE( 0x1c, 0x221f, 0xe) 49 #define LEFT_RIGHT_ARROW CHOOSE( 0x1d, 0x2194, '-') 50 #define UP_TRIANGLE CHOOSE( 0x1e, 0x25b2, '^') 51 #define DOWN_TRIANGLE CHOOSE( 0x1f, 0x25bc, 'v') 52 53 #define UPPERCASE_C_CEDILLA CHOOSE( 0x80, 0xc7 , 0xc7) 54 #define LOWERCASE_U_UMLAUT CHOOSE( 0x81, 0xfc , 0xfc) 55 #define LOWERCASE_E_ACUTE CHOOSE( 0x82, 0xe9 , 0xe9) 56 #define LOWERCASE_A_CIRCUMFLEX CHOOSE( 0x83, 0xe2 , 0xe2) 57 #define LOWERCASE_A_UMLAUT CHOOSE( 0x84, 0xe4 , 0xe4) 58 #define LOWERCASE_A_GRAVE CHOOSE( 0x85, 0xe0 , 0xea) 59 #define LOWERCASE_A_RING CHOOSE( 0x86, 0xe5 , 0xe5) 60 #define LOWERCASE_C_CEDILLA CHOOSE( 0x87, 0xe7 , 0xe7) 61 #define LOWERCASE_E_CIRCUMFLEX CHOOSE( 0x88, 0xea , 0xea) 62 #define LOWERCASE_E_UMLAUT CHOOSE( 0x89, 0xeb , 0xeb) 63 #define LOWERCASE_E_GRAVE CHOOSE( 0x8a, 0xe8 , 0xe8) 64 #define LOWERCASE_I_UMLAUT CHOOSE( 0x8b, 0xef , 0xef) 65 #define LOWERCASE_I_CIRCUMFLEX CHOOSE( 0x8c, 0xee , 0xee) 66 #define LOWERCASE_I_GRAVE CHOOSE( 0x8d, 0xec , 0xce) 67 #define UPPERCASE_A_UMLAUT CHOOSE( 0x8e, 0xc4 , 0xc4) 68 #define UPPERCASE_A_RING CHOOSE( 0x8f, 0xc5 , 0xc5) 69 70 #define UPPERCASE_E_ACUTE CHOOSE( 0x90, 0xc9 , 0xc9) 71 #define LOWERCASE_AE_LIGATURE CHOOSE( 0x91, 0xe6 , 0xe6) 72 #define UPPERCASE_AE_LIGATURE CHOOSE( 0x92, 0xc6 , 0xc6) 73 #define LOWERCASE_O_CIRCUMFLEX CHOOSE( 0x93, 0xf4 , 0xf4) 74 #define LOWERCASE_O_UMLAUT CHOOSE( 0x94, 0xf6 , 0xf6) 75 #define LOWERCASE_O_GRAVE CHOOSE( 0x95, 0xf2 , 0xf2) 76 #define LOWERCASE_U_CIRCUMFLEX CHOOSE( 0x96, 0xfb , 0xfb) 77 #define LOWERCASE_U_GRAVE CHOOSE( 0x97, 0xf9 , 0xf9) 78 #define LOWERCASE_Y_UMLAUT CHOOSE( 0x98, 0xff , 0xff) 79 #define UPPERCASE_O_UMLAUT CHOOSE( 0x99, 0xd6 , 0xd6) 80 #define UPPERCASE_U_UMLAUT CHOOSE( 0x9a, 0xdc , 0xdc) 81 #define CENT_SIGN CHOOSE( 0x9b, 0xa2 , 0xa2) 82 #define STERLING_SIGN CHOOSE( 0x9c, 0xa3 , 30) 83 #define YEN_SIGN CHOOSE( 0x9d, 0xa5 , 0xa5) 84 #define PESETA_SIGN CHOOSE( 0x9e, 0x20a7, TBD) 85 #define F_WITH_HOOK CHOOSE( 0x9f, 0x0192, TBD) 86 87 #define LOWERCASE_A_ACUTE CHOOSE( 0xa0, 0xe1 , 0xe1) 88 #define LOWERCASE_I_ACUTE CHOOSE( 0xa1, 0xed , 0xed) 89 #define LOWERCASE_O_ACUTE CHOOSE( 0xa2, 0xf3 , 0xf3) 90 #define LOWERCASE_U_ACUTE CHOOSE( 0xa3, 0xfa , 0xfa) 91 #define LOWERCASE_N_TILDE CHOOSE( 0xa4, 0xf1 , 0xf1) 92 #define UPPERCASE_N_TILDE CHOOSE( 0xa5, 0xd1 , 0xd1) 93 #define A_ORDINAL CHOOSE( 0xa6, 0xaa , 0xaa) 94 #define O_ORDINAL CHOOSE( 0xa7, 0xba , 0xba) 95 #define INVERTED_QUESTION_MARK CHOOSE( 0xa8, 0xbf , 0xbf) 96 #define REVERSED_NOT_SIGN CHOOSE( 0xa9, 0x2310, TBD) 97 #define NOT_SIGN CHOOSE( 0xaa, 0xac , 0xac) 98 #define VULGAR_HALF CHOOSE( 0xab, 0xbd , 0xbd) 99 #define VULGAR_QUARTER CHOOSE( 0xac, 0xbc , 0xbc) 100 #define INVERTED_EXCLAMATION_MARK CHOOSE( 0xad, 0xa1 , 0xa1) 101 #define LEFT_ANGLE_QUOTE_MARK CHOOSE( 0xae, 0xab , 0xab) 102 #define RIGHT_ANGLE_QUOTE_MARK CHOOSE( 0xaf, 0xbb , 0xbb) 103 104 #define LIGHT_SHADE CHOOSE( 0xb0, 0x2591, '#' ) 105 #define MEDIUM_SHADE CHOOSE( 0xb1, 0x2592, 2) 106 #define DARK_SHADE CHOOSE( 0xb2, 0x2593, TBD) 107 #define BOX_VLINE CHOOSE( 0xb3, 0x2502, 25) 108 #define BOX_RTEE CHOOSE( 0xb4, 0x2524, 22) 109 #define BOX_SD_RTEE CHOOSE( 0xb5, 0x2561, 22) 110 #define BOX_DS_RTEE CHOOSE( 0xb6, 0x2562, 22) 111 #define BOX_DS_URCORNER CHOOSE( 0xb7, 0x2556, 12) 112 #define BOX_SD_URCORNER CHOOSE( 0xb8, 0x2555, 12) 113 #define BOX_D_RTEE CHOOSE( 0xb9, 0x2563, 22) 114 #define BOX_D_VLINE CHOOSE( 0xba, 0x2551, 25) 115 #define BOX_D_URCORNER CHOOSE( 0xbb, 0x2557, 12) 116 #define BOX_D_LRCORNER CHOOSE( 0xbc, 0x255D, 11) 117 #define BOX_DS_LRCORNER CHOOSE( 0xbd, 0x255c, 11) 118 #define BOX_SD_LRCORNER CHOOSE( 0xbe, 0x255b, 11) 119 #define BOX_URCORNER CHOOSE( 0xbf, 0x2510, 12) 120 121 #define BOX_LLCORNER CHOOSE( 0xc0, 0x2514, 14) 122 #define BOX_BTEE CHOOSE( 0xc1, 0x2534, 23) 123 #define BOX_TTEE CHOOSE( 0xc2, 0x252c, 24) 124 #define BOX_LTEE CHOOSE( 0xc3, 0x251c, 21) 125 #define BOX_HLINE CHOOSE( 0xc4, 0x2500, 18) 126 #define BOX_PLUS CHOOSE( 0xc5, 0x253c, 15) 127 #define BOX_SD_LTEE CHOOSE( 0xc6, 0x255e, 21) 128 #define BOX_DS_LTEE CHOOSE( 0xc7, 0x255f, 21) 129 #define BOX_D_LLCORNER CHOOSE( 0xc8, 0x255A, 14) 130 #define BOX_D_ULCORNER CHOOSE( 0xc9, 0x2554, 13) 131 #define BOX_D_BTEE CHOOSE( 0xca, 0x2569, 23) 132 #define BOX_D_TTEE CHOOSE( 0xcb, 0x2566, 24) 133 #define BOX_D_LTEE CHOOSE( 0xcc, 0x2560, 21) 134 #define BOX_D_HLINE CHOOSE( 0xcd, 0x2550, 18) 135 #define BOX_D_PLUS CHOOSE( 0xce, 0x256C, 15) 136 #define BOX_SD_BTEE CHOOSE( 0xcf, 0x2567, 23) 137 138 #define BOX_DS_BTEE CHOOSE( 0xd0, 0x2568, 23) 139 #define BOX_SD_TTEE CHOOSE( 0xd1, 0x2564, 24) 140 #define BOX_DS_TTEE CHOOSE( 0xd2, 0x2565, 24) 141 #define BOX_DS_LLCORNER CHOOSE( 0xd3, 0x2559, 14) 142 #define BOX_SD_LLCORNER CHOOSE( 0xd4, 0x2558, 14) 143 #define BOX_SD_ULCORNER CHOOSE( 0xd5, 0x2552, 13) 144 #define BOX_DS_ULCORNER CHOOSE( 0xd6, 0x2553, 13) 145 #define BOX_DS_PLUS CHOOSE( 0xd7, 0x256b, 15) 146 #define BOX_SD_PLUS CHOOSE( 0xd8, 0x256a, 15) 147 #define BOX_LRCORNER CHOOSE( 0xd9, 0x2518, 11) 148 #define BOX_ULCORNER CHOOSE( 0xda, 0x250c, 13) 149 #define FULL_BLOCK CHOOSE( 0xdb, 0x2588, 0) 150 #define LOWER_HALF_BLOCK CHOOSE( 0xdc, 0x2584, TBD) 151 #define LEFT_HALF_BLOCK CHOOSE( 0xdd, 0x258c, TBD) 152 #define RIGHT_HALF_BLOCK CHOOSE( 0xde, 0x2590, TBD) 153 #define UPPER_HALF_BLOCK CHOOSE( 0xdf, 0x2580, TBD) 154 155 #define ALPHA CHOOSE( 0xe0, 0x03b1, TBD) 156 #define BETA CHOOSE( 0xe1, 0x00df, TBD) 157 #define GAMMA CHOOSE( 0xe2, 0x0393, TBD) 158 #define PI CHOOSE( 0xe3, 0x03c0, 28) 159 #define UPPERCASE_SIGMA CHOOSE( 0xe4, 0x03a3, TBD) 160 #define LOWERCASE_SIGMA CHOOSE( 0xe5, 0x03c3, TBD) 161 #define MU CHOOSE( 0xe6, 0x00b5, 0xb5) 162 #define TAU CHOOSE( 0xe7, 0x03c4, TBD) 163 #define UPPERCASE_PHI CHOOSE( 0xe8, 0x03a6, TBD) 164 #define THETA CHOOSE( 0xe9, 0x0398, TBD) 165 #define OMEGA CHOOSE( 0xea, 0x03a9, TBD) 166 #define DELTA CHOOSE( 0xeb, 0x03b4, TBD) 167 #define INFINITY_SIGN CHOOSE( 0xec, 0x221e, TBD) 168 #define LOWERCASE_PHI CHOOSE( 0xed, 0x03c6, TBD) 169 #define EPSILON CHOOSE( 0xee, 0x03b5, TBD) 170 #define INTERSECTION CHOOSE( 0xef, 0x2229, TBD) 171 172 #define TRIPLE_BAR CHOOSE( 0xf0, 0x2261, TBD) 173 #define PLUS_OR_MINUS CHOOSE( 0xf1, 0x00b1, 8) 174 #define GREATER_THAN_OR_EQUAL_TO CHOOSE( 0xf2, 0x2265, 27) 175 #define LESSER_THAN_OR_EQUAL_TO CHOOSE( 0xf3, 0x2264, 26) 176 #define UPPER_HALF_INTEGRAL_SIGN CHOOSE( 0xf4, 0x2320, TBD) 177 #define LOWER_HALF_INTEGRAL_SIGN CHOOSE( 0xf5, 0x2321, TBD) 178 #define DIVISION_SIGN CHOOSE( 0xf6, 0x00f7, 0xf7) 179 #define APPROXIMATELY_EQUALS_SIGN CHOOSE( 0xf7, 0x2248, TBD) 180 #define DEGREE_SIGN CHOOSE( 0xf8, 0x00b0, 0xb0) 181 #define LARGE_BULLET CHOOSE( 0xf9, 0x2219, 7) 182 #define SMALL_BULLET CHOOSE( 0xfa, 0x00b7, 0xb7) 183 #define SQUARE_ROOT CHOOSE( 0xfb, 0x221a, TBD) 184 #define SUPERSCRIPT_N CHOOSE( 0xfc, 0x207f, TBD) 185 #define SUPERSCRIPT_2 CHOOSE( 0xfd, 0x00b2, 0xb2) 186 #define CENTERED_SQUARE CHOOSE( 0xfe, 0x25a0, TBD) 187 #define NON_BREAKING_SPACE CHOOSE( 0xff, 0x00a0, TBD) 188 189 190 191 /* It says at http://unicode.org/charts/PDF/U2300.pdf */ 192 /* that '...the scan line numbers here refer to old, */ 193 /* low-resolution technology for terminals, with only */ 194 /* nine scan lines per fixed-size character glyph. */ 195 /* Even-numbered scan lines are unified with box */ 196 /* drawing graphics." */ 197 /* The utility of these is questionable; they'd */ 198 /* work Just Fine in win32a (_if_ the appropriate */ 199 /* glyphs are available), but not elsewhere. */ 200 #define HORIZ_SCAN_LINE_1 CHOOSE( 0x2d, 0x23ba, 16) 201 #define HORIZ_SCAN_LINE_3 CHOOSE( 0x2d, 0x23bb, 17) 202 #define HORIZ_SCAN_LINE_7 CHOOSE( 0x2d, 0x23bc, 19) 203 #define HORIZ_SCAN_LINE_9 CHOOSE( '_', 0x23bd, 20) 204 205 /* Code page 437 lacks a 'for real' not-equals, so for that, */ 206 /* we use the double-horizontal single-vertical box drawing : */ 207 #define NOT_EQUALS_SIGN CHOOSE( 0xd8, 0x2260, 29) 208 209 # define A(x) ((chtype)x | A_ALTCHARSET) 210 211 chtype acs_map[128] = 212 { 213 A(0), A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8), 214 A(9), A(10), 215 CLUB, HEART, SPADE, SMILE, REV_SMILE, /* 11 12 13 14 15 */ 216 MEDIUM_BULLET, WHITE_BULLET, PILCROW, SECTION_SIGN, /* 16 17 18 19 */ 217 A_ORDINAL, O_ORDINAL, LOWERCASE_PHI, /* 20 21 22 */ 218 INVERTED_EXCLAMATION_MARK, INVERTED_QUESTION_MARK, /* 23 24 */ 219 REVERSED_NOT_SIGN, NOT_SIGN, /* 25 26 */ 220 UPPER_HALF_INTEGRAL_SIGN, LOWER_HALF_INTEGRAL_SIGN, /* 27 28 */ 221 SUPERSCRIPT_N, CENTERED_SQUARE, F_WITH_HOOK, /* 29 30 31 */ 222 223 RIGHT_ARROW, LEFT_ARROW, UP_ARROW, DOWN_ARROW, /* 32 !"# */ 224 225 PI, NOT_EQUALS_SIGN, VULGAR_HALF, VULGAR_QUARTER, /* $%&' */ 226 '(', 227 LEFT_ANGLE_QUOTE_MARK, RIGHT_ANGLE_QUOTE_MARK, /* )* */ 228 DARK_SHADE, SUPERSCRIPT_2, INFINITY_SIGN, /* +,- */ 229 ALPHA, BETA, GAMMA, UPPERCASE_SIGMA, LOWERCASE_SIGMA, /* ./012 */ 230 '3', 231 MU, TAU, UPPERCASE_PHI, THETA, OMEGA, DELTA, EPSILON, /* 456789: */ 232 233 BOX_SD_LRCORNER, BOX_SD_URCORNER, BOX_SD_ULCORNER, /* ;<= */ 234 BOX_SD_LLCORNER, BOX_SD_PLUS, /* >? */ 235 BOX_SD_LTEE, BOX_SD_RTEE, BOX_SD_BTEE, BOX_SD_TTEE, /* @ABC */ 236 237 BOX_D_LRCORNER, BOX_D_URCORNER, BOX_D_ULCORNER, /* DEF */ 238 BOX_D_LLCORNER, BOX_D_PLUS, /* GH */ 239 BOX_D_LTEE, BOX_D_RTEE, BOX_D_BTEE, BOX_D_TTEE, /* IJKL */ 240 241 BOX_DS_LRCORNER, BOX_DS_URCORNER, BOX_DS_ULCORNER, /* MNO */ 242 BOX_DS_LLCORNER, BOX_DS_PLUS, /* PQ */ 243 BOX_DS_LTEE, BOX_DS_RTEE, BOX_DS_BTEE, BOX_DS_TTEE, /* RSTU */ 244 245 BOX_LRCORNER, BOX_URCORNER, BOX_ULCORNER, /* VWX */ 246 BOX_LLCORNER, BOX_PLUS, /* YZ */ 247 BOX_LTEE, BOX_RTEE, BOX_BTEE, BOX_TTEE, /* [\]^ */ 248 249 BOX_HLINE, BOX_VLINE, BOX_D_HLINE, BOX_D_VLINE, /* _`ab */ 250 251 DIVISION_SIGN, APPROXIMATELY_EQUALS_SIGN, /* cd */ 252 INTERSECTION, TRIPLE_BAR, /* ef */ 253 SMALL_BULLET, LARGE_BULLET, SQUARE_ROOT, /* ghi */ 254 DIAMOND, MEDIUM_SHADE, /* jk */ 255 HORIZ_SCAN_LINE_1, HORIZ_SCAN_LINE_3, /* lm */ 256 HORIZ_SCAN_LINE_7, HORIZ_SCAN_LINE_9, /* no */ 257 UPPER_HALF_BLOCK, LOWER_HALF_BLOCK, /* pq */ 258 LEFT_HALF_BLOCK, RIGHT_HALF_BLOCK, FULL_BLOCK, /* rst */ 259 LESSER_THAN_OR_EQUAL_TO, GREATER_THAN_OR_EQUAL_TO, /* uv */ 260 DEGREE_SIGN, PLUS_OR_MINUS, LIGHT_SHADE, SPLAT, /* wxyz */ 261 CENT_SIGN, YEN_SIGN, PESETA_SIGN, STERLING_SIGN, /* {|}~ */ 262 A(127) 263 }; 264 265 # undef A 266