This commit is contained in:
pommicket 2022-02-15 16:48:18 -05:00
parent 23198d16f4
commit 95e7ec1ab5
2 changed files with 64 additions and 5 deletions

60
05/locale.h Normal file
View file

@ -0,0 +1,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

View file

@ -4,13 +4,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <stddef.h> #include <stddef.h>
#include <ctype.h> #include <ctype.h>
#include <locale.h>
typedef struct {
int x;
long y;
} S;
int main(int argc, char **argv) { int main(int argc, char **argv) {
setlocale(LC_ALL, "C");
struct lconv *c = localeconv();
printf("%s\n",c->negative_sign);
return 0; return 0;
} }