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