charsets.c revision f2e35a3a
1f2e35a3aSmrg/* $XTermId: charsets.c,v 1.113 2020/12/25 15:15:37 tom Exp $ */ 2d522f475Smrg 30bd37d32Smrg/* 4f2e35a3aSmrg * Copyright 1998-2019,2020 by Thomas E. Dickey 50bd37d32Smrg * 60bd37d32Smrg * All Rights Reserved 70bd37d32Smrg * 80bd37d32Smrg * Permission is hereby granted, free of charge, to any person obtaining a 90bd37d32Smrg * copy of this software and associated documentation files (the 100bd37d32Smrg * "Software"), to deal in the Software without restriction, including 110bd37d32Smrg * without limitation the rights to use, copy, modify, merge, publish, 120bd37d32Smrg * distribute, sublicense, and/or sell copies of the Software, and to 130bd37d32Smrg * permit persons to whom the Software is furnished to do so, subject to 140bd37d32Smrg * the following conditions: 150bd37d32Smrg * 160bd37d32Smrg * The above copyright notice and this permission notice shall be included 170bd37d32Smrg * in all copies or substantial portions of the Software. 180bd37d32Smrg * 190bd37d32Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 200bd37d32Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 210bd37d32Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 220bd37d32Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 230bd37d32Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 240bd37d32Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 250bd37d32Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 260bd37d32Smrg * 270bd37d32Smrg * Except as contained in this notice, the name(s) of the above copyright 280bd37d32Smrg * holders shall not be used in advertising or otherwise to promote the 290bd37d32Smrg * sale, use or other dealings in this Software without prior written 300bd37d32Smrg * authorization. 310bd37d32Smrg * 320bd37d32Smrg */ 33d522f475Smrg 34d522f475Smrg#include <xterm.h> 35d522f475Smrg#include <data.h> 36d522f475Smrg#include <fontutils.h> 37d522f475Smrg 38d522f475Smrg#include <X11/keysym.h> 39d522f475Smrg 40f2e35a3aSmrg#define BLANK ' ' 41f2e35a3aSmrg#define UNDEF 0x2e2e /* rendered as a backwards "?" (alt: 0x2426) */ 42f2e35a3aSmrg 43d522f475Smrg/* 44d522f475Smrg * This module performs translation as needed to support the DEC VT220 national 45f2e35a3aSmrg * replacement character sets as well as supplementary character sets (aka 46f2e35a3aSmrg * code-pages) introduced in VT320, etc. 47f2e35a3aSmrg * 48f2e35a3aSmrg * We assume that xterm's font is based on the ISO 8859-1 (Latin 1) character 49f2e35a3aSmrg * set, which is almost the same as the DEC multinational character set. Glyph 50f2e35a3aSmrg * positions 0-31 have to be the DEC graphic characters, though. 51d522f475Smrg * 52d522f475Smrg * References: 53d522f475Smrg * "VT220 Programmer Pocket Guide" EK-VT220-HR-002 (2nd ed., 1984), which 54d522f475Smrg * contains character charts for the national character sets. 55d522f475Smrg * "VT330/VT340 Programmer Reference Manual Volume 1: Text Programming" 56d522f475Smrg * EK-VT3XX-TP-001 (1st ed, 1987), which contains a table (2-1) 57d522f475Smrg * listing the glyphs which are mapped from the multinational 58d522f475Smrg * character set to the national character set. 59d522f475Smrg * 60d522f475Smrg * The latter reference, though easier to read, has a few errors and omissions. 61f2e35a3aSmrg * 62f2e35a3aSmrg * According to 63f2e35a3aSmrg * Digital ANSI-Compliant Printing Protocol 64f2e35a3aSmrg * Level 2 Programming Reference Manual 65f2e35a3aSmrg * EK–PPLV2–PM. B01 66f2e35a3aSmrg * 67f2e35a3aSmrg * the supplementary character sets Greek, Hebrew, Latin-5 and Latin/Cyrillic 68f2e35a3aSmrg * are standardized by ISO: 69f2e35a3aSmrg * ISO Greek is 8859-7 70f2e35a3aSmrg * ISO Hebrew is 8859-8 71f2e35a3aSmrg * ISO Latin-5 is 8859-9 72f2e35a3aSmrg * ISO Latin/Cyrillic is 8859-5 73f2e35a3aSmrg * 74f2e35a3aSmrg * These are derived from the data at 75f2e35a3aSmrg * ftp://www.unicode.org/Public/MAPPINGS/ISO8859/ 76f2e35a3aSmrg * 77f2e35a3aSmrg * Note: the "figure A-xx" comments refer to EK–PPLV2–PM. 78d522f475Smrg */ 79d522f475Smrg 80f2e35a3aSmrg/* 81f2e35a3aSmrg * A "codepage" is treated different from the NRC mode: it is always enabled. 82f2e35a3aSmrg * Reuse the UNI() macros by temporarily setting its state. 83f2e35a3aSmrg */ 84f2e35a3aSmrg#if OPT_WIDE_CHARS 85f2e35a3aSmrg#define begin_CODEPAGE() \ 86f2e35a3aSmrg if (!(xw->flags & NATIONAL)) { \ 87f2e35a3aSmrg screen->utf8_nrc_mode++; \ 88f2e35a3aSmrg } 89f2e35a3aSmrg#define end_CODEPAGE() \ 90f2e35a3aSmrg if (!(xw->flags & NATIONAL)) { \ 91f2e35a3aSmrg screen->utf8_nrc_mode--; \ 92f2e35a3aSmrg } 93f2e35a3aSmrg#else 94f2e35a3aSmrg#define begin_CODEPAGE() /* nothing */ 95f2e35a3aSmrg#define end_CODEPAGE() /* nothing */ 96f2e35a3aSmrg#endif 97f2e35a3aSmrg 98f2e35a3aSmrg/* 99f2e35a3aSmrg * xterm's original implementation of NRCS in 1998 was before Unicode became 100f2e35a3aSmrg * prevalent. Most of the necessary mappings could be done using definitions 101f2e35a3aSmrg * from X11/keysymdef.h 102f2e35a3aSmrg */ 103e0a2b6dfSmrg#define map_NRCS_Dutch(code) \ 104e0a2b6dfSmrg switch (code) { \ 105e0a2b6dfSmrg MAP(0x23, XK_sterling); \ 106e0a2b6dfSmrg MAP(0x40, XK_threequarters); \ 107e0a2b6dfSmrg UNI(0x5b, 0x0133); /* ij ligature */ \ 108e0a2b6dfSmrg MAP(0x5c, XK_onehalf); \ 109e0a2b6dfSmrg MAP(0x5d, XK_bar); \ 110e0a2b6dfSmrg MAP(0x7b, XK_diaeresis); \ 111e0a2b6dfSmrg UNI(0x7c, 0x0192); /* florin */ \ 112e0a2b6dfSmrg MAP(0x7d, XK_onequarter); \ 113e0a2b6dfSmrg MAP(0x7e, XK_acute); \ 114e0a2b6dfSmrg } 115d522f475Smrg 116e0a2b6dfSmrg#define map_NRCS_Finnish(code) \ 117e0a2b6dfSmrg switch (code) { \ 118e0a2b6dfSmrg MAP(0x5b, XK_Adiaeresis); \ 119e0a2b6dfSmrg MAP(0x5c, XK_Odiaeresis); \ 120e0a2b6dfSmrg MAP(0x5d, XK_Aring); \ 121e0a2b6dfSmrg MAP(0x5e, XK_Udiaeresis); \ 122e0a2b6dfSmrg MAP(0x60, XK_eacute); \ 123e0a2b6dfSmrg MAP(0x7b, XK_adiaeresis); \ 124e0a2b6dfSmrg MAP(0x7c, XK_odiaeresis); \ 125e0a2b6dfSmrg MAP(0x7d, XK_aring); \ 126e0a2b6dfSmrg MAP(0x7e, XK_udiaeresis); \ 127e0a2b6dfSmrg } 1282eaa94a1Schristos 129e0a2b6dfSmrg#define map_NRCS_French(code) \ 130e0a2b6dfSmrg switch (code) { \ 131e0a2b6dfSmrg MAP(0x23, XK_sterling); \ 132e0a2b6dfSmrg MAP(0x40, XK_agrave); \ 133e0a2b6dfSmrg MAP(0x5b, XK_degree); \ 134e0a2b6dfSmrg MAP(0x5c, XK_ccedilla); \ 135e0a2b6dfSmrg MAP(0x5d, XK_section); \ 136e0a2b6dfSmrg MAP(0x7b, XK_eacute); \ 137e0a2b6dfSmrg MAP(0x7c, XK_ugrave); \ 138e0a2b6dfSmrg MAP(0x7d, XK_egrave); \ 139e0a2b6dfSmrg MAP(0x7e, XK_diaeresis); \ 140e0a2b6dfSmrg } 1412eaa94a1Schristos 142e0a2b6dfSmrg#define map_NRCS_French_Canadian(code) \ 143e0a2b6dfSmrg switch (code) { \ 144e0a2b6dfSmrg MAP(0x40, XK_agrave); \ 145e0a2b6dfSmrg MAP(0x5b, XK_acircumflex); \ 146e0a2b6dfSmrg MAP(0x5c, XK_ccedilla); \ 147e0a2b6dfSmrg MAP(0x5d, XK_ecircumflex); \ 148e0a2b6dfSmrg MAP(0x5e, XK_icircumflex); \ 149e0a2b6dfSmrg MAP(0x60, XK_ocircumflex); \ 150e0a2b6dfSmrg MAP(0x7b, XK_eacute); \ 151e0a2b6dfSmrg MAP(0x7c, XK_ugrave); \ 152e0a2b6dfSmrg MAP(0x7d, XK_egrave); \ 153e0a2b6dfSmrg MAP(0x7e, XK_ucircumflex); \ 154e0a2b6dfSmrg } 1552eaa94a1Schristos 156e0a2b6dfSmrg#define map_NRCS_German(code) \ 157e0a2b6dfSmrg switch (code) { \ 158e0a2b6dfSmrg MAP(0x40, XK_section); \ 159e0a2b6dfSmrg MAP(0x5b, XK_Adiaeresis); \ 160e0a2b6dfSmrg MAP(0x5c, XK_Odiaeresis); \ 161e0a2b6dfSmrg MAP(0x5d, XK_Udiaeresis); \ 162e0a2b6dfSmrg MAP(0x7b, XK_adiaeresis); \ 163e0a2b6dfSmrg MAP(0x7c, XK_odiaeresis); \ 164e0a2b6dfSmrg MAP(0x7d, XK_udiaeresis); \ 165e0a2b6dfSmrg MAP(0x7e, XK_ssharp); \ 166e0a2b6dfSmrg } 1672eaa94a1Schristos 168e0a2b6dfSmrg#define map_NRCS_Italian(code) \ 169e0a2b6dfSmrg switch (code) { \ 170e0a2b6dfSmrg MAP(0x23, XK_sterling); \ 171e0a2b6dfSmrg MAP(0x40, XK_section); \ 172e0a2b6dfSmrg MAP(0x5b, XK_degree); \ 173e0a2b6dfSmrg MAP(0x5c, XK_ccedilla); \ 174e0a2b6dfSmrg MAP(0x5d, XK_eacute); \ 175e0a2b6dfSmrg MAP(0x60, XK_ugrave); \ 176e0a2b6dfSmrg MAP(0x7b, XK_agrave); \ 177e0a2b6dfSmrg MAP(0x7c, XK_ograve); \ 178e0a2b6dfSmrg MAP(0x7d, XK_egrave); \ 179e0a2b6dfSmrg MAP(0x7e, XK_igrave); \ 180e0a2b6dfSmrg } 1812eaa94a1Schristos 182e0a2b6dfSmrg#define map_NRCS_Norwegian_Danish(code) \ 183e0a2b6dfSmrg switch (code) { \ 184e0a2b6dfSmrg MAP(0x40, XK_Adiaeresis); \ 185e0a2b6dfSmrg MAP(0x5b, XK_AE); \ 186e0a2b6dfSmrg MAP(0x5c, XK_Ooblique); \ 187e0a2b6dfSmrg MAP(0x5d, XK_Aring); \ 188e0a2b6dfSmrg MAP(0x5e, XK_Udiaeresis); \ 189e0a2b6dfSmrg MAP(0x60, XK_adiaeresis); \ 190e0a2b6dfSmrg MAP(0x7b, XK_ae); \ 191e0a2b6dfSmrg MAP(0x7c, XK_oslash); \ 192e0a2b6dfSmrg MAP(0x7d, XK_aring); \ 193e0a2b6dfSmrg MAP(0x7e, XK_udiaeresis); \ 194e0a2b6dfSmrg } 1952eaa94a1Schristos 196e0a2b6dfSmrg#define map_NRCS_Portuguese(code) \ 197e0a2b6dfSmrg switch (code) { \ 198e0a2b6dfSmrg MAP(0x5b, XK_Atilde); \ 199e0a2b6dfSmrg MAP(0x5c, XK_Ccedilla); \ 200e0a2b6dfSmrg MAP(0x5d, XK_Otilde); \ 201e0a2b6dfSmrg MAP(0x7b, XK_atilde); \ 202e0a2b6dfSmrg MAP(0x7c, XK_ccedilla); \ 203e0a2b6dfSmrg MAP(0x7d, XK_otilde); \ 204e0a2b6dfSmrg } 2052eaa94a1Schristos 206e0a2b6dfSmrg#define map_NRCS_Spanish(code) \ 207e0a2b6dfSmrg switch (code) { \ 208e0a2b6dfSmrg MAP(0x23, XK_sterling); \ 209e0a2b6dfSmrg MAP(0x40, XK_section); \ 210e0a2b6dfSmrg MAP(0x5b, XK_exclamdown); \ 211e0a2b6dfSmrg MAP(0x5c, XK_Ntilde); \ 212e0a2b6dfSmrg MAP(0x5d, XK_questiondown); \ 213e0a2b6dfSmrg MAP(0x7b, XK_degree); \ 214e0a2b6dfSmrg MAP(0x7c, XK_ntilde); \ 215e0a2b6dfSmrg MAP(0x7d, XK_ccedilla); \ 216e0a2b6dfSmrg } 2172eaa94a1Schristos 218e0a2b6dfSmrg#define map_NRCS_Swedish(code) \ 219e0a2b6dfSmrg switch (code) { \ 220e0a2b6dfSmrg MAP(0x40, XK_Eacute); \ 221e0a2b6dfSmrg MAP(0x5b, XK_Adiaeresis); \ 222e0a2b6dfSmrg MAP(0x5c, XK_Odiaeresis); \ 223e0a2b6dfSmrg MAP(0x5d, XK_Aring); \ 224e0a2b6dfSmrg MAP(0x5e, XK_Udiaeresis); \ 225e0a2b6dfSmrg MAP(0x60, XK_eacute); \ 226e0a2b6dfSmrg MAP(0x7b, XK_adiaeresis); \ 227e0a2b6dfSmrg MAP(0x7c, XK_odiaeresis); \ 228e0a2b6dfSmrg MAP(0x7d, XK_aring); \ 229e0a2b6dfSmrg MAP(0x7e, XK_udiaeresis); \ 230e0a2b6dfSmrg } 2312eaa94a1Schristos 232e0a2b6dfSmrg#define map_NRCS_Swiss(code) \ 233e0a2b6dfSmrg switch (code) { \ 234e0a2b6dfSmrg MAP(0x23, XK_ugrave); \ 235e0a2b6dfSmrg MAP(0x40, XK_agrave); \ 236e0a2b6dfSmrg MAP(0x5b, XK_eacute); \ 237e0a2b6dfSmrg MAP(0x5c, XK_ccedilla); \ 238e0a2b6dfSmrg MAP(0x5d, XK_ecircumflex); \ 239e0a2b6dfSmrg MAP(0x5e, XK_icircumflex); \ 240e0a2b6dfSmrg MAP(0x5f, XK_egrave); \ 241e0a2b6dfSmrg MAP(0x60, XK_ocircumflex); \ 242e0a2b6dfSmrg MAP(0x7b, XK_adiaeresis); \ 243e0a2b6dfSmrg MAP(0x7c, XK_odiaeresis); \ 244e0a2b6dfSmrg MAP(0x7d, XK_udiaeresis); \ 245e0a2b6dfSmrg MAP(0x7e, XK_ucircumflex); \ 246e0a2b6dfSmrg } 2472eaa94a1Schristos 248e0a2b6dfSmrg/* 249e0a2b6dfSmrg * Unlike NRCS, which splices a few characters onto ASCII, the supplementary 250e0a2b6dfSmrg * character sets are complete, normally mapped to GR. Most of these mappings 251e0a2b6dfSmrg * rely upon glyphs not found in ISO-8859-1. We can display most of those 252e0a2b6dfSmrg * using Unicode, thereby supporting specialized applications that use SCS 253e0a2b6dfSmrg * with luit, subject to the limitation that select/paste will give meaningless 254e0a2b6dfSmrg * results in terms of the application which uses these mappings. 255e0a2b6dfSmrg * 256f2e35a3aSmrg * Since the codepages introduced with VT320, etc, use 8-bit encodings, there 257f2e35a3aSmrg * is no plausible argument to be made that these mappings "use" UTF-8, even 258f2e35a3aSmrg * though there is a hidden step in the terminal emulator which relies upon 259f2e35a3aSmrg * UTF-8. 260e0a2b6dfSmrg */ 261f2e35a3aSmrg#define map_DEC_Supp_Graphic(code,dft) \ 262f2e35a3aSmrg begin_CODEPAGE(); \ 263e0a2b6dfSmrg switch (code) { \ 264f2e35a3aSmrg XXX(0x24, UNDEF); \ 265f2e35a3aSmrg XXX(0x26, UNDEF); \ 266f2e35a3aSmrg MAP(0x28, 0xa4); \ 267f2e35a3aSmrg XXX(0x2c, UNDEF); \ 268f2e35a3aSmrg XXX(0x2d, UNDEF); \ 269f2e35a3aSmrg XXX(0x2e, UNDEF); \ 270f2e35a3aSmrg XXX(0x2f, UNDEF); \ 271f2e35a3aSmrg XXX(0x34, UNDEF); \ 272f2e35a3aSmrg XXX(0x38, UNDEF); \ 273f2e35a3aSmrg XXX(0x3e, UNDEF); \ 274f2e35a3aSmrg XXX(0x50, UNDEF); \ 275e0a2b6dfSmrg UNI(0x57, 0x0152); \ 276f2e35a3aSmrg MAP(0x5d, 0x0178); \ 277f2e35a3aSmrg XXX(0x5e, UNDEF); \ 278f2e35a3aSmrg XXX(0x70, UNDEF); \ 279e0a2b6dfSmrg UNI(0x77, 0x0153); \ 280e0a2b6dfSmrg MAP(0x7d, 0xff); \ 281f2e35a3aSmrg XXX(0x7e, UNDEF); \ 282f2e35a3aSmrg XXX(0x7f, UNDEF); \ 283e0a2b6dfSmrg default: dft; break; \ 284f2e35a3aSmrg } \ 285f2e35a3aSmrg end_CODEPAGE() 2862eaa94a1Schristos 287e0a2b6dfSmrg#if OPT_WIDE_CHARS 288f2e35a3aSmrg /* derived from http://www.vt100.net/charsets/technical.html */ 289f2e35a3aSmrg#define map_DEC_Technical(code) \ 290f2e35a3aSmrg begin_CODEPAGE(); \ 291e0a2b6dfSmrg switch (code) { \ 292e0a2b6dfSmrg UNI(0x21, 0x23b7); /* RADICAL SYMBOL BOTTOM Centred left to right, so that it joins up with 02/02 */ \ 293e0a2b6dfSmrg UNI(0x22, 0x250c); /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ \ 294e0a2b6dfSmrg UNI(0x23, 0x2500); /* BOX DRAWINGS LIGHT HORIZONTAL */ \ 295e0a2b6dfSmrg UNI(0x24, 0x2320); /* TOP HALF INTEGRAL with the proviso that the stem is vertical, to join with 02/06 */ \ 296e0a2b6dfSmrg UNI(0x25, 0x2321); /* BOTTOM HALF INTEGRAL with the proviso above. */ \ 297e0a2b6dfSmrg UNI(0x26, 0x2502); /* BOX DRAWINGS LIGHT VERTICAL */ \ 298e0a2b6dfSmrg UNI(0x27, 0x23a1); /* LEFT SQUARE BRACKET UPPER CORNER Joins vertically to 02/06, 02/08. Doesn't join to its right. */ \ 299e0a2b6dfSmrg UNI(0x28, 0x23a3); /* LEFT SQUARE BRACKET LOWER CORNER Joins vertically to 02/06, 02/07. Doesn't join to its right. */ \ 300e0a2b6dfSmrg UNI(0x29, 0x23a4); /* RIGHT SQUARE BRACKET UPPER CORNER Joins vertically to 026, 02a. Doesn't join to its left. */ \ 301e0a2b6dfSmrg UNI(0x2a, 0x23a6); /* RIGHT SQUARE BRACKET LOWER CORNER Joins vertically to 026, 029. Doesn't join to its left. */ \ 302f2e35a3aSmrg UNI(0x2b, 0x23a7); /* LEFT CURLY BRACKET UPPER HOOK Joins vertically to 026, 02c, 02/15. Doesn't join to its right. */ \ 303f2e35a3aSmrg UNI(0x2c, 0x23a9); /* LEFT CURLY BRACKET LOWER HOOK Joins vertically to 026, 02b, 02/15. Doesn't join to its right. */ \ 304f2e35a3aSmrg UNI(0x2d, 0x23ab); /* RIGHT CURLY BRACKET UPPER HOOK Joins vertically to 026, 02e, 03/00. Doesn't join to its left. */ \ 305f2e35a3aSmrg UNI(0x2e, 0x23ad); /* RIGHT CURLY BRACKET LOWER HOOK Joins vertically to 026, 02d, 03/00. Doesn't join to its left. */ \ 306e0a2b6dfSmrg UNI(0x2f, 0x23a8); /* LEFT CURLY BRACKET MIDDLE PIECE Joins vertically to 026, 02b, 02c. */ \ 307e0a2b6dfSmrg UNI(0x30, 0x23ac); /* RIGHT CURLY BRACKET MIDDLE PIECE Joins vertically to 02/06, 02d, 02e. */ \ 308f2e35a3aSmrg XXX(0x31, UNDEF); /* Top Left Sigma. Joins to right with 02/03, 03/05. Joins diagonally below right with 03/03, 03/07. */ \ 309f2e35a3aSmrg XXX(0x32, UNDEF); /* Bottom Left Sigma. Joins to right with 02/03, 03/06. Joins diagonally above right with 03/04, 03/07. */ \ 310f2e35a3aSmrg XXX(0x33, UNDEF); /* Top Diagonal Sigma. Line for joining 03/01 to 03/04 or 03/07. */ \ 311f2e35a3aSmrg XXX(0x34, UNDEF); /* Bottom Diagonal Sigma. Line for joining 03/02 to 03/03 or 03/07. */ \ 312f2e35a3aSmrg XXX(0x35, UNDEF); /* Top Right Sigma. Joins to left with 02/03, 03/01. */ \ 313f2e35a3aSmrg XXX(0x36, UNDEF); /* Bottom Right Sigma. Joins to left with 02/03, 03/02. */ \ 314f2e35a3aSmrg XXX(0x37, UNDEF); /* Middle Sigma. Joins diagonally with 03/01, 03/02, 03/03, 03/04. */ \ 315f2e35a3aSmrg XXX(0x38, UNDEF); /* undefined */ \ 316f2e35a3aSmrg XXX(0x39, UNDEF); /* undefined */ \ 317f2e35a3aSmrg XXX(0x3a, UNDEF); /* undefined */ \ 318f2e35a3aSmrg XXX(0x3b, UNDEF); /* undefined */ \ 319e0a2b6dfSmrg UNI(0x3c, 0x2264); /* LESS-THAN OR EQUAL TO */ \ 320e0a2b6dfSmrg UNI(0x3d, 0x2260); /* NOT EQUAL TO */ \ 321e0a2b6dfSmrg UNI(0x3e, 0x2265); /* GREATER-THAN OR EQUAL TO */ \ 322e0a2b6dfSmrg UNI(0x3f, 0x222B); /* INTEGRAL */ \ 323e0a2b6dfSmrg UNI(0x40, 0x2234); /* THEREFORE */ \ 324e0a2b6dfSmrg UNI(0x41, 0x221d); /* PROPORTIONAL TO */ \ 325e0a2b6dfSmrg UNI(0x42, 0x221e); /* INFINITY */ \ 326e0a2b6dfSmrg UNI(0x43, 0x00f7); /* DIVISION SIGN */ \ 327f2e35a3aSmrg UNI(0x44, 0x0394); /* GREEK CAPITAL DELTA */ \ 328e0a2b6dfSmrg UNI(0x45, 0x2207); /* NABLA */ \ 329e0a2b6dfSmrg UNI(0x46, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \ 330e0a2b6dfSmrg UNI(0x47, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \ 331e0a2b6dfSmrg UNI(0x48, 0x223c); /* TILDE OPERATOR */ \ 332e0a2b6dfSmrg UNI(0x49, 0x2243); /* ASYMPTOTICALLY EQUAL TO */ \ 333e0a2b6dfSmrg UNI(0x4a, 0x0398); /* GREEK CAPITAL LETTER THETA */ \ 334e0a2b6dfSmrg UNI(0x4b, 0x00d7); /* MULTIPLICATION SIGN */ \ 335e0a2b6dfSmrg UNI(0x4c, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \ 336e0a2b6dfSmrg UNI(0x4d, 0x21d4); /* LEFT RIGHT DOUBLE ARROW */ \ 337e0a2b6dfSmrg UNI(0x4e, 0x21d2); /* RIGHTWARDS DOUBLE ARROW */ \ 338e0a2b6dfSmrg UNI(0x4f, 0x2261); /* IDENTICAL TO */ \ 339e0a2b6dfSmrg UNI(0x50, 0x03a0); /* GREEK CAPITAL LETTER PI */ \ 340e0a2b6dfSmrg UNI(0x51, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \ 341f2e35a3aSmrg UNI(0x52, UNDEF); /* undefined */ \ 342e0a2b6dfSmrg UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \ 343f2e35a3aSmrg XXX(0x54, UNDEF); /* undefined */ \ 344f2e35a3aSmrg XXX(0x55, UNDEF); /* undefined */ \ 345e0a2b6dfSmrg UNI(0x56, 0x221a); /* SQUARE ROOT */ \ 346e0a2b6dfSmrg UNI(0x57, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \ 347e0a2b6dfSmrg UNI(0x58, 0x039e); /* GREEK CAPITAL LETTER XI */ \ 348e0a2b6dfSmrg UNI(0x59, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \ 349e0a2b6dfSmrg UNI(0x5a, 0x2282); /* SUBSET OF */ \ 350e0a2b6dfSmrg UNI(0x5b, 0x2283); /* SUPERSET OF */ \ 351e0a2b6dfSmrg UNI(0x5c, 0x2229); /* INTERSECTION */ \ 352e0a2b6dfSmrg UNI(0x5d, 0x222a); /* UNION */ \ 353e0a2b6dfSmrg UNI(0x5e, 0x2227); /* LOGICAL AND */ \ 354e0a2b6dfSmrg UNI(0x5f, 0x2228); /* LOGICAL OR */ \ 355e0a2b6dfSmrg UNI(0x60, 0x00ac); /* NOT SIGN */ \ 356e0a2b6dfSmrg UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \ 357e0a2b6dfSmrg UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \ 358e0a2b6dfSmrg UNI(0x63, 0x03c7); /* GREEK SMALL LETTER CHI */ \ 359e0a2b6dfSmrg UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \ 360e0a2b6dfSmrg UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \ 361e0a2b6dfSmrg UNI(0x66, 0x03c6); /* GREEK SMALL LETTER PHI */ \ 362e0a2b6dfSmrg UNI(0x67, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \ 363e0a2b6dfSmrg UNI(0x68, 0x03b7); /* GREEK SMALL LETTER ETA */ \ 364e0a2b6dfSmrg UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \ 365e0a2b6dfSmrg UNI(0x6a, 0x03b8); /* GREEK SMALL LETTER THETA */ \ 366e0a2b6dfSmrg UNI(0x6b, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \ 367e0a2b6dfSmrg UNI(0x6c, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \ 368f2e35a3aSmrg XXX(0x6d, UNDEF); /* undefined */ \ 369e0a2b6dfSmrg UNI(0x6e, 0x03bd); /* GREEK SMALL LETTER NU */ \ 370e0a2b6dfSmrg UNI(0x6f, 0x2202); /* PARTIAL DIFFERENTIAL */ \ 371e0a2b6dfSmrg UNI(0x70, 0x03c0); /* GREEK SMALL LETTER PI */ \ 372e0a2b6dfSmrg UNI(0x71, 0x03c8); /* GREEK SMALL LETTER PSI */ \ 373e0a2b6dfSmrg UNI(0x72, 0x03c1); /* GREEK SMALL LETTER RHO */ \ 374e0a2b6dfSmrg UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \ 375e0a2b6dfSmrg UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \ 376f2e35a3aSmrg XXX(0x75, UNDEF); /* undefined */ \ 377e0a2b6dfSmrg UNI(0x76, 0x0192); /* LATIN SMALL LETTER F WITH HOOK Probably chosen for its meaning of "function" */ \ 378e0a2b6dfSmrg UNI(0x77, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \ 379e0a2b6dfSmrg UNI(0x78, 0x03bE); /* GREEK SMALL LETTER XI */ \ 380e0a2b6dfSmrg UNI(0x79, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \ 381e0a2b6dfSmrg UNI(0x7a, 0x03b6); /* GREEK SMALL LETTER ZETA */ \ 382e0a2b6dfSmrg UNI(0x7b, 0x2190); /* LEFTWARDS ARROW */ \ 383e0a2b6dfSmrg UNI(0x7c, 0x2191); /* UPWARDS ARROW */ \ 384e0a2b6dfSmrg UNI(0x7d, 0x2192); /* RIGHTWARDS ARROW */ \ 385e0a2b6dfSmrg UNI(0x7e, 0x2193); /* DOWNWARDS ARROW */ \ 386f2e35a3aSmrg } \ 387f2e35a3aSmrg end_CODEPAGE() 388f2e35a3aSmrg /* ISO Latin/Cyrillic is 8859-5 */ 389f2e35a3aSmrg#define map_ISO_Latin_Cyrillic(code) \ 390f2e35a3aSmrg begin_CODEPAGE(); \ 391f2e35a3aSmrg switch (code) { \ 392f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 393f2e35a3aSmrg UNI(0x21, 0x0401); /* CYRILLIC CAPITAL LETTER IO */ \ 394f2e35a3aSmrg UNI(0x22, 0x0402); /* CYRILLIC CAPITAL LETTER DJE */ \ 395f2e35a3aSmrg UNI(0x23, 0x0403); /* CYRILLIC CAPITAL LETTER GJE */ \ 396f2e35a3aSmrg UNI(0x24, 0x0404); /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ \ 397f2e35a3aSmrg UNI(0x25, 0x0405); /* CYRILLIC CAPITAL LETTER DZE */ \ 398f2e35a3aSmrg UNI(0x26, 0x0406); /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ \ 399f2e35a3aSmrg UNI(0x27, 0x0407); /* CYRILLIC CAPITAL LETTER YI */ \ 400f2e35a3aSmrg UNI(0x28, 0x0408); /* CYRILLIC CAPITAL LETTER JE */ \ 401f2e35a3aSmrg UNI(0x29, 0x0409); /* CYRILLIC CAPITAL LETTER LJE */ \ 402f2e35a3aSmrg UNI(0x2a, 0x040a); /* CYRILLIC CAPITAL LETTER NJE */ \ 403f2e35a3aSmrg UNI(0x2b, 0x040b); /* CYRILLIC CAPITAL LETTER TSHE */ \ 404f2e35a3aSmrg UNI(0x2c, 0x040c); /* CYRILLIC CAPITAL LETTER KJE */ \ 405f2e35a3aSmrg UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \ 406f2e35a3aSmrg UNI(0x2e, 0x040e); /* CYRILLIC CAPITAL LETTER SHORT U */ \ 407f2e35a3aSmrg UNI(0x2f, 0x040f); /* CYRILLIC CAPITAL LETTER DZHE */ \ 408f2e35a3aSmrg UNI(0x30, 0x0410); /* CYRILLIC CAPITAL LETTER A */ \ 409f2e35a3aSmrg UNI(0x31, 0x0411); /* CYRILLIC CAPITAL LETTER BE */ \ 410f2e35a3aSmrg UNI(0x32, 0x0412); /* CYRILLIC CAPITAL LETTER VE */ \ 411f2e35a3aSmrg UNI(0x33, 0x0413); /* CYRILLIC CAPITAL LETTER GHE */ \ 412f2e35a3aSmrg UNI(0x34, 0x0414); /* CYRILLIC CAPITAL LETTER DE */ \ 413f2e35a3aSmrg UNI(0x35, 0x0415); /* CYRILLIC CAPITAL LETTER IE */ \ 414f2e35a3aSmrg UNI(0x36, 0x0416); /* CYRILLIC CAPITAL LETTER ZHE */ \ 415f2e35a3aSmrg UNI(0x37, 0x0417); /* CYRILLIC CAPITAL LETTER ZE */ \ 416f2e35a3aSmrg UNI(0x38, 0x0418); /* CYRILLIC CAPITAL LETTER I */ \ 417f2e35a3aSmrg UNI(0x39, 0x0419); /* CYRILLIC CAPITAL LETTER SHORT I */ \ 418f2e35a3aSmrg UNI(0x3a, 0x041a); /* CYRILLIC CAPITAL LETTER KA */ \ 419f2e35a3aSmrg UNI(0x3b, 0x041b); /* CYRILLIC CAPITAL LETTER EL */ \ 420f2e35a3aSmrg UNI(0x3c, 0x041c); /* CYRILLIC CAPITAL LETTER EM */ \ 421f2e35a3aSmrg UNI(0x3d, 0x041d); /* CYRILLIC CAPITAL LETTER EN */ \ 422f2e35a3aSmrg UNI(0x3e, 0x041e); /* CYRILLIC CAPITAL LETTER O */ \ 423f2e35a3aSmrg UNI(0x3f, 0x041f); /* CYRILLIC CAPITAL LETTER PE */ \ 424f2e35a3aSmrg UNI(0x40, 0x0420); /* CYRILLIC CAPITAL LETTER ER */ \ 425f2e35a3aSmrg UNI(0x41, 0x0421); /* CYRILLIC CAPITAL LETTER ES */ \ 426f2e35a3aSmrg UNI(0x42, 0x0422); /* CYRILLIC CAPITAL LETTER TE */ \ 427f2e35a3aSmrg UNI(0x43, 0x0423); /* CYRILLIC CAPITAL LETTER U */ \ 428f2e35a3aSmrg UNI(0x44, 0x0424); /* CYRILLIC CAPITAL LETTER EF */ \ 429f2e35a3aSmrg UNI(0x45, 0x0425); /* CYRILLIC CAPITAL LETTER HA */ \ 430f2e35a3aSmrg UNI(0x46, 0x0426); /* CYRILLIC CAPITAL LETTER TSE */ \ 431f2e35a3aSmrg UNI(0x47, 0x0427); /* CYRILLIC CAPITAL LETTER CHE */ \ 432f2e35a3aSmrg UNI(0x48, 0x0428); /* CYRILLIC CAPITAL LETTER SHA */ \ 433f2e35a3aSmrg UNI(0x49, 0x0429); /* CYRILLIC CAPITAL LETTER SHCHA */ \ 434f2e35a3aSmrg UNI(0x4a, 0x042a); /* CYRILLIC CAPITAL LETTER HARD SIGN */ \ 435f2e35a3aSmrg UNI(0x4b, 0x042b); /* CYRILLIC CAPITAL LETTER YERU */ \ 436f2e35a3aSmrg UNI(0x4c, 0x042c); /* CYRILLIC CAPITAL LETTER SOFT SIGN */ \ 437f2e35a3aSmrg UNI(0x4d, 0x042d); /* CYRILLIC CAPITAL LETTER E */ \ 438f2e35a3aSmrg UNI(0x4e, 0x042e); /* CYRILLIC CAPITAL LETTER YU */ \ 439f2e35a3aSmrg UNI(0x4f, 0x042f); /* CYRILLIC CAPITAL LETTER YA */ \ 440f2e35a3aSmrg UNI(0x50, 0x0430); /* CYRILLIC SMALL LETTER A */ \ 441f2e35a3aSmrg UNI(0x51, 0x0431); /* CYRILLIC SMALL LETTER BE */ \ 442f2e35a3aSmrg UNI(0x52, 0x0432); /* CYRILLIC SMALL LETTER VE */ \ 443f2e35a3aSmrg UNI(0x53, 0x0433); /* CYRILLIC SMALL LETTER GHE */ \ 444f2e35a3aSmrg UNI(0x54, 0x0434); /* CYRILLIC SMALL LETTER DE */ \ 445f2e35a3aSmrg UNI(0x55, 0x0435); /* CYRILLIC SMALL LETTER IE */ \ 446f2e35a3aSmrg UNI(0x56, 0x0436); /* CYRILLIC SMALL LETTER ZHE */ \ 447f2e35a3aSmrg UNI(0x57, 0x0437); /* CYRILLIC SMALL LETTER ZE */ \ 448f2e35a3aSmrg UNI(0x58, 0x0438); /* CYRILLIC SMALL LETTER I */ \ 449f2e35a3aSmrg UNI(0x59, 0x0439); /* CYRILLIC SMALL LETTER SHORT I */ \ 450f2e35a3aSmrg UNI(0x5a, 0x043a); /* CYRILLIC SMALL LETTER KA */ \ 451f2e35a3aSmrg UNI(0x5b, 0x043b); /* CYRILLIC SMALL LETTER EL */ \ 452f2e35a3aSmrg UNI(0x5c, 0x043c); /* CYRILLIC SMALL LETTER EM */ \ 453f2e35a3aSmrg UNI(0x5d, 0x043d); /* CYRILLIC SMALL LETTER EN */ \ 454f2e35a3aSmrg UNI(0x5e, 0x043e); /* CYRILLIC SMALL LETTER O */ \ 455f2e35a3aSmrg UNI(0x5f, 0x043f); /* CYRILLIC SMALL LETTER PE */ \ 456f2e35a3aSmrg UNI(0x60, 0x0440); /* CYRILLIC SMALL LETTER ER */ \ 457f2e35a3aSmrg UNI(0x61, 0x0441); /* CYRILLIC SMALL LETTER ES */ \ 458f2e35a3aSmrg UNI(0x62, 0x0442); /* CYRILLIC SMALL LETTER TE */ \ 459f2e35a3aSmrg UNI(0x63, 0x0443); /* CYRILLIC SMALL LETTER U */ \ 460f2e35a3aSmrg UNI(0x64, 0x0444); /* CYRILLIC SMALL LETTER EF */ \ 461f2e35a3aSmrg UNI(0x65, 0x0445); /* CYRILLIC SMALL LETTER HA */ \ 462f2e35a3aSmrg UNI(0x66, 0x0446); /* CYRILLIC SMALL LETTER TSE */ \ 463f2e35a3aSmrg UNI(0x67, 0x0447); /* CYRILLIC SMALL LETTER CHE */ \ 464f2e35a3aSmrg UNI(0x68, 0x0448); /* CYRILLIC SMALL LETTER SHA */ \ 465f2e35a3aSmrg UNI(0x69, 0x0449); /* CYRILLIC SMALL LETTER SHCHA */ \ 466f2e35a3aSmrg UNI(0x6a, 0x044a); /* CYRILLIC SMALL LETTER HARD SIGN */ \ 467f2e35a3aSmrg UNI(0x6b, 0x044b); /* CYRILLIC SMALL LETTER YERU */ \ 468f2e35a3aSmrg UNI(0x6c, 0x044c); /* CYRILLIC SMALL LETTER SOFT SIGN */ \ 469f2e35a3aSmrg UNI(0x6d, 0x044d); /* CYRILLIC SMALL LETTER E */ \ 470f2e35a3aSmrg UNI(0x6e, 0x044e); /* CYRILLIC SMALL LETTER YU */ \ 471f2e35a3aSmrg UNI(0x6f, 0x044f); /* CYRILLIC SMALL LETTER YA */ \ 472f2e35a3aSmrg UNI(0x70, 0x2116); /* NUMERO SIGN */ \ 473f2e35a3aSmrg UNI(0x71, 0x0451); /* CYRILLIC SMALL LETTER IO */ \ 474f2e35a3aSmrg UNI(0x72, 0x0452); /* CYRILLIC SMALL LETTER DJE */ \ 475f2e35a3aSmrg UNI(0x73, 0x0453); /* CYRILLIC SMALL LETTER GJE */ \ 476f2e35a3aSmrg UNI(0x74, 0x0454); /* CYRILLIC SMALL LETTER UKRAINIAN IE */ \ 477f2e35a3aSmrg UNI(0x75, 0x0455); /* CYRILLIC SMALL LETTER DZE */ \ 478f2e35a3aSmrg UNI(0x76, 0x0456); /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ \ 479f2e35a3aSmrg UNI(0x77, 0x0457); /* CYRILLIC SMALL LETTER YI */ \ 480f2e35a3aSmrg UNI(0x78, 0x0458); /* CYRILLIC SMALL LETTER JE */ \ 481f2e35a3aSmrg UNI(0x79, 0x0459); /* CYRILLIC SMALL LETTER LJE */ \ 482f2e35a3aSmrg UNI(0x7a, 0x045a); /* CYRILLIC SMALL LETTER NJE */ \ 483f2e35a3aSmrg UNI(0x7b, 0x045b); /* CYRILLIC SMALL LETTER TSHE */ \ 484f2e35a3aSmrg UNI(0x7c, 0x045c); /* CYRILLIC SMALL LETTER KJE */ \ 485f2e35a3aSmrg UNI(0x7d, 0x00a7); /* SECTION SIGN */ \ 486f2e35a3aSmrg UNI(0x7e, 0x045e); /* CYRILLIC SMALL LETTER SHORT U */ \ 487f2e35a3aSmrg UNI(0x7f, 0x045f); /* CYRILLIC SMALL LETTER DZHE */ \ 488f2e35a3aSmrg } \ 489f2e35a3aSmrg end_CODEPAGE() 490f2e35a3aSmrg /* ISO Greek is 8859-7 */ 491f2e35a3aSmrg#define map_ISO_Greek_Supp(code) \ 492f2e35a3aSmrg begin_CODEPAGE(); \ 493f2e35a3aSmrg switch (code) { \ 494f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 495f2e35a3aSmrg UNI(0x21, 0x2018); /* LEFT SINGLE QUOTATION MARK */ \ 496f2e35a3aSmrg UNI(0x22, 0x2019); /* RIGHT SINGLE QUOTATION MARK */ \ 497f2e35a3aSmrg UNI(0x23, 0x00a3); /* POUND SIGN */ \ 498f2e35a3aSmrg UNI(0x24, 0x20ac); /* EURO SIGN */ \ 499f2e35a3aSmrg UNI(0x25, 0x20af); /* DRACHMA SIGN */ \ 500f2e35a3aSmrg UNI(0x26, 0x00a6); /* BROKEN BAR */ \ 501f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 502f2e35a3aSmrg UNI(0x28, 0x00a8); /* DIAERESIS */ \ 503f2e35a3aSmrg UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \ 504f2e35a3aSmrg UNI(0x2a, 0x037a); /* GREEK YPOGEGRAMMENI */ \ 505f2e35a3aSmrg UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 506f2e35a3aSmrg UNI(0x2c, 0x00ac); /* NOT SIGN */ \ 507f2e35a3aSmrg UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \ 508f2e35a3aSmrg XXX(0x2e, UNDEF); /* undefined */ \ 509f2e35a3aSmrg UNI(0x2f, 0x2015); /* HORIZONTAL BAR */ \ 510f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 511f2e35a3aSmrg UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \ 512f2e35a3aSmrg UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \ 513f2e35a3aSmrg UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \ 514f2e35a3aSmrg UNI(0x34, 0x0384); /* GREEK TONOS */ \ 515f2e35a3aSmrg UNI(0x35, 0x0385); /* GREEK DIALYTIKA TONOS */ \ 516f2e35a3aSmrg UNI(0x36, 0x0386); /* GREEK CAPITAL LETTER ALPHA WITH TONOS */ \ 517f2e35a3aSmrg UNI(0x37, 0x00b7); /* MIDDLE DOT */ \ 518f2e35a3aSmrg UNI(0x38, 0x0388); /* GREEK CAPITAL LETTER EPSILON WITH TONOS */ \ 519f2e35a3aSmrg UNI(0x39, 0x0389); /* GREEK CAPITAL LETTER ETA WITH TONOS */ \ 520f2e35a3aSmrg UNI(0x3a, 0x038a); /* GREEK CAPITAL LETTER IOTA WITH TONOS */ \ 521f2e35a3aSmrg UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 522f2e35a3aSmrg UNI(0x3c, 0x038c); /* GREEK CAPITAL LETTER OMICRON WITH TONOS */ \ 523f2e35a3aSmrg UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \ 524f2e35a3aSmrg UNI(0x3e, 0x038e); /* GREEK CAPITAL LETTER UPSILON WITH TONOS */ \ 525f2e35a3aSmrg UNI(0x3f, 0x038f); /* GREEK CAPITAL LETTER OMEGA WITH TONOS */ \ 526f2e35a3aSmrg UNI(0x40, 0x0390); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ \ 527f2e35a3aSmrg UNI(0x41, 0x0391); /* GREEK CAPITAL LETTER ALPHA */ \ 528f2e35a3aSmrg UNI(0x42, 0x0392); /* GREEK CAPITAL LETTER BETA */ \ 529f2e35a3aSmrg UNI(0x43, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \ 530f2e35a3aSmrg UNI(0x44, 0x0394); /* GREEK CAPITAL LETTER DELTA */ \ 531f2e35a3aSmrg UNI(0x45, 0x0395); /* GREEK CAPITAL LETTER EPSILON */ \ 532f2e35a3aSmrg UNI(0x46, 0x0396); /* GREEK CAPITAL LETTER ZETA */ \ 533f2e35a3aSmrg UNI(0x47, 0x0397); /* GREEK CAPITAL LETTER ETA */ \ 534f2e35a3aSmrg UNI(0x48, 0x0398); /* GREEK CAPITAL LETTER THETA */ \ 535f2e35a3aSmrg UNI(0x49, 0x0399); /* GREEK CAPITAL LETTER IOTA */ \ 536f2e35a3aSmrg UNI(0x4a, 0x039a); /* GREEK CAPITAL LETTER KAPPA */ \ 537f2e35a3aSmrg UNI(0x4b, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \ 538f2e35a3aSmrg UNI(0x4c, 0x039c); /* GREEK CAPITAL LETTER MU */ \ 539f2e35a3aSmrg UNI(0x4d, 0x039d); /* GREEK CAPITAL LETTER NU */ \ 540f2e35a3aSmrg UNI(0x4e, 0x039e); /* GREEK CAPITAL LETTER XI */ \ 541f2e35a3aSmrg UNI(0x4f, 0x039f); /* GREEK CAPITAL LETTER OMICRON */ \ 542f2e35a3aSmrg UNI(0x50, 0x03a0); /* GREEK CAPITAL LETTER PI */ \ 543f2e35a3aSmrg UNI(0x51, 0x03a1); /* GREEK CAPITAL LETTER RHO */ \ 544f2e35a3aSmrg XXX(0x52, UNDEF); /* undefined */ \ 545f2e35a3aSmrg UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \ 546f2e35a3aSmrg UNI(0x54, 0x03a4); /* GREEK CAPITAL LETTER TAU */ \ 547f2e35a3aSmrg UNI(0x55, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \ 548f2e35a3aSmrg UNI(0x56, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \ 549f2e35a3aSmrg UNI(0x57, 0x03a7); /* GREEK CAPITAL LETTER CHI */ \ 550f2e35a3aSmrg UNI(0x58, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \ 551f2e35a3aSmrg UNI(0x59, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \ 552f2e35a3aSmrg UNI(0x5a, 0x03aa); /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ \ 553f2e35a3aSmrg UNI(0x5b, 0x03ab); /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ \ 554f2e35a3aSmrg UNI(0x5c, 0x03ac); /* GREEK SMALL LETTER ALPHA WITH TONOS */ \ 555f2e35a3aSmrg UNI(0x5d, 0x03ad); /* GREEK SMALL LETTER EPSILON WITH TONOS */ \ 556f2e35a3aSmrg UNI(0x5e, 0x03ae); /* GREEK SMALL LETTER ETA WITH TONOS */ \ 557f2e35a3aSmrg UNI(0x5f, 0x03af); /* GREEK SMALL LETTER IOTA WITH TONOS */ \ 558f2e35a3aSmrg UNI(0x60, 0x03b0); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ \ 559f2e35a3aSmrg UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \ 560f2e35a3aSmrg UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \ 561f2e35a3aSmrg UNI(0x63, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \ 562f2e35a3aSmrg UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \ 563f2e35a3aSmrg UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \ 564f2e35a3aSmrg UNI(0x66, 0x03b6); /* GREEK SMALL LETTER ZETA */ \ 565f2e35a3aSmrg UNI(0x67, 0x03b7); /* GREEK SMALL LETTER ETA */ \ 566f2e35a3aSmrg UNI(0x68, 0x03b8); /* GREEK SMALL LETTER THETA */ \ 567f2e35a3aSmrg UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \ 568f2e35a3aSmrg UNI(0x6a, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \ 569f2e35a3aSmrg UNI(0x6b, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \ 570f2e35a3aSmrg UNI(0x6c, 0x03bc); /* GREEK SMALL LETTER MU */ \ 571f2e35a3aSmrg UNI(0x6d, 0x03bd); /* GREEK SMALL LETTER NU */ \ 572f2e35a3aSmrg UNI(0x6e, 0x03be); /* GREEK SMALL LETTER XI */ \ 573f2e35a3aSmrg UNI(0x6f, 0x03bf); /* GREEK SMALL LETTER OMICRON */ \ 574f2e35a3aSmrg UNI(0x70, 0x03c0); /* GREEK SMALL LETTER PI */ \ 575f2e35a3aSmrg UNI(0x71, 0x03c1); /* GREEK SMALL LETTER RHO */ \ 576f2e35a3aSmrg UNI(0x72, 0x03c2); /* GREEK SMALL LETTER FINAL SIGMA */ \ 577f2e35a3aSmrg UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \ 578f2e35a3aSmrg UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \ 579f2e35a3aSmrg UNI(0x75, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \ 580f2e35a3aSmrg UNI(0x76, 0x03c6); /* GREEK SMALL LETTER PHI */ \ 581f2e35a3aSmrg UNI(0x77, 0x03c7); /* GREEK SMALL LETTER CHI */ \ 582f2e35a3aSmrg UNI(0x78, 0x03c8); /* GREEK SMALL LETTER PSI */ \ 583f2e35a3aSmrg UNI(0x79, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \ 584f2e35a3aSmrg UNI(0x7a, 0x03ca); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ \ 585f2e35a3aSmrg UNI(0x7b, 0x03cb); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ \ 586f2e35a3aSmrg UNI(0x7c, 0x03cc); /* GREEK SMALL LETTER OMICRON WITH TONOS */ \ 587f2e35a3aSmrg UNI(0x7d, 0x03cd); /* GREEK SMALL LETTER UPSILON WITH TONOS */ \ 588f2e35a3aSmrg UNI(0x7e, 0x03ce); /* GREEK SMALL LETTER OMEGA WITH TONOS */ \ 589f2e35a3aSmrg } \ 590f2e35a3aSmrg end_CODEPAGE() 591f2e35a3aSmrg /* figure A-23 "ISO Latin-Hebrew Supplemental Character Set" */ 592f2e35a3aSmrg#define map_ISO_Hebrew(code) \ 593f2e35a3aSmrg begin_CODEPAGE(); \ 594f2e35a3aSmrg switch (code) { \ 595f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 596f2e35a3aSmrg XXX(0x21, UNDEF); /* undefined */ \ 597f2e35a3aSmrg UNI(0x22, 0x00a2); /* CENT SIGN */ \ 598f2e35a3aSmrg UNI(0x23, 0x00a3); /* POUND SIGN */ \ 599f2e35a3aSmrg UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \ 600f2e35a3aSmrg UNI(0x25, 0x00a5); /* YEN SIGN */ \ 601f2e35a3aSmrg UNI(0x26, 0x00a6); /* BROKEN BAR */ \ 602f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 603f2e35a3aSmrg UNI(0x28, 0x00a8); /* DIAERESIS */ \ 604f2e35a3aSmrg UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \ 605f2e35a3aSmrg UNI(0x2a, 0x00d7); /* MULTIPLICATION SIGN */ \ 606f2e35a3aSmrg UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 607f2e35a3aSmrg UNI(0x2c, 0x00ac); /* NOT SIGN */ \ 608f2e35a3aSmrg UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \ 609f2e35a3aSmrg UNI(0x2e, 0x00ae); /* REGISTERED SIGN */ \ 610f2e35a3aSmrg UNI(0x2f, 0x00af); /* MACRON */ \ 611f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 612f2e35a3aSmrg UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \ 613f2e35a3aSmrg UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \ 614f2e35a3aSmrg UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \ 615f2e35a3aSmrg UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \ 616f2e35a3aSmrg UNI(0x35, 0x00b5); /* MICRO SIGN */ \ 617f2e35a3aSmrg UNI(0x36, 0x00b6); /* PILCROW SIGN */ \ 618f2e35a3aSmrg UNI(0x37, 0x00b7); /* MIDDLE DOT */ \ 619f2e35a3aSmrg UNI(0x38, 0x00b8); /* CEDILLA */ \ 620f2e35a3aSmrg UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \ 621f2e35a3aSmrg UNI(0x3a, 0x00f7); /* DIVISION SIGN */ \ 622f2e35a3aSmrg UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 623f2e35a3aSmrg UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \ 624f2e35a3aSmrg UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \ 625f2e35a3aSmrg UNI(0x3e, 0x00be); /* VULGAR FRACTION THREE QUARTERS */ \ 626f2e35a3aSmrg XXX(0x3f, UNDEF); /* undefined */ \ 627f2e35a3aSmrg XXX(0x40, UNDEF); /* undefined */ \ 628f2e35a3aSmrg XXX(0x41, UNDEF); /* undefined */ \ 629f2e35a3aSmrg XXX(0x42, UNDEF); /* undefined */ \ 630f2e35a3aSmrg XXX(0x43, UNDEF); /* undefined */ \ 631f2e35a3aSmrg XXX(0x44, UNDEF); /* undefined */ \ 632f2e35a3aSmrg XXX(0x45, UNDEF); /* undefined */ \ 633f2e35a3aSmrg XXX(0x46, UNDEF); /* undefined */ \ 634f2e35a3aSmrg XXX(0x47, UNDEF); /* undefined */ \ 635f2e35a3aSmrg XXX(0x48, UNDEF); /* undefined */ \ 636f2e35a3aSmrg XXX(0x49, UNDEF); /* undefined */ \ 637f2e35a3aSmrg XXX(0x4a, UNDEF); /* undefined */ \ 638f2e35a3aSmrg XXX(0x4b, UNDEF); /* undefined */ \ 639f2e35a3aSmrg XXX(0x4c, UNDEF); /* undefined */ \ 640f2e35a3aSmrg XXX(0x4d, UNDEF); /* undefined */ \ 641f2e35a3aSmrg XXX(0x4e, UNDEF); /* undefined */ \ 642f2e35a3aSmrg XXX(0x4f, UNDEF); /* undefined */ \ 643f2e35a3aSmrg XXX(0x50, UNDEF); /* undefined */ \ 644f2e35a3aSmrg XXX(0x51, UNDEF); /* undefined */ \ 645f2e35a3aSmrg XXX(0x52, UNDEF); /* undefined */ \ 646f2e35a3aSmrg XXX(0x53, UNDEF); /* undefined */ \ 647f2e35a3aSmrg XXX(0x54, UNDEF); /* undefined */ \ 648f2e35a3aSmrg XXX(0x55, UNDEF); /* undefined */ \ 649f2e35a3aSmrg XXX(0x56, UNDEF); /* undefined */ \ 650f2e35a3aSmrg XXX(0x57, UNDEF); /* undefined */ \ 651f2e35a3aSmrg XXX(0x58, UNDEF); /* undefined */ \ 652f2e35a3aSmrg XXX(0x59, UNDEF); /* undefined */ \ 653f2e35a3aSmrg XXX(0x5a, UNDEF); /* undefined */ \ 654f2e35a3aSmrg XXX(0x5b, UNDEF); /* undefined */ \ 655f2e35a3aSmrg XXX(0x5c, UNDEF); /* undefined */ \ 656f2e35a3aSmrg XXX(0x5d, UNDEF); /* undefined */ \ 657f2e35a3aSmrg XXX(0x5e, UNDEF); /* undefined */ \ 658f2e35a3aSmrg UNI(0x5f, 0x2017); /* DOUBLE LOW LINE */ \ 659f2e35a3aSmrg UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \ 660f2e35a3aSmrg UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \ 661f2e35a3aSmrg UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \ 662f2e35a3aSmrg UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \ 663f2e35a3aSmrg UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \ 664f2e35a3aSmrg UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \ 665f2e35a3aSmrg UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \ 666f2e35a3aSmrg UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \ 667f2e35a3aSmrg UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \ 668f2e35a3aSmrg UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \ 669f2e35a3aSmrg UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \ 670f2e35a3aSmrg UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \ 671f2e35a3aSmrg UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \ 672f2e35a3aSmrg UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \ 673f2e35a3aSmrg UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \ 674f2e35a3aSmrg UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \ 675f2e35a3aSmrg UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \ 676f2e35a3aSmrg UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \ 677f2e35a3aSmrg UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \ 678f2e35a3aSmrg UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \ 679f2e35a3aSmrg UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \ 680f2e35a3aSmrg UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \ 681f2e35a3aSmrg UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \ 682f2e35a3aSmrg UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \ 683f2e35a3aSmrg UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \ 684f2e35a3aSmrg UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \ 685f2e35a3aSmrg UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \ 686f2e35a3aSmrg XXX(0x7b, UNDEF); /* undefined */ \ 687f2e35a3aSmrg XXX(0x7c, UNDEF); /* undefined */ \ 688f2e35a3aSmrg UNI(0x7d, 0x200e); /* LEFT-TO-RIGHT MARK */ \ 689f2e35a3aSmrg UNI(0x7e, 0x200f); /* RIGHT-TO-LEFT MARK */ \ 690f2e35a3aSmrg } \ 691f2e35a3aSmrg end_CODEPAGE() 692f2e35a3aSmrg /* ISO Latin-2 is 8859-2 */ 693f2e35a3aSmrg#define map_ISO_Latin_2(code) \ 694f2e35a3aSmrg begin_CODEPAGE(); \ 695f2e35a3aSmrg switch (code) { \ 696f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 697f2e35a3aSmrg UNI(0x21, 0x0104); /* LATIN CAPITAL LETTER A WITH OGONEK */ \ 698f2e35a3aSmrg UNI(0x22, 0x02d8); /* BREVE */ \ 699f2e35a3aSmrg UNI(0x23, 0x0141); /* LATIN CAPITAL LETTER L WITH STROKE */ \ 700f2e35a3aSmrg UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \ 701f2e35a3aSmrg UNI(0x25, 0x013d); /* LATIN CAPITAL LETTER L WITH CARON */ \ 702f2e35a3aSmrg UNI(0x26, 0x015a); /* LATIN CAPITAL LETTER S WITH ACUTE */ \ 703f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 704f2e35a3aSmrg UNI(0x28, 0x00a8); /* DIAERESIS */ \ 705f2e35a3aSmrg UNI(0x29, 0x0160); /* LATIN CAPITAL LETTER S WITH CARON */ \ 706f2e35a3aSmrg UNI(0x2a, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \ 707f2e35a3aSmrg UNI(0x2b, 0x0164); /* LATIN CAPITAL LETTER T WITH CARON */ \ 708f2e35a3aSmrg UNI(0x2c, 0x0179); /* LATIN CAPITAL LETTER Z WITH ACUTE */ \ 709f2e35a3aSmrg UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \ 710f2e35a3aSmrg UNI(0x2e, 0x017d); /* LATIN CAPITAL LETTER Z WITH CARON */ \ 711f2e35a3aSmrg UNI(0x2f, 0x017b); /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */ \ 712f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 713f2e35a3aSmrg UNI(0x31, 0x0105); /* LATIN SMALL LETTER A WITH OGONEK */ \ 714f2e35a3aSmrg UNI(0x32, 0x02db); /* OGONEK */ \ 715f2e35a3aSmrg UNI(0x33, 0x0142); /* LATIN SMALL LETTER L WITH STROKE */ \ 716f2e35a3aSmrg UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \ 717f2e35a3aSmrg UNI(0x35, 0x013e); /* LATIN SMALL LETTER L WITH CARON */ \ 718f2e35a3aSmrg UNI(0x36, 0x015b); /* LATIN SMALL LETTER S WITH ACUTE */ \ 719f2e35a3aSmrg UNI(0x37, 0x02c7); /* CARON */ \ 720f2e35a3aSmrg UNI(0x38, 0x00b8); /* CEDILLA */ \ 721f2e35a3aSmrg UNI(0x39, 0x0161); /* LATIN SMALL LETTER S WITH CARON */ \ 722f2e35a3aSmrg UNI(0x3a, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \ 723f2e35a3aSmrg UNI(0x3b, 0x0165); /* LATIN SMALL LETTER T WITH CARON */ \ 724f2e35a3aSmrg UNI(0x3c, 0x017a); /* LATIN SMALL LETTER Z WITH ACUTE */ \ 725f2e35a3aSmrg UNI(0x3d, 0x02dd); /* DOUBLE ACUTE ACCENT */ \ 726f2e35a3aSmrg UNI(0x3e, 0x017e); /* LATIN SMALL LETTER Z WITH CARON */ \ 727f2e35a3aSmrg UNI(0x3f, 0x017c); /* LATIN SMALL LETTER Z WITH DOT ABOVE */ \ 728f2e35a3aSmrg UNI(0x40, 0x0154); /* LATIN CAPITAL LETTER R WITH ACUTE */ \ 729f2e35a3aSmrg UNI(0x41, 0x00c1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \ 730f2e35a3aSmrg UNI(0x42, 0x00c2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \ 731f2e35a3aSmrg UNI(0x43, 0x0102); /* LATIN CAPITAL LETTER A WITH BREVE */ \ 732f2e35a3aSmrg UNI(0x44, 0x00c4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \ 733f2e35a3aSmrg UNI(0x45, 0x0139); /* LATIN CAPITAL LETTER L WITH ACUTE */ \ 734f2e35a3aSmrg UNI(0x46, 0x0106); /* LATIN CAPITAL LETTER C WITH ACUTE */ \ 735f2e35a3aSmrg UNI(0x47, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \ 736f2e35a3aSmrg UNI(0x48, 0x010c); /* LATIN CAPITAL LETTER C WITH CARON */ \ 737f2e35a3aSmrg UNI(0x49, 0x00c9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \ 738f2e35a3aSmrg UNI(0x4a, 0x0118); /* LATIN CAPITAL LETTER E WITH OGONEK */ \ 739f2e35a3aSmrg UNI(0x4b, 0x00cb); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \ 740f2e35a3aSmrg UNI(0x4c, 0x011a); /* LATIN CAPITAL LETTER E WITH CARON */ \ 741f2e35a3aSmrg UNI(0x4d, 0x00cd); /* LATIN CAPITAL LETTER I WITH ACUTE */ \ 742f2e35a3aSmrg UNI(0x4e, 0x00ce); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \ 743f2e35a3aSmrg UNI(0x4f, 0x010e); /* LATIN CAPITAL LETTER D WITH CARON */ \ 744f2e35a3aSmrg UNI(0x50, 0x0110); /* LATIN CAPITAL LETTER D WITH STROKE */ \ 745f2e35a3aSmrg UNI(0x51, 0x0143); /* LATIN CAPITAL LETTER N WITH ACUTE */ \ 746f2e35a3aSmrg UNI(0x52, 0x0147); /* LATIN CAPITAL LETTER N WITH CARON */ \ 747f2e35a3aSmrg UNI(0x53, 0x00d3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \ 748f2e35a3aSmrg UNI(0x54, 0x00d4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \ 749f2e35a3aSmrg UNI(0x55, 0x0150); /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ \ 750f2e35a3aSmrg UNI(0x56, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \ 751f2e35a3aSmrg UNI(0x57, 0x00d7); /* MULTIPLICATION SIGN */ \ 752f2e35a3aSmrg UNI(0x58, 0x0158); /* LATIN CAPITAL LETTER R WITH CARON */ \ 753f2e35a3aSmrg UNI(0x59, 0x016e); /* LATIN CAPITAL LETTER U WITH RING ABOVE */ \ 754f2e35a3aSmrg UNI(0x5a, 0x00da); /* LATIN CAPITAL LETTER U WITH ACUTE */ \ 755f2e35a3aSmrg UNI(0x5b, 0x0170); /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ \ 756f2e35a3aSmrg UNI(0x5c, 0x00dc); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \ 757f2e35a3aSmrg UNI(0x5d, 0x00dd); /* LATIN CAPITAL LETTER Y WITH ACUTE */ \ 758f2e35a3aSmrg UNI(0x5e, 0x0162); /* LATIN CAPITAL LETTER T WITH CEDILLA */ \ 759f2e35a3aSmrg UNI(0x5f, 0x00df); /* LATIN SMALL LETTER SHARP S */ \ 760f2e35a3aSmrg UNI(0x60, 0x0155); /* LATIN SMALL LETTER R WITH ACUTE */ \ 761f2e35a3aSmrg UNI(0x61, 0x00e1); /* LATIN SMALL LETTER A WITH ACUTE */ \ 762f2e35a3aSmrg UNI(0x62, 0x00e2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \ 763f2e35a3aSmrg UNI(0x63, 0x0103); /* LATIN SMALL LETTER A WITH BREVE */ \ 764f2e35a3aSmrg UNI(0x64, 0x00e4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \ 765f2e35a3aSmrg UNI(0x65, 0x013a); /* LATIN SMALL LETTER L WITH ACUTE */ \ 766f2e35a3aSmrg UNI(0x66, 0x0107); /* LATIN SMALL LETTER C WITH ACUTE */ \ 767f2e35a3aSmrg UNI(0x67, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \ 768f2e35a3aSmrg UNI(0x68, 0x010d); /* LATIN SMALL LETTER C WITH CARON */ \ 769f2e35a3aSmrg UNI(0x69, 0x00e9); /* LATIN SMALL LETTER E WITH ACUTE */ \ 770f2e35a3aSmrg UNI(0x6a, 0x0119); /* LATIN SMALL LETTER E WITH OGONEK */ \ 771f2e35a3aSmrg UNI(0x6b, 0x00eb); /* LATIN SMALL LETTER E WITH DIAERESIS */ \ 772f2e35a3aSmrg UNI(0x6c, 0x011b); /* LATIN SMALL LETTER E WITH CARON */ \ 773f2e35a3aSmrg UNI(0x6d, 0x00ed); /* LATIN SMALL LETTER I WITH ACUTE */ \ 774f2e35a3aSmrg UNI(0x6e, 0x00ee); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \ 775f2e35a3aSmrg UNI(0x6f, 0x010f); /* LATIN SMALL LETTER D WITH CARON */ \ 776f2e35a3aSmrg UNI(0x70, 0x0111); /* LATIN SMALL LETTER D WITH STROKE */ \ 777f2e35a3aSmrg UNI(0x71, 0x0144); /* LATIN SMALL LETTER N WITH ACUTE */ \ 778f2e35a3aSmrg UNI(0x72, 0x0148); /* LATIN SMALL LETTER N WITH CARON */ \ 779f2e35a3aSmrg UNI(0x73, 0x00f3); /* LATIN SMALL LETTER O WITH ACUTE */ \ 780f2e35a3aSmrg UNI(0x74, 0x00f4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \ 781f2e35a3aSmrg UNI(0x75, 0x0151); /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ \ 782f2e35a3aSmrg UNI(0x76, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \ 783f2e35a3aSmrg UNI(0x77, 0x00f7); /* DIVISION SIGN */ \ 784f2e35a3aSmrg UNI(0x78, 0x0159); /* LATIN SMALL LETTER R WITH CARON */ \ 785f2e35a3aSmrg UNI(0x79, 0x016f); /* LATIN SMALL LETTER U WITH RING ABOVE */ \ 786f2e35a3aSmrg UNI(0x7a, 0x00fa); /* LATIN SMALL LETTER U WITH ACUTE */ \ 787f2e35a3aSmrg UNI(0x7b, 0x0171); /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ \ 788f2e35a3aSmrg UNI(0x7c, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \ 789f2e35a3aSmrg UNI(0x7d, 0x00fd); /* LATIN SMALL LETTER Y WITH ACUTE */ \ 790f2e35a3aSmrg UNI(0x7e, 0x0163); /* LATIN SMALL LETTER T WITH CEDILLA */ \ 791f2e35a3aSmrg UNI(0x7f, 0x02d9); /* DOT ABOVE */ \ 792f2e35a3aSmrg } \ 793f2e35a3aSmrg end_CODEPAGE() 794f2e35a3aSmrg /* ISO Latin-5 is 8859-9 */ 795f2e35a3aSmrg#define map_ISO_Latin_5(code) \ 796f2e35a3aSmrg begin_CODEPAGE(); \ 797f2e35a3aSmrg switch (code) { \ 798f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 799f2e35a3aSmrg UNI(0x21, 0x00a1); /* INVERTED EXCLAMATION MARK */ \ 800f2e35a3aSmrg UNI(0x22, 0x00a2); /* CENT SIGN */ \ 801f2e35a3aSmrg UNI(0x23, 0x00a3); /* POUND SIGN */ \ 802f2e35a3aSmrg UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \ 803f2e35a3aSmrg UNI(0x25, 0x00a5); /* YEN SIGN */ \ 804f2e35a3aSmrg UNI(0x26, 0x00a6); /* BROKEN BAR */ \ 805f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 806f2e35a3aSmrg UNI(0x28, 0x00a8); /* DIAERESIS */ \ 807f2e35a3aSmrg UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \ 808f2e35a3aSmrg UNI(0x2a, 0x00aa); /* FEMININE ORDINAL INDICATOR */ \ 809f2e35a3aSmrg UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 810f2e35a3aSmrg UNI(0x2c, 0x00ac); /* NOT SIGN */ \ 811f2e35a3aSmrg UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \ 812f2e35a3aSmrg UNI(0x2e, 0x00ae); /* REGISTERED SIGN */ \ 813f2e35a3aSmrg UNI(0x2f, 0x00af); /* MACRON */ \ 814f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 815f2e35a3aSmrg UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \ 816f2e35a3aSmrg UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \ 817f2e35a3aSmrg UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \ 818f2e35a3aSmrg UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \ 819f2e35a3aSmrg UNI(0x35, 0x00b5); /* MICRO SIGN */ \ 820f2e35a3aSmrg UNI(0x36, 0x00b6); /* PILCROW SIGN */ \ 821f2e35a3aSmrg UNI(0x37, 0x00b7); /* MIDDLE DOT */ \ 822f2e35a3aSmrg UNI(0x38, 0x00b8); /* CEDILLA */ \ 823f2e35a3aSmrg UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \ 824f2e35a3aSmrg UNI(0x3a, 0x00ba); /* MASCULINE ORDINAL INDICATOR */ \ 825f2e35a3aSmrg UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 826f2e35a3aSmrg UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \ 827f2e35a3aSmrg UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \ 828f2e35a3aSmrg UNI(0x3e, 0x00be); /* VULGAR FRACTION THREE QUARTERS */ \ 829f2e35a3aSmrg UNI(0x3f, 0x00bf); /* INVERTED QUESTION MARK */ \ 830f2e35a3aSmrg UNI(0x40, 0x00c0); /* LATIN CAPITAL LETTER A WITH GRAVE */ \ 831f2e35a3aSmrg UNI(0x41, 0x00c1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \ 832f2e35a3aSmrg UNI(0x42, 0x00c2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \ 833f2e35a3aSmrg UNI(0x43, 0x00c3); /* LATIN CAPITAL LETTER A WITH TILDE */ \ 834f2e35a3aSmrg UNI(0x44, 0x00c4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \ 835f2e35a3aSmrg UNI(0x45, 0x00c5); /* LATIN CAPITAL LETTER A WITH RING ABOVE */ \ 836f2e35a3aSmrg UNI(0x46, 0x00c6); /* LATIN CAPITAL LETTER AE */ \ 837f2e35a3aSmrg UNI(0x47, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \ 838f2e35a3aSmrg UNI(0x48, 0x00c8); /* LATIN CAPITAL LETTER E WITH GRAVE */ \ 839f2e35a3aSmrg UNI(0x49, 0x00c9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \ 840f2e35a3aSmrg UNI(0x4a, 0x00ca); /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ \ 841f2e35a3aSmrg UNI(0x4b, 0x00cb); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \ 842f2e35a3aSmrg UNI(0x4c, 0x00cc); /* LATIN CAPITAL LETTER I WITH GRAVE */ \ 843f2e35a3aSmrg UNI(0x4d, 0x00cd); /* LATIN CAPITAL LETTER I WITH ACUTE */ \ 844f2e35a3aSmrg UNI(0x4e, 0x00ce); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \ 845f2e35a3aSmrg UNI(0x4f, 0x00cf); /* LATIN CAPITAL LETTER I WITH DIAERESIS */ \ 846f2e35a3aSmrg UNI(0x50, 0x011e); /* LATIN CAPITAL LETTER G WITH BREVE */ \ 847f2e35a3aSmrg UNI(0x51, 0x00d1); /* LATIN CAPITAL LETTER N WITH TILDE */ \ 848f2e35a3aSmrg UNI(0x52, 0x00d2); /* LATIN CAPITAL LETTER O WITH GRAVE */ \ 849f2e35a3aSmrg UNI(0x53, 0x00d3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \ 850f2e35a3aSmrg UNI(0x54, 0x00d4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \ 851f2e35a3aSmrg UNI(0x55, 0x00d5); /* LATIN CAPITAL LETTER O WITH TILDE */ \ 852f2e35a3aSmrg UNI(0x56, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \ 853f2e35a3aSmrg UNI(0x57, 0x00d7); /* MULTIPLICATION SIGN */ \ 854f2e35a3aSmrg UNI(0x58, 0x00d8); /* LATIN CAPITAL LETTER O WITH STROKE */ \ 855f2e35a3aSmrg UNI(0x59, 0x00d9); /* LATIN CAPITAL LETTER U WITH GRAVE */ \ 856f2e35a3aSmrg UNI(0x5a, 0x00da); /* LATIN CAPITAL LETTER U WITH ACUTE */ \ 857f2e35a3aSmrg UNI(0x5b, 0x00db); /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ \ 858f2e35a3aSmrg UNI(0x5c, 0x00dc); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \ 859f2e35a3aSmrg UNI(0x5d, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \ 860f2e35a3aSmrg UNI(0x5e, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \ 861f2e35a3aSmrg UNI(0x5f, 0x00df); /* LATIN SMALL LETTER SHARP S */ \ 862f2e35a3aSmrg UNI(0x60, 0x00e0); /* LATIN SMALL LETTER A WITH GRAVE */ \ 863f2e35a3aSmrg UNI(0x61, 0x00e1); /* LATIN SMALL LETTER A WITH ACUTE */ \ 864f2e35a3aSmrg UNI(0x62, 0x00e2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \ 865f2e35a3aSmrg UNI(0x63, 0x00e3); /* LATIN SMALL LETTER A WITH TILDE */ \ 866f2e35a3aSmrg UNI(0x64, 0x00e4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \ 867f2e35a3aSmrg UNI(0x65, 0x00e5); /* LATIN SMALL LETTER A WITH RING ABOVE */ \ 868f2e35a3aSmrg UNI(0x66, 0x00e6); /* LATIN SMALL LETTER AE */ \ 869f2e35a3aSmrg UNI(0x67, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \ 870f2e35a3aSmrg UNI(0x68, 0x00e8); /* LATIN SMALL LETTER E WITH GRAVE */ \ 871f2e35a3aSmrg UNI(0x69, 0x00e9); /* LATIN SMALL LETTER E WITH ACUTE */ \ 872f2e35a3aSmrg UNI(0x6a, 0x00ea); /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ \ 873f2e35a3aSmrg UNI(0x6b, 0x00eb); /* LATIN SMALL LETTER E WITH DIAERESIS */ \ 874f2e35a3aSmrg UNI(0x6c, 0x00ec); /* LATIN SMALL LETTER I WITH GRAVE */ \ 875f2e35a3aSmrg UNI(0x6d, 0x00ed); /* LATIN SMALL LETTER I WITH ACUTE */ \ 876f2e35a3aSmrg UNI(0x6e, 0x00ee); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \ 877f2e35a3aSmrg UNI(0x6f, 0x00ef); /* LATIN SMALL LETTER I WITH DIAERESIS */ \ 878f2e35a3aSmrg UNI(0x70, 0x011f); /* LATIN SMALL LETTER G WITH BREVE */ \ 879f2e35a3aSmrg UNI(0x71, 0x00f1); /* LATIN SMALL LETTER N WITH TILDE */ \ 880f2e35a3aSmrg UNI(0x72, 0x00f2); /* LATIN SMALL LETTER O WITH GRAVE */ \ 881f2e35a3aSmrg UNI(0x73, 0x00f3); /* LATIN SMALL LETTER O WITH ACUTE */ \ 882f2e35a3aSmrg UNI(0x74, 0x00f4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \ 883f2e35a3aSmrg UNI(0x75, 0x00f5); /* LATIN SMALL LETTER O WITH TILDE */ \ 884f2e35a3aSmrg UNI(0x76, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \ 885f2e35a3aSmrg UNI(0x77, 0x00f7); /* DIVISION SIGN */ \ 886f2e35a3aSmrg UNI(0x78, 0x00f8); /* LATIN SMALL LETTER O WITH STROKE */ \ 887f2e35a3aSmrg UNI(0x79, 0x00f9); /* LATIN SMALL LETTER U WITH GRAVE */ \ 888f2e35a3aSmrg UNI(0x7a, 0x00fa); /* LATIN SMALL LETTER U WITH ACUTE */ \ 889f2e35a3aSmrg UNI(0x7b, 0x00fb); /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ \ 890f2e35a3aSmrg UNI(0x7c, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \ 891f2e35a3aSmrg UNI(0x7d, 0x0131); /* LATIN SMALL LETTER DOTLESS I */ \ 892f2e35a3aSmrg UNI(0x7e, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \ 893f2e35a3aSmrg UNI(0x7f, 0x00ff); /* LATIN SMALL LETTER Y WITH DIAERESIS */ \ 894f2e35a3aSmrg } \ 895f2e35a3aSmrg end_CODEPAGE() 896f2e35a3aSmrg /* DEC Cyrillic from screenshot */ 897f2e35a3aSmrg#define map_DEC_Cyrillic(code) \ 898f2e35a3aSmrg begin_CODEPAGE(); \ 899f2e35a3aSmrg switch (code) { \ 900f2e35a3aSmrg UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 901f2e35a3aSmrg XXX(0x21, UNDEF); /* undefined */ \ 902f2e35a3aSmrg XXX(0x22, UNDEF); /* undefined */ \ 903f2e35a3aSmrg XXX(0x23, UNDEF); /* undefined */ \ 904f2e35a3aSmrg XXX(0x24, UNDEF); /* undefined */ \ 905f2e35a3aSmrg XXX(0x25, UNDEF); /* undefined */ \ 906f2e35a3aSmrg XXX(0x26, UNDEF); /* undefined */ \ 907f2e35a3aSmrg XXX(0x27, UNDEF); /* undefined */ \ 908f2e35a3aSmrg XXX(0x28, UNDEF); /* undefined */ \ 909f2e35a3aSmrg XXX(0x29, UNDEF); /* undefined */ \ 910f2e35a3aSmrg XXX(0x2a, UNDEF); /* undefined */ \ 911f2e35a3aSmrg XXX(0x2b, UNDEF); /* undefined */ \ 912f2e35a3aSmrg XXX(0x2c, UNDEF); /* undefined */ \ 913f2e35a3aSmrg XXX(0x2d, UNDEF); /* undefined */ \ 914f2e35a3aSmrg XXX(0x2e, UNDEF); /* undefined */ \ 915f2e35a3aSmrg XXX(0x2f, UNDEF); /* undefined */ \ 916f2e35a3aSmrg XXX(0x30, UNDEF); /* undefined */ \ 917f2e35a3aSmrg XXX(0x31, UNDEF); /* undefined */ \ 918f2e35a3aSmrg XXX(0x32, UNDEF); /* undefined */ \ 919f2e35a3aSmrg XXX(0x33, UNDEF); /* undefined */ \ 920f2e35a3aSmrg XXX(0x34, UNDEF); /* undefined */ \ 921f2e35a3aSmrg XXX(0x35, UNDEF); /* undefined */ \ 922f2e35a3aSmrg XXX(0x36, UNDEF); /* undefined */ \ 923f2e35a3aSmrg XXX(0x37, UNDEF); /* undefined */ \ 924f2e35a3aSmrg XXX(0x38, UNDEF); /* undefined */ \ 925f2e35a3aSmrg XXX(0x39, UNDEF); /* undefined */ \ 926f2e35a3aSmrg XXX(0x3a, UNDEF); /* undefined */ \ 927f2e35a3aSmrg XXX(0x3b, UNDEF); /* undefined */ \ 928f2e35a3aSmrg XXX(0x3c, UNDEF); /* undefined */ \ 929f2e35a3aSmrg XXX(0x3d, UNDEF); /* undefined */ \ 930f2e35a3aSmrg XXX(0x3e, UNDEF); /* undefined */ \ 931f2e35a3aSmrg XXX(0x3f, UNDEF); /* undefined */ \ 932f2e35a3aSmrg \ 933f2e35a3aSmrg UNI(0x40, 0x044e); /* CYRILLIC SMALL LETTER YU */ \ 934f2e35a3aSmrg UNI(0x41, 0x0430); /* CYRILLIC SMALL LETTER A */ \ 935f2e35a3aSmrg UNI(0x42, 0x0431); /* CYRILLIC SMALL LETTER BE */ \ 936f2e35a3aSmrg UNI(0x43, 0x0446); /* CYRILLIC SMALL LETTER TSE */ \ 937f2e35a3aSmrg UNI(0x44, 0x0434); /* CYRILLIC SMALL LETTER DE */ \ 938f2e35a3aSmrg UNI(0x45, 0x0435); /* CYRILLIC SMALL LETTER IE */ \ 939f2e35a3aSmrg UNI(0x46, 0x0444); /* CYRILLIC SMALL LETTER EF */ \ 940f2e35a3aSmrg UNI(0x47, 0x0433); /* CYRILLIC SMALL LETTER GHE */ \ 941f2e35a3aSmrg UNI(0x48, 0x0445); /* CYRILLIC SMALL LETTER HA */ \ 942f2e35a3aSmrg UNI(0x49, 0x0438); /* CYRILLIC SMALL LETTER I */ \ 943f2e35a3aSmrg UNI(0x4a, 0x0439); /* CYRILLIC SMALL LETTER SHORT I */ \ 944f2e35a3aSmrg UNI(0x4b, 0x043a); /* CYRILLIC SMALL LETTER KA */ \ 945f2e35a3aSmrg UNI(0x4c, 0x043b); /* CYRILLIC SMALL LETTER EL */ \ 946f2e35a3aSmrg UNI(0x4d, 0x043c); /* CYRILLIC SMALL LETTER EM */ \ 947f2e35a3aSmrg UNI(0x4e, 0x043d); /* CYRILLIC SMALL LETTER EN */ \ 948f2e35a3aSmrg UNI(0x4f, 0x043e); /* CYRILLIC SMALL LETTER O */ \ 949f2e35a3aSmrg UNI(0x50, 0x043f); /* CYRILLIC SMALL LETTER PE */ \ 950f2e35a3aSmrg UNI(0x51, 0x044f); /* CYRILLIC SMALL LETTER YA */ \ 951f2e35a3aSmrg UNI(0x52, 0x0440); /* CYRILLIC SMALL LETTER ER */ \ 952f2e35a3aSmrg UNI(0x53, 0x0441); /* CYRILLIC SMALL LETTER ES */ \ 953f2e35a3aSmrg UNI(0x54, 0x0442); /* CYRILLIC SMALL LETTER TE */ \ 954f2e35a3aSmrg UNI(0x55, 0x0443); /* CYRILLIC SMALL LETTER U */ \ 955f2e35a3aSmrg UNI(0x56, 0x0436); /* CYRILLIC SMALL LETTER ZHE */ \ 956f2e35a3aSmrg UNI(0x57, 0x0432); /* CYRILLIC SMALL LETTER VE */ \ 957f2e35a3aSmrg UNI(0x58, 0x044c); /* CYRILLIC SMALL LETTER SOFT SIGN */ \ 958f2e35a3aSmrg UNI(0x59, 0x044b); /* CYRILLIC SMALL LETTER YERU */ \ 959f2e35a3aSmrg UNI(0x5a, 0x0437); /* CYRILLIC SMALL LETTER ZE */ \ 960f2e35a3aSmrg UNI(0x5b, 0x0448); /* CYRILLIC SMALL LETTER SHA */ \ 961f2e35a3aSmrg UNI(0x5c, 0x044d); /* CYRILLIC SMALL LETTER E */ \ 962f2e35a3aSmrg UNI(0x5d, 0x0449); /* CYRILLIC SMALL LETTER SHCHA */ \ 963f2e35a3aSmrg UNI(0x5e, 0x0447); /* CYRILLIC SMALL LETTER CHE */ \ 964f2e35a3aSmrg UNI(0x5f, 0x044a); /* CYRILLIC SMALL LETTER HARD SIGN */ \ 965f2e35a3aSmrg \ 966f2e35a3aSmrg UNI(0x60, 0x042e); /* CYRILLIC CAPITAL LETTER YU */ \ 967f2e35a3aSmrg UNI(0x61, 0x0410); /* CYRILLIC CAPITAL LETTER A */ \ 968f2e35a3aSmrg UNI(0x62, 0x0411); /* CYRILLIC CAPITAL LETTER BE */ \ 969f2e35a3aSmrg UNI(0x63, 0x0426); /* CYRILLIC CAPITAL LETTER TSE */ \ 970f2e35a3aSmrg UNI(0x64, 0x0414); /* CYRILLIC CAPITAL LETTER DE */ \ 971f2e35a3aSmrg UNI(0x65, 0x0415); /* CYRILLIC CAPITAL LETTER IE */ \ 972f2e35a3aSmrg UNI(0x66, 0x0424); /* CYRILLIC CAPITAL LETTER EF */ \ 973f2e35a3aSmrg UNI(0x67, 0x0413); /* CYRILLIC CAPITAL LETTER GHE */ \ 974f2e35a3aSmrg UNI(0x68, 0x0425); /* CYRILLIC CAPITAL LETTER HA */ \ 975f2e35a3aSmrg UNI(0x69, 0x0418); /* CYRILLIC CAPITAL LETTER I */ \ 976f2e35a3aSmrg UNI(0x6a, 0x0419); /* CYRILLIC CAPITAL LETTER SHORT I */ \ 977f2e35a3aSmrg UNI(0x6b, 0x041a); /* CYRILLIC CAPITAL LETTER KA */ \ 978f2e35a3aSmrg UNI(0x6c, 0x041b); /* CYRILLIC CAPITAL LETTER EL */ \ 979f2e35a3aSmrg UNI(0x6d, 0x041c); /* CYRILLIC CAPITAL LETTER EM */ \ 980f2e35a3aSmrg UNI(0x6e, 0x041d); /* CYRILLIC CAPITAL LETTER EN */ \ 981f2e35a3aSmrg UNI(0x6f, 0x041e); /* CYRILLIC CAPITAL LETTER O */ \ 982f2e35a3aSmrg UNI(0x70, 0x041f); /* CYRILLIC CAPITAL LETTER PE */ \ 983f2e35a3aSmrg UNI(0x71, 0x042f); /* CYRILLIC CAPITAL LETTER YA */ \ 984f2e35a3aSmrg UNI(0x72, 0x0420); /* CYRILLIC CAPITAL LETTER ER */ \ 985f2e35a3aSmrg UNI(0x73, 0x0421); /* CYRILLIC CAPITAL LETTER ES */ \ 986f2e35a3aSmrg UNI(0x74, 0x0422); /* CYRILLIC CAPITAL LETTER TE */ \ 987f2e35a3aSmrg UNI(0x75, 0x0423); /* CYRILLIC CAPITAL LETTER U */ \ 988f2e35a3aSmrg UNI(0x76, 0x0416); /* CYRILLIC CAPITAL LETTER ZHE */ \ 989f2e35a3aSmrg UNI(0x77, 0x0412); /* CYRILLIC CAPITAL LETTER VE */ \ 990f2e35a3aSmrg UNI(0x78, 0x042c); /* CYRILLIC CAPITAL LETTER SOFT SIGN */ \ 991f2e35a3aSmrg UNI(0x79, 0x042b); /* CYRILLIC CAPITAL LETTER YERU */ \ 992f2e35a3aSmrg UNI(0x7a, 0x0417); /* CYRILLIC CAPITAL LETTER ZE */ \ 993f2e35a3aSmrg UNI(0x7b, 0x0428); /* CYRILLIC CAPITAL LETTER SHA */ \ 994f2e35a3aSmrg UNI(0x7c, 0x042d); /* CYRILLIC CAPITAL LETTER E */ \ 995f2e35a3aSmrg UNI(0x7d, 0x0429); /* CYRILLIC CAPITAL LETTER SHCHA */ \ 996f2e35a3aSmrg UNI(0x7e, 0x0427); /* CYRILLIC CAPITAL LETTER CHE */ \ 997f2e35a3aSmrg XXX(0x7f, UNDEF); \ 998f2e35a3aSmrg \ 999f2e35a3aSmrg } \ 1000f2e35a3aSmrg end_CODEPAGE() 1001f2e35a3aSmrg /* figure A-24 "DEC Greek Supplemental Character Set" */ 1002f2e35a3aSmrg#define map_DEC_Greek_Supp(code) \ 1003f2e35a3aSmrg begin_CODEPAGE(); \ 1004f2e35a3aSmrg switch (code) { \ 1005f2e35a3aSmrg MAP(0x20, 0x00a0); /* NO-BREAK SPACE */ \ 1006f2e35a3aSmrg UNI(0x21, 0x00a1); /* LEFT SINGLE QUOTATION MARK */ \ 1007f2e35a3aSmrg UNI(0x22, 0x00a2); /* RIGHT SINGLE QUOTATION MARK */ \ 1008f2e35a3aSmrg UNI(0x23, 0x00a3); /* POUND SIGN */ \ 1009f2e35a3aSmrg XXX(0x24, UNDEF); /* EURO SIGN */ \ 1010f2e35a3aSmrg UNI(0x25, 0x00a5); /* YEN SIGN */ \ 1011f2e35a3aSmrg XXX(0x26, UNDEF); /* BROKEN BAR */ \ 1012f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 1013f2e35a3aSmrg UNI(0x28, 0x00a4); /* CURRENCY SIGN */ \ 1014f2e35a3aSmrg UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \ 1015f2e35a3aSmrg UNI(0x2a, 0x00aa); /* FEMININE ORDINAL INDICATOR */ \ 1016f2e35a3aSmrg UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1017f2e35a3aSmrg XXX(0x2c, UNDEF); /* reserved */ \ 1018f2e35a3aSmrg XXX(0x2d, UNDEF); /* reserved */ \ 1019f2e35a3aSmrg XXX(0x2e, UNDEF); /* reserved */ \ 1020f2e35a3aSmrg XXX(0x2f, UNDEF); /* reserved */ \ 1021f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 1022f2e35a3aSmrg UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \ 1023f2e35a3aSmrg UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \ 1024f2e35a3aSmrg UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \ 1025f2e35a3aSmrg XXX(0x34, UNDEF); /* reserved */ \ 1026f2e35a3aSmrg UNI(0x35, 0x00b5); /* MICRO SIGN */ \ 1027f2e35a3aSmrg UNI(0x36, 0x00b6); /* PILCROW SIGN */ \ 1028f2e35a3aSmrg UNI(0x37, 0x00b7); /* MIDDLE DOT */ \ 1029f2e35a3aSmrg XXX(0x38, UNDEF); /* reserved */ \ 1030f2e35a3aSmrg UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \ 1031f2e35a3aSmrg UNI(0x3a, 0x00ba); /* MASCULINE ORDINAL INDICATOR */ \ 1032f2e35a3aSmrg UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1033f2e35a3aSmrg UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \ 1034f2e35a3aSmrg UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \ 1035f2e35a3aSmrg XXX(0x3e, UNDEF); /* reserved */ \ 1036f2e35a3aSmrg UNI(0x3f, 0x00BF); /* INVERTED QUESTION MARK */ \ 1037f2e35a3aSmrg UNI(0x40, 0x03ca); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ \ 1038f2e35a3aSmrg UNI(0x41, 0x0391); /* GREEK CAPITAL LETTER ALPHA */ \ 1039f2e35a3aSmrg UNI(0x42, 0x0392); /* GREEK CAPITAL LETTER BETA */ \ 1040f2e35a3aSmrg UNI(0x43, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \ 1041f2e35a3aSmrg UNI(0x44, 0x0394); /* GREEK CAPITAL LETTER DELTA */ \ 1042f2e35a3aSmrg UNI(0x45, 0x0395); /* GREEK CAPITAL LETTER EPSILON */ \ 1043f2e35a3aSmrg UNI(0x46, 0x0396); /* GREEK CAPITAL LETTER ZETA */ \ 1044f2e35a3aSmrg UNI(0x47, 0x0397); /* GREEK CAPITAL LETTER ETA */ \ 1045f2e35a3aSmrg UNI(0x48, 0x0398); /* GREEK CAPITAL LETTER THETA */ \ 1046f2e35a3aSmrg UNI(0x49, 0x0399); /* GREEK CAPITAL LETTER IOTA */ \ 1047f2e35a3aSmrg UNI(0x4a, 0x039a); /* GREEK CAPITAL LETTER KAPPA */ \ 1048f2e35a3aSmrg UNI(0x4b, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \ 1049f2e35a3aSmrg UNI(0x4c, 0x039c); /* GREEK CAPITAL LETTER MU */ \ 1050f2e35a3aSmrg UNI(0x4d, 0x039d); /* GREEK CAPITAL LETTER NU */ \ 1051f2e35a3aSmrg UNI(0x4e, 0x039e); /* GREEK CAPITAL LETTER XI */ \ 1052f2e35a3aSmrg UNI(0x4f, 0x039f); /* GREEK CAPITAL LETTER OMICRON */ \ 1053f2e35a3aSmrg XXX(0x50, UNDEF); /* reserved */ \ 1054f2e35a3aSmrg UNI(0x51, 0x03a0); /* GREEK CAPITAL LETTER PI */ \ 1055f2e35a3aSmrg UNI(0x52, 0x03a1); /* GREEK CAPITAL LETTER RHO */ \ 1056f2e35a3aSmrg UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \ 1057f2e35a3aSmrg UNI(0x54, 0x03a4); /* GREEK CAPITAL LETTER TAU */ \ 1058f2e35a3aSmrg UNI(0x55, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \ 1059f2e35a3aSmrg UNI(0x56, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \ 1060f2e35a3aSmrg UNI(0x57, 0x03a7); /* GREEK CAPITAL LETTER CHI */ \ 1061f2e35a3aSmrg UNI(0x58, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \ 1062f2e35a3aSmrg UNI(0x59, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \ 1063f2e35a3aSmrg UNI(0x5a, 0x03ac); /* GREEK SMALL LETTER ALPHA WITH TONOS */ \ 1064f2e35a3aSmrg UNI(0x5b, 0x03ad); /* GREEK SMALL LETTER EPSILON WITH TONOS */ \ 1065f2e35a3aSmrg UNI(0x5c, 0x03ae); /* GREEK SMALL LETTER ETA WITH TONOS */ \ 1066f2e35a3aSmrg UNI(0x5d, 0x03af); /* GREEK SMALL LETTER IOTA WITH TONOS */ \ 1067f2e35a3aSmrg XXX(0x5e, UNDEF); /* reserved */ \ 1068f2e35a3aSmrg UNI(0x5f, 0x03cc); /* GREEK SMALL LETTER OMICRON WITH TONOS */ \ 1069f2e35a3aSmrg UNI(0x60, 0x03cb); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ \ 1070f2e35a3aSmrg UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \ 1071f2e35a3aSmrg UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \ 1072f2e35a3aSmrg UNI(0x63, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \ 1073f2e35a3aSmrg UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \ 1074f2e35a3aSmrg UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \ 1075f2e35a3aSmrg UNI(0x66, 0x03b6); /* GREEK SMALL LETTER ZETA */ \ 1076f2e35a3aSmrg UNI(0x67, 0x03b7); /* GREEK SMALL LETTER ETA */ \ 1077f2e35a3aSmrg UNI(0x68, 0x03b8); /* GREEK SMALL LETTER THETA */ \ 1078f2e35a3aSmrg UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \ 1079f2e35a3aSmrg UNI(0x6a, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \ 1080f2e35a3aSmrg UNI(0x6b, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \ 1081f2e35a3aSmrg UNI(0x6c, 0x03bc); /* GREEK SMALL LETTER MU */ \ 1082f2e35a3aSmrg UNI(0x6d, 0x03bd); /* GREEK SMALL LETTER NU */ \ 1083f2e35a3aSmrg UNI(0x6e, 0x03be); /* GREEK SMALL LETTER XI */ \ 1084f2e35a3aSmrg UNI(0x6f, 0x03bf); /* GREEK SMALL LETTER OMICRON */ \ 1085f2e35a3aSmrg XXX(0x70, UNDEF); /* reserved */ \ 1086f2e35a3aSmrg UNI(0x71, 0x03c0); /* GREEK SMALL LETTER PI */ \ 1087f2e35a3aSmrg UNI(0x72, 0x03c1); /* GREEK SMALL LETTER RHO */ \ 1088f2e35a3aSmrg UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \ 1089f2e35a3aSmrg UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \ 1090f2e35a3aSmrg UNI(0x75, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \ 1091f2e35a3aSmrg UNI(0x76, 0x03c6); /* GREEK SMALL LETTER PHI */ \ 1092f2e35a3aSmrg UNI(0x77, 0x03c7); /* GREEK SMALL LETTER CHI */ \ 1093f2e35a3aSmrg UNI(0x78, 0x03c8); /* GREEK SMALL LETTER PSI */ \ 1094f2e35a3aSmrg UNI(0x79, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \ 1095f2e35a3aSmrg UNI(0x7a, 0x03c2); /* GREEK SMALL LETTER FINAL SIGMA */ \ 1096f2e35a3aSmrg UNI(0x7b, 0x03cd); /* GREEK SMALL LETTER UPSILON WITH TONOS */ \ 1097f2e35a3aSmrg UNI(0x7c, 0x03ce); /* GREEK SMALL LETTER OMEGA WITH TONOS */ \ 1098f2e35a3aSmrg UNI(0x7d, 0x0384); /* GREEK TONOS */ \ 1099f2e35a3aSmrg XXX(0x7e, UNDEF); /* reserved */ \ 1100f2e35a3aSmrg } \ 1101f2e35a3aSmrg end_CODEPAGE() 1102f2e35a3aSmrg /* figure A-22 "DEC Hebrew Supplemental Character Set" */ 1103f2e35a3aSmrg#define map_DEC_Hebrew_Supp(code) \ 1104f2e35a3aSmrg begin_CODEPAGE(); \ 1105f2e35a3aSmrg switch (code) { \ 1106f2e35a3aSmrg UNI(0x21, 0x00a1); /* INVERTED EXCLAMATION MARK */ \ 1107f2e35a3aSmrg UNI(0x22, 0x00a2); /* CENT SIGN */ \ 1108f2e35a3aSmrg UNI(0x23, 0x00a3); /* POUND SIGN */ \ 1109f2e35a3aSmrg XXX(0x24, UNDEF); /* CURRENCY SIGN */ \ 1110f2e35a3aSmrg UNI(0x25, 0x00a5); /* YEN SIGN */ \ 1111f2e35a3aSmrg XXX(0x26, UNDEF); /* BROKEN BAR */ \ 1112f2e35a3aSmrg UNI(0x27, 0x00a7); /* SECTION SIGN */ \ 1113f2e35a3aSmrg UNI(0x28, 0x00a8); /* DIAERESIS */ \ 1114f2e35a3aSmrg UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \ 1115f2e35a3aSmrg UNI(0x2a, 0x00d7); /* MULTIPLICATION SIGN */ \ 1116f2e35a3aSmrg UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1117f2e35a3aSmrg XXX(0x2c, UNDEF); /* NOT SIGN */ \ 1118f2e35a3aSmrg XXX(0x2d, UNDEF); /* SOFT HYPHEN */ \ 1119f2e35a3aSmrg XXX(0x2e, UNDEF); /* REGISTERED SIGN */ \ 1120f2e35a3aSmrg XXX(0x2f, UNDEF); /* MACRON */ \ 1121f2e35a3aSmrg UNI(0x30, 0x00b0); /* DEGREE SIGN */ \ 1122f2e35a3aSmrg UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \ 1123f2e35a3aSmrg UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \ 1124f2e35a3aSmrg UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \ 1125f2e35a3aSmrg XXX(0x34, UNDEF); /* ACUTE ACCENT */ \ 1126f2e35a3aSmrg UNI(0x35, 0x00b5); /* MICRO SIGN */ \ 1127f2e35a3aSmrg UNI(0x36, 0x00b6); /* PILCROW SIGN */ \ 1128f2e35a3aSmrg UNI(0x37, 0x00b7); /* MIDDLE DOT */ \ 1129f2e35a3aSmrg XXX(0x38, UNDEF); /* CEDILLA */ \ 1130f2e35a3aSmrg UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \ 1131f2e35a3aSmrg UNI(0x3a, 0x00f7); /* DIVISION SIGN */ \ 1132f2e35a3aSmrg UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1133f2e35a3aSmrg UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \ 1134f2e35a3aSmrg UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \ 1135f2e35a3aSmrg XXX(0x3e, UNDEF); /* VULGAR FRACTION THREE QUARTERS */ \ 1136f2e35a3aSmrg UNI(0x3f, 0x00bf); /* INVERTED QUESTION MARK */ \ 1137f2e35a3aSmrg XXX(0x40, UNDEF); /* reserved */ \ 1138f2e35a3aSmrg XXX(0x41, UNDEF); /* reserved */ \ 1139f2e35a3aSmrg XXX(0x42, UNDEF); /* reserved */ \ 1140f2e35a3aSmrg XXX(0x43, UNDEF); /* reserved */ \ 1141f2e35a3aSmrg XXX(0x44, UNDEF); /* reserved */ \ 1142f2e35a3aSmrg XXX(0x45, UNDEF); /* reserved */ \ 1143f2e35a3aSmrg XXX(0x46, UNDEF); /* reserved */ \ 1144f2e35a3aSmrg XXX(0x47, UNDEF); /* reserved */ \ 1145f2e35a3aSmrg XXX(0x48, UNDEF); /* reserved */ \ 1146f2e35a3aSmrg XXX(0x49, UNDEF); /* reserved */ \ 1147f2e35a3aSmrg XXX(0x4a, UNDEF); /* reserved */ \ 1148f2e35a3aSmrg XXX(0x4b, UNDEF); /* reserved */ \ 1149f2e35a3aSmrg XXX(0x4c, UNDEF); /* reserved */ \ 1150f2e35a3aSmrg XXX(0x4d, UNDEF); /* reserved */ \ 1151f2e35a3aSmrg XXX(0x4e, UNDEF); /* reserved */ \ 1152f2e35a3aSmrg XXX(0x4f, UNDEF); /* reserved */ \ 1153f2e35a3aSmrg XXX(0x50, UNDEF); /* reserved */ \ 1154f2e35a3aSmrg XXX(0x51, UNDEF); /* reserved */ \ 1155f2e35a3aSmrg XXX(0x52, UNDEF); /* reserved */ \ 1156f2e35a3aSmrg XXX(0x53, UNDEF); /* reserved */ \ 1157f2e35a3aSmrg XXX(0x54, UNDEF); /* reserved */ \ 1158f2e35a3aSmrg XXX(0x55, UNDEF); /* reserved */ \ 1159f2e35a3aSmrg XXX(0x56, UNDEF); /* reserved */ \ 1160f2e35a3aSmrg XXX(0x57, UNDEF); /* reserved */ \ 1161f2e35a3aSmrg XXX(0x58, UNDEF); /* reserved */ \ 1162f2e35a3aSmrg XXX(0x59, UNDEF); /* reserved */ \ 1163f2e35a3aSmrg XXX(0x5a, UNDEF); /* reserved */ \ 1164f2e35a3aSmrg XXX(0x5b, UNDEF); /* reserved */ \ 1165f2e35a3aSmrg XXX(0x5c, UNDEF); /* reserved */ \ 1166f2e35a3aSmrg XXX(0x5d, UNDEF); /* reserved */ \ 1167f2e35a3aSmrg XXX(0x5e, UNDEF); /* reserved */ \ 1168f2e35a3aSmrg XXX(0x5f, UNDEF); /* reserved */ \ 1169f2e35a3aSmrg UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \ 1170f2e35a3aSmrg UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \ 1171f2e35a3aSmrg UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \ 1172f2e35a3aSmrg UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \ 1173f2e35a3aSmrg UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \ 1174f2e35a3aSmrg UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \ 1175f2e35a3aSmrg UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \ 1176f2e35a3aSmrg UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \ 1177f2e35a3aSmrg UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \ 1178f2e35a3aSmrg UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \ 1179f2e35a3aSmrg UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \ 1180f2e35a3aSmrg UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \ 1181f2e35a3aSmrg UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \ 1182f2e35a3aSmrg UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \ 1183f2e35a3aSmrg UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \ 1184f2e35a3aSmrg UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \ 1185f2e35a3aSmrg UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \ 1186f2e35a3aSmrg UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \ 1187f2e35a3aSmrg UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \ 1188f2e35a3aSmrg UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \ 1189f2e35a3aSmrg UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \ 1190f2e35a3aSmrg UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \ 1191f2e35a3aSmrg UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \ 1192f2e35a3aSmrg UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \ 1193f2e35a3aSmrg UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \ 1194f2e35a3aSmrg UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \ 1195f2e35a3aSmrg UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \ 1196f2e35a3aSmrg XXX(0x7b, UNDEF); /* reserved */ \ 1197f2e35a3aSmrg XXX(0x7c, UNDEF); /* reserved */ \ 1198f2e35a3aSmrg XXX(0x7d, UNDEF); /* reserved */ \ 1199f2e35a3aSmrg XXX(0x7e, UNDEF); /* reserved */ \ 1200f2e35a3aSmrg } \ 1201f2e35a3aSmrg end_CODEPAGE() 1202f2e35a3aSmrg /* figure A-27 "DEC 8-Bit Turkish Supplemental Character Set" */ 1203f2e35a3aSmrg#define map_DEC_Turkish_Supp(code) \ 1204f2e35a3aSmrg begin_CODEPAGE(); \ 1205f2e35a3aSmrg switch (code) { \ 1206f2e35a3aSmrg UNI(0x21, 0x00A1); /* INVERTED EXCLAMATION MARK */ \ 1207f2e35a3aSmrg UNI(0x22, 0x00A2); /* CENT SIGN */ \ 1208f2e35a3aSmrg UNI(0x23, 0x00A3); /* POUND SIGN */ \ 1209f2e35a3aSmrg XXX(0x24, UNDEF); /* reserved */ \ 1210f2e35a3aSmrg UNI(0x25, 0x00A5); /* YEN SIGN */ \ 1211f2e35a3aSmrg XXX(0x26, UNDEF); /* reserved */ \ 1212f2e35a3aSmrg UNI(0x27, 0x00A7); /* SECTION SIGN */ \ 1213f2e35a3aSmrg UNI(0x28, 0x00A8); /* DIAERESIS */ \ 1214f2e35a3aSmrg UNI(0x29, 0x00A9); /* COPYRIGHT SIGN */ \ 1215f2e35a3aSmrg UNI(0x2A, 0x00AA); /* FEMININE ORDINAL INDICATOR */ \ 1216f2e35a3aSmrg UNI(0x2B, 0x00AB); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1217f2e35a3aSmrg XXX(0x2C, UNDEF); /* reserved */ \ 1218f2e35a3aSmrg XXX(0x2D, UNDEF); /* reserved */ \ 1219f2e35a3aSmrg UNI(0x2E, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \ 1220f2e35a3aSmrg XXX(0x2F, UNDEF); /* reserved */ \ 1221f2e35a3aSmrg UNI(0x30, 0x00B0); /* DEGREE SIGN */ \ 1222f2e35a3aSmrg UNI(0x31, 0x00B1); /* PLUS-MINUS SIGN */ \ 1223f2e35a3aSmrg UNI(0x32, 0x00B2); /* SUPERSCRIPT TWO */ \ 1224f2e35a3aSmrg UNI(0x33, 0x00B3); /* SUPERSCRIPT THREE */ \ 1225f2e35a3aSmrg XXX(0x34, UNDEF); /* reserved */ \ 1226f2e35a3aSmrg UNI(0x35, 0x00B5); /* MICRO SIGN */ \ 1227f2e35a3aSmrg UNI(0x36, 0x00B6); /* PILCROW SIGN */ \ 1228f2e35a3aSmrg UNI(0x37, 0x00B7); /* MIDDLE DOT */ \ 1229f2e35a3aSmrg XXX(0x38, UNDEF); /* reserved */ \ 1230f2e35a3aSmrg UNI(0x39, 0x00B9); /* SUPERSCRIPT ONE */ \ 1231f2e35a3aSmrg UNI(0x3A, 0x00BA); /* MASCULINE ORDINAL INDICATOR */ \ 1232f2e35a3aSmrg UNI(0x3B, 0x00BB); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \ 1233f2e35a3aSmrg UNI(0x3C, 0x00BC); /* VULGAR FRACTION ONE QUARTER */ \ 1234f2e35a3aSmrg UNI(0x3D, 0x00BD); /* VULGAR FRACTION ONE HALF */ \ 1235f2e35a3aSmrg UNI(0x3E, 0x0131); /* LATIN SMALL LETTER DOTLESS I */ \ 1236f2e35a3aSmrg UNI(0x3F, 0x00BF); /* INVERTED QUESTION MARK */ \ 1237f2e35a3aSmrg UNI(0x40, 0x00C0); /* LATIN CAPITAL LETTER A WITH GRAVE */ \ 1238f2e35a3aSmrg UNI(0x41, 0x00C1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \ 1239f2e35a3aSmrg UNI(0x42, 0x00C2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \ 1240f2e35a3aSmrg UNI(0x43, 0x00C3); /* LATIN CAPITAL LETTER A WITH TILDE */ \ 1241f2e35a3aSmrg UNI(0x44, 0x00C4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \ 1242f2e35a3aSmrg UNI(0x45, 0x00C5); /* LATIN CAPITAL LETTER A WITH RING ABOVE */ \ 1243f2e35a3aSmrg UNI(0x46, 0x00C6); /* LATIN CAPITAL LETTER AE */ \ 1244f2e35a3aSmrg UNI(0x47, 0x00C7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \ 1245f2e35a3aSmrg UNI(0x48, 0x00C8); /* LATIN CAPITAL LETTER E WITH GRAVE */ \ 1246f2e35a3aSmrg UNI(0x49, 0x00C9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \ 1247f2e35a3aSmrg UNI(0x4A, 0x00CA); /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ \ 1248f2e35a3aSmrg UNI(0x4B, 0x00CB); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \ 1249f2e35a3aSmrg UNI(0x4C, 0x00CC); /* LATIN CAPITAL LETTER I WITH GRAVE */ \ 1250f2e35a3aSmrg UNI(0x4D, 0x00CD); /* LATIN CAPITAL LETTER I WITH ACUTE */ \ 1251f2e35a3aSmrg UNI(0x4E, 0x00CE); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \ 1252f2e35a3aSmrg UNI(0x4F, 0x00CF); /* LATIN CAPITAL LETTER I WITH DIAERESIS */ \ 1253f2e35a3aSmrg UNI(0x50, 0x011E); /* LATIN CAPITAL LETTER G WITH BREVE */ \ 1254f2e35a3aSmrg UNI(0x51, 0x00D1); /* LATIN CAPITAL LETTER N WITH TILDE */ \ 1255f2e35a3aSmrg UNI(0x52, 0x00D2); /* LATIN CAPITAL LETTER O WITH GRAVE */ \ 1256f2e35a3aSmrg UNI(0x53, 0x00D3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \ 1257f2e35a3aSmrg UNI(0x54, 0x00D4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \ 1258f2e35a3aSmrg UNI(0x55, 0x00D5); /* LATIN CAPITAL LETTER O WITH TILDE */ \ 1259f2e35a3aSmrg UNI(0x56, 0x00D6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \ 1260f2e35a3aSmrg UNI(0x57, 0x0152); /* LATIN CAPITAL LIGATURE OE */ \ 1261f2e35a3aSmrg UNI(0x58, 0x00D8); /* LATIN CAPITAL LETTER O WITH STROKE */ \ 1262f2e35a3aSmrg UNI(0x59, 0x00D9); /* LATIN CAPITAL LETTER U WITH GRAVE */ \ 1263f2e35a3aSmrg UNI(0x5A, 0x00DA); /* LATIN CAPITAL LETTER U WITH ACUTE */ \ 1264f2e35a3aSmrg UNI(0x5B, 0x00DB); /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ \ 1265f2e35a3aSmrg UNI(0x5C, 0x00DC); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \ 1266f2e35a3aSmrg UNI(0x5D, 0x0178); /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ \ 1267f2e35a3aSmrg UNI(0x5E, 0x015E); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \ 1268f2e35a3aSmrg UNI(0x5F, 0x00DF); /* LATIN SMALL LETTER SHARP S */ \ 1269f2e35a3aSmrg UNI(0x60, 0x00E0); /* LATIN SMALL LETTER A WITH GRAVE */ \ 1270f2e35a3aSmrg UNI(0x61, 0x00E1); /* LATIN SMALL LETTER A WITH ACUTE */ \ 1271f2e35a3aSmrg UNI(0x62, 0x00E2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \ 1272f2e35a3aSmrg UNI(0x63, 0x00E3); /* LATIN SMALL LETTER A WITH TILDE */ \ 1273f2e35a3aSmrg UNI(0x64, 0x00E4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \ 1274f2e35a3aSmrg UNI(0x65, 0x00E5); /* LATIN SMALL LETTER A WITH RING ABOVE */ \ 1275f2e35a3aSmrg UNI(0x66, 0x00E6); /* LATIN SMALL LETTER AE */ \ 1276f2e35a3aSmrg UNI(0x67, 0x00E7); /* LATIN SMALL LETTER C WITH CEDILLA */ \ 1277f2e35a3aSmrg UNI(0x68, 0x00E8); /* LATIN SMALL LETTER E WITH GRAVE */ \ 1278f2e35a3aSmrg UNI(0x69, 0x00E9); /* LATIN SMALL LETTER E WITH ACUTE */ \ 1279f2e35a3aSmrg UNI(0x6A, 0x00EA); /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ \ 1280f2e35a3aSmrg UNI(0x6B, 0x00EB); /* LATIN SMALL LETTER E WITH DIAERESIS */ \ 1281f2e35a3aSmrg UNI(0x6C, 0x00EC); /* LATIN SMALL LETTER I WITH GRAVE */ \ 1282f2e35a3aSmrg UNI(0x6D, 0x00ED); /* LATIN SMALL LETTER I WITH ACUTE */ \ 1283f2e35a3aSmrg UNI(0x6E, 0x00EE); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \ 1284f2e35a3aSmrg UNI(0x6F, 0x00EF); /* LATIN SMALL LETTER I WITH DIAERESIS */ \ 1285f2e35a3aSmrg UNI(0x70, 0x011F); /* LATIN SMALL LETTER G WITH BREVE */ \ 1286f2e35a3aSmrg UNI(0x71, 0x00F1); /* LATIN SMALL LETTER N WITH TILDE */ \ 1287f2e35a3aSmrg UNI(0x72, 0x00F2); /* LATIN SMALL LETTER O WITH GRAVE */ \ 1288f2e35a3aSmrg UNI(0x73, 0x00F3); /* LATIN SMALL LETTER O WITH ACUTE */ \ 1289f2e35a3aSmrg UNI(0x74, 0x00F4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \ 1290f2e35a3aSmrg UNI(0x75, 0x00F5); /* LATIN SMALL LETTER O WITH TILDE */ \ 1291f2e35a3aSmrg UNI(0x76, 0x00F6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \ 1292f2e35a3aSmrg UNI(0x77, 0x0153); /* LATIN SMALL LIGATURE OE */ \ 1293f2e35a3aSmrg UNI(0x78, 0x00F8); /* LATIN SMALL LETTER O WITH STROKE */ \ 1294f2e35a3aSmrg UNI(0x79, 0x00F9); /* LATIN SMALL LETTER U WITH GRAVE */ \ 1295f2e35a3aSmrg UNI(0x7A, 0x00FA); /* LATIN SMALL LETTER U WITH ACUTE */ \ 1296f2e35a3aSmrg UNI(0x7B, 0x00FB); /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ \ 1297f2e35a3aSmrg UNI(0x7C, 0x00FC); /* LATIN SMALL LETTER U WITH DIAERESIS */ \ 1298f2e35a3aSmrg UNI(0x7D, 0x00FF); /* LATIN SMALL LETTER Y WITH DIAERESIS */ \ 1299f2e35a3aSmrg UNI(0x7E, 0x015F); /* LATIN SMALL LETTER S WITH CEDILLA */ \ 1300f2e35a3aSmrg } \ 1301f2e35a3aSmrg end_CODEPAGE() 1302f2e35a3aSmrg /* 1303f2e35a3aSmrg * mentioned, but not documented in VT510 manual, etc., this uses 1304f2e35a3aSmrg * the ELOT927 table from Kermit 95: 1305f2e35a3aSmrg */ 1306f2e35a3aSmrg#define map_NRCS_Greek(code) \ 1307f2e35a3aSmrg switch (code) { \ 1308f2e35a3aSmrg MAP(0x61, 0x0391); /* CAPITAL GREEK LETTER ALPHA */ \ 1309f2e35a3aSmrg MAP(0x62, 0x0392); /* CAPITAL GREEK LETTER BETA */ \ 1310f2e35a3aSmrg MAP(0x63, 0x0393); /* CAPITAL GREEK LETTER GAMMA */ \ 1311f2e35a3aSmrg MAP(0x64, 0x0394); /* CAPITAL GREEK LETTER DELTA */ \ 1312f2e35a3aSmrg MAP(0x65, 0x0395); /* CAPITAL GREEK LETTER EPSILON */ \ 1313f2e35a3aSmrg MAP(0x66, 0x0396); /* CAPITAL GREEK LETTER ZETA */ \ 1314f2e35a3aSmrg MAP(0x67, 0x0397); /* CAPITAL GREEK LETTER ETA */ \ 1315f2e35a3aSmrg MAP(0x68, 0x0398); /* CAPITAL GREEK LETTER THETA */ \ 1316f2e35a3aSmrg MAP(0x69, 0x0399); /* CAPITAL GREEK LETTER IOTA */ \ 1317f2e35a3aSmrg MAP(0x6a, 0x039a); /* CAPITAL GREEK LETTER KAPPA */ \ 1318f2e35a3aSmrg MAP(0x6b, 0x039b); /* CAPITAL GREEK LETTER LAMDA */ \ 1319f2e35a3aSmrg MAP(0x6c, 0x039c); /* CAPITAL GREEK LETTER MU */ \ 1320f2e35a3aSmrg MAP(0x6d, 0x039d); /* CAPITAL GREEK LETTER NU */ \ 1321f2e35a3aSmrg MAP(0x6e, 0x03a7); /* CAPITAL GREEK LETTER KSI (CHI) */ \ 1322f2e35a3aSmrg MAP(0x6f, 0x039f); /* CAPITAL GREEK LETTER OMICRON */ \ 1323f2e35a3aSmrg MAP(0x70, 0x03a0); /* CAPITAL GREEK LETTER PI */ \ 1324f2e35a3aSmrg MAP(0x71, 0x03a1); /* CAPITAL GREEK LETTER RHO */ \ 1325f2e35a3aSmrg MAP(0x72, 0x03a3); /* CAPITAL GREEK LETTER SIGMA */ \ 1326f2e35a3aSmrg MAP(0x73, 0x03a4); /* CAPITAL GREEK LETTER TAU */ \ 1327f2e35a3aSmrg MAP(0x74, 0x03a5); /* CAPITAL GREEK LETTER UPSILON */ \ 1328f2e35a3aSmrg MAP(0x75, 0x03a6); /* CAPITAL GREEK LETTER FI (PHI) */ \ 1329f2e35a3aSmrg MAP(0x76, 0x039e); /* CAPITAL GREEK LETTER XI */ \ 1330f2e35a3aSmrg MAP(0x77, 0x03a8); /* CAPITAL GREEK LETTER PSI */ \ 1331f2e35a3aSmrg MAP(0x78, 0x03a9); /* CAPITAL GREEK LETTER OMEGA */ \ 1332f2e35a3aSmrg XXX(0x79, BLANK); /* unused */ \ 1333f2e35a3aSmrg XXX(0x7a, BLANK); /* unused */ \ 1334f2e35a3aSmrg } 1335f2e35a3aSmrg /* figure A-21 "DEC 7-Bit Hebrew Character Set" */ 1336f2e35a3aSmrg#define map_NRCS_Hebrew(code) \ 1337f2e35a3aSmrg switch (code) { \ 1338f2e35a3aSmrg UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \ 1339f2e35a3aSmrg UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \ 1340f2e35a3aSmrg UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \ 1341f2e35a3aSmrg UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \ 1342f2e35a3aSmrg UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \ 1343f2e35a3aSmrg UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \ 1344f2e35a3aSmrg UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \ 1345f2e35a3aSmrg UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \ 1346f2e35a3aSmrg UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \ 1347f2e35a3aSmrg UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \ 1348f2e35a3aSmrg UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \ 1349f2e35a3aSmrg UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \ 1350f2e35a3aSmrg UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \ 1351f2e35a3aSmrg UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \ 1352f2e35a3aSmrg UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \ 1353f2e35a3aSmrg UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \ 1354f2e35a3aSmrg UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \ 1355f2e35a3aSmrg UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \ 1356f2e35a3aSmrg UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \ 1357f2e35a3aSmrg UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \ 1358f2e35a3aSmrg UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \ 1359f2e35a3aSmrg UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \ 1360f2e35a3aSmrg UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \ 1361f2e35a3aSmrg UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \ 1362f2e35a3aSmrg UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \ 1363f2e35a3aSmrg UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \ 1364f2e35a3aSmrg UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \ 1365f2e35a3aSmrg } 1366f2e35a3aSmrg /* figure A-26 "DEC 7-Bit Turkish Character Set" */ 1367f2e35a3aSmrg#define map_NRCS_Turkish(code) \ 1368f2e35a3aSmrg switch (code) { \ 1369f2e35a3aSmrg UNI(0x26, 0x011f); /* LATIN SMALL LETTER G WITH BREVE */ \ 1370f2e35a3aSmrg UNI(0x40, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \ 1371f2e35a3aSmrg UNI(0x5b, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \ 1372f2e35a3aSmrg UNI(0x5c, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \ 1373f2e35a3aSmrg UNI(0x5d, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \ 1374f2e35a3aSmrg UNI(0x5e, 0x00dC); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \ 1375f2e35a3aSmrg UNI(0x60, 0x011e); /* LATIN CAPITAL LETTER G WITH BREVE */ \ 1376f2e35a3aSmrg UNI(0x7b, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \ 1377f2e35a3aSmrg UNI(0x7c, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \ 1378f2e35a3aSmrg UNI(0x7d, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \ 1379f2e35a3aSmrg UNI(0x7e, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \ 1380d522f475Smrg } 1381e0a2b6dfSmrg#else 1382f2e35a3aSmrg#define map_DEC_Cyrillic(code) /* nothing */ 1383f2e35a3aSmrg#define map_DEC_Greek_Supp(code) /* nothing */ 1384f2e35a3aSmrg#define map_DEC_Hebrew_Supp(code) /* nothing */ 1385f2e35a3aSmrg#define map_DEC_Technical(code) /* nothing */ 1386f2e35a3aSmrg#define map_DEC_Turkish_Supp(code) /* nothing */ 1387f2e35a3aSmrg#define map_ISO_Greek_Supp(code) /* nothing */ 1388f2e35a3aSmrg#define map_ISO_Hebrew(code) /* nothing */ 1389f2e35a3aSmrg#define map_ISO_Latin_2(code) /* nothing */ 1390f2e35a3aSmrg#define map_ISO_Latin_5(code) /* nothing */ 1391f2e35a3aSmrg#define map_ISO_Latin_Cyrillic(code) /* nothing */ 1392f2e35a3aSmrg#define map_NRCS_Greek(code) /* nothing */ 1393f2e35a3aSmrg#define map_NRCS_Hebrew(code) /* nothing */ 1394f2e35a3aSmrg#define map_NRCS_Turkish(code) /* nothing */ 1395e0a2b6dfSmrg#endif /* OPT_WIDE_CHARS */ 1396e0a2b6dfSmrg 1397e0a2b6dfSmrg/* 1398e0a2b6dfSmrg * Translate an input keysym to the corresponding NRC keysym. 1399e0a2b6dfSmrg */ 1400e0a2b6dfSmrgunsigned 1401f2e35a3aSmrgxtermCharSetIn(XtermWidget xw, unsigned code, DECNRCM_codes charset) 1402e0a2b6dfSmrg{ 1403f2e35a3aSmrg TScreen *screen = TScreenOf(xw); 1404e0a2b6dfSmrg#define MAP(to, from) case from: code = to; break 1405e0a2b6dfSmrg 1406e0a2b6dfSmrg#if OPT_WIDE_CHARS 1407e0a2b6dfSmrg#define UNI(to, from) case from: if (screen->utf8_nrc_mode) code = to; break 1408e0a2b6dfSmrg#else 1409e0a2b6dfSmrg#define UNI(to, from) case from: break 1410e0a2b6dfSmrg#endif 1411e0a2b6dfSmrg 1412e0a2b6dfSmrg#define XXX(to, from) /* no defined mapping to 0..255 */ 1413e0a2b6dfSmrg 1414e0a2b6dfSmrg TRACE(("CHARSET-IN GL=%s(G%d) GR=%s(G%d) SS%d\n\t%s\n", 1415e0a2b6dfSmrg visibleScsCode(screen->gsets[screen->curgl]), screen->curgl, 1416e0a2b6dfSmrg visibleScsCode(screen->gsets[screen->curgr]), screen->curgr, 1417e0a2b6dfSmrg screen->curss, 1418e0a2b6dfSmrg visibleUChar(code))); 1419e0a2b6dfSmrg 1420f2e35a3aSmrg (void) screen; 1421e0a2b6dfSmrg switch (charset) { 1422e0a2b6dfSmrg case nrc_British: /* United Kingdom set (or Latin 1) */ 1423e0a2b6dfSmrg if (code == XK_sterling) 1424e0a2b6dfSmrg code = 0x23; 1425e0a2b6dfSmrg code &= 0x7f; 1426e0a2b6dfSmrg break; 1427e0a2b6dfSmrg 1428e0a2b6dfSmrg case nrc_DEC_Alt_Chars: 1429e0a2b6dfSmrg case nrc_DEC_Alt_Graphics: 1430e0a2b6dfSmrg case nrc_ASCII: 1431e0a2b6dfSmrg break; 1432e0a2b6dfSmrg 1433e0a2b6dfSmrg case nrc_DEC_Spec_Graphic: 1434e0a2b6dfSmrg break; 1435e0a2b6dfSmrg 1436e0a2b6dfSmrg case nrc_DEC_Supp: 1437f2e35a3aSmrg map_DEC_Supp_Graphic(code, code &= 0x7f); 1438e0a2b6dfSmrg break; 1439e0a2b6dfSmrg 1440e0a2b6dfSmrg case nrc_DEC_Supp_Graphic: 1441f2e35a3aSmrg map_DEC_Supp_Graphic(code, code |= 0x80); 1442e0a2b6dfSmrg break; 1443e0a2b6dfSmrg 1444e0a2b6dfSmrg case nrc_DEC_Technical: 1445f2e35a3aSmrg map_DEC_Technical(code); 1446e0a2b6dfSmrg break; 1447e0a2b6dfSmrg 1448e0a2b6dfSmrg case nrc_Dutch: 1449e0a2b6dfSmrg map_NRCS_Dutch(code); 1450e0a2b6dfSmrg break; 1451e0a2b6dfSmrg 1452e0a2b6dfSmrg case nrc_Finnish: 1453e0a2b6dfSmrg case nrc_Finnish2: 1454e0a2b6dfSmrg map_NRCS_Finnish(code); 1455e0a2b6dfSmrg break; 1456e0a2b6dfSmrg 1457e0a2b6dfSmrg case nrc_French: 1458e0a2b6dfSmrg case nrc_French2: 1459e0a2b6dfSmrg map_NRCS_French(code); 1460e0a2b6dfSmrg break; 1461e0a2b6dfSmrg 1462e0a2b6dfSmrg case nrc_French_Canadian: 1463e0a2b6dfSmrg map_NRCS_French_Canadian(code); 1464e0a2b6dfSmrg break; 1465e0a2b6dfSmrg 1466e0a2b6dfSmrg case nrc_German: 1467e0a2b6dfSmrg map_NRCS_German(code); 1468e0a2b6dfSmrg break; 1469e0a2b6dfSmrg 1470f2e35a3aSmrg case nrc_Greek: 1471f2e35a3aSmrg map_NRCS_Greek(code); /* FIXME - ELOT? */ 1472f2e35a3aSmrg break; 1473f2e35a3aSmrg 1474f2e35a3aSmrg case nrc_DEC_Greek_Supp: 1475f2e35a3aSmrg map_DEC_Greek_Supp(code); 1476f2e35a3aSmrg break; 1477f2e35a3aSmrg 1478f2e35a3aSmrg case nrc_ISO_Greek_Supp: 1479f2e35a3aSmrg map_ISO_Greek_Supp(code); 1480f2e35a3aSmrg break; 1481f2e35a3aSmrg 1482f2e35a3aSmrg case nrc_DEC_Hebrew_Supp: 1483f2e35a3aSmrg map_DEC_Hebrew_Supp(code); 1484f2e35a3aSmrg break; 1485f2e35a3aSmrg 1486e0a2b6dfSmrg case nrc_Hebrew: 1487f2e35a3aSmrg map_NRCS_Hebrew(code); 1488f2e35a3aSmrg break; 1489f2e35a3aSmrg 1490f2e35a3aSmrg case nrc_ISO_Hebrew_Supp: 1491f2e35a3aSmrg map_ISO_Hebrew(code); 1492e0a2b6dfSmrg break; 1493e0a2b6dfSmrg 1494e0a2b6dfSmrg case nrc_Italian: 1495e0a2b6dfSmrg map_NRCS_Italian(code); 1496e0a2b6dfSmrg break; 1497e0a2b6dfSmrg 1498f2e35a3aSmrg case nrc_ISO_Latin_2_Supp: 1499f2e35a3aSmrg map_ISO_Latin_2(code); 1500f2e35a3aSmrg break; 1501f2e35a3aSmrg 1502f2e35a3aSmrg case nrc_ISO_Latin_5_Supp: 1503f2e35a3aSmrg map_ISO_Latin_5(code); 1504f2e35a3aSmrg break; 1505f2e35a3aSmrg 1506f2e35a3aSmrg case nrc_ISO_Latin_Cyrillic: 1507f2e35a3aSmrg map_ISO_Latin_Cyrillic(code); 1508f2e35a3aSmrg break; 1509f2e35a3aSmrg 1510e0a2b6dfSmrg case nrc_Norwegian_Danish: 1511e0a2b6dfSmrg case nrc_Norwegian_Danish2: 1512e0a2b6dfSmrg case nrc_Norwegian_Danish3: 1513e0a2b6dfSmrg map_NRCS_Norwegian_Danish(code); 1514e0a2b6dfSmrg break; 1515e0a2b6dfSmrg 1516e0a2b6dfSmrg case nrc_Portugese: 1517e0a2b6dfSmrg map_NRCS_Portuguese(code); 1518e0a2b6dfSmrg break; 1519e0a2b6dfSmrg 1520e0a2b6dfSmrg case nrc_SCS_NRCS: /* vt5xx - probably Serbo/Croatian */ 1521e0a2b6dfSmrg /* FIXME */ 1522e0a2b6dfSmrg break; 1523e0a2b6dfSmrg 1524e0a2b6dfSmrg case nrc_Spanish: 1525e0a2b6dfSmrg map_NRCS_Spanish(code); 1526e0a2b6dfSmrg break; 1527e0a2b6dfSmrg 1528e0a2b6dfSmrg case nrc_Swedish2: 1529e0a2b6dfSmrg case nrc_Swedish: 1530e0a2b6dfSmrg map_NRCS_Swedish(code); 1531e0a2b6dfSmrg break; 1532e0a2b6dfSmrg 1533e0a2b6dfSmrg case nrc_Swiss: 1534e0a2b6dfSmrg map_NRCS_Swiss(code); 1535e0a2b6dfSmrg break; 1536e0a2b6dfSmrg 1537e0a2b6dfSmrg case nrc_Turkish: 1538f2e35a3aSmrg map_NRCS_Turkish(code); 1539f2e35a3aSmrg break; 1540f2e35a3aSmrg 1541f2e35a3aSmrg case nrc_DEC_Turkish_Supp: 1542f2e35a3aSmrg map_DEC_Turkish_Supp(code); 1543e0a2b6dfSmrg break; 1544e0a2b6dfSmrg 1545f2e35a3aSmrg case nrc_DEC_Cyrillic: 1546f2e35a3aSmrg map_DEC_Cyrillic(code); 1547f2e35a3aSmrg break; 1548f2e35a3aSmrg 1549f2e35a3aSmrg case nrc_ISO_Latin_1_Supp: 1550f2e35a3aSmrg case nrc_British_Latin_1: 1551f2e35a3aSmrg case nrc_Russian: 1552f2e35a3aSmrg case nrc_French_Canadian2: 1553f2e35a3aSmrg case nrc_Unknown: 1554e0a2b6dfSmrg default: /* any character sets we don't recognize */ 1555e0a2b6dfSmrg break; 15562eaa94a1Schristos } 1557e0a2b6dfSmrg code &= 0x7f; /* NRC in any case is 7-bit */ 1558e0a2b6dfSmrg TRACE(("->\t%s\n", 1559e0a2b6dfSmrg visibleUChar(code))); 15602eaa94a1Schristos return code; 15612eaa94a1Schristos#undef MAP 1562e0a2b6dfSmrg#undef UNI 1563e0a2b6dfSmrg#undef XXX 1564d522f475Smrg} 1565d522f475Smrg 1566d522f475Smrg/* 1567d522f475Smrg * Translate a string to the display form. This assumes the font has the 1568d522f475Smrg * DEC graphic characters in cells 0-31, and otherwise is ISO-8859-1. 1569d522f475Smrg */ 15702eaa94a1Schristosint 1571f2e35a3aSmrgxtermCharSetOut(XtermWidget xw, IChar *buf, IChar *ptr, DECNRCM_codes leftset) 1572d522f475Smrg{ 15732eaa94a1Schristos IChar *s; 15742eaa94a1Schristos TScreen *screen = TScreenOf(xw); 15752eaa94a1Schristos int count = 0; 1576f2e35a3aSmrg DECNRCM_codes rightset = screen->gsets[(int) (screen->curgr)]; 15772eaa94a1Schristos 15782eaa94a1Schristos#define MAP(from, to) case from: chr = to; break 15792eaa94a1Schristos 1580e0a2b6dfSmrg#if OPT_WIDE_CHARS 1581e0a2b6dfSmrg#define UNI(from, to) case from: if (screen->utf8_nrc_mode) chr = to; break 1582e0a2b6dfSmrg#define XXX(from, to) UNI(from, to) 1583e0a2b6dfSmrg#else 1584e0a2b6dfSmrg#define UNI(old, new) chr = old; break 1585e0a2b6dfSmrg#define XXX(from, to) /* nothing */ 1586e0a2b6dfSmrg#endif 1587e0a2b6dfSmrg 1588e0a2b6dfSmrg TRACE(("CHARSET-OUT GL=%s(G%d) GR=%s(G%d) SS%d\n\t%s\n", 1589e0a2b6dfSmrg visibleScsCode(leftset), screen->curgl, 1590e0a2b6dfSmrg visibleScsCode(rightset), screen->curgr, 15912eaa94a1Schristos screen->curss, 1592e0a2b6dfSmrg visibleIChars(buf, (unsigned) (ptr - buf)))); 15932eaa94a1Schristos 15942eaa94a1Schristos for (s = buf; s < ptr; ++s) { 15952eaa94a1Schristos int eight = CharOf(E2A(*s)); 15962eaa94a1Schristos int seven = eight & 0x7f; 1597f2e35a3aSmrg DECNRCM_codes cs = (eight >= 128) ? rightset : leftset; 15982eaa94a1Schristos int chr = eight; 15992eaa94a1Schristos 16002eaa94a1Schristos count++; 16012eaa94a1Schristos#if OPT_WIDE_CHARS 16022eaa94a1Schristos /* 1603f2e35a3aSmrg * This is only partly right - prevent inadvertent remapping of 16042eaa94a1Schristos * the replacement character and other non-8bit codes into bogus 16052eaa94a1Schristos * 8bit codes. 16062eaa94a1Schristos */ 1607e0a2b6dfSmrg if (screen->utf8_mode || screen->utf8_nrc_mode) { 16082eaa94a1Schristos if (*s > 255) 16092eaa94a1Schristos continue; 16102eaa94a1Schristos } 16112eaa94a1Schristos#endif 1612e0a2b6dfSmrg if (*s < 32) 1613e0a2b6dfSmrg continue; 1614e0a2b6dfSmrg 16152eaa94a1Schristos switch (cs) { 1616f2e35a3aSmrg case nrc_ISO_Latin_1_Supp: 1617f2e35a3aSmrg /* FALLTHRU */ 1618e0a2b6dfSmrg case nrc_British_Latin_1: 1619e0a2b6dfSmrg /* FALLTHRU */ 1620e0a2b6dfSmrg case nrc_British: /* United Kingdom set (or Latin 1) */ 16212eaa94a1Schristos if ((xw->flags & NATIONAL) 16222eaa94a1Schristos || (screen->vtXX_level <= 1)) { 1623e0a2b6dfSmrg if ((xw->flags & NATIONAL)) { 1624e0a2b6dfSmrg chr = seven; 1625e0a2b6dfSmrg } 16262eaa94a1Schristos if (chr == 0x23) { 16272eaa94a1Schristos chr = XTERM_POUND; 1628e0a2b6dfSmrg#if OPT_WIDE_CHARS 1629e0a2b6dfSmrg if (screen->utf8_nrc_mode) { 1630e0a2b6dfSmrg chr = 0xa3; 1631e0a2b6dfSmrg } 16322eaa94a1Schristos#endif 16332eaa94a1Schristos } 16342eaa94a1Schristos } else { 16352eaa94a1Schristos chr = (seven | 0x80); 16362eaa94a1Schristos } 16372eaa94a1Schristos break; 1638d522f475Smrg 1639e0a2b6dfSmrg case nrc_DEC_Alt_Chars: 1640e0a2b6dfSmrg case nrc_DEC_Alt_Graphics: 1641e0a2b6dfSmrg case nrc_ASCII: 16422eaa94a1Schristos break; 1643d522f475Smrg 1644e0a2b6dfSmrg case nrc_DEC_Spec_Graphic: 16452eaa94a1Schristos if (seven > 0x5f && seven <= 0x7e) { 1646d522f475Smrg#if OPT_WIDE_CHARS 1647e0a2b6dfSmrg if (screen->utf8_mode || screen->utf8_nrc_mode) 1648f2e35a3aSmrg chr = (int) dec2ucs(screen, (unsigned) (seven - 0x5f)); 16492eaa94a1Schristos else 1650d522f475Smrg#endif 16512eaa94a1Schristos chr = seven - 0x5f; 1652f2e35a3aSmrg } else if (chr == 0x5f) { 1653f2e35a3aSmrg chr = 0; 16542eaa94a1Schristos } else { 16552eaa94a1Schristos chr = seven; 16562eaa94a1Schristos } 16572eaa94a1Schristos break; 16582eaa94a1Schristos 1659e0a2b6dfSmrg case nrc_DEC_Supp: 1660f2e35a3aSmrg map_DEC_Supp_Graphic(chr = seven, chr |= 0x80); 16612eaa94a1Schristos break; 16622eaa94a1Schristos 1663e0a2b6dfSmrg case nrc_DEC_Supp_Graphic: 1664f2e35a3aSmrg map_DEC_Supp_Graphic(chr = seven, chr |= 0x80); 16652eaa94a1Schristos break; 16662eaa94a1Schristos 1667e0a2b6dfSmrg case nrc_DEC_Technical: 1668f2e35a3aSmrg map_DEC_Technical(chr = seven); 16692eaa94a1Schristos break; 16702eaa94a1Schristos 1671e0a2b6dfSmrg case nrc_Dutch: 1672e0a2b6dfSmrg map_NRCS_Dutch(chr = seven); 16732eaa94a1Schristos break; 16742eaa94a1Schristos 1675e0a2b6dfSmrg case nrc_Finnish: 1676e0a2b6dfSmrg case nrc_Finnish2: 1677e0a2b6dfSmrg map_NRCS_Finnish(chr = seven); 16782eaa94a1Schristos break; 16792eaa94a1Schristos 1680e0a2b6dfSmrg case nrc_French: 1681e0a2b6dfSmrg case nrc_French2: 1682e0a2b6dfSmrg map_NRCS_French(chr = seven); 16832eaa94a1Schristos break; 16842eaa94a1Schristos 1685e0a2b6dfSmrg case nrc_French_Canadian: 1686e0a2b6dfSmrg case nrc_French_Canadian2: 1687e0a2b6dfSmrg map_NRCS_French_Canadian(chr = seven); 16882eaa94a1Schristos break; 16892eaa94a1Schristos 1690e0a2b6dfSmrg case nrc_German: 1691e0a2b6dfSmrg map_NRCS_German(chr = seven); 16922eaa94a1Schristos break; 16932eaa94a1Schristos 1694f2e35a3aSmrg case nrc_Greek: 1695f2e35a3aSmrg map_NRCS_Greek(chr = seven); /* FIXME - ELOT? */ 1696f2e35a3aSmrg break; 1697f2e35a3aSmrg 1698f2e35a3aSmrg case nrc_DEC_Greek_Supp: 1699f2e35a3aSmrg map_DEC_Greek_Supp(chr = seven); 1700f2e35a3aSmrg break; 1701f2e35a3aSmrg 1702f2e35a3aSmrg case nrc_ISO_Greek_Supp: 1703f2e35a3aSmrg map_ISO_Greek_Supp(chr = seven); 1704f2e35a3aSmrg break; 1705f2e35a3aSmrg 1706f2e35a3aSmrg case nrc_DEC_Hebrew_Supp: 1707f2e35a3aSmrg map_DEC_Hebrew_Supp(chr = seven); 1708f2e35a3aSmrg break; 1709f2e35a3aSmrg 1710e0a2b6dfSmrg case nrc_Hebrew: 1711f2e35a3aSmrg map_NRCS_Hebrew(chr = seven); 1712f2e35a3aSmrg break; 1713f2e35a3aSmrg 1714f2e35a3aSmrg case nrc_ISO_Hebrew_Supp: 1715f2e35a3aSmrg map_ISO_Hebrew(chr = seven); 17162eaa94a1Schristos break; 17172eaa94a1Schristos 1718e0a2b6dfSmrg case nrc_Italian: 1719e0a2b6dfSmrg map_NRCS_Italian(chr = seven); 1720e0a2b6dfSmrg break; 1721e0a2b6dfSmrg 1722f2e35a3aSmrg case nrc_ISO_Latin_2_Supp: 1723f2e35a3aSmrg map_ISO_Latin_2(chr = seven); 1724f2e35a3aSmrg break; 1725f2e35a3aSmrg 1726f2e35a3aSmrg case nrc_ISO_Latin_5_Supp: 1727f2e35a3aSmrg map_ISO_Latin_5(chr = seven); 1728f2e35a3aSmrg break; 1729f2e35a3aSmrg 1730f2e35a3aSmrg case nrc_ISO_Latin_Cyrillic: 1731f2e35a3aSmrg map_ISO_Latin_Cyrillic(chr = seven); 1732f2e35a3aSmrg break; 1733f2e35a3aSmrg 1734e0a2b6dfSmrg case nrc_Norwegian_Danish: 1735e0a2b6dfSmrg case nrc_Norwegian_Danish2: 1736e0a2b6dfSmrg case nrc_Norwegian_Danish3: 1737e0a2b6dfSmrg map_NRCS_Norwegian_Danish(chr = seven); 1738e0a2b6dfSmrg break; 1739e0a2b6dfSmrg 1740e0a2b6dfSmrg case nrc_Portugese: 1741e0a2b6dfSmrg map_NRCS_Portuguese(chr = seven); 1742e0a2b6dfSmrg break; 1743e0a2b6dfSmrg 1744e0a2b6dfSmrg case nrc_SCS_NRCS: /* vt5xx - probably Serbo/Croatian */ 1745e0a2b6dfSmrg /* FIXME */ 1746e0a2b6dfSmrg break; 1747e0a2b6dfSmrg 1748e0a2b6dfSmrg case nrc_Spanish: 1749e0a2b6dfSmrg map_NRCS_Spanish(chr = seven); 1750e0a2b6dfSmrg break; 1751e0a2b6dfSmrg 1752e0a2b6dfSmrg case nrc_Swedish2: 1753e0a2b6dfSmrg case nrc_Swedish: 1754e0a2b6dfSmrg map_NRCS_Swedish(chr = seven); 1755e0a2b6dfSmrg break; 1756e0a2b6dfSmrg 1757e0a2b6dfSmrg case nrc_Swiss: 1758e0a2b6dfSmrg map_NRCS_Swiss(chr = seven); 1759e0a2b6dfSmrg break; 1760e0a2b6dfSmrg 1761e0a2b6dfSmrg case nrc_Turkish: 1762f2e35a3aSmrg map_NRCS_Turkish(chr = seven); 17632eaa94a1Schristos break; 17642eaa94a1Schristos 1765f2e35a3aSmrg case nrc_DEC_Turkish_Supp: 1766f2e35a3aSmrg map_DEC_Turkish_Supp(chr = seven); 1767f2e35a3aSmrg break; 1768f2e35a3aSmrg 1769f2e35a3aSmrg case nrc_DEC_Cyrillic: 1770f2e35a3aSmrg map_DEC_Cyrillic(chr = seven); 1771f2e35a3aSmrg break; 1772f2e35a3aSmrg 1773f2e35a3aSmrg case nrc_Russian: 1774f2e35a3aSmrg case nrc_Unknown: 17752eaa94a1Schristos default: /* any character sets we don't recognize */ 17762eaa94a1Schristos count--; 17772eaa94a1Schristos break; 1778d522f475Smrg } 17792eaa94a1Schristos /* 17802eaa94a1Schristos * The state machine already treated DEL as a nonprinting and 1781f2e35a3aSmrg * nonspacing character. If we have DEL now, remove it. 17822eaa94a1Schristos */ 1783f2e35a3aSmrg if (chr == ANSI_DEL) { 1784f2e35a3aSmrg IChar *s1; 1785f2e35a3aSmrg --ptr; 1786f2e35a3aSmrg for (s1 = s; s1 < ptr; ++s1) { 1787f2e35a3aSmrg s1[0] = s1[1]; 1788f2e35a3aSmrg } 1789f2e35a3aSmrg } else { 1790f2e35a3aSmrg *s = (IChar) A2E(chr); 1791f2e35a3aSmrg } 17922eaa94a1Schristos } 17932eaa94a1Schristos TRACE(("%d\t%s\n", 17942eaa94a1Schristos count, 1795e0a2b6dfSmrg visibleIChars(buf, (unsigned) (ptr - buf)))); 17962eaa94a1Schristos return count; 17972eaa94a1Schristos#undef MAP 1798e0a2b6dfSmrg#undef UNI 1799e0a2b6dfSmrg#undef XXX 1800d522f475Smrg} 1801