1#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7#include <features.h>
8#include <bits/null.h>
9
10#define LC_CTYPE 0
11#define LC_NUMERIC 1
12#define LC_TIME 2
13#define LC_COLLATE 3
14#define LC_MONETARY 4
15#define LC_MESSAGES 5
16#define LC_ALL 6
17
18struct lconv {
19    char* decimal_point;
20    char* thousands_sep;
21    char* grouping;
22
23    char* int_curr_symbol;
24    char* currency_symbol;
25    char* mon_decimal_point;
26    char* mon_thousands_sep;
27    char* mon_grouping;
28    char* positive_sign;
29    char* negative_sign;
30    char int_frac_digits;
31    char frac_digits;
32    char p_cs_precedes;
33    char p_sep_by_space;
34    char n_cs_precedes;
35    char n_sep_by_space;
36    char p_sign_posn;
37    char n_sign_posn;
38    char int_p_cs_precedes;
39    char int_p_sep_by_space;
40    char int_n_cs_precedes;
41    char int_n_sep_by_space;
42    char int_p_sign_posn;
43    char int_n_sign_posn;
44};
45
46char* setlocale(int, const char*);
47struct lconv* localeconv(void);
48
49#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
50    defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
51
52#define __NEED_locale_t
53
54#include <bits/alltypes.h>
55
56#define LC_GLOBAL_LOCALE ((locale_t)-1)
57
58#define LC_CTYPE_MASK (1 << LC_CTYPE)
59#define LC_NUMERIC_MASK (1 << LC_NUMERIC)
60#define LC_TIME_MASK (1 << LC_TIME)
61#define LC_COLLATE_MASK (1 << LC_COLLATE)
62#define LC_MONETARY_MASK (1 << LC_MONETARY)
63#define LC_MESSAGES_MASK (1 << LC_MESSAGES)
64#define LC_ALL_MASK 0x7fffffff
65
66locale_t duplocale(locale_t);
67void freelocale(locale_t);
68locale_t newlocale(int, const char*, locale_t);
69locale_t uselocale(locale_t);
70
71#endif
72
73#ifdef __cplusplus
74}
75#endif
76