1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Silicon Graphics Computer Systems, Inc.
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Boris Fomitchev
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This material is provided "as is", with absolutely no warranty expressed
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or implied. Any use is at your own risk.
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use or copy this software for any purpose is hereby granted
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * without fee, provided the above notices are retained on all copies.
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to modify the code and to distribute modified code is granted,
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided the above notices are retained, and a notice that the code was
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * modified is included with the above copyright notice.
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * It is impossible to write the C++ locale library in terms of locales
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * as defined in the C standard.  Instead, we write the C++ locale and I/O
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * library in terms of a low level C-like interface.  This file defines
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that interface.
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The low-level locale interface can't be written portably; there
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * must be a version of it for each platform that the C++ library
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * is ported to.  On many systems this interface may be a thin wrapper
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * for existing functionality.
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_C_LOCALE_IMPL_H
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_C_LOCALE_IMPL_H
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "stlport_prefix.h"
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <wchar.h> /* for mbstate_t */
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stl/c_locale.h>
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint;
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_GNU_SOURCE) && defined (__GLIBC__) && \
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_USE_GLIBC2_LOCALIZATION
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <nl_types.h>
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef nl_catd nl_catd_type;
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef int nl_catd_type;
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * A number: the maximum length of a simple locale name.
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * (i.e. a name like like en_US, as opposed to a name like
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * en_US/de_AT/de_AT/es_MX/en_US/en_US) */
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _Locale_MAX_SIMPLE_NAME 256
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef __cplusplus
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottextern "C" {
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Typedefs:
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef unsigned short int _Locale_mask_t;
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Function called during STLport library load phase. Might contain any
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * code necessary to the platform localization layer.
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_init(void);
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Function called during STLport library unload. Might contain any
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * code necessary to the platform localization layer.
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_final(void);
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Create a category of the locale with the given name.
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The char* argument is a simple (not a composite) locale name, which may
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * neither be an empty string nor a null pointer.
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * These functions return NULL to indicate failure. Failure reason should be reported
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * using the __err_code pointer.
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_ctype* _Locale_ctype_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_codecvt* _Locale_codecvt_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_numeric* _Locale_numeric_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_time* _Locale_time_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_collate* _Locale_collate_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_monetary* _Locale_monetary_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_messages* _Locale_messages_create(const char *, struct _Locale_name_hint*, int * /* __err_code */);
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Give error reason on failure of one of the _Locale_*_create functions. Available
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * reasons are:
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 0: No specific error reason has been reported.
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 1: No platform support for the given facet.
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 2: Unknown locale name
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 3: No platform API for localization support.
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 4: No more memory
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LOC_UNDEFINED 0
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LOC_UNSUPPORTED_FACET_CATEGORY 1
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LOC_UNKNOWN_NAME 2
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LOC_NO_PLATFORM_SUPPORT 3
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LOC_NO_MEMORY 4
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Release a category of a locale
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * These functions are used to release a category acquired with the
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * according _Locale_*_create() functions.
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_ctype_destroy(struct _Locale_ctype *);
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_codecvt_destroy(struct _Locale_codecvt *);
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_numeric_destroy(struct _Locale_numeric *);
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_time_destroy(struct _Locale_time *);
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_collate_destroy(struct _Locale_collate *);
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_monetary_destroy(struct _Locale_monetary *);
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_messages_destroy(struct _Locale_messages *);
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns the name of the user's default locale in each
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * category, as a null-terminated string.  A NULL value
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * means the default "C" locale.
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_ctype_default(char * __buf);
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_numeric_default(char * __buf);
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_time_default(char * __buf);
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_collate_default(char * __buf);
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_monetary_default(char * __buf);
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_messages_default(char * __buf);
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Retrieve the name of the given category
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * __buf points to a buffer that can hold at least _Locale_MAX_SIMPLE_NAME
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * characters.  These functions store the name, as a null-terminated
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * string, in __buf. This function can't fail, at worst name is truncated.
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_ctype_name(const struct _Locale_ctype *, char* __buf);
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_codecvt_name(const struct _Locale_codecvt *, char* __buf);
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_numeric_name(const struct _Locale_numeric *, char* __buf);
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_time_name(const struct _Locale_time *, char* __buf);
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_collate_name(const struct _Locale_collate *, char*  __buf);
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_monetary_name(const struct _Locale_monetary *, char* __buf);
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_messages_name(const struct _Locale_messages *, char* __buf);
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * cname is a (possibly composite) locale name---i.e. a name that can
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * be passed to setlocale. __buf points to an array large enough to
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * store at least _Locale_MAX_SIMPLE_NAME characters, and each of these
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * functions extracts the name of a single category, stores it in buf
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * as a null-terminated string, and returns buf.
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_ctype_name(const char *cname, char *__buf,
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                       struct _Locale_name_hint* __hint, int *__err_code);
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_numeric_name(const char *cname, char *__buf,
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                         struct _Locale_name_hint* __hint, int *__err_code);
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_time_name(const char *cname, char *__buf,
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                      struct _Locale_name_hint* __hint, int *__err_code);
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_collate_name(const char *cname, char *__buf,
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                         struct _Locale_name_hint* __hint, int *__err_code);
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_monetary_name(const char *cname, char *__buf,
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                          struct _Locale_name_hint* __hint, int *__err_code);
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const* _Locale_extract_messages_name(const char *cname, char *__buf,
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                          struct _Locale_name_hint* __hint, int *__err_code);
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Functions to improve locale creation process. For some locale API (Win32)
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * you need to find a locale identification from the name which can be a
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * rather expensive operation especially if you do so for all facets of a
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * locale. Those functions can be used to extract from a API dependent facet
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * struct the information necessary to skip this lookup process for other
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * facets creation. If not supported those function should return NULL.
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_ctype_hint(struct _Locale_ctype*);
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_numeric_hint(struct _Locale_numeric*);
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_time_hint(struct _Locale_time*);
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_collate_hint(struct _Locale_collate*);
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_monetary_hint(struct _Locale_monetary*);
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_messages_hint(struct _Locale_messages*);
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE CTYPE
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Narrow character functions:
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns a pointer to the beginning of the ctype table.  The table is
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * at least 257 bytes long; if p is the pointer returned by this
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * function, then p[c] is valid if c is EOF or if p is any value of
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * type unsigned char.
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst _Locale_mask_t * _Locale_ctype_table(struct _Locale_ctype *);
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * c is either EOF, or an unsigned char value.
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_toupper(struct _Locale_ctype *, int /* c */);
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_tolower(struct _Locale_ctype *, int /* c */);
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Wide character functions:
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_mask_t _WLocale_ctype(struct _Locale_ctype *, wint_t, _Locale_mask_t);
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwint_t _WLocale_tolower(struct _Locale_ctype *, wint_t);
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwint_t _WLocale_toupper(struct _Locale_ctype *, wint_t);
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Multibyte functions:
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns the number of bytes of the longest allowed multibyte
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * character in the current encoding.
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_mb_cur_max(struct _Locale_codecvt *);
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns the number of bytes of the shortest allowed multibyte
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * character in the current encoding.
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_mb_cur_min(struct _Locale_codecvt *);
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns 1 if the current multibyte encoding is stateless
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and does not require the use of an mbstate_t value.
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_is_stateless(struct _Locale_codecvt *);
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Almost identical to mbrtowc, from 4.6.5.3.2 of NA1.  The only
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * important difference is that mbrtowc treats null wide characters
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * as special, and we don't.  Specifically: examines the characters
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in [from, from + n), extracts a single wide character, and stores
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * it in *to.  Modifies shift_state if appropriate.  The return value,
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * which is always positive, is the number of characters extracted from
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * the input sequence.  Return value is (size_t) -1 if there was an
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * encoding error in the input sequence, and (size_t) -2 if
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * [from, from + n) is correct but not complete.  None of the pointer
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * arguments may be null pointers.
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_mbtowc(struct _Locale_codecvt *,
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       wchar_t * /* to */,
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       const char * /* from */, size_t /* n */,
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       mbstate_t *);
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Again, very similar to wcrtomb.  The differences are that (1) it
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * doesn't treat null characters as special; and (2) it stores at most
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * n characters.  Converts c to a multibyte sequence, stores that
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * sequence in the array 'to', and returns the length of the sequence.
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Modifies shift_state if appropriate.  The return value is (size_t) -1
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * if c is not a valid wide character, and (size_t) -2 if the length of
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * the multibyte character sequence is greater than n.
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_wctomb(struct _Locale_codecvt *,
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       char *, size_t,
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       const wchar_t,
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       mbstate_t *);
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Inserts whatever characters are necessary to restore st to an
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * initial shift state.  Sets *next to buf + m, where m is the number
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * of characters inserted.  (0 <= m <= n.)  Returns m to indicate
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * success, (size_t) -1 to indicate error, (size_t) -2 to indicate
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * partial success (more than n characters needed).  For success or partial
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * success, sets *next to buf + m.
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_unshift(struct _Locale_codecvt *,
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                        mbstate_t *,
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                        char *, size_t, char **);
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE COLLATE
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Compares the two sequences [s1, s1 + n1) and [s2, s2 + n2).  Neither
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * sequence is assumed to be null-terminated, and null characters
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * aren't special.  If the two sequences are the same up through
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * min(n1, n2), then the sequence that compares less is whichever one
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * is shorter.
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_strcmp(struct _Locale_collate *,
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                   const char * /* s1 */, size_t /* n1 */,
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                   const char * /* s2 */, size_t /* n2 */);
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_strcmp(struct _Locale_collate *,
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    const wchar_t * /* s1 */, size_t /* n1 */,
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    const wchar_t * /* s2 */, size_t /* n2 */);
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Creates a transformed version of the string [s2, s2 + n2).  The
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * string may contain embedded null characters; nulls aren't special.
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The transformed string begins at s1, and contains at most n1
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * characters.  The return value is the length of the transformed
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * string.  If the return value is greater than n1 then this is an
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * error condition: it indicates that there wasn't enough space.  In
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that case, the contents of [s1, s1 + n1) is unspecified.
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott*/
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _Locale_strxfrm(struct _Locale_collate *,
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       char * /* s1 */, size_t /* n1 */,
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       const char * /* s2 */, size_t /* n2 */);
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_strxfrm(struct _Locale_collate *,
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                        wchar_t * /* s1 */, size_t /* n1 */,
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                        const wchar_t * /* s2 */, size_t /* n2 */);
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE NUMERIC
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Equivalent to the first three fields in struct lconv.  (C standard,
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * section 7.4.)
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_decimal_point(struct _Locale_numeric *);
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_thousands_sep(struct _Locale_numeric *);
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_grouping(struct _Locale_numeric *);
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_decimal_point(struct _Locale_numeric *);
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_thousands_sep(struct _Locale_numeric *);
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Return "true" and "false" in English locales, and something
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * appropriate in non-English locales.
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_true(struct _Locale_numeric *);
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_false(struct _Locale_numeric *);
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_true(struct _Locale_numeric *, wchar_t* /* buf */, size_t /* bufSize */);
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_false(struct _Locale_numeric *, wchar_t* /* buf */, size_t /* bufSize */);
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE MONETARY
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Return the obvious fields of struct lconv.
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_int_curr_symbol(struct _Locale_monetary *);
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_currency_symbol(struct _Locale_monetary *);
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar         _Locale_mon_decimal_point(struct _Locale_monetary *);
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar         _Locale_mon_thousands_sep(struct _Locale_monetary *);
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_mon_grouping(struct _Locale_monetary *);
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_positive_sign(struct _Locale_monetary *);
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_negative_sign(struct _Locale_monetary *);
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar         _Locale_int_frac_digits(struct _Locale_monetary *);
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar         _Locale_frac_digits(struct _Locale_monetary *);
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_p_cs_precedes(struct _Locale_monetary *);
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_p_sep_by_space(struct _Locale_monetary *);
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_p_sign_posn(struct _Locale_monetary *);
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_n_cs_precedes(struct _Locale_monetary *);
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_n_sep_by_space(struct _Locale_monetary *);
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint          _Locale_n_sign_posn(struct _Locale_monetary *);
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_int_curr_symbol(struct _Locale_monetary *, wchar_t* /* buf */, size_t /* bufSize */);
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_currency_symbol(struct _Locale_monetary *, wchar_t* /* buf */, size_t /* bufSize */);
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t         _WLocale_mon_decimal_point(struct _Locale_monetary *);
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t         _WLocale_mon_thousands_sep(struct _Locale_monetary *);
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_positive_sign(struct _Locale_monetary *, wchar_t* /* buf */, size_t /* bufSize */);
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_negative_sign(struct _Locale_monetary *, wchar_t* /* buf */, size_t /* bufSize */);
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE TIME
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * month is in the range [0, 12).
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_full_monthname(struct _Locale_time *, int /* month */);
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_abbrev_monthname(struct _Locale_time *, int /* month */);
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_full_monthname(struct _Locale_time *, int /* month */,
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                        wchar_t* /* buf */, size_t /* bufSize */);
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_abbrev_monthname(struct _Locale_time *, int /* month */,
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                          wchar_t* /* buf */, size_t /* bufSize */);
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * day is in the range [0, 7).  Sunday is 0.
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_full_dayofweek(struct _Locale_time *, int /* day */);
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_abbrev_dayofweek(struct _Locale_time *, int /* day */);
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_full_dayofweek(struct _Locale_time *, int /* day */,
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                        wchar_t* /* buf */, size_t /* bufSize */);
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_abbrev_dayofweek(struct _Locale_time *, int /* day */,
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                          wchar_t* /* buf */, size_t /* bufSize */);
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_d_t_fmt(struct _Locale_time *);
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_d_fmt(struct _Locale_time *);
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_t_fmt(struct _Locale_time *);
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_long_d_t_fmt(struct _Locale_time*);
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_long_d_fmt(struct _Locale_time*);
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_am_str(struct _Locale_time *);
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_pm_str(struct _Locale_time *);
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_am_str(struct _Locale_time *,
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                wchar_t* /* buf */, size_t /* bufSize */);
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t * _WLocale_pm_str(struct _Locale_time *,
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                wchar_t* /* buf */, size_t /* bufSize */);
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * FUNCTIONS THAT USE MESSAGES
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Very similar to catopen, except that it uses the given message
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * category to determine which catalog to open.
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnl_catd_type _Locale_catopen(struct _Locale_messages*, const char*);
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Complementary to _Locale_catopen.
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The catalog must be a value that was returned by a previous call
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * to _Locale_catopen.
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_catclose(struct _Locale_messages*, nl_catd_type);
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Returns a string, identified by a set index and a message index,
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * from an opened message catalog.  Returns the supplied default if
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * no such string exists.
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char * _Locale_catgets(struct _Locale_messages *, nl_catd_type,
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                             int, int,const char *);
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef __cplusplus
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_C_LOCALE_IMPL_H */
451