1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 /* 28 * i18n.cc 29 * 30 * Deal with internationalization conversions 31 */ 32 33 /* 34 * Included files 35 */ 36 #include <mksh/i18n.h> 37 #include <mksh/misc.h> /* setup_char_semantics() */ 38 #if defined (linux) 39 # include <wctype.h> 40 # include <wchar.h> 41 # define wschr(x,y) wcschr(x,y) 42 #endif 43 44 /* 45 * get_char_semantics_value(ch) 46 * 47 * Return value: 48 * The character semantics of ch. 49 * 50 * Parameters: 51 * ch character we want semantics for. 52 * 53 */ 54 char 55 get_char_semantics_value(wchar_t ch) 56 { 57 static Boolean char_semantics_setup; 58 59 if (!char_semantics_setup) { 60 setup_char_semantics(); 61 char_semantics_setup = true; 62 } 63 return char_semantics[get_char_semantics_entry(ch)]; 64 } 65 66 /* 67 * get_char_semantics_entry(ch) 68 * 69 * Return value: 70 * The slot number in the array for special make chars, 71 * else the slot number of the last array entry. 72 * 73 * Parameters: 74 * ch The wide character 75 * 76 * Global variables used: 77 * char_semantics_char[] array of special wchar_t chars 78 * "&*@`\\|[]:$=!>-\n#()%?;^<'\"" 79 */ 80 int 81 get_char_semantics_entry(wchar_t ch) 82 { 83 wchar_t *char_sem_char; 84 85 char_sem_char = (wchar_t *) wschr(char_semantics_char, ch); 86 if (char_sem_char == NULL) { 87 /* 88 * Return the integer entry for the last slot, 89 * whose content is empty. 90 */ 91 return (CHAR_SEMANTICS_ENTRIES - 1); 92 } else { 93 return (char_sem_char - char_semantics_char); 94 } 95 } 96