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