1 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <https://www.gnu.org/licenses/>. */
19 * ISO C99 Standard: 7.11 Localization <locale.h>
29 #include <bits/locale.h>
33 /* These are the possibilities for the first argument to setlocale.
34 The code assumes that the lowest LC_* symbol has the value zero. */
35 #define LC_CTYPE __LC_CTYPE
36 #define LC_NUMERIC __LC_NUMERIC
37 #define LC_TIME __LC_TIME
38 #define LC_COLLATE __LC_COLLATE
39 #define LC_MONETARY __LC_MONETARY
40 #define LC_MESSAGES __LC_MESSAGES
41 #define LC_ALL __LC_ALL
42 #define LC_PAPER __LC_PAPER
43 #define LC_NAME __LC_NAME
44 #define LC_ADDRESS __LC_ADDRESS
45 #define LC_TELEPHONE __LC_TELEPHONE
46 #define LC_MEASUREMENT __LC_MEASUREMENT
47 #define LC_IDENTIFICATION __LC_IDENTIFICATION
50 /* Structure giving information about numeric and monetary notation. */
53 /* Numeric (non-monetary) information. */
55 char *decimal_point; /* Decimal point character. */
56 char *thousands_sep; /* Thousands separator. */
57 /* Each element is the number of digits in each group;
58 elements with higher indices are farther left.
59 An element with value CHAR_MAX means that no further grouping is done.
60 An element with value 0 means that the previous element is used
61 for all groups farther left. */
64 /* Monetary information. */
66 /* First three chars are a currency symbol from ISO 4217.
67 Fourth char is the separator. Fifth char is '\0'. */
68 char *int_curr_symbol;
69 char *currency_symbol; /* Local currency symbol. */
70 char *mon_decimal_point; /* Decimal point character. */
71 char *mon_thousands_sep; /* Thousands separator. */
72 char *mon_grouping; /* Like `grouping' element (above). */
73 char *positive_sign; /* Sign for positive values. */
74 char *negative_sign; /* Sign for negative values. */
75 char int_frac_digits; /* Int'l fractional digits. */
76 char frac_digits; /* Local fractional digits. */
77 /* 1 if currency_symbol precedes a positive value, 0 if succeeds. */
79 /* 1 iff a space separates currency_symbol from a positive value. */
81 /* 1 if currency_symbol precedes a negative value, 0 if succeeds. */
83 /* 1 iff a space separates currency_symbol from a negative value. */
85 /* Positive and negative sign positions:
86 0 Parentheses surround the quantity and currency_symbol.
87 1 The sign string precedes the quantity and currency_symbol.
88 2 The sign string follows the quantity and currency_symbol.
89 3 The sign string immediately precedes the currency_symbol.
90 4 The sign string immediately follows the currency_symbol. */
94 /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds. */
95 char int_p_cs_precedes;
96 /* 1 iff a space separates int_curr_symbol from a positive value. */
97 char int_p_sep_by_space;
98 /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds. */
99 char int_n_cs_precedes;
100 /* 1 iff a space separates int_curr_symbol from a negative value. */
101 char int_n_sep_by_space;
102 /* Positive and negative sign positions:
103 0 Parentheses surround the quantity and int_curr_symbol.
104 1 The sign string precedes the quantity and int_curr_symbol.
105 2 The sign string follows the quantity and int_curr_symbol.
106 3 The sign string immediately precedes the int_curr_symbol.
107 4 The sign string immediately follows the int_curr_symbol. */
108 char int_p_sign_posn;
109 char int_n_sign_posn;
111 char __int_p_cs_precedes;
112 char __int_p_sep_by_space;
113 char __int_n_cs_precedes;
114 char __int_n_sep_by_space;
115 char __int_p_sign_posn;
116 char __int_n_sign_posn;
121 /* Set and/or return the current locale. */
122 extern char *setlocale (int __category, const char *__locale) __THROW;
124 /* Return the numeric/monetary information for the current locale. */
125 extern struct lconv *localeconv (void) __THROW;
128 #ifdef __USE_XOPEN2K8
129 /* POSIX.1-2008 extends the locale interface with functions for
130 explicit creation and manipulation of 'locale_t' objects
131 representing locale contexts, and a set of parallel
132 locale-sensitive text processing functions that take a locale_t
133 argument. This enables applications to work with data from
134 multiple locales simultaneously and thread-safely. */
135 # include <bits/types/locale_t.h>
137 /* Return a reference to a data structure representing a set of locale
138 datasets. Unlike for the CATEGORY parameter for `setlocale' the
139 CATEGORY_MASK parameter here uses a single bit for each category,
140 made by OR'ing together LC_*_MASK bits above. */
141 extern locale_t newlocale (int __category_mask, const char *__locale,
142 locale_t __base) __THROW;
144 /* These are the bits that can be set in the CATEGORY_MASK argument to
145 `newlocale'. In the GNU implementation, LC_FOO_MASK has the value
146 of (1 << LC_FOO), but this is not a part of the interface that
147 callers can assume will be true. */
148 # define LC_CTYPE_MASK (1 << __LC_CTYPE)
149 # define LC_NUMERIC_MASK (1 << __LC_NUMERIC)
150 # define LC_TIME_MASK (1 << __LC_TIME)
151 # define LC_COLLATE_MASK (1 << __LC_COLLATE)
152 # define LC_MONETARY_MASK (1 << __LC_MONETARY)
153 # define LC_MESSAGES_MASK (1 << __LC_MESSAGES)
154 # define LC_PAPER_MASK (1 << __LC_PAPER)
155 # define LC_NAME_MASK (1 << __LC_NAME)
156 # define LC_ADDRESS_MASK (1 << __LC_ADDRESS)
157 # define LC_TELEPHONE_MASK (1 << __LC_TELEPHONE)
158 # define LC_MEASUREMENT_MASK (1 << __LC_MEASUREMENT)
159 # define LC_IDENTIFICATION_MASK (1 << __LC_IDENTIFICATION)
160 # define LC_ALL_MASK (LC_CTYPE_MASK \
169 | LC_TELEPHONE_MASK \
170 | LC_MEASUREMENT_MASK \
171 | LC_IDENTIFICATION_MASK \
174 /* Return a duplicate of the set of locale in DATASET. All usage
175 counters are increased if necessary. */
176 extern locale_t duplocale (locale_t __dataset) __THROW;
178 /* Free the data associated with a locale dataset previously returned
179 by a call to `setlocale_r'. */
180 extern void freelocale (locale_t __dataset) __THROW;
182 /* Switch the current thread's locale to DATASET.
183 If DATASET is null, instead just return the current setting.
184 The special value LC_GLOBAL_LOCALE is the initial setting
185 for all threads and can also be installed any time, meaning
186 the thread uses the global settings controlled by `setlocale'. */
187 extern locale_t uselocale (locale_t __dataset) __THROW;
189 /* This value can be passed to `uselocale' and may be returned by it.
190 Passing this value to any other function has undefined behavior. */
191 # define LC_GLOBAL_LOCALE ((locale_t) -1L)
197 #endif /* locale.h */