2 * Some stuff takem from wine msvcrt\locale.c
4 * Copyright 2000 Jon Griffiths
9 #include <internal/tls.h>
12 #include <internal/debug.h>
14 unsigned int __setlc_active
;
15 unsigned int __unguarded_readlc_active
;
16 int _current_category
; /* used by setlocale */
17 const char *_current_locale
;
19 int parse_locale(const char *locale
, char *lang
, char *country
, char *code_page
);
24 char *setlocale(int category
, const char *locale
)
30 parse_locale(locale
,lang
,country
,code_page
);
33 //printf("%s %s %s %s\n",locale,lang,country,code_page);
60 locale "lang[_country[.code_page]]"
66 int parse_locale(const char *locale
, char *lang
, char *country
, char *code_page
)
68 while ( *locale
!= 0 && *locale
!= '.' && *locale
!= '_' )
75 if ( *locale
== '_' ) {
77 while ( *locale
!= 0 && *locale
!= '.' )
87 if ( *locale
== '.' ) {
89 while ( *locale
!= 0 && *locale
!= '.' )
101 const struct map_lcid2str
{
103 const char *langname
;
106 {0x0409,"English", "United States"},
107 {0x0809,"English", "United Kingdom"},
108 {0x0000,"Unknown", "Unknown"}
112 const struct map_cntr
{
116 {"britain", "united kingdom"},
117 {"england", "united kingdom"},
118 {"gbr", "united kingdom"},
119 {"great britain", "united kingdom"},
120 {"uk", "united kingdom"},
121 {"united kingdom", "united kingdom"},
122 {"united-kingdom", "united kingdom"},
123 {"america", "united states" },
124 {"united states", "united states"},
125 {"united-states", "united states"},
126 {"us", "united states"},
127 {"usa" "united states"}
131 struct lconv _lconv
= {
132 ".", // decimal_point
133 ",", // thousands_sep
135 "DOL", // int_curr_symbol
136 "$", // currency_symbol
137 ".", // mon_decimal_point
138 ",", // mon_thousands_sep
140 "+", // positive_sign
141 "-", // negative_sign
142 127, // int_frac_digits
144 127, // p_cs_precedes
145 127, // p_sep_by_space
146 127, // n_cs_precedes
147 127, // n_sep_by_space
155 struct lconv
*localeconv(void)
157 return (struct lconv
*) &_lconv
;
160 /*********************************************************************
161 * _setmbcp (MSVCRT.@)
165 void _setmbcp(int cp
)
167 DPRINT1("_setmbcp - stub\n");
172 /*********************************************************************
173 * __lc_collate_cp (MSVCRT.@)
177 void __lc_collate_cp(int cp
)
179 DPRINT1("__lc_collate_cp - stub\n");
184 /*********************************************************************
185 * __lc_handle (MSVCRT.@)
189 void __lc_handle(void)
191 DPRINT1("__lc_handle - stub\n");
196 /*********************************************************************
197 * __lc_codepage (MSVCRT.@)
201 void __lc_codepage(void)
203 DPRINT1("__lc_codepage - stub\n");
208 /*********************************************************************
209 * _Gettnames (MSVCRT.@)
211 void *_Gettnames(void)
213 DPRINT1("(void), stub!\n");
217 /*********************************************************************
218 * __lconv_init (MSVCRT.@)
220 void __lconv_init(void)
226 /*********************************************************************
227 * _Strftime (MSVCRT.@)
229 const char* _Strftime(char *out
, unsigned int len
, const char *fmt
,
230 const void *tm
, void *foo
)
233 DPRINT1("(%p %d %s %p %p) stub\n", out
, len
, fmt
, tm
, foo
);
238 /*********************************************************************
239 * _Getdays (MSVCRT.@)
241 const char* _Getdays(void)
243 static const char *MSVCRT_days
= ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:"
244 "Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
245 /* FIXME: Use locale */
246 DPRINT1("(void) semi-stub\n");
250 /*********************************************************************
251 * _Getmonths (MSVCRT.@)
253 const char* _Getmonths(void)
255 static const char *MSVCRT_months
= ":Jan:January:Feb:February:Mar:March:Apr:"
256 "April:May:May:Jun:June:Jul:July:Aug:August:Sep:September:Oct:"
257 "October:Nov:November:Dec:December";
258 /* FIXME: Use locale */
259 DPRINT1("(void) semi-stub\n");
260 return MSVCRT_months
;
263 /*********************************************************************
264 * __crtLCMapStringA (MSVCRT.@)
266 int __crtLCMapStringA(
267 LCID lcid
, DWORD mapflags
, const char* src
, int srclen
, char* dst
,
268 int dstlen
, unsigned int codepage
, int xflag
270 DPRINT1("(lcid %lx, flags %lx, %s(%d), %p(%d), %x, %d), partial stub!\n",
271 lcid
,mapflags
,src
,srclen
,dst
,dstlen
,codepage
,xflag
);
272 /* FIXME: A bit incorrect. But msvcrt itself just converts its
273 * arguments to wide strings and then calls LCMapStringW
275 return LCMapStringA(lcid
,mapflags
,src
,srclen
,dst
,dstlen
);