Index: icu46/source/common/ucat.c |
=================================================================== |
--- icu46/source/common/ucat.c (revision 0) |
+++ icu46/source/common/ucat.c (revision 0) |
@@ -0,0 +1,76 @@ |
+/* |
+********************************************************************** |
+* Copyright (c) 2003, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+********************************************************************** |
+* Author: Alan Liu |
+* Created: March 19 2003 |
+* Since: ICU 2.6 |
+********************************************************************** |
+*/ |
+#include "unicode/ucat.h" |
+#include "unicode/ustring.h" |
+#include "cstring.h" |
+#include "uassert.h" |
+ |
+/* Separator between set_num and msg_num */ |
+static const char SEPARATOR = '%'; |
+ |
+/* Maximum length of a set_num/msg_num key, incl. terminating zero. |
+ * Longest possible key is "-2147483648%-2147483648" */ |
+#define MAX_KEY_LEN (24) |
+ |
+/** |
+ * Fill in buffer with a set_num/msg_num key string, given the numeric |
+ * values. Numeric values must be >= 0. Buffer must be of length |
+ * MAX_KEY_LEN or more. |
+ */ |
+static char* |
+_catkey(char* buffer, int32_t set_num, int32_t msg_num) { |
+ int32_t i = 0; |
+ i = T_CString_integerToString(buffer, set_num, 10); |
+ buffer[i++] = SEPARATOR; |
+ T_CString_integerToString(buffer+i, msg_num, 10); |
+ return buffer; |
+} |
+ |
+U_CAPI u_nl_catd U_EXPORT2 |
+u_catopen(const char* name, const char* locale, UErrorCode* ec) { |
+ return (u_nl_catd) ures_open(name, locale, ec); |
+} |
+ |
+U_CAPI void U_EXPORT2 |
+u_catclose(u_nl_catd catd) { |
+ ures_close((UResourceBundle*) catd); /* may be NULL */ |
+} |
+ |
+U_CAPI const UChar* U_EXPORT2 |
+u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, |
+ const UChar* s, |
+ int32_t* len, UErrorCode* ec) { |
+ |
+ char key[MAX_KEY_LEN]; |
+ const UChar* result; |
+ |
+ if (ec == NULL || U_FAILURE(*ec)) { |
+ goto ERROR; |
+ } |
+ |
+ result = ures_getStringByKey((const UResourceBundle*) catd, |
+ _catkey(key, set_num, msg_num), |
+ len, ec); |
+ if (U_FAILURE(*ec)) { |
+ goto ERROR; |
+ } |
+ |
+ return result; |
+ |
+ ERROR: |
+ /* In case of any failure, return s */ |
+ if (len != NULL) { |
+ *len = u_strlen(s); |
+ } |
+ return s; |
+} |
+ |
+/*eof*/ |
Property changes on: icu46/source/common/ucat.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |