10Sstevel@tonic-gate /* 2*3857Sstevel * Portions Copyright 1998 Sun Microsystems, Inc. All rights reserved. 3*3857Sstevel * Use is subject to license terms. 40Sstevel@tonic-gate */ 50Sstevel@tonic-gate 60Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 70Sstevel@tonic-gate 80Sstevel@tonic-gate /* 90Sstevel@tonic-gate * Copyright (c) 1995 Regents of the University of Michigan. 100Sstevel@tonic-gate * All rights reserved. 110Sstevel@tonic-gate * 120Sstevel@tonic-gate * charset.c 130Sstevel@tonic-gate */ 140Sstevel@tonic-gate 150Sstevel@tonic-gate #if defined( DOS ) || defined( _WIN32 ) 160Sstevel@tonic-gate /* 170Sstevel@tonic-gate * This MUST precede "#ifdef STR_TRANSLATION" 180Sstevel@tonic-gate * because STR_TRANSLATION and friends are defined in msdos.h. 190Sstevel@tonic-gate */ 200Sstevel@tonic-gate #include "msdos.h" 210Sstevel@tonic-gate #endif /* DOS */ 220Sstevel@tonic-gate 230Sstevel@tonic-gate #ifdef STR_TRANSLATION 240Sstevel@tonic-gate 250Sstevel@tonic-gate #ifndef lint 260Sstevel@tonic-gate static char copyright[] = "@(#) Copyright (c) 1995 Regents of the University of Michigan.\nAll rights reserved.\n"; 270Sstevel@tonic-gate #endif 280Sstevel@tonic-gate 290Sstevel@tonic-gate #include <stdio.h> 300Sstevel@tonic-gate #include <string.h> 310Sstevel@tonic-gate 320Sstevel@tonic-gate #ifdef MACOS 330Sstevel@tonic-gate #include <stdlib.h> 340Sstevel@tonic-gate #include "macos.h" 350Sstevel@tonic-gate #endif /* MACOS */ 360Sstevel@tonic-gate 370Sstevel@tonic-gate #if !defined(MACOS) && !defined(DOS) && !defined( _WIN32 ) && !defined(VMS) 380Sstevel@tonic-gate #include <sys/time.h> 390Sstevel@tonic-gate #include <sys/types.h> 400Sstevel@tonic-gate #include <sys/socket.h> 410Sstevel@tonic-gate #include <sys/param.h> 420Sstevel@tonic-gate #endif 430Sstevel@tonic-gate #include "lber.h" 440Sstevel@tonic-gate #include "ldap.h" 450Sstevel@tonic-gate #include "ldap-private.h" 460Sstevel@tonic-gate #include "ldap-int.h" 470Sstevel@tonic-gate 480Sstevel@tonic-gate 490Sstevel@tonic-gate void 500Sstevel@tonic-gate ldap_set_string_translators( LDAP *ld, BERTranslateProc encode_proc, 510Sstevel@tonic-gate BERTranslateProc decode_proc ) 520Sstevel@tonic-gate { 530Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 540Sstevel@tonic-gate LOCK_LDAP(ld); 550Sstevel@tonic-gate #endif 560Sstevel@tonic-gate ld->ld_lber_encode_translate_proc = encode_proc; 570Sstevel@tonic-gate ld->ld_lber_decode_translate_proc = decode_proc; 580Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 590Sstevel@tonic-gate UNLOCK_LDAP(ld); 600Sstevel@tonic-gate #endif 610Sstevel@tonic-gate } 620Sstevel@tonic-gate 630Sstevel@tonic-gate 640Sstevel@tonic-gate void 650Sstevel@tonic-gate ldap_enable_translation( LDAP *ld, LDAPMessage *entry, int enable ) 660Sstevel@tonic-gate { 670Sstevel@tonic-gate char *optionsp; 680Sstevel@tonic-gate 690Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 700Sstevel@tonic-gate LOCK_LDAP(ld); 710Sstevel@tonic-gate #endif 720Sstevel@tonic-gate optionsp = ( entry == NULLMSG ) ? &ld->ld_lberoptions : 730Sstevel@tonic-gate &entry->lm_ber->ber_options; 740Sstevel@tonic-gate 750Sstevel@tonic-gate if ( enable ) { 760Sstevel@tonic-gate *optionsp |= LBER_TRANSLATE_STRINGS; 770Sstevel@tonic-gate } else { 780Sstevel@tonic-gate *optionsp &= ~LBER_TRANSLATE_STRINGS; 790Sstevel@tonic-gate } 800Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 810Sstevel@tonic-gate UNLOCK_LDAP(ld); 820Sstevel@tonic-gate #endif 830Sstevel@tonic-gate } 840Sstevel@tonic-gate 850Sstevel@tonic-gate 860Sstevel@tonic-gate int 870Sstevel@tonic-gate ldap_translate_from_t61( LDAP *ld, char **bufp, unsigned int *lenp, 880Sstevel@tonic-gate int free_input ) 890Sstevel@tonic-gate { 900Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 910Sstevel@tonic-gate BERTranslateProc decode_proc; 920Sstevel@tonic-gate 930Sstevel@tonic-gate LOCK_LDAP(ld); 940Sstevel@tonic-gate #endif 950Sstevel@tonic-gate if ( ld->ld_lber_decode_translate_proc == NULL ) { 960Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 970Sstevel@tonic-gate UNLOCK_LDAP(ld); 980Sstevel@tonic-gate #endif 990Sstevel@tonic-gate return( LDAP_SUCCESS ); 1000Sstevel@tonic-gate } 1010Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 1020Sstevel@tonic-gate decode_proc = ld->ld_lber_decode_translate_proc; 1030Sstevel@tonic-gate UNLOCK_LDAP(ld); 1040Sstevel@tonic-gate 1050Sstevel@tonic-gate return( (*decode_proc)( bufp, lenp, free_input )); 1060Sstevel@tonic-gate #else 1070Sstevel@tonic-gate return( (*ld->ld_lber_decode_translate_proc)( bufp, lenp, free_input )); 1080Sstevel@tonic-gate #endif 1090Sstevel@tonic-gate } 1100Sstevel@tonic-gate 1110Sstevel@tonic-gate 1120Sstevel@tonic-gate int 1130Sstevel@tonic-gate ldap_translate_to_t61( LDAP *ld, char **bufp, unsigned int *lenp, 1140Sstevel@tonic-gate int free_input ) 1150Sstevel@tonic-gate { 1160Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 1170Sstevel@tonic-gate BERTranslateProc encode_proc; 1180Sstevel@tonic-gate 1190Sstevel@tonic-gate LOCK_LDAP(ld); 1200Sstevel@tonic-gate #endif 1210Sstevel@tonic-gate if ( ld->ld_lber_encode_translate_proc == NULL ) { 1220Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 1230Sstevel@tonic-gate UNLOCK_LDAP(ld); 1240Sstevel@tonic-gate #endif 1250Sstevel@tonic-gate return( LDAP_SUCCESS ); 1260Sstevel@tonic-gate } 1270Sstevel@tonic-gate 1280Sstevel@tonic-gate #if defined( SUN ) && defined( _REENTRANT ) 1290Sstevel@tonic-gate encode_proc = ld->ld_lber_encode_translate_proc; 1300Sstevel@tonic-gate UNLOCK_LDAP(ld); 1310Sstevel@tonic-gate return( (*encode_proc)( bufp, lenp, free_input )); 1320Sstevel@tonic-gate #else 1330Sstevel@tonic-gate return( (*ld->ld_lber_encode_translate_proc)( bufp, lenp, free_input )); 1340Sstevel@tonic-gate #endif 1350Sstevel@tonic-gate } 1360Sstevel@tonic-gate 1370Sstevel@tonic-gate 1380Sstevel@tonic-gate /* 1390Sstevel@tonic-gate ** Character translation routine notes: 1400Sstevel@tonic-gate * 1410Sstevel@tonic-gate * On entry: bufp points to a "string" to be converted (not necessarily 1420Sstevel@tonic-gate * zero-terminated) and buflenp points to the length of the buffer. 1430Sstevel@tonic-gate * 1440Sstevel@tonic-gate * On exit: bufp should point to a malloc'd result. If free_input is 1450Sstevel@tonic-gate * non-zero then the original bufp will be freed. *buflenp should be 1460Sstevel@tonic-gate * set to the new length. Zero bytes in the input buffer must be left 1470Sstevel@tonic-gate * as zero bytes. 1480Sstevel@tonic-gate * 1490Sstevel@tonic-gate * Return values: any ldap error code (LDAP_SUCCESS if all goes well). 1500Sstevel@tonic-gate */ 1510Sstevel@tonic-gate 1520Sstevel@tonic-gate 1530Sstevel@tonic-gate #ifdef LDAP_CHARSET_8859 1540Sstevel@tonic-gate 1550Sstevel@tonic-gate #if LDAP_CHARSET_8859 == 88591 1560Sstevel@tonic-gate #define ISO_8859 1 1570Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88592 1580Sstevel@tonic-gate #define ISO_8859 2 1590Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88593 1600Sstevel@tonic-gate #define ISO_8859 3 1610Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88594 1620Sstevel@tonic-gate #define ISO_8859 4 1630Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88595 1640Sstevel@tonic-gate #define ISO_8859 5 1650Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88596 1660Sstevel@tonic-gate #define ISO_8859 6 1670Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88597 1680Sstevel@tonic-gate #define ISO_8859 7 1690Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88598 1700Sstevel@tonic-gate #define ISO_8859 8 1710Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 88599 1720Sstevel@tonic-gate #define ISO_8859 9 1730Sstevel@tonic-gate #elif LDAP_CHARSET_8859 == 885910 1740Sstevel@tonic-gate #define ISO_8859 10 1750Sstevel@tonic-gate #else 1760Sstevel@tonic-gate #define ISO_8859 0 1770Sstevel@tonic-gate #endif 1780Sstevel@tonic-gate 1790Sstevel@tonic-gate /* 1800Sstevel@tonic-gate * the following ISO_8859 to/afrom T.61 character set translation code is 1810Sstevel@tonic-gate * based on the code found in Enrique Silvestre Mora's iso-t61.c, found 1820Sstevel@tonic-gate * as part of this package: 1830Sstevel@tonic-gate * ftp://pereiii.uji.es/pub/uji-ftp/unix/ldap/iso-t61.translation.tar.Z 1840Sstevel@tonic-gate * Enrique is now (10/95) at this address: enrique.silvestre@uv.es 1850Sstevel@tonic-gate * 1860Sstevel@tonic-gate * changes made by mcs@umich.edu 12 October 1995: 1870Sstevel@tonic-gate * Change calling conventions of iso8859_t61() and t61_iso8859() to 1880Sstevel@tonic-gate * match libldap conventions; rename to ldap_8859_to_t61() and 1890Sstevel@tonic-gate * ldap_t61_to_8859(). 1900Sstevel@tonic-gate * Change conversion routines to deal with non-zero terminated strings. 1910Sstevel@tonic-gate * ANSI-ize functions and include prototypes. 1920Sstevel@tonic-gate */ 1930Sstevel@tonic-gate 1940Sstevel@tonic-gate /* iso-t61.c - ISO-T61 translation routines (version: 0.2.1, July-1994) */ 1950Sstevel@tonic-gate /* 1960Sstevel@tonic-gate * Copyright (c) 1994 Enrique Silvestre Mora, Universitat Jaume I, Spain. 1970Sstevel@tonic-gate * All rights reserved. 1980Sstevel@tonic-gate * 1990Sstevel@tonic-gate * Redistribution and use in source and binary forms are permitted 2000Sstevel@tonic-gate * provided that this notice is preserved and that due credit is given 2010Sstevel@tonic-gate * to the Universitat Jaume I. The name of the University 2020Sstevel@tonic-gate * may not be used to endorse or promote products derived from this 2030Sstevel@tonic-gate * software without specific prior written permission. This software 2040Sstevel@tonic-gate * is provided ``as is'' without express or implied warranty. 2050Sstevel@tonic-gate */ 2060Sstevel@tonic-gate 2070Sstevel@tonic-gate 2080Sstevel@tonic-gate #include <stdio.h> 2090Sstevel@tonic-gate #include <stdlib.h> 2100Sstevel@tonic-gate #include <string.h> 2110Sstevel@tonic-gate 2120Sstevel@tonic-gate /* Character set used: ISO 8859-1, ISO 8859-2, ISO 8859-3, ... */ 2130Sstevel@tonic-gate /* #define ISO_8859 1 */ 2140Sstevel@tonic-gate 2150Sstevel@tonic-gate #ifndef ISO_8859 2160Sstevel@tonic-gate # define ISO_8859 0 2170Sstevel@tonic-gate #endif 2180Sstevel@tonic-gate 2190Sstevel@tonic-gate typedef unsigned char Byte; 2200Sstevel@tonic-gate typedef struct { Byte a, b; } Couple; 2210Sstevel@tonic-gate 2220Sstevel@tonic-gate #ifdef NEEDPROTOS 2230Sstevel@tonic-gate static Byte *c_to_hh( Byte *o, Byte c ); 2240Sstevel@tonic-gate static Byte *c_to_cc( Byte *o, Couple *cc, Byte c ); 2250Sstevel@tonic-gate static int hh_to_c( Byte *h ); 2260Sstevel@tonic-gate static Byte *cc_to_t61( Byte *o, Byte *s ); 2270Sstevel@tonic-gate #else /* NEEDPROTOS */ 2280Sstevel@tonic-gate static Byte *c_to_hh(); 2290Sstevel@tonic-gate static Byte *c_to_cc(); 2300Sstevel@tonic-gate static int hh_to_c(); 2310Sstevel@tonic-gate static Byte *cc_to_t61(); 2320Sstevel@tonic-gate #endif /* NEEDPROTOS */ 2330Sstevel@tonic-gate 2340Sstevel@tonic-gate /* 2350Sstevel@tonic-gate Character choosed as base in diacritics alone: NO-BREAK SPACE. 2360Sstevel@tonic-gate (The standard say it must be a blank space, 0x20.) 2370Sstevel@tonic-gate */ 2380Sstevel@tonic-gate #define ALONE 0xA0 2390Sstevel@tonic-gate 2400Sstevel@tonic-gate static Couple diacritic[16] = { 2410Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 9) 2420Sstevel@tonic-gate {0,0}, {'`',0}, {0xb4,0}, {'^',0}, 2430Sstevel@tonic-gate {'~',0}, {0xaf,0}, {'(',ALONE}, {'.',ALONE}, 2440Sstevel@tonic-gate {0xa8,0}, {0,0}, {'0',ALONE}, {0xb8,0}, 2450Sstevel@tonic-gate {0,0}, {'"',ALONE}, {';',ALONE}, {'<',ALONE}, 2460Sstevel@tonic-gate #elif (ISO_8859 == 2) 2470Sstevel@tonic-gate {0,0}, {'`',0}, {0xb4,0}, {'^',0}, 2480Sstevel@tonic-gate {'~',0}, {'-',ALONE}, {0xa2,0}, {0xff,0}, 2490Sstevel@tonic-gate {0xa8,0}, {0,0}, {'0',ALONE}, {0xb8,0}, 2500Sstevel@tonic-gate {0,0}, {0xbd,0}, {0xb2,0}, {0xb7,0} 2510Sstevel@tonic-gate #elif (ISO_8859 == 3) 2520Sstevel@tonic-gate {0,0}, {'`',0}, {0xb4,0}, {'^',0}, 2530Sstevel@tonic-gate {'~',0}, {'-',ALONE}, {0xa2,0}, {0xff,0}, 2540Sstevel@tonic-gate {0xa8,0}, {0,0}, {'0',ALONE}, {0xb8,0}, 2550Sstevel@tonic-gate {0,0}, {'"',ALONE}, {';',ALONE}, {'<',ALONE} 2560Sstevel@tonic-gate #elif (ISO_8859 == 4) 2570Sstevel@tonic-gate {0,0}, {'`',0}, {0xb4,0}, {'^',0}, 2580Sstevel@tonic-gate {'~',0}, {0xaf,0}, {'(',ALONE}, {0xff,0}, 2590Sstevel@tonic-gate {0xa8,0}, {0,0}, {'0',ALONE}, {0xb8,0}, 2600Sstevel@tonic-gate {0,0}, {'"',ALONE}, {0xb2,0}, {0xb7,0} 2610Sstevel@tonic-gate #else 2620Sstevel@tonic-gate {0,0}, {'`',0}, {'\'',ALONE}, {'^',0}, 2630Sstevel@tonic-gate {'~',0}, {'-',ALONE}, {'(',ALONE}, {'.',ALONE}, 2640Sstevel@tonic-gate {':',ALONE}, {0,0}, {'0',ALONE}, {',',ALONE}, 2650Sstevel@tonic-gate {0,0}, {'"',ALONE}, {';',ALONE}, {'<',ALONE} 2660Sstevel@tonic-gate #endif 2670Sstevel@tonic-gate }; 2680Sstevel@tonic-gate 2690Sstevel@tonic-gate /* 2700Sstevel@tonic-gate --- T.61 (T.51) letters with diacritics: conversion to ISO 8859-n ----- 2710Sstevel@tonic-gate A, C, D, E, G, H, I, J, K, 2720Sstevel@tonic-gate L, N, O, R, S, T, U, W, Y, Z. 2730Sstevel@tonic-gate ----------------------------------------------------------------------- 2740Sstevel@tonic-gate */ 2750Sstevel@tonic-gate static int letter_w_diacritic[16][38] = { 2760Sstevel@tonic-gate #if (ISO_8859 == 1) 2770Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 2780Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 2800Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2810Sstevel@tonic-gate 0xc0,0, 0, 0xc8,0, 0, 0xcc,0, 0, 2820Sstevel@tonic-gate 0, 0, 0xd2,0, 0, 0, 0xd9,0, 0, 0, 2830Sstevel@tonic-gate 0xe0,0, 0, 0xe8,0, 0, 0xec,0, 0, 2840Sstevel@tonic-gate 0, 0, 0xf2,0, 0, 0, 0xf9,0, 0, 0, 2850Sstevel@tonic-gate 0xc1,-1, 0, 0xc9,0, 0, 0xcd,0, 0, 2860Sstevel@tonic-gate -1, -1, 0xd3,-1, -1, 0, 0xda,0, 0xdd,-1, 2870Sstevel@tonic-gate 0xe1,-1, 0, 0xe9,0, 0, 0xed,0, 0, 2880Sstevel@tonic-gate -1, -1, 0xf3,-1, -1, 0, 0xfa,0, 0xfd,-1, 2890Sstevel@tonic-gate 0xc2,-1, 0, 0xca,-1, -1, 0xce,-1, 0, 2900Sstevel@tonic-gate 0, 0, 0xd4,0, -1, 0, 0xdb,-1, -1, 0, 2910Sstevel@tonic-gate 0xe2,-1, 0, 0xea,-1, -1, 0xee,-1, 0, 2920Sstevel@tonic-gate 0, 0, 0xf4,0, -1, 0, 0xfb,-1, -1, 0, 2930Sstevel@tonic-gate 0xc3,0, 0, 0, 0, 0, -1, 0, 0, 2940Sstevel@tonic-gate 0, 0xd1,0xd5,0, 0, 0, -1, 0, 0, 0, 2950Sstevel@tonic-gate 0xe3,0, 0, 0, 0, 0, -1, 0, 0, 2960Sstevel@tonic-gate 0, 0xf1,0xf5,0, 0, 0, -1, 0, 0, 0, 2970Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 2980Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 2990Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3000Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3010Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 3020Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3030Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 3040Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3050Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, -1, 0, 0, 3060Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3070Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, 0, 0, 0, 3080Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3090Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, 0xcf,0, 0, 3100Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 3110Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, 0xef,0, 0, 3120Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, 0xff,0, 3130Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3150Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3160Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3170Sstevel@tonic-gate 0xc5,0, 0, 0, 0, 0, 0, 0, 0, 3180Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3190Sstevel@tonic-gate 0xe5,0, 0, 0, 0, 0, 0, 0, 0, 3200Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3210Sstevel@tonic-gate 0, 0xc7,0, 0, -1, 0, 0, 0, -1, 3220Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 3230Sstevel@tonic-gate 0, 0xe7,0, 0, -1, 0, 0, 0, -1, 3240Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 3250Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3260Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3270Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3280Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3290Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3300Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3310Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3320Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3330Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3340Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3350Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3360Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3370Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 3380Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1, 3390Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 3400Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1 3410Sstevel@tonic-gate #elif (ISO_8859 == 2) 3420Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3430Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3440Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3450Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3460Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3470Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3480Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3490Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3500Sstevel@tonic-gate 0xc1,0xc6,0, 0xc9,0, 0, 0xcd,0, 0, 3510Sstevel@tonic-gate 0xc5,0xd1,0xd3,0xc0,0xa6,0, 0xda,0, 0xdd,0xac, 3520Sstevel@tonic-gate 0xe1,0xe6,0, 0xe9,0, 0, 0xed,0, 0, 3530Sstevel@tonic-gate 0xe5,0xf1,0xf3,0xe0,0xb6,0, 0xfa,0, 0xfd,0xbc, 3540Sstevel@tonic-gate 0xc2,-1, 0, -1, -1, -1, 0xce,-1, 0, 3550Sstevel@tonic-gate 0, 0, 0xd4,0, -1, 0, -1, -1, -1, 0, 3560Sstevel@tonic-gate 0xe2,-1, 0, -1, -1, -1, 0xee,-1, 0, 3570Sstevel@tonic-gate 0, 0, 0xf4,0, -1, 0, -1, -1, -1, 0, 3580Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 3590Sstevel@tonic-gate 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 3600Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 3610Sstevel@tonic-gate 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 3620Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3630Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3640Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 3650Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 3660Sstevel@tonic-gate 0xc3,0, 0, 0, -1, 0, 0, 0, 0, 3670Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3680Sstevel@tonic-gate 0xe3,0, 0, 0, -1, 0, 0, 0, 0, 3690Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 3700Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, -1, 0, 0, 3710Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xaf, 3720Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, 0, 0, 0, 3730Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xbf, 3740Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, -1, 0, 0, 3750Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 3760Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, -1, 0, 0, 3770Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, -1, 0, 3780Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3790Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3800Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3810Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3820Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 3830Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xd9,0, 0, 0, 3840Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 3850Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xf9,0, 0, 0, 3860Sstevel@tonic-gate 0, 0xc7,0, 0, -1, 0, 0, 0, -1, 3870Sstevel@tonic-gate -1, -1, 0, -1, 0xaa,0xde,0, 0, 0, 0, 3880Sstevel@tonic-gate 0, 0xe7,0, 0, -1, 0, 0, 0, -1, 3890Sstevel@tonic-gate -1, -1, 0, -1, 0xba,0xfe,0, 0, 0, 0, 3900Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3910Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3920Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3930Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3940Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3950Sstevel@tonic-gate 0, 0, 0xd5,0, 0, 0, 0xdb,0, 0, 0, 3960Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 3970Sstevel@tonic-gate 0, 0, 0xf5,0, 0, 0, 0xfb,0, 0, 0, 3980Sstevel@tonic-gate 0xa1,0, 0, 0xca,0, 0, -1, 0, 0, 3990Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4000Sstevel@tonic-gate 0xb1,0, 0, 0xea,0, 0, -1, 0, 0, 4010Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4020Sstevel@tonic-gate 0, 0xc8,0xcf,0xcc,0, 0, 0, 0, 0, 4030Sstevel@tonic-gate 0xa5,0xd2,0, 0xd8,0xa9,0xab,0, 0, 0, 0xae, 4040Sstevel@tonic-gate 0, 0xe8,0xef,0xec,0, 0, 0, 0, 0, 4050Sstevel@tonic-gate 0xb5,0xf2,0, 0xf8,0xb9,0xbb,0, 0, 0, 0xbe 4060Sstevel@tonic-gate #elif (ISO_8859 == 3) 4070Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4080Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4090Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4100Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4110Sstevel@tonic-gate 0xc0,0, 0, 0xc8,0, 0, 0xcc,0, 0, 4120Sstevel@tonic-gate 0, 0, 0xd2,0, 0, 0, 0xd9,0, 0, 0, 4130Sstevel@tonic-gate 0xe0,0, 0, 0xe8,0, 0, 0xec,0, 0, 4140Sstevel@tonic-gate 0, 0, 0xf2,0, 0, 0, 0xf9,0, 0, 0, 4150Sstevel@tonic-gate 0xc1,-1, 0, 0xc9,0, 0, 0xcd,0, 0, 4160Sstevel@tonic-gate -1, -1, 0xd3,-1, -1, 0, 0xda,0, -1, -1, 4170Sstevel@tonic-gate 0xe1,-1, 0, 0xe9,0, 0, 0xed,0, 0, 4180Sstevel@tonic-gate -1, -1, 0xf3,-1, -1, 0, 0xfa,0, -1, -1, 4190Sstevel@tonic-gate 0xc2,0xc6,0, 0xca,0xd8,0xa6,0xce,0xac,0, 4200Sstevel@tonic-gate 0, 0, 0xd4,0, 0xde,0, 0xdb,-1, -1, 0, 4210Sstevel@tonic-gate 0xe2,0xe6,0, 0xea,0xf8,0xb6,0xee,0xbc,0, 4220Sstevel@tonic-gate 0, 0, 0xf4,0, 0xfe,0, 0xfb,-1, -1, 0, 4230Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 4240Sstevel@tonic-gate 0, 0xd1,-1, 0, 0, 0, -1, 0, 0, 0, 4250Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 4260Sstevel@tonic-gate 0, 0xf1,-1, 0, 0, 0, -1, 0, 0, 0, 4270Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4280Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4290Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4300Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4310Sstevel@tonic-gate -1, 0, 0, 0, 0xab,0, 0, 0, 0, 4320Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xdd,0, 0, 0, 4330Sstevel@tonic-gate -1, 0, 0, 0, 0xbb,0, 0, 0, 0, 4340Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xfd,0, 0, 0, 4350Sstevel@tonic-gate 0, 0xc5,0, -1, 0xd5,0, 0xa9,0, 0, 4360Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xaf, 4370Sstevel@tonic-gate 0, 0xe5,0, -1, 0xf5,0, 0, 0, 0, 4380Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xbf, 4390Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, 0xcf,0, 0, 4400Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 4410Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, 0xef,0, 0, 4420Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, -1, 0, 4430Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4440Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4450Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4460Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4470Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 4480Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4490Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 4500Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4510Sstevel@tonic-gate 0, 0xc7,0, 0, -1, 0, 0, 0, -1, 4520Sstevel@tonic-gate -1, -1, 0, -1, 0xaa,-1, 0, 0, 0, 0, 4530Sstevel@tonic-gate 0, 0xe7,0, 0, -1, 0, 0, 0, -1, 4540Sstevel@tonic-gate -1, -1, 0, -1, 0xba,-1, 0, 0, 0, 0, 4550Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4560Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4570Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4580Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4590Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4600Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4610Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4620Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4630Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4640Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4650Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4660Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4670Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 4680Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1, 4690Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 4700Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1 4710Sstevel@tonic-gate #elif (ISO_8859 == 4) 4720Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4730Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4740Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 4750Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4760Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4770Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4780Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 4790Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 4800Sstevel@tonic-gate 0xc1,-1, 0, 0xc9,0, 0, 0xcd,0, 0, 4810Sstevel@tonic-gate -1, -1, -1, -1, -1, 0, 0xda,0, -1, -1, 4820Sstevel@tonic-gate 0xe1,-1, 0, 0xe9,0, 0, 0xed,0, 0, 4830Sstevel@tonic-gate -1, -1, -1, -1, -1, 0, 0xfa,0, -1, -1, 4840Sstevel@tonic-gate 0xc2,-1, 0, -1, -1, -1, 0xce,-1, 0, 4850Sstevel@tonic-gate 0, 0, 0xd4,0, -1, 0, 0xdb,-1, -1, 0, 4860Sstevel@tonic-gate 0xe2,-1, 0, -1, -1, -1, 0xee,-1, 0, 4870Sstevel@tonic-gate 0, 0, 0xf4,0, -1, 0, 0xfb,-1, -1, 0, 4880Sstevel@tonic-gate 0xc3,0, 0, 0, 0, 0, 0xa5,0, 0, 4890Sstevel@tonic-gate 0, -1, 0xd5,0, 0, 0, 0xdd,0, 0, 0, 4900Sstevel@tonic-gate 0xe3,0, 0, 0, 0, 0, 0xb5,0, 0, 4910Sstevel@tonic-gate 0, -1, 0xf5,0, 0, 0, 0xfd,0, 0, 0, 4920Sstevel@tonic-gate 0xc0,0, 0, 0xaa,0, 0, 0xcf,0, 0, 4930Sstevel@tonic-gate 0, 0, 0xd2,0, 0, 0, 0xde,0, 0, 0, 4940Sstevel@tonic-gate 0xe0,0, 0, 0xba,0, 0, 0xef,0, 0, 4950Sstevel@tonic-gate 0, 0, 0xf2,0, 0, 0, 0xfe,0, 0, 0, 4960Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 4970Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 4980Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 4990Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5000Sstevel@tonic-gate 0, -1, 0, 0xcc,-1, 0, -1, 0, 0, 5010Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 5020Sstevel@tonic-gate 0, -1, 0, 0xec,-1, 0, 0, 0, 0, 5030Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 5040Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, -1, 0, 0, 5050Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 5060Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, -1, 0, 0, 5070Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, -1, 0, 5080Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5090Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5100Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5110Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120Sstevel@tonic-gate 0xc5,0, 0, 0, 0, 0, 0, 0, 0, 5130Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5140Sstevel@tonic-gate 0xe5,0, 0, 0, 0, 0, 0, 0, 0, 5150Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5160Sstevel@tonic-gate 0, -1, 0, 0, 0xab,0, 0, 0, 0xd3, 5170Sstevel@tonic-gate 0xa6,0xd1,0, 0xa3,-1, -1, 0, 0, 0, 0, 5180Sstevel@tonic-gate 0, -1, 0, 0, 0xbb,0, 0, 0, 0xf3, 5190Sstevel@tonic-gate 0xb6,0xf1,0, 0xb3,-1, -1, 0, 0, 0, 0, 5200Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5210Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5220Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5230Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5240Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5250Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5260Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5270Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5280Sstevel@tonic-gate 0xa1,0, 0, 0xca,0, 0, 0xc7,0, 0, 5290Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xd9,0, 0, 0, 5300Sstevel@tonic-gate 0xb1,0, 0, 0xea,0, 0, 0xe7,0, 0, 5310Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xf9,0, 0, 0, 5320Sstevel@tonic-gate 0, 0xc8,-1, -1, 0, 0, 0, 0, 0, 5330Sstevel@tonic-gate -1, -1, 0, -1, 0xa9,-1, 0, 0, 0, 0xae, 5340Sstevel@tonic-gate 0, 0xe8,-1, -1, 0, 0, 0, 0, 0, 5350Sstevel@tonic-gate -1, -1, 0, -1, 0xb9,-1, 0, 0, 0, 0xbe 5360Sstevel@tonic-gate #elif (ISO_8859 == 9) 5370Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5380Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5390Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5400Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5410Sstevel@tonic-gate 0xc0,0, 0, 0xc8,0, 0, 0xcc,0, 0, 5420Sstevel@tonic-gate 0, 0, 0xd2,0, 0, 0, 0xd9,0, 0, 0, 5430Sstevel@tonic-gate 0xe0,0, 0, 0xe8,0, 0, -1, 0, 0, 5440Sstevel@tonic-gate 0, 0, 0xf2,0, 0, 0, 0xf9,0, 0, 0, 5450Sstevel@tonic-gate 0xc1,-1, 0, 0xc9,0, 0, 0xcd,0, 0, 5460Sstevel@tonic-gate -1, -1, 0xd3,-1, -1, 0, 0xda,0, -1, -1, 5470Sstevel@tonic-gate 0xe1,-1, 0, 0xe9,0, 0, 0xed,0, 0, 5480Sstevel@tonic-gate -1, -1, 0xf3,-1, -1, 0, 0xfa,0, -1, -1, 5490Sstevel@tonic-gate 0xc2,-1, 0, 0xca,-1, -1, 0xce,-1, 0, 5500Sstevel@tonic-gate 0, 0, 0xd4,0, -1, 0, 0xdb,-1, -1, 0, 5510Sstevel@tonic-gate 0xe2,-1, 0, -1, -1, -1, 0xee,-1, 0, 5520Sstevel@tonic-gate 0, 0, 0xf4,0, -1, 0, 0xfb,-1, -1, 0, 5530Sstevel@tonic-gate 0xc3,0, 0, 0, 0, 0, -1, 0, 0, 5540Sstevel@tonic-gate 0, 0xd1,0xd5,0, 0, 0, -1, 0, 0, 0, 5550Sstevel@tonic-gate 0xe3,0, 0, 0, 0, 0, -1, 0, 0, 5560Sstevel@tonic-gate 0, 0xf1,0xf5,0, 0, 0, -1, 0, 0, 0, 5570Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 5580Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5590Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, 0xef,0, 0, 5600Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5610Sstevel@tonic-gate -1, 0, 0, 0, 0xd0,0, 0, 0, 0, 5620Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5630Sstevel@tonic-gate -1, 0, 0, 0, 0xf0,0, 0, 0, 0, 5640Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5650Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, 0xdd,0, 0, 5660Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 5670Sstevel@tonic-gate 0, -1, 0, 0xec,-1, 0, 0, 0, 0, 5680Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 5690Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, 0xcf,0, 0, 5700Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 5710Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, -1, 0, 0, 5720Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, 0xff,0, 5730Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5740Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5750Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5760Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5770Sstevel@tonic-gate 0xc5,0, 0, 0, 0, 0, 0, 0, 0, 5780Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5790Sstevel@tonic-gate 0xe5,0, 0, 0, 0, 0, 0, 0, 0, 5800Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5810Sstevel@tonic-gate 0, 0xc7,0, 0, -1, 0, 0, 0, -1, 5820Sstevel@tonic-gate -1, -1, 0, -1, 0xde,-1, 0, 0, 0, 0, 5830Sstevel@tonic-gate 0, 0xe7,0, 0, -1, 0, 0, 0, -1, 5840Sstevel@tonic-gate -1, -1, 0, -1, 0xfe,-1, 0, 0, 0, 0, 5850Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5860Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5870Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5880Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5890Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5900Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5910Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 5920Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 5930Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 5940Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5950Sstevel@tonic-gate -1, 0, 0, 0xea,0, 0, -1, 0, 0, 5960Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 5970Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 5980Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1, 5990Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 6000Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1 6010Sstevel@tonic-gate #elif (ISO_8859 == 10) 6020Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6030Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6040Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6050Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6060Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6070Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6080Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6090Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6100Sstevel@tonic-gate 0xc1,-1, 0, 0xc9,0, 0, 0xcd,0, 0, 6110Sstevel@tonic-gate -1, -1, 0xd3,-1, -1, 0, 0xda,0, 0xdd,-1, 6120Sstevel@tonic-gate 0xe1,-1, 0, 0xe9,0, 0, 0xed,0, 0, 6130Sstevel@tonic-gate -1, -1, 0xf3,-1, -1, 0, 0xfa,0, 0xfd,-1, 6140Sstevel@tonic-gate 0xc2,-1, 0, -1, -1, -1, 0xce,-1, 0, 6150Sstevel@tonic-gate 0, 0, 0xd4,0, -1, 0, 0xdb,-1, -1, 0, 6160Sstevel@tonic-gate 0xe2,-1, 0, -1, -1, -1, 0xee,-1, 0, 6170Sstevel@tonic-gate 0, 0, 0xf4,0, -1, 0, 0xfb,-1, -1, 0, 6180Sstevel@tonic-gate 0xc3,0, 0, 0, 0, 0, 0xa5,0, 0, 6190Sstevel@tonic-gate 0, -1, 0xd5,0, 0, 0, 0xd7,0, 0, 0, 6200Sstevel@tonic-gate 0xe3,0, 0, 0, 0, 0, 0xb5,0, 0, 6210Sstevel@tonic-gate 0, -1, 0xf5,0, 0, 0, 0xf7,0, 0, 0, 6220Sstevel@tonic-gate 0xc0,0, 0, 0xa2,0, 0, 0xa4,0, 0, 6230Sstevel@tonic-gate 0, 0, 0xd2,0, 0, 0, 0xae,0, 0, 0, 6240Sstevel@tonic-gate 0xe0,0, 0, 0xb2,0, 0, 0xb4,0, 0, 6250Sstevel@tonic-gate 0, 0, 0xf2,0, 0, 0, 0xbe,0, 0, 0, 6260Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 6270Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6280Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 6290Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6300Sstevel@tonic-gate 0, -1, 0, 0xcc,-1, 0, -1, 0, 0, 6310Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 6320Sstevel@tonic-gate 0, -1, 0, 0xec,-1, 0, 0, 0, 0, 6330Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 6340Sstevel@tonic-gate 0xc4,0, 0, 0xcb,0, 0, 0xcf,0, 0, 6350Sstevel@tonic-gate 0, 0, 0xd6,0, 0, 0, 0xdc,0, -1, 0, 6360Sstevel@tonic-gate 0xe4,0, 0, 0xeb,0, 0, 0xef,0, 0, 6370Sstevel@tonic-gate 0, 0, 0xf6,0, 0, 0, 0xfc,0, -1, 0, 6380Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6390Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6410Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6420Sstevel@tonic-gate 0xc5,0, 0, 0, 0, 0, 0, 0, 0, 6430Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6440Sstevel@tonic-gate 0xe5,0, 0, 0, 0, 0, 0, 0, 0, 6450Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6460Sstevel@tonic-gate 0, -1, 0, 0, 0xa3,0, 0, 0, 0xa6, 6470Sstevel@tonic-gate 0xa8,0xd1,0, -1, -1, -1, 0, 0, 0, 0, 6480Sstevel@tonic-gate 0, -1, 0, 0, 0xb3,0, 0, 0, 0xb6, 6490Sstevel@tonic-gate 0xb8,0xf1,0, -1, -1, -1, 0, 0, 0, 0, 6500Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6510Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6520Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6530Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6540Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6550Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6560Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6570Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6580Sstevel@tonic-gate 0xa1,0, 0, 0xca,0, 0, 0xc7,0, 0, 6590Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xd9,0, 0, 0, 6600Sstevel@tonic-gate 0xb1,0, 0, 0xea,0, 0, 0xe7,0, 0, 6610Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0xf9,0, 0, 0, 6620Sstevel@tonic-gate 0, 0xc8,-1, -1, 0, 0, 0, 0, 0, 6630Sstevel@tonic-gate -1, -1, 0, -1, 0xaa,-1, 0, 0, 0, 0xac, 6640Sstevel@tonic-gate 0, 0xe8,-1, -1, 0, 0, 0, 0, 0, 6650Sstevel@tonic-gate -1, -1, 0, -1, 0xba,-1, 0, 0, 0, 0xbc 6660Sstevel@tonic-gate #else 6670Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6680Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6690Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 6700Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6710Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6720Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6730Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6740Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6750Sstevel@tonic-gate -1, -1, 0, -1, 0, 0, -1, 0, 0, 6760Sstevel@tonic-gate -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, 6770Sstevel@tonic-gate -1, -1, 0, -1, 0, 0, -1, 0, 0, 6780Sstevel@tonic-gate -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, 6790Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, -1, -1, 0, 6800Sstevel@tonic-gate 0, 0, -1, 0, -1, 0, -1, -1, -1, 0, 6810Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, -1, -1, 0, 6820Sstevel@tonic-gate 0, 0, -1, 0, -1, 0, -1, -1, -1, 0, 6830Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 6840Sstevel@tonic-gate 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 6850Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, -1, 0, 0, 6860Sstevel@tonic-gate 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 6870Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6880Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6890Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 6900Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 6910Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 6920Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6930Sstevel@tonic-gate -1, 0, 0, 0, -1, 0, 0, 0, 0, 6940Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 6950Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, -1, 0, 0, 6960Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 6970Sstevel@tonic-gate 0, -1, 0, -1, -1, 0, 0, 0, 0, 6980Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 6990Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 7000Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 7010Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 7020Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 7030Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7040Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7050Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7060Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7070Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 7080Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 7090Sstevel@tonic-gate -1, 0, 0, 0, 0, 0, 0, 0, 0, 7100Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 7110Sstevel@tonic-gate 0, -1, 0, 0, -1, 0, 0, 0, -1, 7120Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 7130Sstevel@tonic-gate 0, -1, 0, 0, -1, 0, 0, 0, -1, 7140Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 7150Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7160Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7170Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7180Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7190Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7200Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 7210Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, 0, 0, 0, 7220Sstevel@tonic-gate 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 7230Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 7240Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 7250Sstevel@tonic-gate -1, 0, 0, -1, 0, 0, -1, 0, 0, 7260Sstevel@tonic-gate 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 7270Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 7280Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1, 7290Sstevel@tonic-gate 0, -1, -1, -1, 0, 0, 0, 0, 0, 7300Sstevel@tonic-gate -1, -1, 0, -1, -1, -1, 0, 0, 0, -1 7310Sstevel@tonic-gate #endif 7320Sstevel@tonic-gate }; 7330Sstevel@tonic-gate 7340Sstevel@tonic-gate /* 7350Sstevel@tonic-gate --- T.61 characters [0xA0 .. 0xBF] ----------------- 7360Sstevel@tonic-gate */ 7370Sstevel@tonic-gate static Couple trans_t61a_iso8859[32] = { 7380Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 9) 7390Sstevel@tonic-gate {'N','S'}, {0xa1,0}, {0xa2,0}, {0xa3,0}, 7400Sstevel@tonic-gate {'D','O'}, {0xa5,0}, {'C','u'}, {0xa7,0}, 7410Sstevel@tonic-gate {0xa4,0}, {'\'','6'},{'"','6'}, {0xab,0}, 7420Sstevel@tonic-gate {'<','-'}, {'-','!'}, {'-','>'}, {'-','v'}, 7430Sstevel@tonic-gate {0xb0,0}, {0xb1,0}, {0xb2,0}, {0xb3,0}, 7440Sstevel@tonic-gate {0xd7,0}, {0xb5,0}, {0xb6,0}, {0xb7,0}, 7450Sstevel@tonic-gate {0xf7,0}, {'\'','9'},{'"','9'}, {0xbb,0}, 7460Sstevel@tonic-gate {0xbc,0}, {0xbd,0}, {0xbe,0}, {0xbf,0} 7470Sstevel@tonic-gate #elif (ISO_8859 == 2) || (ISO_8859 == 4) 7480Sstevel@tonic-gate {'N','S'}, {'!','I'}, {'C','t'}, {'P','d'}, 7490Sstevel@tonic-gate {'D','O'}, {'Y','e'}, {'C','u'}, {0xa7,0}, 7500Sstevel@tonic-gate {0xa4,0}, {'\'','6'},{'"','6'}, {'<','<'}, 7510Sstevel@tonic-gate {'<','-'}, {'-','!'}, {'-','>'}, {'-','v'}, 7520Sstevel@tonic-gate {0xb0,0}, {'+','-'}, {'2','S'}, {'3','S'}, 7530Sstevel@tonic-gate {0xd7,0}, {'M','y'}, {'P','I'}, {'.','M'}, 7540Sstevel@tonic-gate {0xf7,0}, {'\'','9'},{'"','9'}, {'>','>'}, 7550Sstevel@tonic-gate {'1','4'}, {'1','2'}, {'3','4'}, {'?','I'}, 7560Sstevel@tonic-gate #elif (ISO_8859 == 3) 7570Sstevel@tonic-gate {'N','S'}, {'!','I'}, {'C','t'}, {0xa3,0}, 7580Sstevel@tonic-gate {'D','O'}, {'Y','e'}, {'C','u'}, {0xa7,0}, 7590Sstevel@tonic-gate {0xa4,0}, {'\'','6'},{'"','6'}, {'<','<'}, 7600Sstevel@tonic-gate {'<','-'}, {'-','!'}, {'-','>'}, {'-','v'}, 7610Sstevel@tonic-gate {0xb0,0}, {'+','-'}, {0xb2,0}, {0xb3,0}, 7620Sstevel@tonic-gate {0xd7,0}, {0xb5,0}, {'P','I'}, {0xb7,0}, 7630Sstevel@tonic-gate {0xf7,0}, {'\'','9'},{'"','9'}, {'>','>'}, 7640Sstevel@tonic-gate {'1','4'}, {0xbd,0}, {'3','4'}, {'?','I'} 7650Sstevel@tonic-gate #elif (ISO_8859 == 10) 7660Sstevel@tonic-gate {'N','S'}, {'!','I'}, {'C','t'}, {'P','d'}, 7670Sstevel@tonic-gate {'D','O'}, {'Y','e'}, {'C','u'}, {0xa7,0}, 7680Sstevel@tonic-gate {'C','u'}, {'\'','6'},{'"','6'}, {'<','<'}, 7690Sstevel@tonic-gate {'<','-'}, {'-','!'}, {'-','>'}, {'-','v'}, 7700Sstevel@tonic-gate {0xb0,0}, {'+','-'}, {'2','S'}, {'3','S'}, 7710Sstevel@tonic-gate {'*','X'}, {'M','y'}, {'P','I'}, {0xb7,0}, 7720Sstevel@tonic-gate {'-',':'}, {'\'','9'},{'"','9'}, {'>','>'}, 7730Sstevel@tonic-gate {'1','4'}, {'1','2'}, {'3','4'}, {'?','I'} 7740Sstevel@tonic-gate #else 7750Sstevel@tonic-gate {'N','S'}, {'!','I'}, {'C','t'}, {'P','d'}, 7760Sstevel@tonic-gate {'D','O'}, {'Y','e'}, {'C','u'}, {'S','E'}, 7770Sstevel@tonic-gate {'X','O'}, {'\'','6'},{'"','6'}, {'<','<'}, 7780Sstevel@tonic-gate {'<','-'}, {'-','!'}, {'-','>'}, {'-','v'}, 7790Sstevel@tonic-gate {'D','G'}, {'+','-'}, {'2','S'}, {'3','S'}, 7800Sstevel@tonic-gate {'*','X'}, {'M','y'}, {'P','I'}, {'.','M'}, 7810Sstevel@tonic-gate {'-',':'}, {'\'','9'},{'"','9'}, {'>','>'}, 7820Sstevel@tonic-gate {'1','4'}, {'1','2'}, {'3','4'}, {'?','I'} 7830Sstevel@tonic-gate #endif 7840Sstevel@tonic-gate }; 7850Sstevel@tonic-gate 7860Sstevel@tonic-gate /* 7870Sstevel@tonic-gate --- T.61 characters [0xE0 .. 0xFF] ----------------- 7880Sstevel@tonic-gate */ 7890Sstevel@tonic-gate static Couple trans_t61b_iso8859[48] = { 7900Sstevel@tonic-gate #if (ISO_8859 == 1) 7910Sstevel@tonic-gate {'-','M'}, {0xb9,0}, {0xae,0}, {0xa9,0}, 7920Sstevel@tonic-gate {'T','M'}, {'M','8'}, {0xac,0}, {0xa6,0}, 7930Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 7940Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 7950Sstevel@tonic-gate {'O','m'}, {0xc6,0}, {0xd0,0}, {0xaa,0}, 7960Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 7970Sstevel@tonic-gate {'L','/'}, {0xd8,0}, {'O','E'}, {0xba,0}, 7980Sstevel@tonic-gate {0xde,0}, {'T','/'}, {'N','G'}, {'\'','n'}, 7990Sstevel@tonic-gate {'k','k'}, {0xe6,0}, {'d','/'}, {0xf0,0}, 8000Sstevel@tonic-gate {'h','/'}, {'i','.'}, {'i','j'}, {'l','.'}, 8010Sstevel@tonic-gate {'l','/'}, {0xf8,0}, {'o','e'}, {0xdf,0}, 8020Sstevel@tonic-gate {0xfe,0}, {'t','/'}, {'n','g'}, {'-','-'} 8030Sstevel@tonic-gate #elif (ISO_8859 == 2) 8040Sstevel@tonic-gate {'-','M'}, {'1','S'}, {'R','g'}, {'C','o'}, 8050Sstevel@tonic-gate {'T','M'}, {'M','8'}, {'N','O'}, {'B','B'}, 8060Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8070Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8080Sstevel@tonic-gate {'O','m'}, {'A','E'}, {0xd0,0}, {'-','a'}, 8090Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 8100Sstevel@tonic-gate {0xa3,0}, {'O','/'}, {'O','E'}, {'-','o'}, 8110Sstevel@tonic-gate {'T','H'}, {'T','/'}, {'N','G'}, {'\'','n'}, 8120Sstevel@tonic-gate {'k','k'}, {'a','e'}, {0xf0,0}, {'d','-'}, 8130Sstevel@tonic-gate {'h','/'}, {'i','.'}, {'i','j'}, {'l','.'}, 8140Sstevel@tonic-gate {0xb3,0}, {'o','/'}, {'o','e'}, {0xdf,0}, 8150Sstevel@tonic-gate {'t','h'}, {'t','/'}, {'n','g'}, {'-','-'} 8160Sstevel@tonic-gate #elif (ISO_8859 == 3) 8170Sstevel@tonic-gate {'-','M'}, {'1','S'}, {'R','g'}, {'C','o'}, 8180Sstevel@tonic-gate {'T','M'}, {'M','8'}, {'N','O'}, {'B','B'}, 8190Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8200Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8210Sstevel@tonic-gate {'O','m'}, {'A','E'}, {'D','/'}, {'-','a'}, 8220Sstevel@tonic-gate {0xa1,0}, {0,0}, {'I','J'}, {'L','.'}, 8230Sstevel@tonic-gate {'L','/'}, {'O','/'}, {'O','E'}, {'-','o'}, 8240Sstevel@tonic-gate {'T','H'}, {'T','/'}, {'N','G'}, {'\'','n'}, 8250Sstevel@tonic-gate {'k','k'}, {'a','e'}, {'d','/'}, {'d','-'}, 8260Sstevel@tonic-gate {0xb1,0}, {0xb9,0}, {'i','j'}, {'l','.'}, 8270Sstevel@tonic-gate {'l','/'}, {'o','/'}, {'o','e'}, {0xdf,0}, 8280Sstevel@tonic-gate {'t','h'}, {'t','/'}, {'n','g'}, {'-','-'} 8290Sstevel@tonic-gate #elif (ISO_8859 == 4) 8300Sstevel@tonic-gate {'-','M'}, {'1','S'}, {'R','g'}, {'C','o'}, 8310Sstevel@tonic-gate {'T','M'}, {'M','8'}, {'N','O'}, {'B','B'}, 8320Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8330Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8340Sstevel@tonic-gate {'O','m'}, {0xc6,0}, {0xd0,0}, {'-','a'}, 8350Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 8360Sstevel@tonic-gate {'L','/'}, {0xd8,0}, {'O','E'}, {'-','o'}, 8370Sstevel@tonic-gate {'T','H'}, {0xac,0}, {0xbd,0}, {'\'','n'}, 8380Sstevel@tonic-gate {0xa2,0}, {0xe6,0}, {0xf0,0}, {'d','-'}, 8390Sstevel@tonic-gate {'h','/'}, {'i','.'}, {'i','j'}, {'l','.'}, 8400Sstevel@tonic-gate {'l','/'}, {0xf8,0}, {'o','e'}, {0xdf,0}, 8410Sstevel@tonic-gate {'t','h'}, {0xbc,0}, {0xbf,0}, {'-','-'} 8420Sstevel@tonic-gate #elif (ISO_8859 == 9) 8430Sstevel@tonic-gate {'-','M'}, {0xb9,0}, {0xae,0}, {0xa9,0}, 8440Sstevel@tonic-gate {'T','M'}, {'M','8'}, {0xac,0}, {0xa6,0}, 8450Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8460Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8470Sstevel@tonic-gate {'O','m'}, {0xc6,0}, {'D','/'}, {0xaa,0}, 8480Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 8490Sstevel@tonic-gate {'L','/'}, {0xd8,0}, {'O','E'}, {0xba,0}, 8500Sstevel@tonic-gate {'T','H'}, {'T','/'}, {'N','G'}, {'\'','n'}, 8510Sstevel@tonic-gate {'k','k'}, {0xe6,0}, {'d','/'}, {'d','-'}, 8520Sstevel@tonic-gate {'h','/'}, {0xfd,0}, {'i','j'}, {'l','.'}, 8530Sstevel@tonic-gate {'l','/'}, {0xf8,0}, {'o','e'}, {0xdf,0}, 8540Sstevel@tonic-gate {'t','h'}, {'t','/'}, {'n','g'}, {'-','-'} 8550Sstevel@tonic-gate #elif (ISO_8859 == 10) 8560Sstevel@tonic-gate {0xbd,0}, {'1','S'}, {'R','g'}, {'C','o'}, 8570Sstevel@tonic-gate {'T','M'}, {'M','8'}, {'N','O'}, {'B','B'}, 8580Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8590Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8600Sstevel@tonic-gate {'O','m'}, {0xc6,0}, {0xa9,0}, {'-','a'}, 8610Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 8620Sstevel@tonic-gate {'L','/'}, {0xd8,0}, {'O','E'}, {'-','o'}, 8630Sstevel@tonic-gate {0xde,0}, {0xab,0}, {0xaf,0}, {'\'','n'}, 8640Sstevel@tonic-gate {0xff,0}, {0xe6,0}, {0xb9,0}, {0xf0,0}, 8650Sstevel@tonic-gate {'h','/'}, {'i','.'}, {'i','j'}, {'l','.'}, 8660Sstevel@tonic-gate {'l','/'}, {0xf8,0}, {'o','e'}, {0xdf,0}, 8670Sstevel@tonic-gate {0xfe,0}, {0xbb,0}, {0xbf,0}, {'-','-'} 8680Sstevel@tonic-gate #else 8690Sstevel@tonic-gate {'-','M'}, {'1','S'}, {'R','g'}, {'C','o'}, 8700Sstevel@tonic-gate {'T','M'}, {'M','8'}, {'N','O'}, {'B','B'}, 8710Sstevel@tonic-gate {0,0}, {0,0}, {0,0}, {0,0}, 8720Sstevel@tonic-gate {'1','8'}, {'3','8'}, {'5','8'}, {'7','8'}, 8730Sstevel@tonic-gate {'O','m'}, {'A','E'}, {'D','/'}, {'-','a'}, 8740Sstevel@tonic-gate {'H','/'}, {0,0}, {'I','J'}, {'L','.'}, 8750Sstevel@tonic-gate {'L','/'}, {'O','/'}, {'O','E'}, {'-','o'}, 8760Sstevel@tonic-gate {'T','H'}, {'T','/'}, {'N','G'}, {'\'','n'}, 8770Sstevel@tonic-gate {'k','k'}, {'a','e'}, {'d','/'}, {'d','-'}, 8780Sstevel@tonic-gate {'h','/'}, {'i','.'}, {'i','j'}, {'l','.'}, 8790Sstevel@tonic-gate {'l','/'}, {'o','/'}, {'o','e'}, {'s','s'}, 8800Sstevel@tonic-gate {'t','h'}, {'t','-'}, {'n','g'}, {'-','-'} 8810Sstevel@tonic-gate #endif 8820Sstevel@tonic-gate }; 8830Sstevel@tonic-gate 8840Sstevel@tonic-gate /* 8850Sstevel@tonic-gate --- ISO 8859-n characters <0xA0 .. 0xFF> ------------------- 8860Sstevel@tonic-gate */ 8870Sstevel@tonic-gate #if (ISO_8859 == 1) 8880Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 8890Sstevel@tonic-gate {0xa0,0}, {0xa1,0}, {0xa2,0}, {0xa3,0}, 8900Sstevel@tonic-gate {0xa8,0}, {0xa5,0}, {0xd7,0}, {0xa7,0}, 8910Sstevel@tonic-gate {0xc8,ALONE}, {0xd3,0}, {0xe3,0}, {0xab,0}, 8920Sstevel@tonic-gate {0xd6,0}, {0xff,0}, {0xd2,0}, {0xc5,ALONE}, 8930Sstevel@tonic-gate {0xb0,0}, {0xb1,0}, {0xb2,0}, {0xb3,0}, 8940Sstevel@tonic-gate {0xc2,ALONE}, {0xb5,0}, {0xb6,0}, {0xb7,0}, 8950Sstevel@tonic-gate {0xcb,ALONE}, {0xd1,0}, {0xeb,0}, {0xbb,0}, 8960Sstevel@tonic-gate {0xbc,0}, {0xbd,0}, {0xbe,0}, {0xbf,0}, 8970Sstevel@tonic-gate {0xc1,'A'}, {0xc2,'A'}, {0xc3,'A'}, {0xc4,'A'}, 8980Sstevel@tonic-gate {0xc8,'A'}, {0xca,'A'}, {0xe1,0}, {0xcb,'C'}, 8990Sstevel@tonic-gate {0xc1,'E'}, {0xc2,'E'}, {0xc3,'E'}, {0xc8,'E'}, 9000Sstevel@tonic-gate {0xc1,'I'}, {0xc2,'I'}, {0xc3,'I'}, {0xc8,'I'}, 9010Sstevel@tonic-gate {0xe2,0}, {0xc4,'N'}, {0xc1,'O'}, {0xc2,'O'}, 9020Sstevel@tonic-gate {0xc3,'O'}, {0xc4,'O'}, {0xc8,'O'}, {0xb4,0}, 9030Sstevel@tonic-gate {0xe9,0}, {0xc1,'U'}, {0xc2,'U'}, {0xc3,'U'}, 9040Sstevel@tonic-gate {0xc8,'U'}, {0xc2,'Y'}, {0xec,0}, {0xfb,0}, 9050Sstevel@tonic-gate {0xc1,'a'}, {0xc2,'a'}, {0xc3,'a'}, {0xc4,'a'}, 9060Sstevel@tonic-gate {0xc8,'a'}, {0xca,'a'}, {0xf1,0}, {0xcb,'c'}, 9070Sstevel@tonic-gate {0xc1,'e'}, {0xc2,'e'}, {0xc3,'e'}, {0xc8,'e'}, 9080Sstevel@tonic-gate {0xc1,'i'}, {0xc2,'i'}, {0xc3,'i'}, {0xc8,'i'}, 9090Sstevel@tonic-gate {0xf3,0}, {0xc4,'n'}, {0xc1,'o'}, {0xc2,'o'}, 9100Sstevel@tonic-gate {0xc3,'o'}, {0xc4,'o'}, {0xc8,'o'}, {0xb8,0}, 9110Sstevel@tonic-gate {0xf9,0}, {0xc1,'u'}, {0xc2,'u'}, {0xc3,'u'}, 9120Sstevel@tonic-gate {0xc8,'u'}, {0xc2,'y'}, {0xfc,0}, {0xc8,'y'} 9130Sstevel@tonic-gate }; 9140Sstevel@tonic-gate #elif (ISO_8859 == 2) 9150Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 9160Sstevel@tonic-gate {0xa0,0}, {0xce,'A'}, {0xc6,ALONE}, {0xe8,0}, 9170Sstevel@tonic-gate {0xa8,0}, {0xcf,'L'}, {0xc2,'S'}, {0xa7,0}, 9180Sstevel@tonic-gate {0xc8,ALONE}, {0xcf,'S'}, {0xcb,'S'}, {0xcf,'T'}, 9190Sstevel@tonic-gate {0xc2,'Z'}, {0xff,0}, {0xcf,'Z'}, {0xc7,'Z'}, 9200Sstevel@tonic-gate {0xb0,0}, {0xce,'a'}, {0xce,ALONE}, {0xf8,0}, 9210Sstevel@tonic-gate {0xc2,ALONE}, {0xcf,'l'}, {0xc2,'s'}, {0xcf,ALONE}, 9220Sstevel@tonic-gate {0xcb,ALONE}, {0xcf,'s'}, {0xcb,'s'}, {0xcf,'t'}, 9230Sstevel@tonic-gate {0xc2,'z'}, {0xcd,ALONE}, {0xcf,'z'}, {0xc7,'z'}, 9240Sstevel@tonic-gate {0xc2,'R'}, {0xc2,'A'}, {0xc3,'A'}, {0xc6,'A'}, 9250Sstevel@tonic-gate {0xc8,'A'}, {0xc2,'L'}, {0xc2,'C'}, {0xcb,'C'}, 9260Sstevel@tonic-gate {0xcf,'C'}, {0xc2,'E'}, {0xce,'E'}, {0xc8,'E'}, 9270Sstevel@tonic-gate {0xcf,'E'}, {0xc2,'I'}, {0xc3,'I'}, {0xcf,'D'}, 9280Sstevel@tonic-gate {0xe2,0}, {0xc2,'N'}, {0xcf,'N'}, {0xc2,'O'}, 9290Sstevel@tonic-gate {0xc3,'O'}, {0xcd,'O'}, {0xc8,'O'}, {0xb4,0}, 9300Sstevel@tonic-gate {0xcf,'R'}, {0xca,'U'}, {0xc2,'U'}, {0xcd,'U'}, 9310Sstevel@tonic-gate {0xc8,'U'}, {0xc2,'Y'}, {0xcb,'T'}, {0xfb,0}, 9320Sstevel@tonic-gate {0xc2,'r'}, {0xc2,'a'}, {0xc3,'a'}, {0xc6,'a'}, 9330Sstevel@tonic-gate {0xc8,'a'}, {0xc2,'l'}, {0xc2,'c'}, {0xcb,'c'}, 9340Sstevel@tonic-gate {0xcf,'c'}, {0xc2,'e'}, {0xce,'e'}, {0xc8,'e'}, 9350Sstevel@tonic-gate {0xcf,'e'}, {0xc2,'i'}, {0xc3,'i'}, {0xcf,'d'}, 9360Sstevel@tonic-gate {0xf2,0}, {0xc2,'n'}, {0xcf,'n'}, {0xc2,'o'}, 9370Sstevel@tonic-gate {0xc3,'o'}, {0xcd,'o'}, {0xc8,'o'}, {0xb8,0}, 9380Sstevel@tonic-gate {0xcf,'r'}, {0xca,'u'}, {0xc2,'u'}, {0xcd,'u'}, 9390Sstevel@tonic-gate {0xc8,'u'}, {0xc2,'y'}, {0xcb,'t'}, {0xc7,ALONE} 9400Sstevel@tonic-gate }; 9410Sstevel@tonic-gate #elif (ISO_8859 == 3) 9420Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 9430Sstevel@tonic-gate {0xa0,0}, {0xe4,0}, {0xc6,ALONE}, {0xa3,0}, 9440Sstevel@tonic-gate {0xa8,0}, {0,0}, {0xc3,'H'}, {0xa7,0}, 9450Sstevel@tonic-gate {0xc8,ALONE}, {0xc7,'I'}, {0xcb,'S'}, {0xc6,'G'}, 9460Sstevel@tonic-gate {0xc3,'J'}, {0xff,0}, {0,0}, {0xc7,'Z'}, 9470Sstevel@tonic-gate {0xb0,0}, {0xf4,0}, {0xb2,0}, {0xb3,0}, 9480Sstevel@tonic-gate {0xc2,ALONE}, {0xb5,0}, {0xc3,'h'}, {0xb7,0}, 9490Sstevel@tonic-gate {0xcb,ALONE}, {0xf5,0}, {0xcb,'s'}, {0xc6,'g'}, 9500Sstevel@tonic-gate {0xc3,'j'}, {0xbd,0}, {0,0}, {0xc7,'z'}, 9510Sstevel@tonic-gate {0xc1,'A'}, {0xc2,'A'}, {0xc3,'A'}, {0,0}, 9520Sstevel@tonic-gate {0xc8,'A'}, {0xc7,'C'}, {0xc3,'C'}, {0xcb,'C'}, 9530Sstevel@tonic-gate {0xc1,'E'}, {0xc2,'E'}, {0xc3,'E'}, {0xc8,'E'}, 9540Sstevel@tonic-gate {0xc1,'I'}, {0xc2,'I'}, {0xc3,'I'}, {0xc8,'I'}, 9550Sstevel@tonic-gate {0,0}, {0xc4,'N'}, {0xc1,'O'}, {0xc2,'O'}, 9560Sstevel@tonic-gate {0xc3,'O'}, {0xc7,'G'}, {0xc8,'O'}, {0xb4,0}, 9570Sstevel@tonic-gate {0xc3,'G'}, {0xc1,'U'}, {0xc2,'U'}, {0xc3,'U'}, 9580Sstevel@tonic-gate {0xc8,'U'}, {0xc6,'U'}, {0xc3,'S'}, {0xfb,0}, 9590Sstevel@tonic-gate {0xc1,'a'}, {0xc2,'a'}, {0xc3,'a'}, {0,0}, 9600Sstevel@tonic-gate {0xc8,'a'}, {0xc7,'c'}, {0xc3,'c'}, {0xcb,'c'}, 9610Sstevel@tonic-gate {0xc1,'e'}, {0xc2,'e'}, {0xc3,'e'}, {0xc8,'e'}, 9620Sstevel@tonic-gate {0xc1,'i'}, {0xc2,'i'}, {0xc3,'i'}, {0xc8,'i'}, 9630Sstevel@tonic-gate {0,0}, {0xc4,'n'}, {0xc1,'o'}, {0xc2,'o'}, 9640Sstevel@tonic-gate {0xc3,'o'}, {0xc7,'g'}, {0xc8,'o'}, {0xb8,0}, 9650Sstevel@tonic-gate {0xc3,'g'}, {0xc1,'u'}, {0xc2,'u'}, {0xc3,'u'}, 9660Sstevel@tonic-gate {0xc8,'u'}, {0xc6,'u'}, {0xc3,'s'}, {0xc7,ALONE} 9670Sstevel@tonic-gate }; 9680Sstevel@tonic-gate #elif (ISO_8859 == 4) 9690Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 9700Sstevel@tonic-gate {0xa0,0}, {0xce,'A'}, {0xf0,0}, {0xcb,'R'}, 9710Sstevel@tonic-gate {0xa8,0}, {0xc4,'I'}, {0xcb,'L'}, {0xa7,0}, 9720Sstevel@tonic-gate {0xc8,ALONE}, {0xcf,'S'}, {0xc5,'E'}, {0xcb,'G'}, 9730Sstevel@tonic-gate {0xed,0}, {0xff,0}, {0xcf,'Z'}, {0xc5,ALONE}, 9740Sstevel@tonic-gate {0xb0,0}, {0xce,'a'}, {0xce,ALONE}, {0xcb,'r'}, 9750Sstevel@tonic-gate {0xc2,ALONE}, {0xc4,'i'}, {0xcb,'l'}, {0xcf,ALONE}, 9760Sstevel@tonic-gate {0xcb,ALONE}, {0xcf,'s'}, {0xc5,'e'}, {0xcb,'g'}, 9770Sstevel@tonic-gate {0xfd,0}, {0xee,0}, {0xcf,'z'}, {0xfe,0}, 9780Sstevel@tonic-gate {0xc5,'A'}, {0xc2,'A'}, {0xc3,'A'}, {0xc4,'A'}, 9790Sstevel@tonic-gate {0xc8,'A'}, {0xca,'A'}, {0xe1,0}, {0xce,'I'}, 9800Sstevel@tonic-gate {0xcf,'C'}, {0xc2,'E'}, {0xce,'E'}, {0xc8,'E'}, 9810Sstevel@tonic-gate {0xc7,'E'}, {0xc2,'I'}, {0xc3,'I'}, {0xc5,'I'}, 9820Sstevel@tonic-gate {0xe2,0}, {0xcb,'N'}, {0xc5,'O'}, {0xcb,'K'}, 9830Sstevel@tonic-gate {0xc3,'O'}, {0xc4,'O'}, {0xc8,'O'}, {0xb4,0}, 9840Sstevel@tonic-gate {0xe9,0}, {0xce,'U'}, {0xc2,'U'}, {0xc3,'U'}, 9850Sstevel@tonic-gate {0xc8,'U'}, {0xc4,'U'}, {0xc5,'U'}, {0xfb,0}, 9860Sstevel@tonic-gate {0xc5,'a'}, {0xc2,'a'}, {0xc3,'a'}, {0xc4,'a'}, 9870Sstevel@tonic-gate {0xc8,'a'}, {0xca,'a'}, {0xf1,0}, {0xce,'i'}, 9880Sstevel@tonic-gate {0xcf,'c'}, {0xc2,'e'}, {0xce,'e'}, {0xc8,'e'}, 9890Sstevel@tonic-gate {0xc7,'e'}, {0xc2,'i'}, {0xc3,'i'}, {0xc5,'i'}, 9900Sstevel@tonic-gate {0xf2,0}, {0xcb,'n'}, {0xc5,'o'}, {0xcb,'k'}, 9910Sstevel@tonic-gate {0xc3,'o'}, {0xc4,'o'}, {0xc8,'o'}, {0xb8,0}, 9920Sstevel@tonic-gate {0xf9,0}, {0xce,'u'}, {0xc2,'u'}, {0xc3,'u'}, 9930Sstevel@tonic-gate {0xc8,'u'}, {0xc4,'u'}, {0xc5,'u'}, {0xc7,ALONE} 9940Sstevel@tonic-gate }; 9950Sstevel@tonic-gate #elif (ISO_8859 == 9) 9960Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 9970Sstevel@tonic-gate {0xa0,0}, {0xa1,0}, {0xa2,0}, {0xa3,0}, 9980Sstevel@tonic-gate {0xa8,0}, {0xa5,0}, {0xd7,0}, {0xa7,0}, 9990Sstevel@tonic-gate {0xc8,ALONE}, {0xd3,0}, {0xe3,0}, {0xab,0}, 10000Sstevel@tonic-gate {0xd6,0}, {0xff,0}, {0xd2,0}, {0xc5,ALONE}, 10010Sstevel@tonic-gate {0xb0,0}, {0xb1,0}, {0xb2,0}, {0xb3,0}, 10020Sstevel@tonic-gate {0xc2,ALONE}, {0xb5,0}, {0xb6,0}, {0xb7,0}, 10030Sstevel@tonic-gate {0xcb,ALONE}, {0xd1,0}, {0xeb,0}, {0xbb,0}, 10040Sstevel@tonic-gate {0xbc,0}, {0xbd,0}, {0xbe,0}, {0xbf,0}, 10050Sstevel@tonic-gate {0xc1,'A'}, {0xc2,'A'}, {0xc3,'A'}, {0xc4,'A'}, 10060Sstevel@tonic-gate {0xc8,'A'}, {0xca,'A'}, {0xe1,0}, {0xcb,'C'}, 10070Sstevel@tonic-gate {0xc1,'E'}, {0xc2,'E'}, {0xc3,'E'}, {0xc8,'E'}, 10080Sstevel@tonic-gate {0xc1,'I'}, {0xc2,'I'}, {0xc3,'I'}, {0xc8,'I'}, 10090Sstevel@tonic-gate {0xc6,'G'}, {0xc4,'N'}, {0xc1,'O'}, {0xc2,'O'}, 10100Sstevel@tonic-gate {0xc3,'O'}, {0xc4,'O'}, {0xc8,'O'}, {0xb4,0}, 10110Sstevel@tonic-gate {0xe9,0}, {0xc1,'U'}, {0xc2,'U'}, {0xc3,'U'}, 10120Sstevel@tonic-gate {0xc8,'U'}, {0xc7,'I'}, {0xcb,'S'}, {0xfb,0}, 10130Sstevel@tonic-gate {0xc1,'a'}, {0xc2,'a'}, {0xc3,'a'}, {0xc4,'a'}, 10140Sstevel@tonic-gate {0xc8,'a'}, {0xca,'a'}, {0xf1,0}, {0xcb,'c'}, 10150Sstevel@tonic-gate {0xc1,'e'}, {0xc2,'e'}, {0xce,'e'}, {0xc8,'e'}, 10160Sstevel@tonic-gate {0xc7,'e'}, {0xc2,'i'}, {0xc3,'i'}, {0xc5,'i'}, 10170Sstevel@tonic-gate {0xc6,'g'}, {0xc4,'n'}, {0xc1,'o'}, {0xc2,'o'}, 10180Sstevel@tonic-gate {0xc3,'o'}, {0xc4,'o'}, {0xc8,'o'}, {0xb8,0}, 10190Sstevel@tonic-gate {0xf9,0}, {0xc1,'u'}, {0xc2,'u'}, {0xc3,'u'}, 10200Sstevel@tonic-gate {0xc8,'u'}, {0xf5,0}, {0xcb,'s'}, {0xc8,'y'} 10210Sstevel@tonic-gate }; 10220Sstevel@tonic-gate #elif (ISO_8859 == 10) 10230Sstevel@tonic-gate static Couple trans_iso8859_t61[96] = { 10240Sstevel@tonic-gate {0xa0,0}, {0xce,'A'}, {0xc5,'E'}, {0xcb,'G'}, 10250Sstevel@tonic-gate {0xc5,'I'}, {0xc4,'I'}, {0xcb,'K'}, {0xa7,0}, 10260Sstevel@tonic-gate {0xcb,'L'}, {0xe2,0}, {0xcf,'S'}, {0xed,0}, 10270Sstevel@tonic-gate {0xcf,'Z'}, {0xff,0}, {0xc5,'U'}, {0xee,0}, 10280Sstevel@tonic-gate {0xb0,0}, {0xce,'a'}, {0xc5,'e'}, {0xcb,'g'}, 10290Sstevel@tonic-gate {0xc5,'i'}, {0xc4,'i'}, {0xcb,'k'}, {0xb7,0}, 10300Sstevel@tonic-gate {0xcb,'l'}, {0xf2,0}, {0xcf,'s'}, {0xfd,0}, 10310Sstevel@tonic-gate {0xcf,'z'}, {0xd0,0}, {0xc5,'u'}, {0xfe,0}, 10320Sstevel@tonic-gate {0xc5,'A'}, {0xc2,'A'}, {0xc3,'A'}, {0xc4,'A'}, 10330Sstevel@tonic-gate {0xc8,'A'}, {0xca,'A'}, {0xe1,0}, {0xce,'I'}, 10340Sstevel@tonic-gate {0xcf,'C'}, {0xc2,'E'}, {0xce,'E'}, {0xc8,'E'}, 10350Sstevel@tonic-gate {0xc7,'E'}, {0xc2,'I'}, {0xc3,'I'}, {0xc8,'I'}, 10360Sstevel@tonic-gate {0,0}, {0xcb,'N'}, {0xc5,'O'}, {0xc2,'O'}, 10370Sstevel@tonic-gate {0xc3,'O'}, {0xc4,'O'}, {0xc8,'O'}, {0xc4,'U'}, 10380Sstevel@tonic-gate {0xe9,0}, {0xce,'U'}, {0xc2,'U'}, {0xc3,'U'}, 10390Sstevel@tonic-gate {0xc8,'U'}, {0xc2,'Y'}, {0xec,0}, {0xfb,0}, 10400Sstevel@tonic-gate {0xc5,'a'}, {0xc2,'a'}, {0xc3,'a'}, {0xc4,'a'}, 10410Sstevel@tonic-gate {0xc8,'a'}, {0xca,'a'}, {0xf1,0}, {0xce,'i'}, 10420Sstevel@tonic-gate {0xcf,'c'}, {0xc2,'e'}, {0xce,'e'}, {0xc8,'e'}, 10430Sstevel@tonic-gate {0xc7,'e'}, {0xc2,'i'}, {0xc3,'i'}, {0xc8,'i'}, 10440Sstevel@tonic-gate {0xf3,0}, {0xcb,'n'}, {0xc5,'o'}, {0xc2,'o'}, 10450Sstevel@tonic-gate {0xc3,'o'}, {0xc4,'o'}, {0xc8,'o'}, {0xc4,'u'}, 10460Sstevel@tonic-gate {0xf9,0}, {0xce,'u'}, {0xc2,'u'}, {0xc3,'u'}, 10470Sstevel@tonic-gate {0xc8,'u'}, {0xc2,'y'}, {0xfc,0}, {0xf0,0} 10480Sstevel@tonic-gate }; 10490Sstevel@tonic-gate #endif 10500Sstevel@tonic-gate 10510Sstevel@tonic-gate 10520Sstevel@tonic-gate static Byte * 10530Sstevel@tonic-gate c_to_hh( Byte *o, Byte c ) 10540Sstevel@tonic-gate { 10550Sstevel@tonic-gate Byte n; 10560Sstevel@tonic-gate 10570Sstevel@tonic-gate *o++ = '{'; *o++ = 'x'; 10580Sstevel@tonic-gate n = c >> 4; 10590Sstevel@tonic-gate *o++ = ((n < 0xA) ? '0' : 'A' - 0xA) + n; 10600Sstevel@tonic-gate n = c & 0x0F; 10610Sstevel@tonic-gate *o++ = ((n < 0xA) ? '0' : 'A' - 0xA) + n; 10620Sstevel@tonic-gate *o++ = '}'; 10630Sstevel@tonic-gate return o; 10640Sstevel@tonic-gate } 10650Sstevel@tonic-gate 10660Sstevel@tonic-gate 10670Sstevel@tonic-gate static Byte * 10680Sstevel@tonic-gate c_to_cc( Byte *o, Couple *cc, Byte c ) 10690Sstevel@tonic-gate { 10700Sstevel@tonic-gate if ( (*cc).a != 0 ) { 10710Sstevel@tonic-gate if ( (*cc).b == 0 ) 10720Sstevel@tonic-gate *o++ = (*cc).a; 10730Sstevel@tonic-gate else { 10740Sstevel@tonic-gate *o++ = '{'; 10750Sstevel@tonic-gate *o++ = (*cc).a; 10760Sstevel@tonic-gate *o++ = (*cc).b; 10770Sstevel@tonic-gate *o++ = '}'; 10780Sstevel@tonic-gate } 10790Sstevel@tonic-gate return o; 10800Sstevel@tonic-gate } 10810Sstevel@tonic-gate else 10820Sstevel@tonic-gate return c_to_hh( o, c ); 10830Sstevel@tonic-gate } 10840Sstevel@tonic-gate 10850Sstevel@tonic-gate /* --- routine to convert from T.61 to ISO 8859-n --- */ 10860Sstevel@tonic-gate 10870Sstevel@tonic-gate int 10880Sstevel@tonic-gate ldap_t61_to_8859( char **bufp, unsigned int *buflenp, int free_input ) 10890Sstevel@tonic-gate { 10900Sstevel@tonic-gate Byte *s, *oo, *o; 10910Sstevel@tonic-gate unsigned int n; 10920Sstevel@tonic-gate int c; 10930Sstevel@tonic-gate unsigned int len; 10940Sstevel@tonic-gate Couple *cc; 10950Sstevel@tonic-gate 10960Sstevel@tonic-gate Debug( LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 111, "ldap_t61_to_8859 input length: %ld\n"), 10970Sstevel@tonic-gate *buflenp, 0, 0 ); 10980Sstevel@tonic-gate 10990Sstevel@tonic-gate len = *buflenp; 11000Sstevel@tonic-gate s = (Byte *) *bufp; 11010Sstevel@tonic-gate 11020Sstevel@tonic-gate if ( (o = oo = (Byte *)malloc( 2 * len + 64 )) == NULL ) { 11030Sstevel@tonic-gate return( 1 ); 11040Sstevel@tonic-gate } 11050Sstevel@tonic-gate 11060Sstevel@tonic-gate while ( (char *)s - *(char **)bufp < len ) { 11070Sstevel@tonic-gate switch ( *s >> 4 ) { 11080Sstevel@tonic-gate 11090Sstevel@tonic-gate case 0xA: case 0xB: 11100Sstevel@tonic-gate o = c_to_cc( o, &trans_t61a_iso8859[ *s - 0xA0 ], *s ); 11110Sstevel@tonic-gate s++; 11120Sstevel@tonic-gate break; 11130Sstevel@tonic-gate 11140Sstevel@tonic-gate case 0xD: case 0xE: case 0xF: 11150Sstevel@tonic-gate o = c_to_cc( o, &trans_t61b_iso8859[ *s - 0xD0 ], *s ); 11160Sstevel@tonic-gate s++; 11170Sstevel@tonic-gate break; 11180Sstevel@tonic-gate 11190Sstevel@tonic-gate case 0xC: 11200Sstevel@tonic-gate if ( (*s == 0xC0) || (*s == 0xC9) || (*s == 0xCC) ) { 11210Sstevel@tonic-gate o = c_to_hh( o, *s++ ); 11220Sstevel@tonic-gate break; 11230Sstevel@tonic-gate } 11240Sstevel@tonic-gate 11250Sstevel@tonic-gate n = (*s++) - 0xC0; 11260Sstevel@tonic-gate switch ( *s ) { 11270Sstevel@tonic-gate 11280Sstevel@tonic-gate case 'A': c = letter_w_diacritic[n][0]; break; 11290Sstevel@tonic-gate case 'C': c = letter_w_diacritic[n][1]; break; 11300Sstevel@tonic-gate case 'D': c = letter_w_diacritic[n][2]; break; 11310Sstevel@tonic-gate case 'E': c = letter_w_diacritic[n][3]; break; 11320Sstevel@tonic-gate case 'G': c = letter_w_diacritic[n][4]; break; 11330Sstevel@tonic-gate case 'H': c = letter_w_diacritic[n][5]; break; 11340Sstevel@tonic-gate case 'I': c = letter_w_diacritic[n][6]; break; 11350Sstevel@tonic-gate case 'J': c = letter_w_diacritic[n][7]; break; 11360Sstevel@tonic-gate case 'K': c = letter_w_diacritic[n][8]; break; 11370Sstevel@tonic-gate case 'L': c = letter_w_diacritic[n][9]; break; 11380Sstevel@tonic-gate case 'N': c = letter_w_diacritic[n][10]; break; 11390Sstevel@tonic-gate case 'O': c = letter_w_diacritic[n][11]; break; 11400Sstevel@tonic-gate case 'R': c = letter_w_diacritic[n][12]; break; 11410Sstevel@tonic-gate case 'S': c = letter_w_diacritic[n][13]; break; 11420Sstevel@tonic-gate case 'T': c = letter_w_diacritic[n][14]; break; 11430Sstevel@tonic-gate case 'U': c = letter_w_diacritic[n][15]; break; 11440Sstevel@tonic-gate case 'W': c = letter_w_diacritic[n][16]; break; 11450Sstevel@tonic-gate case 'Y': c = letter_w_diacritic[n][17]; break; 11460Sstevel@tonic-gate case 'Z': c = letter_w_diacritic[n][18]; break; 11470Sstevel@tonic-gate 11480Sstevel@tonic-gate case 'a': c = letter_w_diacritic[n][19]; break; 11490Sstevel@tonic-gate case 'c': c = letter_w_diacritic[n][20]; break; 11500Sstevel@tonic-gate case 'd': c = letter_w_diacritic[n][21]; break; 11510Sstevel@tonic-gate case 'e': c = letter_w_diacritic[n][22]; break; 11520Sstevel@tonic-gate case 'g': c = letter_w_diacritic[n][23]; break; 11530Sstevel@tonic-gate case 'h': c = letter_w_diacritic[n][24]; break; 11540Sstevel@tonic-gate case 'i': c = letter_w_diacritic[n][25]; break; 11550Sstevel@tonic-gate case 'j': c = letter_w_diacritic[n][26]; break; 11560Sstevel@tonic-gate case 'k': c = letter_w_diacritic[n][27]; break; 11570Sstevel@tonic-gate case 'l': c = letter_w_diacritic[n][28]; break; 11580Sstevel@tonic-gate case 'n': c = letter_w_diacritic[n][29]; break; 11590Sstevel@tonic-gate case 'o': c = letter_w_diacritic[n][30]; break; 11600Sstevel@tonic-gate case 'r': c = letter_w_diacritic[n][31]; break; 11610Sstevel@tonic-gate case 's': c = letter_w_diacritic[n][32]; break; 11620Sstevel@tonic-gate case 't': c = letter_w_diacritic[n][33]; break; 11630Sstevel@tonic-gate case 'u': c = letter_w_diacritic[n][34]; break; 11640Sstevel@tonic-gate case 'w': c = letter_w_diacritic[n][35]; break; 11650Sstevel@tonic-gate case 'y': c = letter_w_diacritic[n][36]; break; 11660Sstevel@tonic-gate case 'z': c = letter_w_diacritic[n][37]; break; 11670Sstevel@tonic-gate 11680Sstevel@tonic-gate case ALONE: c = (( !diacritic[n].b ) ? diacritic[n].a : -1); 11690Sstevel@tonic-gate break; 11700Sstevel@tonic-gate 11710Sstevel@tonic-gate default: c = 0; 11720Sstevel@tonic-gate } 11730Sstevel@tonic-gate 11740Sstevel@tonic-gate if ( c > 0 ) { 11750Sstevel@tonic-gate *o++ = c; s++; 11760Sstevel@tonic-gate } else { 11770Sstevel@tonic-gate *o++ = '{'; 11780Sstevel@tonic-gate if ( c == -1 ) { 11790Sstevel@tonic-gate *o++ = ( ( *s == ALONE ) ? ' ' : *s ); 11800Sstevel@tonic-gate s++; 11810Sstevel@tonic-gate } else { 11820Sstevel@tonic-gate *o++ = '"'; 11830Sstevel@tonic-gate } 11840Sstevel@tonic-gate *o++ = diacritic[n].a; 11850Sstevel@tonic-gate *o++ = '}'; 11860Sstevel@tonic-gate } 11870Sstevel@tonic-gate break; 11880Sstevel@tonic-gate 11890Sstevel@tonic-gate #if (ISO_8859 == 0) 11900Sstevel@tonic-gate case 0x8: case 0x9: 11910Sstevel@tonic-gate *o++ = 0x1B; /* <ESC> */ 11920Sstevel@tonic-gate *o++ = *s++ - 0x40; 11930Sstevel@tonic-gate break; 11940Sstevel@tonic-gate #endif 11950Sstevel@tonic-gate 11960Sstevel@tonic-gate default: 11970Sstevel@tonic-gate *o++ = *s++; 11980Sstevel@tonic-gate } 11990Sstevel@tonic-gate } 12000Sstevel@tonic-gate 12010Sstevel@tonic-gate len = o - oo; 12020Sstevel@tonic-gate o = oo; 12030Sstevel@tonic-gate 12040Sstevel@tonic-gate if ( (oo = (Byte *)realloc( o, len )) == NULL ) { 12050Sstevel@tonic-gate free( o ); 12060Sstevel@tonic-gate return( 1 ); 12070Sstevel@tonic-gate } 12080Sstevel@tonic-gate 12090Sstevel@tonic-gate if ( free_input ) { 12100Sstevel@tonic-gate free( *bufp ); 12110Sstevel@tonic-gate } 12120Sstevel@tonic-gate *bufp = (char *) oo; 12130Sstevel@tonic-gate *buflenp = len; 12140Sstevel@tonic-gate return( 0 ); 12150Sstevel@tonic-gate } 12160Sstevel@tonic-gate 12170Sstevel@tonic-gate 12180Sstevel@tonic-gate static int 12190Sstevel@tonic-gate hh_to_c( Byte *h ) 12200Sstevel@tonic-gate { 12210Sstevel@tonic-gate Byte c; 12220Sstevel@tonic-gate 12230Sstevel@tonic-gate if ( (*h >= '0') && (*h <= '9') ) c = *h++ - '0'; 12240Sstevel@tonic-gate else if ( (*h >= 'A') && (*h <= 'F') ) c = *h++ - 'A' + 10; 12250Sstevel@tonic-gate else if ( (*h >= 'a') && (*h <= 'f') ) c = *h++ - 'a' + 10; 12260Sstevel@tonic-gate else return -1; 12270Sstevel@tonic-gate 12280Sstevel@tonic-gate c <<= 4; 12290Sstevel@tonic-gate 12300Sstevel@tonic-gate if ( (*h >= '0') && (*h <= '9') ) c |= *h - '0'; 12310Sstevel@tonic-gate else if ( (*h >= 'A') && (*h <= 'F') ) c |= *h - 'A' + 10; 12320Sstevel@tonic-gate else if ( (*h >= 'a') && (*h <= 'f') ) c |= *h - 'a' + 10; 12330Sstevel@tonic-gate else return -1; 12340Sstevel@tonic-gate 12350Sstevel@tonic-gate return c; 12360Sstevel@tonic-gate } 12370Sstevel@tonic-gate 12380Sstevel@tonic-gate 12390Sstevel@tonic-gate static Byte * 12400Sstevel@tonic-gate cc_to_t61( Byte *o, Byte *s ) 12410Sstevel@tonic-gate { 12420Sstevel@tonic-gate int n, c = 0; 12430Sstevel@tonic-gate 12440Sstevel@tonic-gate switch ( *(s + 1) ) { 12450Sstevel@tonic-gate 12460Sstevel@tonic-gate case '`': c = -1; break; /* <grave-accent> */ 12470Sstevel@tonic-gate 12480Sstevel@tonic-gate case '!': 12490Sstevel@tonic-gate switch ( *s ) { 12500Sstevel@tonic-gate case '!': c = 0x7C; break; /* <vertical-line> */ 12510Sstevel@tonic-gate case '(': c = 0x7B; break; /* <left-curly-bracket> */ 12520Sstevel@tonic-gate case '-': c = 0xAD; break; /* <upwards-arrow> */ 12530Sstevel@tonic-gate default: c = -1; /* <grave-accent> */ 12540Sstevel@tonic-gate } 12550Sstevel@tonic-gate break; 12560Sstevel@tonic-gate 12570Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 2) || (ISO_8859 == 3) || \ 12580Sstevel@tonic-gate (ISO_8859 == 4) || (ISO_8859 == 9) 12590Sstevel@tonic-gate case 0xB4: 12600Sstevel@tonic-gate #endif 12610Sstevel@tonic-gate case '\'': c = -2; break; /* <acute-accent> */ 12620Sstevel@tonic-gate 12630Sstevel@tonic-gate case '^': c = -3; break; /* <circumflex-acent> */ 12640Sstevel@tonic-gate 12650Sstevel@tonic-gate case '>': 12660Sstevel@tonic-gate switch ( *s ) { 12670Sstevel@tonic-gate case ')': c = 0x5D; break; /* <right-square-bracket> */ 12680Sstevel@tonic-gate case '>': c = 0xBB; break; /* <right-angle-quotation> */ 12690Sstevel@tonic-gate case '-': c = 0xAE; break; /* <rightwards-arrow> */ 12700Sstevel@tonic-gate default: c = -3; /* <circumflex-acent> */ 12710Sstevel@tonic-gate } 12720Sstevel@tonic-gate break; 12730Sstevel@tonic-gate 12740Sstevel@tonic-gate case '~': 12750Sstevel@tonic-gate case '?': c = -4; break; /* <tilde> */ 12760Sstevel@tonic-gate 12770Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 4) || (ISO_8859 == 9) 12780Sstevel@tonic-gate case 0xAF: c = -5; break; /* <macron> */ 12790Sstevel@tonic-gate #endif 12800Sstevel@tonic-gate 12810Sstevel@tonic-gate case '-': 12820Sstevel@tonic-gate switch ( *s ) { 12830Sstevel@tonic-gate case '-': c = 0xFF; break; /* <soft-hyphen> */ 12840Sstevel@tonic-gate case '<': c = 0xAC; break; /* <leftwards arrow> */ 12850Sstevel@tonic-gate case '+': c = 0xB1; break; /* <plus-minus> */ 12860Sstevel@tonic-gate case 'd': c = 0xF3; break; /* <eth> */ 12870Sstevel@tonic-gate default: c = -5; /* <macron> */ 12880Sstevel@tonic-gate } 12890Sstevel@tonic-gate break; 12900Sstevel@tonic-gate 12910Sstevel@tonic-gate #if (ISO_8859 == 2) || (ISO_8859 == 3) 12920Sstevel@tonic-gate case 0xA2: c = -6; break; /* <breve> */ 12930Sstevel@tonic-gate #endif 12940Sstevel@tonic-gate 12950Sstevel@tonic-gate case '(': 12960Sstevel@tonic-gate if ( *s == '<' ) c = 0x5B; /* <left-square-bracket> */ 12970Sstevel@tonic-gate else c = -6; /* <breve> */ 12980Sstevel@tonic-gate break; 12990Sstevel@tonic-gate 13000Sstevel@tonic-gate #if (ISO_8859 == 2) || (ISO_8859 == 3) || (ISO_8859 == 4) 13010Sstevel@tonic-gate case 0xFF: c = -7; break; /* <dot-accent> */ 13020Sstevel@tonic-gate #endif 13030Sstevel@tonic-gate 13040Sstevel@tonic-gate case '.': 13050Sstevel@tonic-gate switch ( *s ) { 13060Sstevel@tonic-gate case 'i': c = 0xF5; break; /* <dotless-i> */ 13070Sstevel@tonic-gate case 'L': c = 0xE7; break; /* <L-middle-dot> */ 13080Sstevel@tonic-gate case 'l': c = 0xF7; break; /* <l-middle-dot> */ 13090Sstevel@tonic-gate default: c = -7; /* <dot-accent> */ 13100Sstevel@tonic-gate } 13110Sstevel@tonic-gate break; 13120Sstevel@tonic-gate 13130Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 2) || (ISO_8859 == 3) || \ 13140Sstevel@tonic-gate (ISO_8859 == 4) || (ISO_8859 == 9) 13150Sstevel@tonic-gate case 0xA8: c = -8; break; /* <diaeresis> */ 13160Sstevel@tonic-gate #endif 13170Sstevel@tonic-gate 13180Sstevel@tonic-gate case ':': 13190Sstevel@tonic-gate if ( *s == '-') c = 0xB8; /* <division-sign> */ 13200Sstevel@tonic-gate else c = -8; /* <diaeresis> */ 13210Sstevel@tonic-gate break; 13220Sstevel@tonic-gate 13230Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 2) || (ISO_8859 == 3) || \ 13240Sstevel@tonic-gate (ISO_8859 == 4) || (ISO_8859 == 9) || (ISO_8859 == 10) 13250Sstevel@tonic-gate case 0xB0: 13260Sstevel@tonic-gate #endif 13270Sstevel@tonic-gate case '0': c = -10; break; /* <ring-above> */ 13280Sstevel@tonic-gate 13290Sstevel@tonic-gate #if (ISO_8859 == 1) || (ISO_8859 == 2) || (ISO_8859 == 3) || \ 13300Sstevel@tonic-gate (ISO_8859 == 4) || (ISO_8859 == 9) 13310Sstevel@tonic-gate case 0xB8: 13320Sstevel@tonic-gate #endif 13330Sstevel@tonic-gate case ',': c = -11; break; /* <cedilla> */ 13340Sstevel@tonic-gate 13350Sstevel@tonic-gate #if (ISO_8859 == 2) 13360Sstevel@tonic-gate case 0xBD: 13370Sstevel@tonic-gate #endif 13380Sstevel@tonic-gate case '"': c = -13; break; /* <double-acute-accent> */ 13390Sstevel@tonic-gate 13400Sstevel@tonic-gate #if (ISO_8859 == 2) || (ISO_8859 == 4) 13410Sstevel@tonic-gate case 0xB2: 13420Sstevel@tonic-gate #endif 13430Sstevel@tonic-gate case ';': c = -14; break; /* <ogonek> */ 13440Sstevel@tonic-gate 13450Sstevel@tonic-gate #if (ISO_8859 == 2) || (ISO_8859 == 4) 13460Sstevel@tonic-gate case 0xB7: c = -15; break; /* <caron> */ 13470Sstevel@tonic-gate #endif 13480Sstevel@tonic-gate 13490Sstevel@tonic-gate case ')': 13500Sstevel@tonic-gate if ( *s == '!' ) c = 0x7D; /* <left-curly-bracket> */ 13510Sstevel@tonic-gate break; 13520Sstevel@tonic-gate 13530Sstevel@tonic-gate case '<': 13540Sstevel@tonic-gate if ( *s == '<' ) c = 0xAB; /* <left-angle-quotation> */ 13550Sstevel@tonic-gate else c = -15; /* <caron> */ 13560Sstevel@tonic-gate break; 13570Sstevel@tonic-gate 13580Sstevel@tonic-gate case '/': 13590Sstevel@tonic-gate switch ( *s ) { 13600Sstevel@tonic-gate case '/': c = 0x5C; break; /* <reverse-solidus> */ 13610Sstevel@tonic-gate case 'D': c = 0xE2; break; /* <D-stroke> */ 13620Sstevel@tonic-gate case 'd': c = 0xF2; break; /* <d-stroke> */ 13630Sstevel@tonic-gate case 'H': c = 0xE4; break; /* <H-stroke> */ 13640Sstevel@tonic-gate case 'h': c = 0xF4; break; /* <h-stroke> */ 13650Sstevel@tonic-gate case 'L': c = 0xE8; break; /* <L-stroke> */ 13660Sstevel@tonic-gate case 'l': c = 0xF8; break; /* <l-stroke> */ 13670Sstevel@tonic-gate case 'O': c = 0xE9; break; /* <O-stroke> */ 13680Sstevel@tonic-gate case 'o': c = 0xF9; break; /* <o-stroke> */ 13690Sstevel@tonic-gate case 'T': c = 0xED; break; /* <T-stroke> */ 13700Sstevel@tonic-gate case 't': c = 0xFD; break; /* <t-stroke> */ 13710Sstevel@tonic-gate } 13720Sstevel@tonic-gate break; 13730Sstevel@tonic-gate 13740Sstevel@tonic-gate case '2': 13750Sstevel@tonic-gate if ( *s == '1' ) c = 0xBD; /* <one-half> */ 13760Sstevel@tonic-gate break; 13770Sstevel@tonic-gate 13780Sstevel@tonic-gate case '4': 13790Sstevel@tonic-gate switch ( *s ) { 13800Sstevel@tonic-gate case '1': c = 0xBC; break; /* <one-quarter> */ 13810Sstevel@tonic-gate case '3': c = 0xBE; break; /* <three-quarters> */ 13820Sstevel@tonic-gate } 13830Sstevel@tonic-gate break; 13840Sstevel@tonic-gate 13850Sstevel@tonic-gate case '6': 13860Sstevel@tonic-gate switch ( *s ) { 13870Sstevel@tonic-gate case '\'': c = 0xA9; break; /* <left-single-quotation> */ 13880Sstevel@tonic-gate case '"': c = 0xAA; break; /* <left-double-quotation> */ 13890Sstevel@tonic-gate } 13900Sstevel@tonic-gate break; 13910Sstevel@tonic-gate 13920Sstevel@tonic-gate case '8': 13930Sstevel@tonic-gate switch ( *s ) { 13940Sstevel@tonic-gate case '1': c = 0xDC; break; /* <one-eighth> */ 13950Sstevel@tonic-gate case '3': c = 0xDD; break; /* <three-eighths> */ 13960Sstevel@tonic-gate case '5': c = 0xDE; break; /* <five-eighths> */ 13970Sstevel@tonic-gate case '7': c = 0xDF; break; /* <seven-eighths> */ 13980Sstevel@tonic-gate case 'M': c = 0xD5; break; /* <eighth-note> */ 13990Sstevel@tonic-gate } 14000Sstevel@tonic-gate break; 14010Sstevel@tonic-gate 14020Sstevel@tonic-gate case '9': 14030Sstevel@tonic-gate switch ( *s ) { 14040Sstevel@tonic-gate case '\'': c = 0xB9; break; /* <right-single-quotation> */ 14050Sstevel@tonic-gate case '"': c = 0xBA; break; /* <right-double-quotation> */ 14060Sstevel@tonic-gate } 14070Sstevel@tonic-gate break; 14080Sstevel@tonic-gate 14090Sstevel@tonic-gate case 'A': 14100Sstevel@tonic-gate if ( *s == 'A' ) c = -10; /* <ring-above> + <A> */ 14110Sstevel@tonic-gate break; 14120Sstevel@tonic-gate 14130Sstevel@tonic-gate case 'a': 14140Sstevel@tonic-gate switch ( *s ) { 14150Sstevel@tonic-gate case '-': c = 0xE3; break; /* <femenine-ordinal-a> */ 14160Sstevel@tonic-gate case 'a': c = -10; break; /* <ring-above> + <a> */ 14170Sstevel@tonic-gate } 14180Sstevel@tonic-gate break; 14190Sstevel@tonic-gate 14200Sstevel@tonic-gate case 'B': 14210Sstevel@tonic-gate if ( *s == 'B' ) c = 0xD7; /* <broken-bar> */ 14220Sstevel@tonic-gate break; 14230Sstevel@tonic-gate 14240Sstevel@tonic-gate case 'b': 14250Sstevel@tonic-gate if ( *s == 'N' ) c = 0xA6; /* <number-sign> */ 14260Sstevel@tonic-gate break; 14270Sstevel@tonic-gate 14280Sstevel@tonic-gate case 'd': 14290Sstevel@tonic-gate if ( *s == 'P' ) c = 0xA3; /* <pound-sign> */ 14300Sstevel@tonic-gate break; 14310Sstevel@tonic-gate 14320Sstevel@tonic-gate case 'E': 14330Sstevel@tonic-gate switch ( *s ) { 14340Sstevel@tonic-gate case 'S': c = 0xA7; break; /* <section-sign> */ 14350Sstevel@tonic-gate case 'A': c = 0xE1; break; /* <AE> */ 14360Sstevel@tonic-gate case 'O': c = 0xEA; break; /* <OE> */ 14370Sstevel@tonic-gate } 14380Sstevel@tonic-gate break; 14390Sstevel@tonic-gate 14400Sstevel@tonic-gate case 'e': 14410Sstevel@tonic-gate switch ( *s ) { 14420Sstevel@tonic-gate case 'a': c = 0xF1; break; /* <ae> */ 14430Sstevel@tonic-gate case 'o': c = 0xFA; break; /* <oe> */ 14440Sstevel@tonic-gate case 'Y': c = 0xA5; break; /* <yen-sign> */ 14450Sstevel@tonic-gate } 14460Sstevel@tonic-gate break; 14470Sstevel@tonic-gate 14480Sstevel@tonic-gate case 'G': 14490Sstevel@tonic-gate switch ( *s ) { 14500Sstevel@tonic-gate case 'D': c = 0xB0; break; /* <degree-sign> */ 14510Sstevel@tonic-gate case 'N': c = 0xEE; break; /* <Eng> */ 14520Sstevel@tonic-gate } 14530Sstevel@tonic-gate break; 14540Sstevel@tonic-gate 14550Sstevel@tonic-gate case 'g': 14560Sstevel@tonic-gate switch ( *s ) { 14570Sstevel@tonic-gate case 'R': c = 0xD2; break; /* <registered-sign> */ 14580Sstevel@tonic-gate case 'n': c = 0xFE; break; /* <eng> */ 14590Sstevel@tonic-gate } 14600Sstevel@tonic-gate break; 14610Sstevel@tonic-gate 14620Sstevel@tonic-gate case 'H': 14630Sstevel@tonic-gate if ( *s == 'T' ) c = 0xEC; /* <Thorn> */ 14640Sstevel@tonic-gate break; 14650Sstevel@tonic-gate 14660Sstevel@tonic-gate case 'h': 14670Sstevel@tonic-gate if ( *s == 't' ) c = 0xFC; /* <thorn> */ 14680Sstevel@tonic-gate break; 14690Sstevel@tonic-gate 14700Sstevel@tonic-gate case 'I': 14710Sstevel@tonic-gate switch ( *s ) { 14720Sstevel@tonic-gate case 'P': c = 0xB6; break; /* <pilcrow-sign> */ 14730Sstevel@tonic-gate case '!': c = 0xA1; break; /* <inverted-exclamation> */ 14740Sstevel@tonic-gate case '?': c = 0xBF; break; /* <inverted-question> */ 14750Sstevel@tonic-gate } 14760Sstevel@tonic-gate break; 14770Sstevel@tonic-gate 14780Sstevel@tonic-gate case 'J': 14790Sstevel@tonic-gate if ( *s == 'I' ) c = 0xE6; /* <IJ> */ 14800Sstevel@tonic-gate break; 14810Sstevel@tonic-gate 14820Sstevel@tonic-gate case 'j': 14830Sstevel@tonic-gate if ( *s == 'i' ) c = 0xF6; /* <ij> */ 14840Sstevel@tonic-gate break; 14850Sstevel@tonic-gate 14860Sstevel@tonic-gate case 'k': 14870Sstevel@tonic-gate if ( *s == 'k' ) c = 0xF0; /* <kra> */ 14880Sstevel@tonic-gate break; 14890Sstevel@tonic-gate 14900Sstevel@tonic-gate case 'M': 14910Sstevel@tonic-gate switch ( *s ) { 14920Sstevel@tonic-gate case '.': c = 0xB7; break; /* <middle-dot> */ 14930Sstevel@tonic-gate case '-': c = 0xD0; break; /* <em-dash> */ 14940Sstevel@tonic-gate case 'T': c = 0xD4; break; /* <trade-mark-sign> */ 14950Sstevel@tonic-gate } 14960Sstevel@tonic-gate break; 14970Sstevel@tonic-gate 14980Sstevel@tonic-gate case 'm': 14990Sstevel@tonic-gate switch ( *s ) { 15000Sstevel@tonic-gate case '\'': /* <macron> RFC 1345 */ 15010Sstevel@tonic-gate case ' ': c = -5; break; /* <macron> */ 15020Sstevel@tonic-gate case 'O': c = 0xE0; break; /* <Ohm sign> */ 15030Sstevel@tonic-gate } 15040Sstevel@tonic-gate break; 15050Sstevel@tonic-gate 15060Sstevel@tonic-gate case 'n': 15070Sstevel@tonic-gate if ( *s == '\'' ) c = 0xEF; /* <n-preceded-by-apostrophe> */ 15080Sstevel@tonic-gate break; 15090Sstevel@tonic-gate 15100Sstevel@tonic-gate case 'O': 15110Sstevel@tonic-gate switch ( *s ) { 15120Sstevel@tonic-gate case 'D': c = 0xA4; break; /* <dollar-sign> */ 15130Sstevel@tonic-gate case 'N': c = 0xD6; break; /* <not-sign> */ 15140Sstevel@tonic-gate } 15150Sstevel@tonic-gate break; 15160Sstevel@tonic-gate 15170Sstevel@tonic-gate case 'o': 15180Sstevel@tonic-gate switch ( *s ) { 15190Sstevel@tonic-gate case 'C': c = 0xD3; break; /* <copyright-sign> */ 15200Sstevel@tonic-gate case '-': c = 0xEB; break; /* <masculine-ordinal-o> */ 15210Sstevel@tonic-gate } 15220Sstevel@tonic-gate break; 15230Sstevel@tonic-gate 15240Sstevel@tonic-gate case 'S': 15250Sstevel@tonic-gate switch ( *s ) { 15260Sstevel@tonic-gate case '1': c = 0xD1; break; /* <superscript-1> */ 15270Sstevel@tonic-gate case '2': c = 0xB2; break; /* <superscript-2> */ 15280Sstevel@tonic-gate case '3': c = 0xB3; break; /* <superscript-3> */ 15290Sstevel@tonic-gate case 'N': c = 0xA0; break; /* <no-break-space> */ 15300Sstevel@tonic-gate } 15310Sstevel@tonic-gate break; 15320Sstevel@tonic-gate 15330Sstevel@tonic-gate case 's': 15340Sstevel@tonic-gate if ( *s == 's' ) c = 0xFB; /* <sharp-s> */ 15350Sstevel@tonic-gate break; 15360Sstevel@tonic-gate 15370Sstevel@tonic-gate case 't': 15380Sstevel@tonic-gate if ( *s == 'C' ) c = 0xA2; /* <cent-sign> */ 15390Sstevel@tonic-gate break; 15400Sstevel@tonic-gate 15410Sstevel@tonic-gate case 'u': 15420Sstevel@tonic-gate if ( *s == 'C' ) c = 0xA8; /* <currency-sign> */ 15430Sstevel@tonic-gate break; 15440Sstevel@tonic-gate 15450Sstevel@tonic-gate case 'v': 15460Sstevel@tonic-gate if ( *s == '-' ) c = 0xAF; /* <downwards-arrow> */ 15470Sstevel@tonic-gate break; 15480Sstevel@tonic-gate 15490Sstevel@tonic-gate case 'X': 15500Sstevel@tonic-gate if ( *s == '*' ) c = 0xB4; /* <multiplication-sign> */ 15510Sstevel@tonic-gate break; 15520Sstevel@tonic-gate 15530Sstevel@tonic-gate case 'y': 15540Sstevel@tonic-gate if ( *s == 'M' ) c = 0xB5; /* <micro-sign> */ 15550Sstevel@tonic-gate break; 15560Sstevel@tonic-gate } 15570Sstevel@tonic-gate 15580Sstevel@tonic-gate if ( c > 0 ) { 15590Sstevel@tonic-gate *o++ = c; 15600Sstevel@tonic-gate return o; 15610Sstevel@tonic-gate } else if ( !c ) 15620Sstevel@tonic-gate return NULL; 15630Sstevel@tonic-gate 15640Sstevel@tonic-gate /* else: c < 0 */ 15650Sstevel@tonic-gate n = -c; 15660Sstevel@tonic-gate switch ( *s ) { 15670Sstevel@tonic-gate 15680Sstevel@tonic-gate case 'A': c = letter_w_diacritic[n][0]; break; 15690Sstevel@tonic-gate case 'C': c = letter_w_diacritic[n][1]; break; 15700Sstevel@tonic-gate case 'D': c = letter_w_diacritic[n][2]; break; 15710Sstevel@tonic-gate case 'E': c = letter_w_diacritic[n][3]; break; 15720Sstevel@tonic-gate case 'G': c = letter_w_diacritic[n][4]; break; 15730Sstevel@tonic-gate case 'H': c = letter_w_diacritic[n][5]; break; 15740Sstevel@tonic-gate case 'I': c = letter_w_diacritic[n][6]; break; 15750Sstevel@tonic-gate case 'J': c = letter_w_diacritic[n][7]; break; 15760Sstevel@tonic-gate case 'K': c = letter_w_diacritic[n][8]; break; 15770Sstevel@tonic-gate case 'L': c = letter_w_diacritic[n][9]; break; 15780Sstevel@tonic-gate case 'N': c = letter_w_diacritic[n][10]; break; 15790Sstevel@tonic-gate case 'O': c = letter_w_diacritic[n][11]; break; 15800Sstevel@tonic-gate case 'R': c = letter_w_diacritic[n][12]; break; 15810Sstevel@tonic-gate case 'S': c = letter_w_diacritic[n][13]; break; 15820Sstevel@tonic-gate case 'T': c = letter_w_diacritic[n][14]; break; 15830Sstevel@tonic-gate case 'U': c = letter_w_diacritic[n][15]; break; 15840Sstevel@tonic-gate case 'W': c = letter_w_diacritic[n][16]; break; 15850Sstevel@tonic-gate case 'Y': c = letter_w_diacritic[n][17]; break; 15860Sstevel@tonic-gate case 'Z': c = letter_w_diacritic[n][18]; break; 15870Sstevel@tonic-gate 15880Sstevel@tonic-gate case 'a': c = letter_w_diacritic[n][19]; break; 15890Sstevel@tonic-gate case 'c': c = letter_w_diacritic[n][20]; break; 15900Sstevel@tonic-gate case 'd': c = letter_w_diacritic[n][21]; break; 15910Sstevel@tonic-gate case 'e': c = letter_w_diacritic[n][22]; break; 15920Sstevel@tonic-gate case 'g': c = letter_w_diacritic[n][23]; break; 15930Sstevel@tonic-gate case 'h': c = letter_w_diacritic[n][24]; break; 15940Sstevel@tonic-gate case 'i': c = letter_w_diacritic[n][25]; break; 15950Sstevel@tonic-gate case 'j': c = letter_w_diacritic[n][26]; break; 15960Sstevel@tonic-gate case 'k': c = letter_w_diacritic[n][27]; break; 15970Sstevel@tonic-gate case 'l': c = letter_w_diacritic[n][28]; break; 15980Sstevel@tonic-gate case 'n': c = letter_w_diacritic[n][29]; break; 15990Sstevel@tonic-gate case 'o': c = letter_w_diacritic[n][30]; break; 16000Sstevel@tonic-gate case 'r': c = letter_w_diacritic[n][31]; break; 16010Sstevel@tonic-gate case 's': c = letter_w_diacritic[n][32]; break; 16020Sstevel@tonic-gate case 't': c = letter_w_diacritic[n][33]; break; 16030Sstevel@tonic-gate case 'u': c = letter_w_diacritic[n][34]; break; 16040Sstevel@tonic-gate case 'w': c = letter_w_diacritic[n][35]; break; 16050Sstevel@tonic-gate case 'y': c = letter_w_diacritic[n][36]; break; 16060Sstevel@tonic-gate case 'z': c = letter_w_diacritic[n][37]; break; 16070Sstevel@tonic-gate 16080Sstevel@tonic-gate case '\'': 16090Sstevel@tonic-gate case ' ': c = -1; break; 16100Sstevel@tonic-gate 16110Sstevel@tonic-gate default: c = 0; 16120Sstevel@tonic-gate } 16130Sstevel@tonic-gate 16140Sstevel@tonic-gate if ( !c ) 16150Sstevel@tonic-gate return NULL; 16160Sstevel@tonic-gate 16170Sstevel@tonic-gate *o++ = n + 0xC0; 16180Sstevel@tonic-gate *o++ = ( ( (*s == ' ') || (*s == '\'') ) ? ALONE : *s ); 16190Sstevel@tonic-gate return o; 16200Sstevel@tonic-gate } 16210Sstevel@tonic-gate 16220Sstevel@tonic-gate 16230Sstevel@tonic-gate /* --- routine to convert from ISO 8859-n to T.61 --- */ 16240Sstevel@tonic-gate 16250Sstevel@tonic-gate int 16260Sstevel@tonic-gate ldap_8859_to_t61( char **bufp, unsigned int *buflenp, int free_input ) 16270Sstevel@tonic-gate { 16280Sstevel@tonic-gate Byte *s, *oo, *o, *aux; 16290Sstevel@tonic-gate int c; 16300Sstevel@tonic-gate unsigned int len; 16310Sstevel@tonic-gate Couple *cc; 16320Sstevel@tonic-gate 16330Sstevel@tonic-gate Debug( LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 112, "ldap_8859_to_t61 input length: %ld\n"), 16340Sstevel@tonic-gate *buflenp, 0, 0 ); 16350Sstevel@tonic-gate 16360Sstevel@tonic-gate len = *buflenp; 16370Sstevel@tonic-gate s = (Byte *) *bufp; 16380Sstevel@tonic-gate 16390Sstevel@tonic-gate if ( (o = oo = (Byte *)malloc( 2 * len + 64 )) == NULL ) { 16400Sstevel@tonic-gate return( 1 ); 16410Sstevel@tonic-gate } 16420Sstevel@tonic-gate 16430Sstevel@tonic-gate while ( (char *)s - *(char **)bufp < len ) { 16440Sstevel@tonic-gate switch( *s >> 5 ) { 16450Sstevel@tonic-gate 16460Sstevel@tonic-gate case 2: 16470Sstevel@tonic-gate switch ( *s ) { 16480Sstevel@tonic-gate 16490Sstevel@tonic-gate case '^': *o++ = 0xC3; *o++ = ALONE; s++; break; 16500Sstevel@tonic-gate 16510Sstevel@tonic-gate case '\\': 16520Sstevel@tonic-gate s++; 16530Sstevel@tonic-gate if ( (c = hh_to_c( s )) != -1 ) { 16540Sstevel@tonic-gate *o++ = c; 16550Sstevel@tonic-gate s += 2; 16560Sstevel@tonic-gate } else 16570Sstevel@tonic-gate *o++ = '\\'; 16580Sstevel@tonic-gate break; 16590Sstevel@tonic-gate 16600Sstevel@tonic-gate default: *o++ = *s++; 16610Sstevel@tonic-gate } 16620Sstevel@tonic-gate break; 16630Sstevel@tonic-gate 16640Sstevel@tonic-gate case 3: 16650Sstevel@tonic-gate switch ( *s ) { 16660Sstevel@tonic-gate 16670Sstevel@tonic-gate case '`': *o++ = 0xC1; *o++ = ALONE; s++; break; 16680Sstevel@tonic-gate case '~': *o++ = 0xC4; *o++ = ALONE; s++; break; 16690Sstevel@tonic-gate 16700Sstevel@tonic-gate case '{': 16710Sstevel@tonic-gate s++; 16720Sstevel@tonic-gate if ( *(s + 2) == '}' ) { 16730Sstevel@tonic-gate if ( (aux = cc_to_t61( o, s )) != NULL ) { 16740Sstevel@tonic-gate o = aux; 16750Sstevel@tonic-gate s += 3; 16760Sstevel@tonic-gate } else { 16770Sstevel@tonic-gate *o++ = '{'; 16780Sstevel@tonic-gate } 16790Sstevel@tonic-gate } else if ( (*(s + 3) == '}') && ( (*s == 'x') || (*s == 'X') ) && 16800Sstevel@tonic-gate ( (c = hh_to_c( s + 1 )) != -1 ) ) { 16810Sstevel@tonic-gate *o++ = c; 16820Sstevel@tonic-gate s += 4; 16830Sstevel@tonic-gate } else { 16840Sstevel@tonic-gate *o++ = '{'; 16850Sstevel@tonic-gate } 16860Sstevel@tonic-gate break; 16870Sstevel@tonic-gate 16880Sstevel@tonic-gate default: 16890Sstevel@tonic-gate *o++ = *s++; 16900Sstevel@tonic-gate } 16910Sstevel@tonic-gate break; 16920Sstevel@tonic-gate 16930Sstevel@tonic-gate #if (ISO_8859 == 0) 16940Sstevel@tonic-gate case 4: case 5: case 6: case 7: 16950Sstevel@tonic-gate s++; 16960Sstevel@tonic-gate break; 16970Sstevel@tonic-gate #else 16980Sstevel@tonic-gate case 5: case 6: case 7: 16990Sstevel@tonic-gate # if (ISO_8859 == 1) || (ISO_8859 == 2) || (ISO_8859 == 3) || \ 17000Sstevel@tonic-gate (ISO_8859 == 4) || (ISO_8859 == 9) || (ISO_8859 == 10) 17010Sstevel@tonic-gate if ( (*(cc = &trans_iso8859_t61[ *s - 0xA0 ])).a ) { 17020Sstevel@tonic-gate *o++ = (*cc).a; 17030Sstevel@tonic-gate if ( (*cc).b ) *o++ = (*cc).b; 17040Sstevel@tonic-gate } 17050Sstevel@tonic-gate # endif 17060Sstevel@tonic-gate s++; 17070Sstevel@tonic-gate break; 17080Sstevel@tonic-gate #endif 17090Sstevel@tonic-gate 17100Sstevel@tonic-gate default: 17110Sstevel@tonic-gate *o++ = *s++; 17120Sstevel@tonic-gate } 17130Sstevel@tonic-gate } 17140Sstevel@tonic-gate 17150Sstevel@tonic-gate len = o - oo; 17160Sstevel@tonic-gate o = oo; 17170Sstevel@tonic-gate 17180Sstevel@tonic-gate if ( (oo = (Byte *)realloc( o, len )) == NULL ) { 17190Sstevel@tonic-gate free( o ); 17200Sstevel@tonic-gate return( 1 ); 17210Sstevel@tonic-gate } 17220Sstevel@tonic-gate 17230Sstevel@tonic-gate if ( free_input ) { 17240Sstevel@tonic-gate free( *bufp ); 17250Sstevel@tonic-gate } 17260Sstevel@tonic-gate *bufp = (char *) oo; 17270Sstevel@tonic-gate *buflenp = len; 17280Sstevel@tonic-gate return( 0 ); 17290Sstevel@tonic-gate } 17300Sstevel@tonic-gate 17310Sstevel@tonic-gate 17320Sstevel@tonic-gate #ifdef NOT_NEEDED_IN_LIBLDAP /* mcs@umich.edu 12 Oct 1995 */ 17330Sstevel@tonic-gate /* --- routine to convert "escaped" (\hh) characters to 8bits --- */ 17340Sstevel@tonic-gate 17350Sstevel@tonic-gate void convert_escaped_to_8bit( s ) 17360Sstevel@tonic-gate char *s; 17370Sstevel@tonic-gate { 17380Sstevel@tonic-gate char *o = s; 17390Sstevel@tonic-gate int c; 17400Sstevel@tonic-gate 17410Sstevel@tonic-gate while ( *s ) { 17420Sstevel@tonic-gate if ( *s == '\\' ) { 17430Sstevel@tonic-gate if ( (c = hh_to_c( ++s )) != -1 ) { 17440Sstevel@tonic-gate *o++ = c; 17450Sstevel@tonic-gate s += 2; 17460Sstevel@tonic-gate } else 17470Sstevel@tonic-gate *o++ = '\\'; 17480Sstevel@tonic-gate } else 17490Sstevel@tonic-gate *o++ = *s++; 17500Sstevel@tonic-gate } 17510Sstevel@tonic-gate *o = '\0'; 17520Sstevel@tonic-gate } 17530Sstevel@tonic-gate 17540Sstevel@tonic-gate /* --- routine to convert 8bits characters to the "escaped" (\hh) form --- */ 17550Sstevel@tonic-gate 17560Sstevel@tonic-gate char *convert_8bit_to_escaped( s ) 17570Sstevel@tonic-gate Byte *s; 17580Sstevel@tonic-gate { 17590Sstevel@tonic-gate Byte *o, *oo; 17600Sstevel@tonic-gate Byte n; 17610Sstevel@tonic-gate 17620Sstevel@tonic-gate if ( (o = oo = (Byte *)malloc( 2 * strlen( s ) + 64 )) == NULL ) { 17630Sstevel@tonic-gate return( NULL ); 17640Sstevel@tonic-gate } 17650Sstevel@tonic-gate 17660Sstevel@tonic-gate while ( *s ) { 17670Sstevel@tonic-gate if ( *s < 0x80 ) 17680Sstevel@tonic-gate *o++ = *s++; 17690Sstevel@tonic-gate else { 17700Sstevel@tonic-gate *o++ = '\\'; 17710Sstevel@tonic-gate n = *s >> 4; 17720Sstevel@tonic-gate *o++ = ((n < 0xA) ? '0' : 'A' - 0xA) + n; 17730Sstevel@tonic-gate n = *s++ & 0x0F; 17740Sstevel@tonic-gate *o++ = ((n < 0xA) ? '0' : 'A' - 0xA) + n; 17750Sstevel@tonic-gate } 17760Sstevel@tonic-gate } 17770Sstevel@tonic-gate *o = '\0'; 17780Sstevel@tonic-gate 17790Sstevel@tonic-gate o = oo; 17800Sstevel@tonic-gate 17810Sstevel@tonic-gate if ( (oo = (Byte *)realloc( o, strlen( o ) + 1 )) == NULL ) { 17820Sstevel@tonic-gate free( o ); 17830Sstevel@tonic-gate return( NULL ); 17840Sstevel@tonic-gate } 17850Sstevel@tonic-gate 17860Sstevel@tonic-gate return( (char *)oo ); 17870Sstevel@tonic-gate } 17880Sstevel@tonic-gate 17890Sstevel@tonic-gate /* --- routine to convert from T.61 to printable characters --- */ 17900Sstevel@tonic-gate 17910Sstevel@tonic-gate /* 17920Sstevel@tonic-gate printable characters [RFC 1488]: 'A'..'Z', 'a'..'z', '0'..'9', 17930Sstevel@tonic-gate '\'', '(', ')', '+', ',', '-', '.', '/', ':', '?, ' '. 17940Sstevel@tonic-gate 17950Sstevel@tonic-gate that conversion is language dependent. 17960Sstevel@tonic-gate */ 17970Sstevel@tonic-gate 17980Sstevel@tonic-gate static Couple last_t61_printabled[32] = { 17990Sstevel@tonic-gate {0,0}, {'A','E'}, {'D',0}, {0,0}, 18000Sstevel@tonic-gate {'H',0}, {0,0}, {'I','J'}, {'L',0}, 18010Sstevel@tonic-gate {'L',0}, {'O',0}, {'O','E'}, {0,0}, 18020Sstevel@tonic-gate {'T','H'}, {'T',0}, {'N','G'}, {'n',0}, 18030Sstevel@tonic-gate {'k',0}, {'a','e'}, {'d',0}, {'d',0}, 18040Sstevel@tonic-gate {'h',0}, {'i',0}, {'i','j'}, {'l',0}, 18050Sstevel@tonic-gate {'l',0}, {'o',0}, {'o','e'}, {'s','s'}, 18060Sstevel@tonic-gate {'t','h'}, {'t',0}, {'n','g'}, {0,0} 18070Sstevel@tonic-gate }; 18080Sstevel@tonic-gate 18090Sstevel@tonic-gate char *t61_printable( s ) 18100Sstevel@tonic-gate Byte *s; 18110Sstevel@tonic-gate { 18120Sstevel@tonic-gate Byte *o, *oo; 18130Sstevel@tonic-gate Byte n; 18140Sstevel@tonic-gate Couple *cc; 18150Sstevel@tonic-gate 18160Sstevel@tonic-gate if ( (o = oo = (Byte *)malloc( 2 * strlen( s ) + 64 )) == NULL ) { 18170Sstevel@tonic-gate return( NULL ); 18180Sstevel@tonic-gate } 18190Sstevel@tonic-gate 18200Sstevel@tonic-gate while ( *s ) { 18210Sstevel@tonic-gate if ( ( (*s >= 'A') && (*s <= 'Z') ) || 18220Sstevel@tonic-gate ( (*s >= 'a') && (*s <= 'z') ) || 18230Sstevel@tonic-gate ( (*s >= '0') && (*s <= '9') ) || 18240Sstevel@tonic-gate ( (*s >= '\'') && (*s <= ')') ) || 18250Sstevel@tonic-gate ( (*s >= '+') && (*s <= '/') ) || 18260Sstevel@tonic-gate ( *s == '?' ) || ( *s == ' ' ) ) 18270Sstevel@tonic-gate *o++ = *s++; 18280Sstevel@tonic-gate else { 18290Sstevel@tonic-gate if ( *s >= 0xE0 ) { 18300Sstevel@tonic-gate if ( (*(cc = &last_t61_printabled[ *s - 0xE0 ])).a ) { 18310Sstevel@tonic-gate *o++ = (*cc).a; 18320Sstevel@tonic-gate if ( (*cc).b ) *o++ = (*cc).b; 18330Sstevel@tonic-gate } 18340Sstevel@tonic-gate } 18350Sstevel@tonic-gate else if ( (*s >> 4) == 0xC ) { 18360Sstevel@tonic-gate switch ( *s ) { 18370Sstevel@tonic-gate case 0xCA: /* ring */ 18380Sstevel@tonic-gate switch ( *(s + 1) ) { 18390Sstevel@tonic-gate case 'A': *o++ = 'A'; *o++ = 'A'; s++; break; /* Swedish */ 18400Sstevel@tonic-gate case 'a': *o++ = 'a'; *o++ = 'a'; s++; break; /* Swedish */ 18410Sstevel@tonic-gate } 18420Sstevel@tonic-gate break; 18430Sstevel@tonic-gate 18440Sstevel@tonic-gate case 0xC8: /* diaeresis */ 18450Sstevel@tonic-gate switch ( *(s + 1) ) { 18460Sstevel@tonic-gate case 'Y': *o++ = 'I'; *o++ = 'J'; s++; break; /* Dutch */ 18470Sstevel@tonic-gate case 'y': *o++ = 'i'; *o++ = 'j'; s++; break; /* Dutch */ 18480Sstevel@tonic-gate } 18490Sstevel@tonic-gate break; 18500Sstevel@tonic-gate } 18510Sstevel@tonic-gate } 18520Sstevel@tonic-gate s++; 18530Sstevel@tonic-gate } 18540Sstevel@tonic-gate } 18550Sstevel@tonic-gate *o = '\0'; 18560Sstevel@tonic-gate 18570Sstevel@tonic-gate o = oo; 18580Sstevel@tonic-gate 18590Sstevel@tonic-gate if ( (oo = (Byte *)realloc( o, strlen( o ) + 1 )) == NULL ) { 18600Sstevel@tonic-gate free( o ); 18610Sstevel@tonic-gate return( NULL ); 18620Sstevel@tonic-gate } 18630Sstevel@tonic-gate 18640Sstevel@tonic-gate return( (char *)oo ); 18650Sstevel@tonic-gate } 18660Sstevel@tonic-gate #endif /* NOT_NEEDED_IN_LIBLDAP */ /* mcs@umich.edu 12 Oct 1995 */ 18670Sstevel@tonic-gate 18680Sstevel@tonic-gate #endif /* LDAP_CHARSET_8859 */ 18690Sstevel@tonic-gate #endif /* STR_TRANSLATION */ 1870