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