4 * Windows National Language Support API definitions.
8 * Written by Anders Norlander <anorland@hem2.passagen.se>
9 * Copyright (C) 1998-2000, 2002-2004, 2006, 2009, 2019, MinGW.org Project.
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
19 * The above copyright notice and this permission notice (including the next
20 * paragraph) shall be included in all copies or substantial portions of the
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 * DEALINGS IN THE SOFTWARE.
33 #pragma GCC system_header
40 /* Locale Specifications
41 * ---------------------
42 * Locale identifiers; documentation reference links may be found at:
43 * https://docs.microsoft.com/en-gb/windows/desktop/Intl/locale-information-constants
45 #define LOCALE_USER_DEFAULT 0x0400
46 #define LOCALE_SYSTEM_DEFAULT 0x0800
48 #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
49 /* The invariant system locale was added in Windows-XP.
51 #define LOCALE_INVARIANT 0x007F
53 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
54 /* Support for custom locales was added in Windows-Vista.
56 #define LOCALE_CUSTOM_DEFAULT 0x0C00
57 #define LOCALE_CUSTOM_UI_DEFAULT 0x1400
58 #define LOCALE_CUSTOM_UNSPECIFIED 0x1000
60 #endif /* Vista (and later) custom locale identifiers */
61 #endif /* WinXP (and later) custom locale identifiers */
63 /* Locale identifier reference classification flags; for documentation see:
64 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-enumsystemlocalesa
65 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-isvalidlocale
67 #define LCID_INSTALLED 1
68 #define LCID_SUPPORTED 2
69 #define LCID_ALTERNATE_SORTS 4
71 /* Locale information constants; (inadequately) documented at:
72 * https://docs.microsoft.com/en-gb/windows/desktop/Intl/locale-information-constants
74 * Qualifier flags, which may be used in combination with any one of the
75 * otherwise mutually exclusive locale property identification codes.
77 #if WINVER >= _WIN32_WINNT_NT4
78 /* The first of these wasn't available prior to WinNT4. WINVER equivalence
79 * suggests that this would also apply for Windows-95, but the documentation
80 * states otherwise; this may not be supported prior to Windows-98.
82 #define LOCALE_RETURN_NUMBER 0x20000000
84 /* The remaining pair appear to have been universally available.
86 #define LOCALE_USE_CP_ACP 0x40000000
87 #define LOCALE_NOUSEROVERRIDE 0x80000000
89 /* The locale property identification codes themselves. These are each
90 * mutually exclusive of the others; while each one may be used with any
91 * combination of the preceding qualifier flags, no combination of these
92 * individually distinct property identification codes is permitted.
94 #define LOCALE_ILANGUAGE 1
95 #define LOCALE_SLANGUAGE 2
96 #define LOCALE_SABBREVLANGNAME 3
97 #define LOCALE_SNATIVELANGNAME 4
98 #define LOCALE_ICOUNTRY 5
99 #define LOCALE_SCOUNTRY 6
100 #define LOCALE_SABBREVCTRYNAME 7
101 #define LOCALE_SNATIVECTRYNAME 8
102 #define LOCALE_IDEFAULTLANGUAGE 9
103 #define LOCALE_IDEFAULTCOUNTRY 10
104 #define LOCALE_IDEFAULTCODEPAGE 11
105 #define LOCALE_SLIST 12
106 #define LOCALE_IMEASURE 13
107 #define LOCALE_SDECIMAL 14
108 #define LOCALE_STHOUSAND 15
109 #define LOCALE_SGROUPING 16
110 #define LOCALE_IDIGITS 17
111 #define LOCALE_ILZERO 18
112 #define LOCALE_SNATIVEDIGITS 19
113 #define LOCALE_SCURRENCY 20
114 #define LOCALE_SINTLSYMBOL 21
115 #define LOCALE_SMONDECIMALSEP 22
116 #define LOCALE_SMONTHOUSANDSEP 23
117 #define LOCALE_SMONGROUPING 24
118 #define LOCALE_ICURRDIGITS 25
119 #define LOCALE_IINTLCURRDIGITS 26
120 #define LOCALE_ICURRENCY 27
121 #define LOCALE_INEGCURR 28
122 #define LOCALE_SDATE 29
123 #define LOCALE_STIME 30
124 #define LOCALE_SSHORTDATE 31
125 #define LOCALE_SLONGDATE 32
126 #define LOCALE_IDATE 33
127 #define LOCALE_ILDATE 34
128 #define LOCALE_ITIME 35
129 #define LOCALE_ICENTURY 36
130 #define LOCALE_ITLZERO 37
131 #define LOCALE_IDAYLZERO 38
132 #define LOCALE_IMONLZERO 39
133 #define LOCALE_S1159 40
134 #define LOCALE_S2359 41
135 #define LOCALE_SDAYNAME1 42
136 #define LOCALE_SDAYNAME2 43
137 #define LOCALE_SDAYNAME3 44
138 #define LOCALE_SDAYNAME4 45
139 #define LOCALE_SDAYNAME5 46
140 #define LOCALE_SDAYNAME6 47
141 #define LOCALE_SDAYNAME7 48
142 #define LOCALE_SABBREVDAYNAME1 49
143 #define LOCALE_SABBREVDAYNAME2 50
144 #define LOCALE_SABBREVDAYNAME3 51
145 #define LOCALE_SABBREVDAYNAME4 52
146 #define LOCALE_SABBREVDAYNAME5 53
147 #define LOCALE_SABBREVDAYNAME6 54
148 #define LOCALE_SABBREVDAYNAME7 55
149 #define LOCALE_SMONTHNAME1 56
150 #define LOCALE_SMONTHNAME2 57
151 #define LOCALE_SMONTHNAME3 58
152 #define LOCALE_SMONTHNAME4 59
153 #define LOCALE_SMONTHNAME5 60
154 #define LOCALE_SMONTHNAME6 61
155 #define LOCALE_SMONTHNAME7 62
156 #define LOCALE_SMONTHNAME8 63
157 #define LOCALE_SMONTHNAME9 64
158 #define LOCALE_SMONTHNAME10 65
159 #define LOCALE_SMONTHNAME11 66
160 #define LOCALE_SMONTHNAME12 67
161 #define LOCALE_SABBREVMONTHNAME1 68
162 #define LOCALE_SABBREVMONTHNAME2 69
163 #define LOCALE_SABBREVMONTHNAME3 70
164 #define LOCALE_SABBREVMONTHNAME4 71
165 #define LOCALE_SABBREVMONTHNAME5 72
166 #define LOCALE_SABBREVMONTHNAME6 73
167 #define LOCALE_SABBREVMONTHNAME7 74
168 #define LOCALE_SABBREVMONTHNAME8 75
169 #define LOCALE_SABBREVMONTHNAME9 76
170 #define LOCALE_SABBREVMONTHNAME10 77
171 #define LOCALE_SABBREVMONTHNAME11 78
172 #define LOCALE_SABBREVMONTHNAME12 79
173 #define LOCALE_SPOSITIVESIGN 80
174 #define LOCALE_SNEGATIVESIGN 81
175 #define LOCALE_IPOSSIGNPOSN 82
176 #define LOCALE_INEGSIGNPOSN 83
177 #define LOCALE_IPOSSYMPRECEDES 84
178 #define LOCALE_IPOSSEPBYSPACE 85
179 #define LOCALE_INEGSYMPRECEDES 86
180 #define LOCALE_INEGSEPBYSPACE 87
181 #define LOCALE_FONTSIGNATURE 88
182 #define LOCALE_SISO639LANGNAME 89
183 #define LOCALE_SISO3166CTRYNAME 90
184 #define LOCALE_IGEOID 91
186 #define LOCALE_SENGLANGUAGE 0x1001
187 #define LOCALE_SENGCOUNTRY 0x1002
188 #define LOCALE_STIMEFORMAT 0x1003
189 #define LOCALE_IDEFAULTANSICODEPAGE 0x1004
190 #define LOCALE_ITIMEMARKPOSN 0x1005
191 #define LOCALE_ICALENDARTYPE 0x1009
192 #define LOCALE_IOPTIONALCALENDAR 0x100B
193 #define LOCALE_IFIRSTDAYOFWEEK 0x100C
194 #define LOCALE_IFIRSTWEEKOFYEAR 0x100D
195 #define LOCALE_SMONTHNAME13 0x100E
196 #define LOCALE_SABBREVMONTHNAME13 0x100F
197 #define LOCALE_INEGNUMBER 0x1010
199 #if WINVER >= _WIN32_WINDOWS_98
200 /* The following locale property identifiers were introduced for Windows-98,
201 * and are thus implicitly supported on WinNT platforms from Win2K onwards.
203 #define LOCALE_SYEARMONTH 0x1006
204 #define LOCALE_SENGCURRNAME 0x1007
205 #define LOCALE_SNATIVECURRNAME 0x1008
206 #define LOCALE_SSORTNAME 0x1013
208 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
209 /* The following locale identification codes were not supported, prior to
210 * Win2K, and thus are unavailable on any Win9X platform.
212 #define LOCALE_IPAPERSIZE 0x100A
213 #define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012
214 #define LOCALE_IDIGITSUBSTITUTION 0x1014
216 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
217 /* Introduced with Win-Vista, Microsoft don't document values for these;
218 * I have deduced them by inspection of GetLocaleInfoA() return values for
219 * every possible property identifier in the range 0..0x1FFFFFFF, ignoring
220 * those which return an error condition code.
222 #define LOCALE_SNAME 92
223 #define LOCALE_SDURATION 93
224 #define LOCALE_SKEYBOARDSTOINSTALL 94
226 #define LOCALE_SSHORTESTDAYNAME1 96
227 #define LOCALE_SSHORTESTDAYNAME2 97
228 #define LOCALE_SSHORTESTDAYNAME3 98
229 #define LOCALE_SSHORTESTDAYNAME4 99
230 #define LOCALE_SSHORTESTDAYNAME5 100
231 #define LOCALE_SSHORTESTDAYNAME6 101
232 #define LOCALE_SSHORTESTDAYNAME7 102
234 #define LOCALE_SISO639LANGNAME2 103
235 #define LOCALE_SISO3166CTRYNAME2 104
237 #define LOCALE_SNAN 105
238 #define LOCALE_SPOSINFINITY 106
239 #define LOCALE_SNEGINFINITY 107
240 #define LOCALE_SSCRIPTS 108
243 /* FIXME: Originally identified by Dimitri Papadopolous, as a Vista addition,
244 * but with unknown value, (and I see nothing in WinXP GetLocaleInfo() output,
245 * corresponding to ANY possible locale data identifier, which even remotely
246 * resembles an IETF language name); Microsoft now document this identifier
247 * as "deprecated in Vista and later", (which seems kind of contradictory).
248 * Does this serve any useful purpose? Did it ever? Maybe define it as an
249 * alias for LOCALE_SNAME, (which, as I've deduced its value, does seem to
250 * represent an IETF name, on my Win7 host)? Or, just drop it altogether?
252 #define LOCALE_SIETFLANGUAGE ???
255 #endif /* Vista (and later) only */
256 #endif /* Win2K (and later) only */
257 #endif /* Win98/Win2K and later */
260 /* Country identification codes.
262 #define CTRY_DEFAULT 0
263 #define CTRY_ALBANIA 355
264 #define CTRY_ALGERIA 213
265 #define CTRY_ARGENTINA 54
266 #define CTRY_ARMENIA 374
267 #define CTRY_AUSTRALIA 61
268 #define CTRY_AUSTRIA 43
269 #define CTRY_AZERBAIJAN 994
270 #define CTRY_BAHRAIN 973
271 #define CTRY_BELARUS 375
272 #define CTRY_BELGIUM 32
273 #define CTRY_BELIZE 501
274 #define CTRY_BOLIVIA 591
275 #define CTRY_BRAZIL 55
276 #define CTRY_BRUNEI_DARUSSALAM 673
277 #define CTRY_BULGARIA 359
278 #define CTRY_CANADA 2
279 #define CTRY_CARIBBEAN 1
280 #define CTRY_CHILE 56
281 #define CTRY_COLOMBIA 57
282 #define CTRY_COSTA_RICA 506
283 #define CTRY_CROATIA 385
284 #define CTRY_CZECH 420
285 #define CTRY_DENMARK 45
286 #define CTRY_DOMINICAN_REPUBLIC 1
287 #define CTRY_ECUADOR 593
288 #define CTRY_EGYPT 20
289 #define CTRY_EL_SALVADOR 503
290 #define CTRY_ESTONIA 372
291 #define CTRY_FAEROE_ISLANDS 298
292 #define CTRY_FINLAND 358
293 #define CTRY_FRANCE 33
294 #define CTRY_GEORGIA 995
295 #define CTRY_GERMANY 49
296 #define CTRY_GREECE 30
297 #define CTRY_GUATEMALA 502
298 #define CTRY_HONDURAS 504
299 #define CTRY_HONG_KONG 852
300 #define CTRY_HUNGARY 36
301 #define CTRY_ICELAND 354
302 #define CTRY_INDIA 91
303 #define CTRY_INDONESIA 62
304 #define CTRY_IRAN 981
305 #define CTRY_IRAQ 964
306 #define CTRY_IRELAND 353
307 #define CTRY_ISRAEL 972
308 #define CTRY_ITALY 39
309 #define CTRY_JAMAICA 1
310 #define CTRY_JAPAN 81
311 #define CTRY_JORDAN 962
312 #define CTRY_KAZAKSTAN 7
313 #define CTRY_KENYA 254
314 #define CTRY_KUWAIT 965
315 #define CTRY_KYRGYZSTAN 996
316 #define CTRY_LATVIA 371
317 #define CTRY_LEBANON 961
318 #define CTRY_LIBYA 218
319 #define CTRY_LIECHTENSTEIN 41
320 #define CTRY_LITHUANIA 370
321 #define CTRY_LUXEMBOURG 352
322 #define CTRY_MACAU 853
323 #define CTRY_MACEDONIA 389
324 #define CTRY_MALAYSIA 60
325 #define CTRY_MALDIVES 960
326 #define CTRY_MEXICO 52
327 #define CTRY_MONACO 33
328 #define CTRY_MONGOLIA 976
329 #define CTRY_MOROCCO 212
330 #define CTRY_NETHERLANDS 31
331 #define CTRY_NEW_ZEALAND 64
332 #define CTRY_NICARAGUA 505
333 #define CTRY_NORWAY 47
334 #define CTRY_OMAN 968
335 #define CTRY_PAKISTAN 92
336 #define CTRY_PANAMA 507
337 #define CTRY_PARAGUAY 595
339 #define CTRY_PHILIPPINES 63
340 #define CTRY_POLAND 48
341 #define CTRY_PORTUGAL 351
342 #define CTRY_PRCHINA 86
343 #define CTRY_PUERTO_RICO 1
344 #define CTRY_QATAR 974
345 #define CTRY_ROMANIA 40
346 #define CTRY_RUSSIA 7
347 #define CTRY_SAUDI_ARABIA 966
348 #define CTRY_SERBIA 381
349 #define CTRY_SINGAPORE 65
350 #define CTRY_SLOVAK 421
351 #define CTRY_SLOVENIA 386
352 #define CTRY_SOUTH_AFRICA 27
353 #define CTRY_SOUTH_KOREA 82
354 #define CTRY_SPAIN 34
355 #define CTRY_SWEDEN 46
356 #define CTRY_SWITZERLAND 41
357 #define CTRY_SYRIA 963
358 #define CTRY_TAIWAN 886
359 #define CTRY_TATARSTAN 7
360 #define CTRY_THAILAND 66
361 #define CTRY_TRINIDAD_Y_TOBAGO 1
362 #define CTRY_TUNISIA 216
363 #define CTRY_TURKEY 90
365 #define CTRY_UKRAINE 380
366 #define CTRY_UNITED_KINGDOM 44
367 #define CTRY_UNITED_STATES 1
368 #define CTRY_URUGUAY 598
369 #define CTRY_UZBEKISTAN 7
370 #define CTRY_VENEZUELA 58
371 #define CTRY_VIET_NAM 84
372 #define CTRY_YEMEN 967
373 #define CTRY_ZIMBABWE 263
376 /* Language group enumeration options; for documentation see:
377 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-enumsystemlanguagegroupsa
379 #define LGRPID_INSTALLED 1
380 #define LGRPID_SUPPORTED 2
382 /* Language group identification codes; for documentation see:
383 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-enumlanguagegrouplocalesa
384 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-isvalidlanguagegroup
386 #define LGRPID_WESTERN_EUROPE 1
387 #define LGRPID_CENTRAL_EUROPE 2
388 #define LGRPID_BALTIC 3
389 #define LGRPID_GREEK 4
390 #define LGRPID_CYRILLIC 5
391 #define LGRPID_TURKISH 6
392 #define LGRPID_JAPANESE 7
393 #define LGRPID_KOREAN 8
394 #define LGRPID_TRADITIONAL_CHINESE 9
395 #define LGRPID_SIMPLIFIED_CHINESE 10
396 #define LGRPID_THAI 11
397 #define LGRPID_HEBREW 12
398 #define LGRPID_ARABIC 13
399 #define LGRPID_VIETNAMESE 14
400 #define LGRPID_INDIC 15
401 #define LGRPID_GEORGIAN 16
402 #define LGRPID_ARMENIAN 17
405 /* String Handling API
406 * -------------------
407 * Code page enumeration options; see:
408 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-enumsystemcodepagesw
410 #define CP_INSTALLED 1
411 #define CP_SUPPORTED 2
413 /* Generic code page selectors for MBCS to/from UTF-16LE transformation:
414 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-multibytetowidechar
415 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-widechartomultibyte
420 #define CP_THREAD_ACP 3
422 #define CP_UTF7 65000
423 #define CP_UTF8 65001
425 /* Options for MBCS to UTF-16LE transformations; see:
426 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-multibytetowidechar
428 #define MB_PRECOMPOSED 0x001
429 #define MB_COMPOSITE 0x002
430 #define MB_USEGLYPHCHARS 0x004
431 #define MB_ERR_INVALID_CHARS 0x008
433 /* Options for UTF-16LE to MBCS transformations; see:
435 #define WC_DISCARDNS 0x010
436 #define WC_SEPCHARS 0x020
437 #define WC_DEFAULTCHAR 0x040
438 #define WC_COMPOSITECHECK 0x200
440 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
441 /* The following is not supported on Win9x, nor on WinNT prior to Win-2000.
443 #define WC_NO_BEST_FIT_CHARS 0x400
445 #endif /* Windows-2000 and later */
447 /* Character type classification operations; see:
448 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-getstringtypew
454 /* CT_CTYPE1 classification (approximately equivalent to ISO-C ctype);
455 * for each character in the string, returns any bit-wise combination of
456 * the following attributes:
458 #define C1_UPPER 0x0001
459 #define C1_LOWER 0x0002
460 #define C1_DIGIT 0x0004
461 #define C1_SPACE 0x0008
462 #define C1_PUNCT 0x0010
463 #define C1_CNTRL 0x0020
464 #define C1_BLANK 0x0040
465 #define C1_XDIGIT 0x0080
466 #define C1_ALPHA 0x0100
467 #define C1_DEFINED 0x0200
469 /* CT_CTYPE2 classification; for each character in the string, returns
470 * one of the following mutually exclusive Unicode bidirectional layout
473 #define C2_NOTAPPLICABLE 0
474 #define C2_LEFTTORIGHT 1
475 #define C2_RIGHTTOLEFT 2
476 #define C2_EUROPENUMBER 3
477 #define C2_EUROPESEPARATOR 4
478 #define C2_EUROPETERMINATOR 5
479 #define C2_ARABICNUMBER 6
480 #define C2_COMMONSEPARATOR 7
481 #define C2_BLOCKSEPARATOR 8
482 #define C2_SEGMENTSEPARATOR 9
483 #define C2_WHITESPACE 10
484 #define C2_OTHERNEUTRAL 11
486 /* CT_CTYPE3 classification; for each character in the string, returns
487 * a bit-wise combination of any of the following attributes:
489 #define C3_NOTAPPLICABLE 0x0000
490 #define C3_NONSPACING 0x0001
491 #define C3_DIACRITIC 0x0002
492 #define C3_VOWELMARK 0x0004
493 #define C3_SYMBOL 0x0008
494 #define C3_KATAKANA 0x0010
495 #define C3_HIRAGANA 0x0020
496 #define C3_HALFWIDTH 0x0040
497 #define C3_FULLWIDTH 0x0080
498 #define C3_IDEOGRAPH 0x0100
499 #define C3_KASHIDA 0x0200
500 #define C3_LEXICAL 0x0400
501 #define C3_ALPHA 0x8000
503 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
505 #define C3_HIGHSURROGATE 0x0800
506 #define C3_LOWSURROGATE 0x1000
508 #endif /* Windows-Vista and later */
510 /* String sorting and transformation option flags; see:
511 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-lcmapstringex
513 #define LCMAP_LOWERCASE 0x00000100
514 #define LCMAP_UPPERCASE 0x00000200
515 #define LCMAP_SORTKEY 0x00000400
516 #define LCMAP_BYTEREV 0x00000800
517 #define LCMAP_HIRAGANA 0x00100000
518 #define LCMAP_KATAKANA 0x00200000
519 #define LCMAP_HALFWIDTH 0x00400000
520 #define LCMAP_FULLWIDTH 0x00800000
521 #define LCMAP_LINGUISTIC_CASING 0x01000000
522 #define LCMAP_SIMPLIFIED_CHINESE 0x02000000
523 #define LCMAP_TRADITIONAL_CHINESE 0x04000000
525 /* Additional Unicode string transformation options; see:
526 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-foldstringw
528 #define MAP_FOLDCZONE 0x00000010
529 #define MAP_PRECOMPOSED 0x00000020
530 #define MAP_COMPOSITE 0x00000040
531 #define MAP_FOLDDIGITS 0x00000080
533 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
534 /* This additional FoldString() transformation option was not supported,
535 * prior to Windows-2000.
537 #define MAP_EXPAND_LIGATURES 0x00002000
539 #endif /* Windows-2000 and later */
541 /* Normalization options for string comparison, sorting, and transformation:
542 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-comparestringex
543 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-lcmapstringex
545 #define NORM_IGNORECASE 0x00000001
546 #define NORM_IGNORENONSPACE 0x00000002
547 #define NORM_IGNORESYMBOLS 0x00000004
548 #define NORM_IGNOREKANATYPE 0x00010000
549 #define NORM_IGNOREWIDTH 0x00020000
551 /* String sorting options; see:
552 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-comparestringex
553 * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-lcmapstringex
555 #define SORT_STRINGSORT 0x00001000
557 /* String comparator return values; (note intentional difference from ISO-C):
558 * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-comparestringex
560 #define CSTR_LESS_THAN 1
562 #define CSTR_GREATER_THAN 3
564 /* Macros for UTF-16LE surrogate identification.
566 #define IS_HIGH_SURROGATE(c) (((c) & 0xFC00) == 0xD800)
567 #define IS_LOW_SURROGATE(c) (((c) & 0xFC00) == 0xDC00)
568 #define IS_SURROGATE_PAIR(hc,lc) (IS_HIGH_SURROGATE(hc) && IS_LOW_SURROGATE(lc))
571 /* Date and Time Handling API
572 * --------------------------
573 * Calendar identification codes; these are documented at:
574 * https://docs.microsoft.com/en-gb/windows/desktop/Intl/calendar-identifiers
576 #define CAL_GREGORIAN 1
577 #define CAL_GREGORIAN_US 2
584 #define CAL_GREGORIAN_ME_FRENCH 9
585 #define CAL_GREGORIAN_ARABIC 10
586 #define CAL_GREGORIAN_XLIT_ENGLISH 11
587 #define CAL_GREGORIAN_XLIT_FRENCH 12
589 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
590 /* Introduced for Windows-Vista and later; values in the interval 13..22 are
591 * reserved by Microsoft, and are unallocated.
593 #define CAL_UMALQURA 23
596 #define ENUM_ALL_CALENDARS (-1)
598 /* Calendar property identifiation codes; (inadequately) documented at:
599 * https://docs.microsoft.com/en-gb/windows/desktop/Intl/calendar-type-information
601 #if WINVER >= _WIN32_WINDOWS_98
602 /* Analagous to, and sharing values with, their corresponding locale property
603 * qualifying flags, these calendar property qualifying flags were unsupported
604 * prior to Windows-98, (and correpondingly, Windows-2000 for WinNT platforms).
606 #define CAL_RETURN_NUMBER 0x20000000
607 #define CAL_USE_CP_ACP 0x40000000
608 #define CAL_NOUSEROVERRIDE 0x80000000
611 /* The calendar property identification codes themselves. Each one is
612 * mutually exclusive of the others; while each one may be used with any
613 * combination of the preceding qualifier flags, no combination of these
614 * individually distinct property identification codes is permitted.
616 #define CAL_ICALINTVALUE 1
617 #define CAL_SCALNAME 2
618 #define CAL_IYEAROFFSETRANGE 3
619 #define CAL_SERASTRING 4
620 #define CAL_SSHORTDATE 5
621 #define CAL_SLONGDATE 6
622 #define CAL_SDAYNAME1 7
623 #define CAL_SDAYNAME2 8
624 #define CAL_SDAYNAME3 9
625 #define CAL_SDAYNAME4 10
626 #define CAL_SDAYNAME5 11
627 #define CAL_SDAYNAME6 12
628 #define CAL_SDAYNAME7 13
629 #define CAL_SABBREVDAYNAME1 14
630 #define CAL_SABBREVDAYNAME2 15
631 #define CAL_SABBREVDAYNAME3 16
632 #define CAL_SABBREVDAYNAME4 17
633 #define CAL_SABBREVDAYNAME5 18
634 #define CAL_SABBREVDAYNAME6 19
635 #define CAL_SABBREVDAYNAME7 20
636 #define CAL_SMONTHNAME1 21
637 #define CAL_SMONTHNAME2 22
638 #define CAL_SMONTHNAME3 23
639 #define CAL_SMONTHNAME4 24
640 #define CAL_SMONTHNAME5 25
641 #define CAL_SMONTHNAME6 26
642 #define CAL_SMONTHNAME7 27
643 #define CAL_SMONTHNAME8 28
644 #define CAL_SMONTHNAME9 29
645 #define CAL_SMONTHNAME10 30
646 #define CAL_SMONTHNAME11 31
647 #define CAL_SMONTHNAME12 32
648 #define CAL_SMONTHNAME13 33
649 #define CAL_SABBREVMONTHNAME1 34
650 #define CAL_SABBREVMONTHNAME2 35
651 #define CAL_SABBREVMONTHNAME3 36
652 #define CAL_SABBREVMONTHNAME4 37
653 #define CAL_SABBREVMONTHNAME5 38
654 #define CAL_SABBREVMONTHNAME6 39
655 #define CAL_SABBREVMONTHNAME7 40
656 #define CAL_SABBREVMONTHNAME8 41
657 #define CAL_SABBREVMONTHNAME9 42
658 #define CAL_SABBREVMONTHNAME10 43
659 #define CAL_SABBREVMONTHNAME11 44
660 #define CAL_SABBREVMONTHNAME12 45
661 #define CAL_SABBREVMONTHNAME13 46
663 #if WINVER >= _WIN32_WINDOWS_98
664 /* The following pair of calendar properties were unsupported prior to
665 * Windows-98, (or Windows-2000, for WinNT platforms).
667 #define CAL_SYEARMONTH 47
668 #define CAL_ITWODIGITYEARMAX 48
670 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
672 #define CAL_SSHORTESTDAYNAME1 49
673 #define CAL_SSHORTESTDAYNAME2 50
674 #define CAL_SSHORTESTDAYNAME3 51
675 #define CAL_SSHORTESTDAYNAME4 52
676 #define CAL_SSHORTESTDAYNAME5 53
677 #define CAL_SSHORTESTDAYNAME6 54
678 #define CAL_SSHORTESTDAYNAME7 55
680 #if _WIN32_WINNT >= _WIN32_WINNT_WIN7
681 /* New calendar properties, supported on Windows-7 and later. Note that
682 * these may not be accessible through LCID references; e.g. when running
683 * on Windows-7 Home Premium, it appears that GetCalendarInfoA() cannot
684 * retrieve them, but GetCalendarInfoEx() can.
686 #define CAL_SMONTHDAY 56
687 #define CAL_SABBREVERASTRING 57
689 #endif /* Windows-7 and later */
690 #endif /* Windows-Vista and later */
691 #endif /* Win98 / Win2K and later */
693 /* Date format options, for use with GetDateFormat*() functions; see:
694 * https://docs.microsoft.com/en-gb/windows/desktop/api/datetimeapi/nf-datetimeapi-getdateformatex
696 #define DATE_SHORTDATE 1
697 #define DATE_LONGDATE 2
698 #define DATE_USE_ALT_CALENDAR 4
700 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
701 /* The following are not supported on Win9x, nor on WinNT prior to Win-2000.
703 #define DATE_YEARMONTH 8
704 #define DATE_LTRREADING 16
705 #define DATE_RTLREADING 32
707 #endif /* Windows-2000 and later */
709 /* Time format options, for use with GetTimeFormat*() functions; see:
710 * https://docs.microsoft.com/en-gb/windows/desktop/api/datetimeapi/nf-datetimeapi-gettimeformatex
712 #define TIME_NOMINUTESORSECONDS 1
713 #define TIME_NOSECONDS 2
714 #define TIME_NOTIMEMARKER 4
715 #define TIME_FORCE24HOURFORMAT 8
720 typedef DWORD LCTYPE;
721 typedef DWORD CALTYPE;
723 typedef DWORD LGRPID;
725 typedef DWORD GEOTYPE;
726 typedef DWORD GEOCLASS;
728 #define CALINFO_ENUMPROC __AW_SUFFIXED__( CALINFO_ENUMPROC )
729 typedef BOOL (CALLBACK *CALINFO_ENUMPROCA) (LPSTR);
730 typedef BOOL (CALLBACK *CALINFO_ENUMPROCW) (LPWSTR);
732 #define CALINFO_ENUMPROCEX __AW_SUFFIXED__( CALINFO_ENUMPROCEX )
733 typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXA) (LPSTR, CALID);
734 typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXW) (LPWSTR, CALID);
736 #define LANGUAGEGROUP_ENUMPROC __AW_SUFFIXED__( LANGUAGEGROUP_ENUMPROC )
737 typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCA) (LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR);
738 typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCW) (LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR);
740 #define LANGGROUPLOCALE_ENUMPROC __AW_SUFFIXED__( LANGGROUPLOCALE_ENUMPROC )
741 typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCA) (LGRPID, LCID, LPSTR, LONG_PTR);
742 typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCW) (LGRPID, LCID, LPWSTR, LONG_PTR);
744 #define UILANGUAGE_ENUMPROC __AW_SUFFIXED__( UILANGUAGE_ENUMPROC )
745 typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCA) (LPSTR, LONG_PTR);
746 typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCW) (LPWSTR, LONG_PTR);
748 #define LOCALE_ENUMPROC __AW_SUFFIXED__( LOCALE_ENUMPROC )
749 typedef BOOL (CALLBACK *LOCALE_ENUMPROCA) (LPSTR);
750 typedef BOOL (CALLBACK *LOCALE_ENUMPROCW) (LPWSTR);
752 #define CODEPAGE_ENUMPROC __AW_SUFFIXED__( CODEPAGE_ENUMPROC )
753 typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA) (LPSTR);
754 typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW) (LPWSTR);
756 #define DATEFMT_ENUMPROC __AW_SUFFIXED__( DATEFMT_ENUMPROC )
757 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCA) (LPSTR);
758 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCW) (LPWSTR);
760 #define DATEFMT_ENUMPROCEX __AW_SUFFIXED__( DATEFMT_ENUMPROCEX )
761 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXA) (LPSTR, CALID);
762 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXW) (LPWSTR, CALID);
764 #define TIMEFMT_ENUMPROC __AW_SUFFIXED__( TIMEFMT_ENUMPROC )
765 typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCA) (LPSTR);
766 typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCW) (LPWSTR);
768 typedef BOOL (CALLBACK *GEO_ENUMPROC) (GEOID);
776 { GEOCLASS_NATION = 16,
791 GEO_OFFICIALLANGUAGES
794 #define MAX_DEFAULTCHAR 2
795 #define MAX_LEADBYTES 12
797 typedef struct _cpinfo
799 BYTE DefaultChar[MAX_DEFAULTCHAR];
800 BYTE LeadByte[MAX_LEADBYTES];
803 typedef struct _cpinfoexA
805 BYTE DefaultChar[MAX_DEFAULTCHAR];
806 BYTE LeadByte[MAX_LEADBYTES];
807 WCHAR UnicodeDefaultChar;
809 CHAR CodePageName[MAX_PATH];
810 } CPINFOEXA, *LPCPINFOEXA;
812 typedef struct _cpinfoexW
814 BYTE DefaultChar[MAX_DEFAULTCHAR];
815 BYTE LeadByte[MAX_LEADBYTES];
816 WCHAR UnicodeDefaultChar;
818 WCHAR CodePageName[MAX_PATH];
819 } CPINFOEXW, *LPCPINFOEXW;
821 typedef __AW_ALIAS__( CPINFOEX ), *LPCPINFOEX;
823 typedef struct _currencyfmtA
831 LPSTR lpCurrencySymbol;
832 } CURRENCYFMTA, *LPCURRENCYFMTA;
834 typedef struct _currencyfmtW
839 LPWSTR lpThousandSep;
842 LPWSTR lpCurrencySymbol;
843 } CURRENCYFMTW, *LPCURRENCYFMTW;
845 typedef __AW_ALIAS__( CURRENCYFMT ), *LPCURRENCYFMT;
847 typedef struct nlsversioninfo
848 { DWORD dwNLSVersionInfoSize;
850 DWORD dwDefinedVersion;
851 } NLSVERSIONINFO, *LPNLSVERSIONINFO;
853 typedef struct _numberfmtA
860 } NUMBERFMTA, *LPNUMBERFMTA;
862 typedef struct _numberfmtW
867 LPWSTR lpThousandSep;
869 } NUMBERFMTW, *LPNUMBERFMTW;
871 typedef __AW_ALIAS__( NUMBERFMT ), *LPNUMBERFMT;
873 #define CompareString __AW_SUFFIXED__( CompareString )
874 WINBASEAPI WINAPI int CompareStringA (LCID, DWORD, LPCSTR, int, LPCSTR, int);
875 WINBASEAPI WINAPI int CompareStringW (LCID, DWORD, LPCWSTR, int, LPCWSTR, int);
877 WINBASEAPI WINAPI LCID ConvertDefaultLocale (LCID);
879 #define EnumCalendarInfo __AW_SUFFIXED__( EnumCalendarInfo )
880 WINBASEAPI WINAPI BOOL EnumCalendarInfoA (CALINFO_ENUMPROCA, LCID, CALID, CALTYPE);
881 WINBASEAPI WINAPI BOOL EnumCalendarInfoW (CALINFO_ENUMPROCW, LCID, CALID, CALTYPE);
883 #define EnumDateFormats __AW_SUFFIXED__( EnumDateFormats )
884 WINBASEAPI WINAPI BOOL EnumDateFormatsA (DATEFMT_ENUMPROCA, LCID, DWORD);
885 WINBASEAPI WINAPI BOOL EnumDateFormatsW (DATEFMT_ENUMPROCW, LCID, DWORD);
887 #define EnumSystemCodePages __AW_SUFFIXED__( EnumSystemCodePages )
888 WINBASEAPI WINAPI BOOL EnumSystemCodePagesA (CODEPAGE_ENUMPROCA, DWORD);
889 WINBASEAPI WINAPI BOOL EnumSystemCodePagesW (CODEPAGE_ENUMPROCW, DWORD);
891 WINBASEAPI WINAPI BOOL EnumSystemGeoID (GEOCLASS, GEOID, GEO_ENUMPROC);
893 #define EnumSystemLocales __AW_SUFFIXED__( EnumSystemLocales )
894 WINBASEAPI WINAPI BOOL EnumSystemLocalesA (LOCALE_ENUMPROCA, DWORD);
895 WINBASEAPI WINAPI BOOL EnumSystemLocalesW (LOCALE_ENUMPROCW, DWORD);
897 #define EnumTimeFormats __AW_SUFFIXED__( EnumTimeFormats )
898 WINBASEAPI WINAPI BOOL EnumTimeFormatsA (TIMEFMT_ENUMPROCA, LCID, DWORD);
899 WINBASEAPI WINAPI BOOL EnumTimeFormatsW (TIMEFMT_ENUMPROCW, LCID, DWORD);
901 #define FoldString __AW_SUFFIXED__( FoldString )
902 WINBASEAPI WINAPI int FoldStringA (DWORD, LPCSTR, int, LPSTR, int);
903 WINBASEAPI WINAPI int FoldStringW (DWORD, LPCWSTR, int, LPWSTR, int);
905 WINBASEAPI WINAPI UINT GetACP (void);
907 #define GetCalendarInfo __AW_SUFFIXED__( GetCalendarInfo )
908 WINBASEAPI WINAPI int GetCalendarInfoA (LCID, CALID, CALTYPE, LPSTR, int, LPDWORD);
909 WINBASEAPI WINAPI int GetCalendarInfoW (LCID, CALID, CALTYPE, LPWSTR, int, LPDWORD);
911 WINBASEAPI WINAPI BOOL GetCPInfo (UINT, LPCPINFO);
913 #define GetCPInfoEx __AW_SUFFIXED__( GetCPInfoEx )
914 WINBASEAPI WINAPI BOOL GetCPInfoExA (UINT, DWORD, LPCPINFOEXA);
915 WINBASEAPI WINAPI BOOL GetCPInfoExW (UINT, DWORD, LPCPINFOEXW);
917 #define GetCurrencyFormat __AW_SUFFIXED__( GetCurrencyFormat )
918 WINBASEAPI WINAPI int GetCurrencyFormatA (LCID, DWORD, LPCSTR, const CURRENCYFMTA *, LPSTR, int);
919 WINBASEAPI WINAPI int GetCurrencyFormatW (LCID, DWORD, LPCWSTR, const CURRENCYFMTW *, LPWSTR, int);
921 #define GetDateFormat __AW_SUFFIXED__( GetDateFormat )
922 WINBASEAPI WINAPI int GetDateFormatA (LCID, DWORD, const SYSTEMTIME *, LPCSTR, LPSTR, int);
923 WINBASEAPI WINAPI int GetDateFormatW (LCID, DWORD, const SYSTEMTIME *, LPCWSTR, LPWSTR, int);
925 #define GetGeoInfo __AW_SUFFIXED__( GetGeoInfo )
926 WINBASEAPI WINAPI int GetGeoInfoA (GEOID, GEOTYPE, LPSTR, int, LANGID);
927 WINBASEAPI WINAPI int GetGeoInfoW (GEOID, GEOTYPE, LPWSTR, int, LANGID);
929 #define GetLocaleInfo __AW_SUFFIXED__( GetLocaleInfo )
930 WINBASEAPI WINAPI int GetLocaleInfoA (LCID, LCTYPE, LPSTR, int);
931 WINBASEAPI WINAPI int GetLocaleInfoW (LCID, LCTYPE, LPWSTR, int);
933 WINBASEAPI WINAPI BOOL GetNLSVersion (NLS_FUNCTION, LCID, LPNLSVERSIONINFO);
935 #define GetNumberFormat __AW_SUFFIXED__( GetNumberFormat )
936 WINBASEAPI WINAPI int GetNumberFormatA (LCID, DWORD, LPCSTR, const NUMBERFMTA *, LPSTR, int);
937 WINBASEAPI WINAPI int GetNumberFormatW (LCID, DWORD, LPCWSTR, const NUMBERFMTW *, LPWSTR, int);
939 WINBASEAPI WINAPI UINT GetOEMCP (void);
941 WINBASEAPI WINAPI BOOL GetStringTypeA (LCID, DWORD, LPCSTR, int, LPWORD);
942 WINBASEAPI WINAPI BOOL GetStringTypeW (DWORD, LPCWSTR, int, LPWORD);
944 #define GetStringTypeEx __AW_SUFFIXED__( GetStringTypeEx )
945 WINBASEAPI WINAPI BOOL GetStringTypeExA (LCID, DWORD, LPCSTR, int, LPWORD);
946 WINBASEAPI WINAPI BOOL GetStringTypeExW (LCID, DWORD, LPCWSTR, int, LPWORD);
948 WINBASEAPI WINAPI LANGID GetSystemDefaultLangID (void);
949 WINBASEAPI WINAPI LCID GetSystemDefaultLCID (void);
950 WINBASEAPI WINAPI LCID GetThreadLocale (void);
952 #define GetTimeFormat __AW_SUFFIXED__( GetTimeFormat )
953 WINBASEAPI WINAPI int GetTimeFormatA (LCID, DWORD, const SYSTEMTIME *, LPCSTR, LPSTR, int);
954 WINBASEAPI WINAPI int GetTimeFormatW (LCID, DWORD, const SYSTEMTIME *, LPCWSTR, LPWSTR, int);
956 WINBASEAPI WINAPI LANGID GetUserDefaultLangID (void);
957 WINBASEAPI WINAPI LCID GetUserDefaultLCID (void);
958 WINBASEAPI WINAPI GEOID GetUserGeoID (GEOCLASS);
959 WINBASEAPI WINAPI BOOL IsDBCSLeadByte (BYTE);
960 WINBASEAPI WINAPI BOOL IsDBCSLeadByteEx (UINT, BYTE);
961 WINBASEAPI WINAPI BOOL IsNLSDefinedString (NLS_FUNCTION, DWORD, LPNLSVERSIONINFO, LPCWSTR, int);
962 WINBASEAPI WINAPI BOOL IsValidCodePage (UINT);
963 WINBASEAPI WINAPI BOOL IsValidLocale (LCID, DWORD);
965 #define LCMapString __AW_SUFFIXED__( LCMapString )
966 WINBASEAPI WINAPI int LCMapStringA (LCID, DWORD, LPCSTR, int, LPSTR, int);
967 WINBASEAPI WINAPI int LCMapStringW (LCID, DWORD, LPCWSTR, int, LPWSTR, int);
969 WINBASEAPI WINAPI int MultiByteToWideChar (UINT, DWORD, LPCSTR, int, LPWSTR, int);
971 #define SetCalendarInfo __AW_SUFFIXED__( SetCalendarInfo )
972 WINBASEAPI WINAPI int SetCalendarInfoA (LCID, CALID, CALTYPE, LPCSTR);
973 WINBASEAPI WINAPI int SetCalendarInfoW (LCID, CALID, CALTYPE, LPCWSTR);
975 #define SetLocaleInfo __AW_SUFFIXED__( SetLocaleInfo )
976 WINBASEAPI WINAPI BOOL SetLocaleInfoA (LCID, LCTYPE, LPCSTR);
977 WINBASEAPI WINAPI BOOL SetLocaleInfoW (LCID, LCTYPE, LPCWSTR);
979 WINBASEAPI WINAPI BOOL SetThreadLocale (LCID);
980 WINBASEAPI WINAPI BOOL SetUserGeoID (GEOID);
981 WINBASEAPI WINAPI int WideCharToMultiByte (UINT, DWORD, LPCWSTR, int, LPSTR, int, LPCSTR, LPBOOL);
983 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
985 #define EnumCalendarInfoEx __AW_SUFFIXED__( EnumCalendarInfoEx )
986 WINBASEAPI WINAPI BOOL EnumCalendarInfoExA (CALINFO_ENUMPROCEXA, LCID, CALID, CALTYPE);
987 WINBASEAPI WINAPI BOOL EnumCalendarInfoExW (CALINFO_ENUMPROCEXW, LCID, CALID, CALTYPE);
989 #define EnumDateFormatsEx __AW_SUFFIXED__( EnumDateFormatsEx )
990 WINBASEAPI WINAPI BOOL EnumDateFormatsExA (DATEFMT_ENUMPROCEXA, LCID, DWORD);
991 WINBASEAPI WINAPI BOOL EnumDateFormatsExW (DATEFMT_ENUMPROCEXW, LCID, DWORD);
993 #define EnumSystemLanguageGroups __AW_SUFFIXED__( EnumSystemLanguageGroups )
994 WINBASEAPI WINAPI BOOL EnumSystemLanguageGroupsA (LANGUAGEGROUP_ENUMPROCA, DWORD, LONG_PTR);
995 WINBASEAPI WINAPI BOOL EnumSystemLanguageGroupsW (LANGUAGEGROUP_ENUMPROCW, DWORD, LONG_PTR);
997 #define EnumLanguageGroupLocales __AW_SUFFIXED__( EnumLanguageGroupLocales )
998 WINBASEAPI WINAPI BOOL EnumLanguageGroupLocalesA (LANGGROUPLOCALE_ENUMPROCA, LGRPID, DWORD, LONG_PTR);
999 WINBASEAPI WINAPI BOOL EnumLanguageGroupLocalesW (LANGGROUPLOCALE_ENUMPROCW, LGRPID, DWORD, LONG_PTR);
1001 #define EnumUILanguages __AW_SUFFIXED__( EnumUILanguages )
1002 WINBASEAPI WINAPI BOOL EnumUILanguagesA (UILANGUAGE_ENUMPROCA, DWORD, LONG_PTR);
1003 WINBASEAPI WINAPI BOOL EnumUILanguagesW (UILANGUAGE_ENUMPROCW, DWORD, LONG_PTR);
1005 WINBASEAPI WINAPI LANGID GetSystemDefaultUILanguage (void);
1006 WINBASEAPI WINAPI LANGID GetUserDefaultUILanguage (void);
1007 WINBASEAPI WINAPI BOOL IsValidLanguageGroup (LGRPID, DWORD);
1009 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
1011 WINBASEAPI WINAPI int GetCalendarInfoEx (LPCWSTR, CALID, LPCWSTR, CALTYPE, LPCSTR, int, LPDWORD );
1013 #endif /* Win-Vista and later */
1014 #endif /* Win2K and later */
1015 #endif /* ! RC_INVOKED */
1019 #endif /* !_WINNLS_H: $RCSfile$: end of file */