Clang Project

include/locale.h
1/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
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.
8
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.
13
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   <http://www.gnu.org/licenses/>.  */
17
18/*
19 * ISO C99 Standard: 7.11 Localization <locale.h>
20 */
21
22#ifndef _LOCALE_H
23#define _LOCALE_H 1
24
25#include <features.h>
26
27#define __need_NULL
28#include <stddef.h>
29#include <bits/locale.h>
30
31__BEGIN_DECLS
32
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
48
49
50__BEGIN_NAMESPACE_STD
51
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.
90     2 The sign string follows the quantity and currency_symbol.
91     3 The sign string immediately precedes the currency_symbol.
92     4 The sign string immediately follows the currency_symbol.  */
93  char p_sign_posn;
94  char n_sign_posn;
95#ifdef __USE_ISOC99
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;
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
120};
121
122
123/* Set and/or return the current locale.  */
124extern char *setlocale (int __categoryconst char *__locale__THROW;
125
126/* Return the numeric/monetary information for the current locale.  */
127extern struct lconv *localeconv (void__THROW;
128
129__END_NAMESPACE_STD
130
131
132#ifdef __USE_XOPEN2K8
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
144/* Get locale datatype definition.  */
145include <xlocale.h>
146
147/* Return a reference to a data structure representing a set of locale
148   datasets.  Unlike for the CATEGORY parameter for `setlocale' the
149   CATEGORY_MASK parameter here uses a single bit for each category,
150   made by OR'ing together LC_*_MASK bits above.  */
151extern __locale_t newlocale (int __category_maskconst char *__locale,
152      __locale_t __base__THROW;
153
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.  */
158define LC_CTYPE_MASK (1 << __LC_CTYPE)
159define LC_NUMERIC_MASK (1 << __LC_NUMERIC)
160define LC_TIME_MASK (1 << __LC_TIME)
161define LC_COLLATE_MASK (1 << __LC_COLLATE)
162define LC_MONETARY_MASK (1 << __LC_MONETARY)
163define LC_MESSAGES_MASK (1 << __LC_MESSAGES)
164define LC_PAPER_MASK (1 << __LC_PAPER)
165define LC_NAME_MASK (1 << __LC_NAME)
166define LC_ADDRESS_MASK (1 << __LC_ADDRESS)
167define LC_TELEPHONE_MASK (1 << __LC_TELEPHONE)
168define LC_MEASUREMENT_MASK (1 << __LC_MEASUREMENT)
169define LC_IDENTIFICATION_MASK (1 << __LC_IDENTIFICATION)
170define 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
184/* Return a duplicate of the set of locale in DATASET.  All usage
185   counters are increased if necessary.  */
186extern __locale_t duplocale (__locale_t __dataset__THROW;
187
188/* Free the data associated with a locale dataset previously returned
189   by a call to `setlocale_r'.  */
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'.  */
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.  */
201define LC_GLOBAL_LOCALE ((__locale_t) -1L)
202
203#endif
204
205__END_DECLS
206
207#endif /* locale.h  */
208
lconv::decimal_point
lconv::thousands_sep
lconv::grouping
lconv::int_curr_symbol
lconv::currency_symbol
lconv::mon_decimal_point
lconv::mon_thousands_sep
lconv::mon_grouping
lconv::positive_sign
lconv::negative_sign
lconv::int_frac_digits
lconv::frac_digits
lconv::p_cs_precedes
lconv::p_sep_by_space
lconv::n_cs_precedes
lconv::n_sep_by_space
lconv::p_sign_posn
lconv::n_sign_posn
lconv::int_p_cs_precedes
lconv::int_p_sep_by_space
lconv::int_n_cs_precedes
lconv::int_n_sep_by_space
lconv::int_p_sign_posn
lconv::int_n_sign_posn