1 /***********************************************************************\
2 *                                winnls.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.winnls;
12 pragma(lib, "kernel32.lib");
13 
14 private import win32.basetsd, win32.w32api, win32.winbase, win32.windef;
15 
16 alias DWORD LCTYPE, CALTYPE, CALID, LGRPID, GEOID, GEOTYPE, GEOCLASS;
17 
18 const size_t
19 	MAX_DEFAULTCHAR =  2,
20 	MAX_LEADBYTES   = 12;
21 
22 const LCTYPE
23 	LOCALE_USE_CP_ACP    = 0x40000000,
24 	LOCALE_RETURN_NUMBER = 0x20000000;
25 
26 enum : LCTYPE {
27 	LOCALE_ILANGUAGE = 1,
28 	LOCALE_SLANGUAGE,
29 	LOCALE_SABBREVLANGNAME,
30 	LOCALE_SNATIVELANGNAME,
31 	LOCALE_ICOUNTRY,
32 	LOCALE_SCOUNTRY,
33 	LOCALE_SABBREVCTRYNAME,
34 	LOCALE_SNATIVECTRYNAME,
35 	LOCALE_IDEFAULTLANGUAGE,
36 	LOCALE_IDEFAULTCOUNTRY,
37 	LOCALE_IDEFAULTCODEPAGE,
38 	LOCALE_SLIST,
39 	LOCALE_IMEASURE,
40 	LOCALE_SDECIMAL,
41 	LOCALE_STHOUSAND,
42 	LOCALE_SGROUPING,
43 	LOCALE_IDIGITS,
44 	LOCALE_ILZERO,
45 	LOCALE_SNATIVEDIGITS,
46 	LOCALE_SCURRENCY,
47 	LOCALE_SINTLSYMBOL,
48 	LOCALE_SMONDECIMALSEP,
49 	LOCALE_SMONTHOUSANDSEP,
50 	LOCALE_SMONGROUPING,
51 	LOCALE_ICURRDIGITS,
52 	LOCALE_IINTLCURRDIGITS,
53 	LOCALE_ICURRENCY,
54 	LOCALE_INEGCURR,
55 	LOCALE_SDATE,
56 	LOCALE_STIME,
57 	LOCALE_SSHORTDATE,
58 	LOCALE_SLONGDATE,
59 	LOCALE_IDATE,
60 	LOCALE_ILDATE,
61 	LOCALE_ITIME,
62 	LOCALE_ICENTURY,
63 	LOCALE_ITLZERO,
64 	LOCALE_IDAYLZERO,
65 	LOCALE_IMONLZERO,
66 	LOCALE_S1159,
67 	LOCALE_S2359,
68 	LOCALE_SDAYNAME1,
69 	LOCALE_SDAYNAME2,
70 	LOCALE_SDAYNAME3,
71 	LOCALE_SDAYNAME4,
72 	LOCALE_SDAYNAME5,
73 	LOCALE_SDAYNAME6,
74 	LOCALE_SDAYNAME7,
75 	LOCALE_SABBREVDAYNAME1,
76 	LOCALE_SABBREVDAYNAME2,
77 	LOCALE_SABBREVDAYNAME3,
78 	LOCALE_SABBREVDAYNAME4,
79 	LOCALE_SABBREVDAYNAME5,
80 	LOCALE_SABBREVDAYNAME6,
81 	LOCALE_SABBREVDAYNAME7,
82 	LOCALE_SMONTHNAME1,
83 	LOCALE_SMONTHNAME2,
84 	LOCALE_SMONTHNAME3,
85 	LOCALE_SMONTHNAME4,
86 	LOCALE_SMONTHNAME5,
87 	LOCALE_SMONTHNAME6,
88 	LOCALE_SMONTHNAME7,
89 	LOCALE_SMONTHNAME8,
90 	LOCALE_SMONTHNAME9,
91 	LOCALE_SMONTHNAME10,
92 	LOCALE_SMONTHNAME11,
93 	LOCALE_SMONTHNAME12,
94 	LOCALE_SABBREVMONTHNAME1,
95 	LOCALE_SABBREVMONTHNAME2,
96 	LOCALE_SABBREVMONTHNAME3,
97 	LOCALE_SABBREVMONTHNAME4,
98 	LOCALE_SABBREVMONTHNAME5,
99 	LOCALE_SABBREVMONTHNAME6,
100 	LOCALE_SABBREVMONTHNAME7,
101 	LOCALE_SABBREVMONTHNAME8,
102 	LOCALE_SABBREVMONTHNAME9,
103 	LOCALE_SABBREVMONTHNAME10,
104 	LOCALE_SABBREVMONTHNAME11,
105 	LOCALE_SABBREVMONTHNAME12,
106 	LOCALE_SPOSITIVESIGN,
107 	LOCALE_SNEGATIVESIGN,
108 	LOCALE_IPOSSIGNPOSN,
109 	LOCALE_INEGSIGNPOSN,
110 	LOCALE_IPOSSYMPRECEDES,
111 	LOCALE_IPOSSEPBYSPACE,
112 	LOCALE_INEGSYMPRECEDES,
113 	LOCALE_INEGSEPBYSPACE,
114 	LOCALE_FONTSIGNATURE,
115 	LOCALE_SISO639LANGNAME,
116 	LOCALE_SISO3166CTRYNAME, // = 90
117 	LOCALE_SENGLANGUAGE         = 0x1001,
118 	LOCALE_SENGCOUNTRY          = 0x1002,
119 	LOCALE_IDEFAULTANSICODEPAGE = 0x1004,
120 	LOCALE_INEGNUMBER           = 0x1010,
121 	LOCALE_STIMEFORMAT          = 0x1003,
122 	LOCALE_ITIMEMARKPOSN        = 0x1005,
123 	LOCALE_ICALENDARTYPE        = 0x1009,
124 	LOCALE_IOPTIONALCALENDAR    = 0x100B,
125 	LOCALE_IFIRSTDAYOFWEEK      = 0x100C,
126 	LOCALE_IFIRSTWEEKOFYEAR     = 0x100D,
127 	LOCALE_SMONTHNAME13         = 0x100E,
128 	LOCALE_SABBREVMONTHNAME13   = 0x100F
129 }
130 
131 enum : LCID {
132 	LOCALE_USER_DEFAULT   = 0x400,
133 	LOCALE_SYSTEM_DEFAULT = 0x800
134 }
135 
136 const DWORD
137 	NORM_IGNORECASE     =       1,
138 	NORM_IGNORENONSPACE =       2,
139 	NORM_IGNORESYMBOLS  =       4,
140 	SORT_STRINGSORT     = 0x01000,
141 	NORM_IGNOREKANATYPE = 0x10000,
142 	NORM_IGNOREWIDTH    = 0x20000;
143 
144 const DWORD
145 	LCMAP_LOWERCASE           = 0x00000100,
146 	LCMAP_UPPERCASE           = 0x00000200,
147 	LCMAP_SORTKEY             = 0x00000400,
148 	LCMAP_BYTEREV             = 0x00000800,
149 	LCMAP_HIRAGANA            = 0x00100000,
150 	LCMAP_KATAKANA            = 0x00200000,
151 	LCMAP_HALFWIDTH           = 0x00400000,
152 	LCMAP_FULLWIDTH           = 0x00800000,
153 	LCMAP_LINGUISTIC_CASING   = 0x01000000,
154 	LCMAP_SIMPLIFIED_CHINESE  = 0x02000000,
155 	LCMAP_TRADITIONAL_CHINESE = 0x04000000;
156 
157 const CALID ENUM_ALL_CALENDARS = -1;
158 
159 const DWORD
160 	DATE_SHORTDATE        =          1,
161 	DATE_LONGDATE         =          2,
162 	DATE_USE_ALT_CALENDAR =          4,
163 	LOCALE_NOUSEROVERRIDE = 0x80000000;
164 
165 enum : DWORD {
166 	CP_INSTALLED = 1,
167 	CP_SUPPORTED
168 }
169 
170 enum : DWORD {
171 	LCID_INSTALLED       = 1,
172 	LCID_SUPPORTED       = 2,
173 	LCID_ALTERNATE_SORTS = 4
174 }
175 
176 const DWORD
177 	MAP_FOLDCZONE   =  16,
178 	MAP_PRECOMPOSED =  32,
179 	MAP_COMPOSITE   =  64,
180 	MAP_FOLDDIGITS  = 128;
181 
182 enum : UINT {
183 	CP_ACP,
184 	CP_OEMCP,
185 	CP_MACCP,
186 	CP_THREAD_ACP, // =     3
187 	CP_SYMBOL         =    42,
188 	CP_UTF7           = 65000,
189 	CP_UTF8           = 65001
190 }
191 
192 enum : DWORD {
193 	CT_CTYPE1 = 1,
194 	CT_CTYPE2 = 2,
195 	CT_CTYPE3 = 4
196 }
197 
198 const WORD
199 	C1_UPPER  =   1,
200 	C1_LOWER  =   2,
201 	C1_DIGIT  =   4,
202 	C1_SPACE  =   8,
203 	C1_PUNCT  =  16,
204 	C1_CNTRL  =  32,
205 	C1_BLANK  =  64,
206 	C1_XDIGIT = 128,
207 	C1_ALPHA  = 256;
208 
209 enum : WORD {
210 	C2_NOTAPPLICABLE,
211 	C2_LEFTTORIGHT,
212 	C2_RIGHTTOLEFT,
213 	C2_EUROPENUMBER,
214 	C2_EUROPESEPARATOR,
215 	C2_EUROPETERMINATOR,
216 	C2_ARABICNUMBER,
217 	C2_COMMONSEPARATOR,
218 	C2_BLOCKSEPARATOR,
219 	C2_SEGMENTSEPARATOR,
220 	C2_WHITESPACE,
221 	C2_OTHERNEUTRAL  // = 11
222 }
223 
224 const WORD
225 	C3_NOTAPPLICABLE =      0,
226 	C3_NONSPACING    =      1,
227 	C3_DIACRITIC     =      2,
228 	C3_VOWELMARK     =      4,
229 	C3_SYMBOL        =      8,
230 	C3_KATAKANA      = 0x0010,
231 	C3_HIRAGANA      = 0x0020,
232 	C3_HALFWIDTH     = 0x0040,
233 	C3_FULLWIDTH     = 0x0080,
234 	C3_IDEOGRAPH     = 0x0100,
235 	C3_KASHIDA       = 0x0200,
236 	C3_LEXICAL       = 0x0400,
237 	C3_ALPHA         = 0x8000;
238 
239 const DWORD
240 	TIME_NOMINUTESORSECONDS = 1,
241 	TIME_NOSECONDS          = 2,
242 	TIME_NOTIMEMARKER       = 4,
243 	TIME_FORCE24HOURFORMAT  = 8;
244 
245 const DWORD
246 	MB_PRECOMPOSED       = 1,
247 	MB_COMPOSITE         = 2,
248 	MB_USEGLYPHCHARS     = 4,
249 	MB_ERR_INVALID_CHARS = 8;
250 
251 const DWORD
252 	WC_DISCARDNS      =  16,
253 	WC_SEPCHARS       =  32,
254 	WC_DEFAULTCHAR    =  64,
255 	WC_COMPOSITECHECK = 512;
256 
257 enum : LONG {
258 	CTRY_DEFAULT            =   0,
259 	CTRY_DOMINICAN_REPUBLIC =   1,
260 	CTRY_PUERTO_RICO        =   1,
261 	CTRY_CARIBBEAN          =   1,
262 	CTRY_JAMAICA            =   1,
263 	CTRY_UNITED_STATES      =   1,
264 	CTRY_TRINIDAD_Y_TOBAGO  =   1,
265 	CTRY_CANADA             =   2,
266 	CTRY_RUSSIA             =   7,
267 	CTRY_UZBEKISTAN         =   7,
268 	CTRY_KAZAKSTAN          =   7,
269 	CTRY_TATARSTAN          =   7,
270 	CTRY_EGYPT              =  20,
271 	CTRY_SOUTH_AFRICA       =  27,
272 	CTRY_GREECE             =  30,
273 	CTRY_NETHERLANDS        =  31,
274 	CTRY_BELGIUM            =  32,
275 	CTRY_FRANCE             =  33,
276 	CTRY_MONACO             =  33,
277 	CTRY_SPAIN              =  34,
278 	CTRY_HUNGARY            =  36,
279 	CTRY_ITALY              =  39,
280 	CTRY_ROMANIA            =  40,
281 	CTRY_SWITZERLAND        =  41,
282 	CTRY_LIECHTENSTEIN      =  41,
283 	CTRY_AUSTRIA            =  43,
284 	CTRY_UNITED_KINGDOM     =  44,
285 	CTRY_DENMARK            =  45,
286 	CTRY_SWEDEN             =  46,
287 	CTRY_NORWAY             =  47,
288 	CTRY_POLAND             =  48,
289 	CTRY_GERMANY            =  49,
290 	CTRY_PERU               =  51,
291 	CTRY_MEXICO             =  52,
292 	CTRY_ARGENTINA          =  54,
293 	CTRY_BRAZIL             =  55,
294 	CTRY_CHILE              =  56,
295 	CTRY_COLOMBIA           =  57,
296 	CTRY_VENEZUELA          =  58,
297 	CTRY_MALAYSIA           =  60,
298 	CTRY_AUSTRALIA          =  61,
299 	CTRY_INDONESIA          =  62,
300 	CTRY_PHILIPPINES        =  63,
301 	CTRY_NEW_ZEALAND        =  64,
302 	CTRY_SINGAPORE          =  65,
303 	CTRY_THAILAND           =  66,
304 	CTRY_JAPAN              =  81,
305 	CTRY_SOUTH_KOREA        =  82,
306 	CTRY_VIET_NAM           =  84,
307 	CTRY_PRCHINA            =  86,
308 	CTRY_TURKEY             =  90,
309 	CTRY_INDIA              =  91,
310 	CTRY_PAKISTAN           =  92,
311 	CTRY_MOROCCO            = 212,
312 	CTRY_ALGERIA            = 213,
313 	CTRY_TUNISIA            = 216,
314 	CTRY_LIBYA              = 218,
315 	CTRY_KENYA              = 254,
316 	CTRY_ZIMBABWE           = 263,
317 	CTRY_FAEROE_ISLANDS     = 298,
318 	CTRY_PORTUGAL           = 351,
319 	CTRY_LUXEMBOURG         = 352,
320 	CTRY_IRELAND            = 353,
321 	CTRY_ICELAND            = 354,
322 	CTRY_ALBANIA            = 355,
323 	CTRY_FINLAND            = 358,
324 	CTRY_BULGARIA           = 359,
325 	CTRY_LITHUANIA          = 370,
326 	CTRY_LATVIA             = 371,
327 	CTRY_ESTONIA            = 372,
328 	CTRY_ARMENIA            = 374,
329 	CTRY_BELARUS            = 375,
330 	CTRY_UKRAINE            = 380,
331 	CTRY_SERBIA             = 381,
332 	CTRY_CROATIA            = 385,
333 	CTRY_SLOVENIA           = 386,
334 	CTRY_MACEDONIA          = 389,
335 	CTRY_CZECH              = 420,
336 	CTRY_SLOVAK             = 421,
337 	CTRY_BELIZE             = 501,
338 	CTRY_GUATEMALA          = 502,
339 	CTRY_EL_SALVADOR        = 503,
340 	CTRY_HONDURAS           = 504,
341 	CTRY_NICARAGUA          = 505,
342 	CTRY_COSTA_RICA         = 506,
343 	CTRY_PANAMA             = 507,
344 	CTRY_BOLIVIA            = 591,
345 	CTRY_ECUADOR            = 593,
346 	CTRY_PARAGUAY           = 595,
347 	CTRY_URUGUAY            = 598,
348 	CTRY_BRUNEI_DARUSSALAM  = 673,
349 	CTRY_HONG_KONG          = 852,
350 	CTRY_MACAU              = 853,
351 	CTRY_TAIWAN             = 886,
352 	CTRY_MALDIVES           = 960,
353 	CTRY_LEBANON            = 961,
354 	CTRY_JORDAN             = 962,
355 	CTRY_SYRIA              = 963,
356 	CTRY_IRAQ               = 964,
357 	CTRY_KUWAIT             = 965,
358 	CTRY_SAUDI_ARABIA       = 966,
359 	CTRY_YEMEN              = 967,
360 	CTRY_OMAN               = 968,
361 	CTRY_UAE                = 971,
362 	CTRY_ISRAEL             = 972,
363 	CTRY_BAHRAIN            = 973,
364 	CTRY_QATAR              = 974,
365 	CTRY_MONGOLIA           = 976,
366 	CTRY_IRAN               = 981,
367 	CTRY_AZERBAIJAN         = 994,
368 	CTRY_GEORGIA            = 995,
369 	CTRY_KYRGYZSTAN         = 996
370 }
371 
372 enum : CALTYPE {
373 	CAL_ICALINTVALUE          = 1,
374 	CAL_SCALNAME,
375 	CAL_IYEAROFFSETRANGE,
376 	CAL_SERASTRING,
377 	CAL_SSHORTDATE,
378 	CAL_SLONGDATE,
379 	CAL_SDAYNAME1,
380 	CAL_SDAYNAME2,
381 	CAL_SDAYNAME3,
382 	CAL_SDAYNAME4,
383 	CAL_SDAYNAME5,
384 	CAL_SDAYNAME6,
385 	CAL_SDAYNAME7,
386 	CAL_SABBREVDAYNAME1,
387 	CAL_SABBREVDAYNAME2,
388 	CAL_SABBREVDAYNAME3,
389 	CAL_SABBREVDAYNAME4,
390 	CAL_SABBREVDAYNAME5,
391 	CAL_SABBREVDAYNAME6,
392 	CAL_SABBREVDAYNAME7,
393 	CAL_SMONTHNAME1,
394 	CAL_SMONTHNAME2,
395 	CAL_SMONTHNAME3,
396 	CAL_SMONTHNAME4,
397 	CAL_SMONTHNAME5,
398 	CAL_SMONTHNAME6,
399 	CAL_SMONTHNAME7,
400 	CAL_SMONTHNAME8,
401 	CAL_SMONTHNAME9,
402 	CAL_SMONTHNAME10,
403 	CAL_SMONTHNAME11,
404 	CAL_SMONTHNAME12,
405 	CAL_SMONTHNAME13,
406 	CAL_SABBREVMONTHNAME1,
407 	CAL_SABBREVMONTHNAME2,
408 	CAL_SABBREVMONTHNAME3,
409 	CAL_SABBREVMONTHNAME4,
410 	CAL_SABBREVMONTHNAME5,
411 	CAL_SABBREVMONTHNAME6,
412 	CAL_SABBREVMONTHNAME7,
413 	CAL_SABBREVMONTHNAME8,
414 	CAL_SABBREVMONTHNAME9,
415 	CAL_SABBREVMONTHNAME10,
416 	CAL_SABBREVMONTHNAME11,
417 	CAL_SABBREVMONTHNAME12,
418 	CAL_SABBREVMONTHNAME13 // = 46
419 }
420 
421 
422 enum : CALTYPE {
423 	CAL_GREGORIAN                =  1,
424 	CAL_GREGORIAN_US,
425 	CAL_JAPAN,
426 	CAL_TAIWAN,
427 	CAL_KOREA,
428 	CAL_HIJRI,
429 	CAL_THAI,
430 	CAL_HEBREW,
431 	CAL_GREGORIAN_ME_FRENCH,
432 	CAL_GREGORIAN_ARABIC,
433 	CAL_GREGORIAN_XLIT_ENGLISH,
434 	CAL_GREGORIAN_XLIT_FRENCH // = 12
435 }
436 
437 enum : int {
438 	CSTR_LESS_THAN    = 1,
439 	CSTR_EQUAL,
440 	CSTR_GREATER_THAN
441 }
442 
443 enum : DWORD {
444 	LGRPID_INSTALLED = 1,
445 	LGRPID_SUPPORTED
446 }
447 
448 enum : LGRPID {
449 	LGRPID_WESTERN_EUROPE = 1,
450 	LGRPID_CENTRAL_EUROPE,
451 	LGRPID_BALTIC,
452 	LGRPID_GREEK,
453 	LGRPID_CYRILLIC,
454 	LGRPID_TURKISH,
455 	LGRPID_JAPANESE,
456 	LGRPID_KOREAN,
457 	LGRPID_TRADITIONAL_CHINESE,
458 	LGRPID_SIMPLIFIED_CHINESE,
459 	LGRPID_THAI,
460 	LGRPID_HEBREW,
461 	LGRPID_ARABIC,
462 	LGRPID_VIETNAMESE,
463 	LGRPID_INDIC,
464 	LGRPID_GEORGIAN,
465 	LGRPID_ARMENIAN // = 17
466 }
467 
468 static if (WINVER >= 0x500) {
469 	enum : LCTYPE {
470 		LOCALE_SYEARMONTH             = 0x1006,
471 		LOCALE_SENGCURRNAME           = 0x1007,
472 		LOCALE_SNATIVECURRNAME        = 0x1008,
473 		LOCALE_IDEFAULTEBCDICCODEPAGE = 0x1012,
474 		LOCALE_SSORTNAME              = 0x1013,
475 		LOCALE_IDIGITSUBSTITUTION     = 0x1014,
476 		LOCALE_IPAPERSIZE             = 0x100A
477 	}
478 
479 	const DWORD
480 		DATE_YEARMONTH  =  8,
481 		DATE_LTRREADING = 16,
482 		DATE_RTLREADING = 32;
483 
484 	const DWORD MAP_EXPAND_LIGATURES = 0x2000;
485 	const DWORD WC_NO_BEST_FIT_CHARS = 1024;
486 
487 	enum : CALTYPE {
488 		CAL_SYEARMONTH       = 47,
489 		CAL_ITWODIGITYEARMAX = 48,
490 		CAL_NOUSEROVERRIDE   = LOCALE_NOUSEROVERRIDE,
491 		CAL_RETURN_NUMBER    = LOCALE_RETURN_NUMBER,
492 		CAL_USE_CP_ACP       = LOCALE_USE_CP_ACP
493 	}
494 } // (WINVER >= 0x500)
495 
496 extern (Windows) {
497 	alias BOOL function(LPSTR) CALINFO_ENUMPROCA;
498 	alias BOOL function(LPWSTR) CALINFO_ENUMPROCW;
499 	alias BOOL function(LPSTR, CALID) CALINFO_ENUMPROCEXA;
500 	alias BOOL function(LPWSTR, CALID) CALINFO_ENUMPROCEXW;
501 	alias BOOL function(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR)
502 	  LANGUAGEGROUP_ENUMPROCA;
503 	alias BOOL function(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR)
504 	  LANGUAGEGROUP_ENUMPROCW;
505 	alias BOOL function(LGRPID, LCID, LPSTR, LONG_PTR)
506 	  LANGGROUPLOCALE_ENUMPROCA;
507 	alias BOOL function(LGRPID, LCID, LPWSTR, LONG_PTR)
508 	  LANGGROUPLOCALE_ENUMPROCW;
509 	alias BOOL function(LPWSTR, LONG_PTR) UILANGUAGE_ENUMPROCW;
510 	alias BOOL function(LPSTR, LONG_PTR) UILANGUAGE_ENUMPROCA;
511 	alias BOOL function(LPSTR) LOCALE_ENUMPROCA;
512 	alias BOOL function(LPWSTR) LOCALE_ENUMPROCW;
513 	alias BOOL function(LPSTR) CODEPAGE_ENUMPROCA;
514 	alias BOOL function(LPWSTR) CODEPAGE_ENUMPROCW;
515 	alias BOOL function(LPSTR) DATEFMT_ENUMPROCA;
516 	alias BOOL function(LPWSTR) DATEFMT_ENUMPROCW;
517 	alias BOOL function(LPSTR, CALID) DATEFMT_ENUMPROCEXA;
518 	alias BOOL function(LPWSTR, CALID) DATEFMT_ENUMPROCEXW;
519 	alias BOOL function(LPSTR) TIMEFMT_ENUMPROCA;
520 	alias BOOL function(LPWSTR) TIMEFMT_ENUMPROCW;
521 	alias BOOL function(GEOID) GEO_ENUMPROC;
522 }
523 
524 enum NLS_FUNCTION {
525 	COMPARE_STRING = 0x0001
526 }
527 
528 enum SYSGEOCLASS {
529 	GEOCLASS_NATION = 16,
530 	GEOCLASS_REGION = 14
531 }
532 
533 enum SYSGEOTYPE {
534 	GEO_NATION            = 0x0001,
535 	GEO_LATITUDE          = 0x0002,
536 	GEO_LONGITUDE         = 0x0003,
537 	GEO_ISO2              = 0x0004,
538 	GEO_ISO3              = 0x0005,
539 	GEO_RFC1766           = 0x0006,
540 	GEO_LCID              = 0x0007,
541 	GEO_FRIENDLYNAME      = 0x0008,
542 	GEO_OFFICIALNAME      = 0x0009,
543 	GEO_TIMEZONES         = 0x000a,
544 	GEO_OFFICIALLANGUAGES = 0x000a
545 }
546 
547 struct CPINFO {
548 	UINT                  MaxCharSize;
549 	BYTE[MAX_DEFAULTCHAR] DefaultChar;
550 	BYTE[MAX_LEADBYTES]   LeadByte;
551 }
552 alias CPINFO* LPCPINFO;
553 
554 struct CPINFOEXA {
555 	UINT                  MaxCharSize;
556 	BYTE[MAX_DEFAULTCHAR] DefaultChar;
557 	BYTE[MAX_LEADBYTES]   LeadByte;
558 	WCHAR                 UnicodeDefaultChar;
559 	UINT                  CodePage;
560 	CHAR[MAX_PATH]        CodePageName;
561 }
562 alias CPINFOEXA* LPCPINFOEXA;
563 
564 struct CPINFOEXW {
565 	UINT                  MaxCharSize;
566 	BYTE[MAX_DEFAULTCHAR] DefaultChar;
567 	BYTE[MAX_LEADBYTES]   LeadByte;
568 	WCHAR                 UnicodeDefaultChar;
569 	UINT                  CodePage;
570 	WCHAR[MAX_PATH]       CodePageName;
571 }
572 alias CPINFOEXW* LPCPINFOEXW;
573 
574 struct CURRENCYFMTA {
575 	UINT  NumDigits;
576 	UINT  LeadingZero;
577 	UINT  Grouping;
578 	LPSTR lpDecimalSep;
579 	LPSTR lpThousandSep;
580 	UINT  NegativeOrder;
581 	UINT  PositiveOrder;
582 	LPSTR lpCurrencySymbol;
583 }
584 alias CURRENCYFMTA* LPCURRENCYFMTA;
585 
586 struct CURRENCYFMTW {
587 	UINT   NumDigits;
588 	UINT   LeadingZero;
589 	UINT   Grouping;
590 	LPWSTR lpDecimalSep;
591 	LPWSTR lpThousandSep;
592 	UINT   NegativeOrder;
593 	UINT   PositiveOrder;
594 	LPWSTR lpCurrencySymbol;
595 }
596 alias CURRENCYFMTW* LPCURRENCYFMTW;
597 
598 struct NLSVERSIONINFO {
599 	DWORD dwNLSVersionInfoSize;
600 	DWORD dwNLSVersion;
601 	DWORD dwDefinedVersion;
602 }
603 alias NLSVERSIONINFO* LPNLSVERSIONINFO;
604 
605 struct NUMBERFMTA {
606 	UINT  NumDigits;
607 	UINT  LeadingZero;
608 	UINT  Grouping;
609 	LPSTR lpDecimalSep;
610 	LPSTR lpThousandSep;
611 	UINT  NegativeOrder;
612 }
613 alias NUMBERFMTA* LPNUMBERFMTA;
614 
615 struct NUMBERFMTW {
616 	UINT   NumDigits;
617 	UINT   LeadingZero;
618 	UINT   Grouping;
619 	LPWSTR lpDecimalSep;
620 	LPWSTR lpThousandSep;
621 	UINT   NegativeOrder;
622 }
623 alias NUMBERFMTW* LPNUMBERFMTW;
624 
625 extern (Windows) {
626 	int CompareStringA(LCID, DWORD, LPCSTR, int, LPCSTR, int);
627 	int CompareStringW(LCID, DWORD, LPCWSTR, int, LPCWSTR, int);
628 	LCID ConvertDefaultLocale(LCID);
629 	BOOL EnumCalendarInfoA(CALINFO_ENUMPROCA, LCID, CALID, CALTYPE);
630 	BOOL EnumCalendarInfoW(CALINFO_ENUMPROCW, LCID, CALID, CALTYPE);
631 	BOOL EnumDateFormatsA(DATEFMT_ENUMPROCA, LCID, DWORD);
632 	BOOL EnumDateFormatsW(DATEFMT_ENUMPROCW, LCID, DWORD);
633 	BOOL EnumSystemCodePagesA(CODEPAGE_ENUMPROCA, DWORD);
634 	BOOL EnumSystemCodePagesW(CODEPAGE_ENUMPROCW, DWORD);
635 	BOOL EnumSystemGeoID(GEOCLASS, GEOID, GEO_ENUMPROC);
636 	BOOL EnumSystemLocalesA(LOCALE_ENUMPROCA, DWORD);
637 	BOOL EnumSystemLocalesW(LOCALE_ENUMPROCW, DWORD);
638 	BOOL EnumTimeFormatsA(TIMEFMT_ENUMPROCA, LCID, DWORD);
639 	BOOL EnumTimeFormatsW(TIMEFMT_ENUMPROCW, LCID, DWORD);
640 	int FoldStringA(DWORD, LPCSTR, int, LPSTR, int);
641 	int FoldStringW(DWORD, LPCWSTR, int, LPWSTR, int);
642 	UINT GetACP();
643 	int GetCalendarInfoA(LCID, CALID, CALTYPE, LPSTR, int, LPDWORD);
644 	int GetCalendarInfoW(LCID, CALID, CALTYPE, LPWSTR, int, LPDWORD);
645 	BOOL GetCPInfo(UINT, LPCPINFO);
646 	BOOL GetCPInfoExA(UINT, DWORD, LPCPINFOEXA);
647 	BOOL GetCPInfoExW(UINT, DWORD, LPCPINFOEXW);
648 	int GetCurrencyFormatA(LCID, DWORD, LPCSTR,  CPtr!(CURRENCYFMTA), LPSTR, int);
649 	int GetCurrencyFormatW(LCID, DWORD, LPCWSTR,  CPtr!(CURRENCYFMTW), LPWSTR,
650 	  int);
651 	int GetDateFormatA(LCID, DWORD,  CPtr!(SYSTEMTIME), LPCSTR, LPSTR, int);
652 	int GetDateFormatW(LCID, DWORD,  CPtr!(SYSTEMTIME), LPCWSTR, LPWSTR, int);
653 	int GetGeoInfoA(GEOID, GEOTYPE, LPSTR, int, LANGID);
654 	int GetGeoInfoW(GEOID, GEOTYPE, LPWSTR, int, LANGID);
655 	int GetLocaleInfoA(LCID, LCTYPE, LPSTR, int);
656 	int GetLocaleInfoW(LCID, LCTYPE, LPWSTR, int);
657 	BOOL GetNLSVersion(NLS_FUNCTION, LCID, LPNLSVERSIONINFO);
658 	int GetNumberFormatA(LCID, DWORD, LPCSTR,  CPtr!(NUMBERFMTA), LPSTR, int);
659 	int GetNumberFormatW(LCID, DWORD, LPCWSTR,  CPtr!(NUMBERFMTW), LPWSTR, int);
660 	UINT GetOEMCP();
661 	BOOL GetStringTypeA(LCID, DWORD, LPCSTR, int, LPWORD);
662 	BOOL GetStringTypeW(DWORD, LPCWSTR, int, LPWORD);
663 	BOOL GetStringTypeExA(LCID, DWORD, LPCSTR, int, LPWORD);
664 	BOOL GetStringTypeExW(LCID, DWORD, LPCWSTR, int, LPWORD);
665 	LANGID GetSystemDefaultLangID();
666 	LCID GetSystemDefaultLCID();
667 	LCID GetThreadLocale();
668 	int GetTimeFormatA(LCID, DWORD,  CPtr!(SYSTEMTIME), LPCSTR, LPSTR, int);
669 	int GetTimeFormatW(LCID, DWORD,  CPtr!(SYSTEMTIME), LPCWSTR, LPWSTR, int);
670 	LANGID GetUserDefaultLangID();
671 	LCID GetUserDefaultLCID();
672 	GEOID GetUserGeoID(GEOCLASS);
673 	BOOL IsDBCSLeadByte(BYTE);
674 	BOOL IsDBCSLeadByteEx(UINT, BYTE);
675 	BOOL IsNLSDefinedString(NLS_FUNCTION, DWORD, LPNLSVERSIONINFO, LPCWSTR,
676 	  int);
677 	BOOL IsValidCodePage(UINT);
678 	BOOL IsValidLocale(LCID, DWORD);
679 	int LCMapStringA(LCID, DWORD, LPCSTR, int, LPSTR, int);
680 	int LCMapStringW(LCID, DWORD, LPCWSTR, int, LPWSTR, int);
681 	int MultiByteToWideChar(UINT, DWORD, LPCSTR, int, LPWSTR, int);
682 	int SetCalendarInfoA(LCID, CALID, CALTYPE, LPCSTR);
683 	int SetCalendarInfoW(LCID, CALID, CALTYPE, LPCWSTR);
684 	BOOL SetLocaleInfoA(LCID, LCTYPE, LPCSTR);
685 	BOOL SetLocaleInfoW(LCID, LCTYPE, LPCWSTR);
686 	BOOL SetThreadLocale(LCID);
687 	BOOL SetUserGeoID(GEOID);
688 	int WideCharToMultiByte(UINT, DWORD, LPCWSTR, int, LPSTR, int, LPCSTR,
689 	  LPBOOL);
690 
691 	static if (WINVER >= 0x410) {
692 		BOOL EnumCalendarInfoExA(CALINFO_ENUMPROCEXA, LCID, CALID, CALTYPE);
693 		BOOL EnumCalendarInfoExW(CALINFO_ENUMPROCEXW, LCID, CALID, CALTYPE);
694 		BOOL EnumDateFormatsExA(DATEFMT_ENUMPROCEXA, LCID, DWORD);
695 		BOOL EnumDateFormatsExW(DATEFMT_ENUMPROCEXW, LCID, DWORD);
696 		BOOL IsValidLanguageGroup(LGRPID, DWORD);
697 	}
698 
699 	static if (WINVER >= 0x500) {
700 		LANGID GetSystemDefaultUILanguage();
701 		LANGID GetUserDefaultUILanguage();
702 
703 		static if (_WIN32_WINNT_ONLY) {
704 			BOOL EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA, DWORD,
705 			  LONG_PTR);
706 			BOOL EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW, DWORD,
707 			  LONG_PTR);
708 			BOOL EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA, LGRPID,
709 			  DWORD, LONG_PTR);
710 			BOOL EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW, LGRPID,
711 			  DWORD, LONG_PTR);
712 			BOOL EnumUILanguagesA(UILANGUAGE_ENUMPROCA, DWORD, LONG_PTR);
713 			BOOL EnumUILanguagesW(UILANGUAGE_ENUMPROCW, DWORD, LONG_PTR);
714 		}
715 	}
716 }
717 
718 version (Unicode) {
719 	alias CALINFO_ENUMPROCW CALINFO_ENUMPROC;
720 	alias CALINFO_ENUMPROCEXW CALINFO_ENUMPROCEX;
721 	alias LOCALE_ENUMPROCW LOCALE_ENUMPROC;
722 	alias CODEPAGE_ENUMPROCW CODEPAGE_ENUMPROC;
723 	alias DATEFMT_ENUMPROCW DATEFMT_ENUMPROC;
724 	alias DATEFMT_ENUMPROCEXW DATEFMT_ENUMPROCEX;
725 	alias TIMEFMT_ENUMPROCW TIMEFMT_ENUMPROC;
726 	alias LANGUAGEGROUP_ENUMPROCW LANGUAGEGROUP_ENUMPROC;
727 	alias LANGGROUPLOCALE_ENUMPROCW LANGGROUPLOCALE_ENUMPROC;
728 	alias UILANGUAGE_ENUMPROCW UILANGUAGE_ENUMPROC;
729 	alias CPINFOEXW CPINFOEX;
730 	alias LPCPINFOEXW LPCPINFOEX;
731 	alias CURRENCYFMTW CURRENCYFMT;
732 	alias LPCURRENCYFMTW LPCURRENCYFMT;
733 	alias NUMBERFMTW NUMBERFMT;
734 	alias LPNUMBERFMTW LPNUMBERFMT;
735 	alias CompareStringW CompareString;
736 	alias EnumCalendarInfoW EnumCalendarInfo;
737 	alias EnumSystemCodePagesW EnumSystemCodePages;
738 	alias EnumSystemLocalesW EnumSystemLocales;
739 	alias EnumTimeFormatsW EnumTimeFormats;
740 	alias FoldStringW FoldString;
741 	alias GetCalendarInfoW GetCalendarInfo;
742 	alias GetCPInfoExW GetCPInfoEx;
743 	alias GetCurrencyFormatW GetCurrencyFormat;
744 	alias GetDateFormatW GetDateFormat;
745 	alias GetGeoInfoW GetGeoInfo;
746 	alias GetLocaleInfoW GetLocaleInfo;
747 	alias GetNumberFormatW GetNumberFormat;
748 	alias GetStringTypeExW GetStringTypeEx;
749 	alias GetTimeFormatW GetTimeFormat;
750 	alias LCMapStringW LCMapString;
751 	alias SetCalendarInfoW SetCalendarInfo;
752 	alias SetLocaleInfoW SetLocaleInfo;
753 
754 	static if (WINVER >= 0x410) {
755 		alias EnumCalendarInfoExW EnumCalendarInfoEx;
756 		alias EnumDateFormatsExW EnumDateFormatsEx;
757 	}
758 
759 	static if (_WIN32_WINNT_ONLY && WINVER >= 0x500) {
760 		alias EnumSystemLanguageGroupsW EnumSystemLanguageGroups;
761 		alias EnumLanguageGroupLocalesW EnumLanguageGroupLocales;
762 		alias EnumUILanguagesW EnumUILanguages;
763 	}
764 
765 } else {
766 	alias CALINFO_ENUMPROCA CALINFO_ENUMPROC;
767 	alias CALINFO_ENUMPROCEXA CALINFO_ENUMPROCEX;
768 	alias LOCALE_ENUMPROCA LOCALE_ENUMPROC;
769 	alias CODEPAGE_ENUMPROCA CODEPAGE_ENUMPROC;
770 	alias DATEFMT_ENUMPROCA DATEFMT_ENUMPROC;
771 	alias DATEFMT_ENUMPROCEXA DATEFMT_ENUMPROCEX;
772 	alias TIMEFMT_ENUMPROCA TIMEFMT_ENUMPROC;
773 	alias LANGUAGEGROUP_ENUMPROCA LANGUAGEGROUP_ENUMPROC;
774 	alias LANGGROUPLOCALE_ENUMPROCA LANGGROUPLOCALE_ENUMPROC;
775 	alias UILANGUAGE_ENUMPROCA UILANGUAGE_ENUMPROC;
776 	alias CPINFOEXA CPINFOEX;
777 	alias LPCPINFOEXA LPCPINFOEX;
778 	alias CURRENCYFMTA CURRENCYFMT;
779 	alias LPCURRENCYFMTA LPCURRENCYFMT;
780 	alias NUMBERFMTA NUMBERFMT;
781 	alias LPNUMBERFMTA LPNUMBERFMT;
782 	alias CompareStringA CompareString;
783 	alias EnumCalendarInfoA EnumCalendarInfo;
784 	alias EnumSystemCodePagesA EnumSystemCodePages;
785 	alias EnumSystemLocalesA EnumSystemLocales;
786 	alias EnumTimeFormatsA EnumTimeFormats;
787 	alias FoldStringA FoldString;
788 	alias GetCalendarInfoA GetCalendarInfo;
789 	alias GetCPInfoExA GetCPInfoEx;
790 	alias GetCurrencyFormatA GetCurrencyFormat;
791 	alias GetDateFormatA GetDateFormat;
792 	alias GetGeoInfoA GetGeoInfo;
793 	alias GetLocaleInfoA GetLocaleInfo;
794 	alias GetNumberFormatA GetNumberFormat;
795 	alias GetStringTypeExA GetStringTypeEx;
796 	alias GetTimeFormatA GetTimeFormat;
797 	alias LCMapStringA LCMapString;
798 	alias SetCalendarInfoA SetCalendarInfo;
799 	alias SetLocaleInfoA SetLocaleInfo;
800 
801 	static if (WINVER >= 0x410) {
802 		alias EnumCalendarInfoExA EnumCalendarInfoEx;
803 		alias EnumDateFormatsExA EnumDateFormatsEx;
804 	}
805 
806 	static if (_WIN32_WINNT_ONLY && WINVER >= 0x500) {
807 		alias EnumSystemLanguageGroupsA EnumSystemLanguageGroups;
808 		alias EnumLanguageGroupLocalesA EnumLanguageGroupLocales;
809 		alias EnumUILanguagesA EnumUILanguages;
810 	}
811 }