1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (c) 2003, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Author: Alan Liu 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Created: March 19 2003 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Since: ICU 2.6 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucat.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uassert.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Separator between set_num and msg_num */ 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char SEPARATOR = '%'; 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Maximum length of a set_num/msg_num key, incl. terminating zero. 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Longest possible key is "-2147483648%-2147483648" */ 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_KEY_LEN (24) 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Fill in buffer with a set_num/msg_num key string, given the numeric 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * values. Numeric values must be >= 0. Buffer must be of length 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * MAX_KEY_LEN or more. 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic char* 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru_catkey(char* buffer, int32_t set_num, int32_t msg_num) { 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i = 0; 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = T_CString_integerToString(buffer, set_num, 10); 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buffer[i++] = SEPARATOR; 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru T_CString_integerToString(buffer+i, msg_num, 10); 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return buffer; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI u_nl_catd U_EXPORT2 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_catopen(const char* name, const char* locale, UErrorCode* ec) { 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (u_nl_catd) ures_open(name, locale, ec); 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_catclose(u_nl_catd catd) { 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ures_close((UResourceBundle*) catd); /* may be NULL */ 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const UChar* U_EXPORT2 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar* s, 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t* len, UErrorCode* ec) { 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char key[MAX_KEY_LEN]; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar* result; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (ec == NULL || U_FAILURE(*ec)) { 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru goto ERROR; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result = ures_getStringByKey((const UResourceBundle*) catd, 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _catkey(key, set_num, msg_num), 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len, ec); 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*ec)) { 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru goto ERROR; 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ERROR: 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* In case of any failure, return s */ 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (len != NULL) { 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *len = u_strlen(s); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return s; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*eof*/ 77