summaryrefslogtreecommitdiff
path: root/05/locale.h
blob: af907293b1e61694a905797243d74e9c4ced1b85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef _LOCALE_H
#define _LOCALE_H

#include <stdc_common.h>

struct lconv {
	char *decimal_point;       /* "." */
	char *thousands_sep;       /* "" */
	char *grouping;            /* "" */
	char *int_curr_symbol;     /* "" */
	char *currency_symbol;     /* "" */
	char *mon_decimal_point;   /* "" */
	char *mon_thousands_sep;   /* "" */
	char *mon_grouping;        /* "" */
	char *positive_sign;       /* "" */
	char *negative_sign;       /* "" */
	char int_frac_digits;      /* CHAR_MAX */
	char frac_digits;          /* CHAR_MAX */
	char p_cs_precedes;        /* CHAR_MAX */
	char p_sep_by_space;       /* CHAR_MAX */
	char n_cs_precedes;        /* CHAR_MAX */
	char n_sep_by_space;       /* CHAR_MAX */
	char p_sign_posn;          /* CHAR_MAX */
	char n_sign_posn;          /* CHAR_MAX */
};

// these are GCC's constants, but it doesn't really matter which constants we use.
#define LC_ALL 6
#define LC_COLLATE 3
#define LC_CTYPE 0
#define LC_MONETARY 4
#define LC_NUMERIC 1
#define LC_TIME 2

char *setlocale(int category, char *locale) {
	if (!locale) return "C";
	if (*locale == 'C' && !locale[1]) {
		// yep
		return "C";
	}
	
	// we only support the C locale
	return NULL;
	
}

struct lconv *localeconv(void) {
	static struct lconv conv = {
		".",
		"", "", "",
		"", "", "",
		"", "", "",
		CHAR_MAX, CHAR_MAX, CHAR_MAX,
		CHAR_MAX, CHAR_MAX, CHAR_MAX,
		CHAR_MAX, CHAR_MAX
	};
	return &conv;
}

#endif // _LOCALE_H