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 39 /* 40 * get_char_semantics_value(ch) 41 * 42 * Return value: 43 * The character semantics of ch. 44 * 45 * Parameters: 46 * ch character we want semantics for. 47 * 48 */ 49 char 50 get_char_semantics_value(wchar_t ch) 51 { 52 static Boolean char_semantics_setup; 53 54 if (!char_semantics_setup) { 55 setup_char_semantics(); 56 char_semantics_setup = true; 57 } 58 return char_semantics[get_char_semantics_entry(ch)]; 59 } 60 61 /* 62 * get_char_semantics_entry(ch) 63 * 64 * Return value: 65 * The slot number in the array for special make chars, 66 * else the slot number of the last array entry. 67 * 68 * Parameters: 69 * ch The wide character 70 * 71 * Global variables used: 72 * char_semantics_char[] array of special wchar_t chars 73 * "&*@`\\|[]:$=!>-\n#()%?;^<'\"" 74 */ 75 int 76 get_char_semantics_entry(wchar_t ch) 77 { 78 wchar_t *char_sem_char; 79 80 char_sem_char = (wchar_t *) wcschr(char_semantics_char, ch); 81 if (char_sem_char == NULL) { 82 /* 83 * Return the integer entry for the last slot, 84 * whose content is empty. 85 */ 86 return (CHAR_SEMANTICS_ENTRIES - 1); 87 } else { 88 return (char_sem_char - char_semantics_char); 89 } 90 } 91