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