]> git.ipfire.org Git - thirdparty/glibc.git/blame - locale/locale.h
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / locale / locale.h
CommitLineData
d4697bc9 1/* Copyright (C) 1991-2014 Free Software Foundation, Inc.
6d52618b 2 This file is part of the GNU C Library.
28f540f4 3
6d52618b 4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
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.
28f540f4 8
6d52618b
UD
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
41bdb6e2 12 Lesser General Public License for more details.
28f540f4 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
28f540f4
RM
17
18/*
d1646309 19 * ISO C99 Standard: 7.11 Localization <locale.h>
28f540f4
RM
20 */
21
22#ifndef _LOCALE_H
28f540f4 23#define _LOCALE_H 1
5107cf1d 24
28f540f4
RM
25#include <features.h>
26
6d52618b
UD
27#define __need_NULL
28#include <stddef.h>
3e154a6f 29#include <bits/locale.h>
6d52618b 30
28f540f4
RM
31__BEGIN_DECLS
32
33/* These are the possibilities for the first argument to setlocale.
643e9936 34 The code assumes that the lowest LC_* symbol has the value zero. */
3e154a6f
UD
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
28f540f4
RM
48
49
2e0e802a
UD
50__BEGIN_NAMESPACE_STD
51
28f540f4
RM
52/* Structure giving information about numeric and monetary notation. */
53struct lconv
54{
55 /* Numeric (non-monetary) information. */
56
57 char *decimal_point; /* Decimal point character. */
58 char *thousands_sep; /* Thousands separator. */
59 /* Each element is the number of digits in each group;
60 elements with higher indices are farther left.
61 An element with value CHAR_MAX means that no further grouping is done.
62 An element with value 0 means that the previous element is used
63 for all groups farther left. */
64 char *grouping;
65
66 /* Monetary information. */
67
68 /* First three chars are a currency symbol from ISO 4217.
69 Fourth char is the separator. Fifth char is '\0'. */
70 char *int_curr_symbol;
71 char *currency_symbol; /* Local currency symbol. */
72 char *mon_decimal_point; /* Decimal point character. */
73 char *mon_thousands_sep; /* Thousands separator. */
74 char *mon_grouping; /* Like `grouping' element (above). */
75 char *positive_sign; /* Sign for positive values. */
76 char *negative_sign; /* Sign for negative values. */
77 char int_frac_digits; /* Int'l fractional digits. */
78 char frac_digits; /* Local fractional digits. */
79 /* 1 if currency_symbol precedes a positive value, 0 if succeeds. */
80 char p_cs_precedes;
81 /* 1 iff a space separates currency_symbol from a positive value. */
82 char p_sep_by_space;
83 /* 1 if currency_symbol precedes a negative value, 0 if succeeds. */
84 char n_cs_precedes;
85 /* 1 iff a space separates currency_symbol from a negative value. */
86 char n_sep_by_space;
87 /* Positive and negative sign positions:
88 0 Parentheses surround the quantity and currency_symbol.
89 1 The sign string precedes the quantity and currency_symbol.
6d52618b 90 2 The sign string follows the quantity and currency_symbol.
28f540f4 91 3 The sign string immediately precedes the currency_symbol.
6d52618b 92 4 The sign string immediately follows the currency_symbol. */
28f540f4
RM
93 char p_sign_posn;
94 char n_sign_posn;
417bafec 95#ifdef __USE_ISOC99
3b434940
UD
96 /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds. */
97 char int_p_cs_precedes;
98 /* 1 iff a space separates int_curr_symbol from a positive value. */
99 char int_p_sep_by_space;
100 /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds. */
101 char int_n_cs_precedes;
102 /* 1 iff a space separates int_curr_symbol from a negative value. */
103 char int_n_sep_by_space;
104 /* Positive and negative sign positions:
105 0 Parentheses surround the quantity and int_curr_symbol.
106 1 The sign string precedes the quantity and int_curr_symbol.
107 2 The sign string follows the quantity and int_curr_symbol.
108 3 The sign string immediately precedes the int_curr_symbol.
109 4 The sign string immediately follows the int_curr_symbol. */
110 char int_p_sign_posn;
111 char int_n_sign_posn;
417bafec
UD
112#else
113 char __int_p_cs_precedes;
114 char __int_p_sep_by_space;
115 char __int_n_cs_precedes;
116 char __int_n_sep_by_space;
117 char __int_p_sign_posn;
118 char __int_n_sign_posn;
119#endif
28f540f4
RM
120};
121
122
123/* Set and/or return the current locale. */
a784e502 124extern char *setlocale (int __category, const char *__locale) __THROW;
28f540f4
RM
125
126/* Return the numeric/monetary information for the current locale. */
c1422e5b 127extern struct lconv *localeconv (void) __THROW;
28f540f4 128
7a5affeb
UD
129__END_NAMESPACE_STD
130
131
659a63fb 132#ifdef __USE_XOPEN2K8
6d52618b
UD
133/* The concept of one static locale per category is not very well
134 thought out. Many applications will need to process its data using
135 information from several different locales. Another application is
136 the implementation of the internationalization handling in the
137 upcoming ISO C++ standard library. To support this another set of
138 the functions using locale data exist which have an additional
139 argument.
140
141 Attention: all these functions are *not* standardized in any form.
142 This is a proof-of-concept implementation. */
143
c84142e8
UD
144/* Get locale datatype definition. */
145# include <xlocale.h>
6d52618b
UD
146
147/* Return a reference to a data structure representing a set of locale
148 datasets. Unlike for the CATEGORY parameter for `setlocale' the
78323b5b
RM
149 CATEGORY_MASK parameter here uses a single bit for each category,
150 made by OR'ing together LC_*_MASK bits above. */
a784e502 151extern __locale_t newlocale (int __category_mask, const char *__locale,
30c14c31 152 __locale_t __base) __THROW;
c84142e8 153
78323b5b
RM
154/* These are the bits that can be set in the CATEGORY_MASK argument to
155 `newlocale'. In the GNU implementation, LC_FOO_MASK has the value
156 of (1 << LC_FOO), but this is not a part of the interface that
157 callers can assume will be true. */
158# define LC_CTYPE_MASK (1 << __LC_CTYPE)
159# define LC_NUMERIC_MASK (1 << __LC_NUMERIC)
160# define LC_TIME_MASK (1 << __LC_TIME)
161# define LC_COLLATE_MASK (1 << __LC_COLLATE)
162# define LC_MONETARY_MASK (1 << __LC_MONETARY)
163# define LC_MESSAGES_MASK (1 << __LC_MESSAGES)
164# define LC_PAPER_MASK (1 << __LC_PAPER)
165# define LC_NAME_MASK (1 << __LC_NAME)
166# define LC_ADDRESS_MASK (1 << __LC_ADDRESS)
167# define LC_TELEPHONE_MASK (1 << __LC_TELEPHONE)
168# define LC_MEASUREMENT_MASK (1 << __LC_MEASUREMENT)
169# define LC_IDENTIFICATION_MASK (1 << __LC_IDENTIFICATION)
170# define LC_ALL_MASK (LC_CTYPE_MASK \
171 | LC_NUMERIC_MASK \
172 | LC_TIME_MASK \
173 | LC_COLLATE_MASK \
174 | LC_MONETARY_MASK \
175 | LC_MESSAGES_MASK \
176 | LC_PAPER_MASK \
177 | LC_NAME_MASK \
178 | LC_ADDRESS_MASK \
179 | LC_TELEPHONE_MASK \
180 | LC_MEASUREMENT_MASK \
181 | LC_IDENTIFICATION_MASK \
182 )
183
c84142e8
UD
184/* Return a duplicate of the set of locale in DATASET. All usage
185 counters are increased if necessary. */
30c14c31 186extern __locale_t duplocale (__locale_t __dataset) __THROW;
6d52618b
UD
187
188/* Free the data associated with a locale dataset previously returned
189 by a call to `setlocale_r'. */
30c14c31
RM
190extern void freelocale (__locale_t __dataset) __THROW;
191
192/* Switch the current thread's locale to DATASET.
193 If DATASET is null, instead just return the current setting.
194 The special value LC_GLOBAL_LOCALE is the initial setting
195 for all threads and can also be installed any time, meaning
196 the thread uses the global settings controlled by `setlocale'. */
30c14c31
RM
197extern __locale_t uselocale (__locale_t __dataset) __THROW;
198
199/* This value can be passed to `uselocale' and may be returned by it.
200 Passing this value to any other function has undefined behavior. */
201# define LC_GLOBAL_LOCALE ((__locale_t) -1L)
202
6d52618b
UD
203#endif
204
28f540f4
RM
205__END_DECLS
206
207#endif /* locale.h */