OSDN Git Service

Incorporate <winnls.h> updates for Vista and Windows-7.
[mingw/mingw-org-wsl.git] / w32api / include / winnls.h
1 /*
2  * winnls.h
3  *
4  * Windows National Language Support API definitions.
5  *
6  * $Id$
7  *
8  * Written by Anders Norlander <anorland@hem2.passagen.se>
9  * Copyright (C) 1998-2000, 2002-2004, 2006, 2009, 2019, MinGW.org Project.
10  *
11  *
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:
18  *
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
21  * Software.
22  *
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.
30  *
31  */
32 #ifndef _WINNLS_H
33 #pragma GCC system_header
34 #define _WINNLS_H
35
36 #include <winbase.h>
37
38 _BEGIN_C_DECLS
39
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
44  */
45 #define LOCALE_USER_DEFAULT                                 0x0400
46 #define LOCALE_SYSTEM_DEFAULT                               0x0800
47
48 #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
49 /* The invariant system locale was added in Windows-XP.
50  */
51 #define LOCALE_INVARIANT                                    0x007F
52
53 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
54 /* Support for custom locales was added in Windows-Vista.
55  */
56 #define LOCALE_CUSTOM_DEFAULT                               0x0C00
57 #define LOCALE_CUSTOM_UI_DEFAULT                            0x1400
58 #define LOCALE_CUSTOM_UNSPECIFIED                           0x1000
59
60 #endif  /* Vista (and later) custom locale identifiers */
61 #endif  /* WinXP (and later) custom locale identifiers */
62
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
66  */
67 #define LCID_INSTALLED                                           1
68 #define LCID_SUPPORTED                                           2
69 #define LCID_ALTERNATE_SORTS                                     4
70
71 /* Locale information constants; (inadequately) documented at:
72  * https://docs.microsoft.com/en-gb/windows/desktop/Intl/locale-information-constants
73  *
74  * Qualifier flags, which may be used in combination with any one of the
75  * otherwise mutually exclusive locale property identification codes.
76  */
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.
81  */
82 #define LOCALE_RETURN_NUMBER                            0x20000000
83 #endif
84 /* The remaining pair appear to have been universally available.
85  */
86 #define LOCALE_USE_CP_ACP                               0x40000000
87 #define LOCALE_NOUSEROVERRIDE                           0x80000000
88
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.
93  */
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
185
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
198
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.
202  */
203 #define LOCALE_SYEARMONTH                                   0x1006
204 #define LOCALE_SENGCURRNAME                                 0x1007
205 #define LOCALE_SNATIVECURRNAME                              0x1008
206 #define LOCALE_SSORTNAME                                    0x1013
207
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.
211  */
212 #define LOCALE_IPAPERSIZE                                   0x100A
213 #define LOCALE_IDEFAULTEBCDICCODEPAGE                       0x1012
214 #define LOCALE_IDIGITSUBSTITUTION                           0x1014
215
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.
221  */
222 #define LOCALE_SNAME                                            92
223 #define LOCALE_SDURATION                                        93
224 #define LOCALE_SKEYBOARDSTOINSTALL                              94
225
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
233
234 #define LOCALE_SISO639LANGNAME2                                103
235 #define LOCALE_SISO3166CTRYNAME2                               104
236
237 #define LOCALE_SNAN                                            105
238 #define LOCALE_SPOSINFINITY                                    106
239 #define LOCALE_SNEGINFINITY                                    107
240 #define LOCALE_SSCRIPTS                                        108
241
242 #if 0
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?
251  */
252 #define LOCALE_SIETFLANGUAGE                                   ???
253 #endif
254
255 #endif  /* Vista (and later) only */
256 #endif  /* Win2K (and later) only */
257 #endif  /* Win98/Win2K and later */
258
259
260 /* Country identification codes.
261  */
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
338 #define CTRY_PERU                                               51
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
364 #define CTRY_UAE                                               971
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
374
375
376 /* Language group enumeration options; for documentation see:
377  * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-enumsystemlanguagegroupsa
378  */
379 #define LGRPID_INSTALLED                                         1
380 #define LGRPID_SUPPORTED                                         2
381
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
385  */
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
403
404
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
409  */
410 #define CP_INSTALLED                                             1
411 #define CP_SUPPORTED                                             2
412
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
416  */
417 #define CP_ACP                                                   0
418 #define CP_OEMCP                                                 1
419 #define CP_MACCP                                                 2
420 #define CP_THREAD_ACP                                            3
421 #define CP_SYMBOL                                               42
422 #define CP_UTF7                                              65000
423 #define CP_UTF8                                              65001
424
425 /* Options for MBCS to UTF-16LE transformations; see:
426  * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-multibytetowidechar
427  */
428 #define MB_PRECOMPOSED                                       0x001
429 #define MB_COMPOSITE                                         0x002
430 #define MB_USEGLYPHCHARS                                     0x004
431 #define MB_ERR_INVALID_CHARS                                 0x008
432
433 /* Options for UTF-16LE to MBCS transformations; see:
434  */
435 #define WC_DISCARDNS                                         0x010
436 #define WC_SEPCHARS                                          0x020
437 #define WC_DEFAULTCHAR                                       0x040
438 #define WC_COMPOSITECHECK                                    0x200
439
440 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
441 /* The following is not supported on Win9x, nor on WinNT prior to Win-2000.
442  */
443 #define WC_NO_BEST_FIT_CHARS                                 0x400
444
445 #endif  /* Windows-2000 and later */
446
447 /* Character type classification operations; see:
448  * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-getstringtypew
449  */
450 #define CT_CTYPE1                                                1
451 #define CT_CTYPE2                                                2
452 #define CT_CTYPE3                                                4
453
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:
457  */
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
468
469 /* CT_CTYPE2 classification; for each character in the string, returns
470  * one of the following mutually exclusive Unicode bidirectional layout
471  * attributes:
472  */
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
485
486 /* CT_CTYPE3 classification; for each character in the string, returns
487  * a bit-wise combination of any of the following attributes:
488  */
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
502
503 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
504
505 #define C3_HIGHSURROGATE                                    0x0800
506 #define C3_LOWSURROGATE                                     0x1000
507
508 #endif  /* Windows-Vista and later */
509
510 /* String sorting and transformation option flags; see:
511  * https://docs.microsoft.com/en-gb/windows/desktop/api/winnls/nf-winnls-lcmapstringex
512  */
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
524
525 /* Additional Unicode string transformation options; see:
526  * https://docs.microsoft.com/en-gb/windows/desktop/api/stringapiset/nf-stringapiset-foldstringw
527  */
528 #define MAP_FOLDCZONE                                   0x00000010
529 #define MAP_PRECOMPOSED                                 0x00000020
530 #define MAP_COMPOSITE                                   0x00000040
531 #define MAP_FOLDDIGITS                                  0x00000080
532
533 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
534 /* This additional FoldString() transformation option was not supported,
535  * prior to Windows-2000.
536  */
537 #define MAP_EXPAND_LIGATURES                            0x00002000
538
539 #endif  /* Windows-2000 and later */
540
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
544  */
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
550
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
554  */
555 #define SORT_STRINGSORT                                 0x00001000
556
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
559  */
560 #define CSTR_LESS_THAN                                           1
561 #define CSTR_EQUAL                                               2
562 #define CSTR_GREATER_THAN                                        3
563
564 /* Macros for UTF-16LE surrogate identification.
565  */
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))
569
570
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
575  */
576 #define CAL_GREGORIAN                                            1
577 #define CAL_GREGORIAN_US                                         2
578 #define CAL_JAPAN                                                3
579 #define CAL_TAIWAN                                               4
580 #define CAL_KOREA                                                5
581 #define CAL_HIJRI                                                6
582 #define CAL_THAI                                                 7
583 #define CAL_HEBREW                                               8
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
588
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.
592  */
593 #define CAL_UMALQURA                                            23
594 #endif
595
596 #define ENUM_ALL_CALENDARS                                     (-1)
597
598 /* Calendar property identifiation codes; (inadequately) documented at:
599  * https://docs.microsoft.com/en-gb/windows/desktop/Intl/calendar-type-information
600  */
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).
605  */
606 #define CAL_RETURN_NUMBER                               0x20000000
607 #define CAL_USE_CP_ACP                                  0x40000000
608 #define CAL_NOUSEROVERRIDE                              0x80000000
609 #endif
610
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.
615  */
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
662
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).
666  */
667 #define CAL_SYEARMONTH                                          47
668 #define CAL_ITWODIGITYEARMAX                                    48
669
670 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
671
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
679
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.
685  */
686 #define CAL_SMONTHDAY                                           56
687 #define CAL_SABBREVERASTRING                                    57
688
689 #endif  /* Windows-7 and later */
690 #endif  /* Windows-Vista and later */
691 #endif  /* Win98 / Win2K and later */
692
693 /* Date format options, for use with GetDateFormat*() functions; see:
694  * https://docs.microsoft.com/en-gb/windows/desktop/api/datetimeapi/nf-datetimeapi-getdateformatex
695  */
696 #define DATE_SHORTDATE                                           1
697 #define DATE_LONGDATE                                            2
698 #define DATE_USE_ALT_CALENDAR                                    4
699
700 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
701 /* The following are not supported on Win9x, nor on WinNT prior to Win-2000.
702  */
703 #define DATE_YEARMONTH                                           8
704 #define DATE_LTRREADING                                         16
705 #define DATE_RTLREADING                                         32
706
707 #endif  /* Windows-2000 and later */
708
709 /* Time format options, for use with GetTimeFormat*() functions; see:
710  * https://docs.microsoft.com/en-gb/windows/desktop/api/datetimeapi/nf-datetimeapi-gettimeformatex
711  */
712 #define TIME_NOMINUTESORSECONDS                                  1
713 #define TIME_NOSECONDS                                           2
714 #define TIME_NOTIMEMARKER                                        4
715 #define TIME_FORCE24HOURFORMAT                                   8
716
717
718 #ifndef RC_INVOKED
719
720 typedef DWORD LCTYPE;
721 typedef DWORD CALTYPE;
722 typedef DWORD CALID;
723 typedef DWORD LGRPID;
724 typedef DWORD GEOID;
725 typedef DWORD GEOTYPE;
726 typedef DWORD GEOCLASS;
727
728 #define CALINFO_ENUMPROC  __AW_SUFFIXED__( CALINFO_ENUMPROC )
729 typedef BOOL (CALLBACK *CALINFO_ENUMPROCA) (LPSTR);
730 typedef BOOL (CALLBACK *CALINFO_ENUMPROCW) (LPWSTR);
731
732 #define CALINFO_ENUMPROCEX  __AW_SUFFIXED__( CALINFO_ENUMPROCEX )
733 typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXA) (LPSTR, CALID);
734 typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXW) (LPWSTR, CALID);
735
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);
739
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);
743
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);
747
748 #define LOCALE_ENUMPROC  __AW_SUFFIXED__( LOCALE_ENUMPROC )
749 typedef BOOL (CALLBACK *LOCALE_ENUMPROCA) (LPSTR);
750 typedef BOOL (CALLBACK *LOCALE_ENUMPROCW) (LPWSTR);
751
752 #define CODEPAGE_ENUMPROC  __AW_SUFFIXED__( CODEPAGE_ENUMPROC )
753 typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA) (LPSTR);
754 typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW) (LPWSTR);
755
756 #define DATEFMT_ENUMPROC  __AW_SUFFIXED__( DATEFMT_ENUMPROC )
757 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCA) (LPSTR);
758 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCW) (LPWSTR);
759
760 #define DATEFMT_ENUMPROCEX  __AW_SUFFIXED__( DATEFMT_ENUMPROCEX )
761 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXA) (LPSTR, CALID);
762 typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXW) (LPWSTR, CALID);
763
764 #define TIMEFMT_ENUMPROC  __AW_SUFFIXED__( TIMEFMT_ENUMPROC )
765 typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCA) (LPSTR);
766 typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCW) (LPWSTR);
767
768 typedef BOOL (CALLBACK *GEO_ENUMPROC) (GEOID);
769
770 typedef
771 enum NLS_FUNCTION
772 { COMPARE_STRING         =   1
773 } NLS_FUNCTION;
774
775 enum SYSGEOCLASS
776 { GEOCLASS_NATION        =  16,
777   GEOCLASS_REGION        =  14
778 };
779
780 enum SYSGEOTYPE
781 { GEO_NATION             =   1,
782   GEO_LATITUDE,
783   GEO_LONGITUDE,
784   GEO_ISO2,
785   GEO_ISO3,
786   GEO_RFC1766,
787   GEO_LCID,
788   GEO_FRIENDLYNAME,
789   GEO_OFFICIALNAME,
790   GEO_TIMEZONES,
791   GEO_OFFICIALLANGUAGES
792 };
793
794 #define MAX_DEFAULTCHAR          2
795 #define MAX_LEADBYTES           12
796
797 typedef struct _cpinfo
798 { UINT                  MaxCharSize;
799   BYTE                  DefaultChar[MAX_DEFAULTCHAR];
800   BYTE                  LeadByte[MAX_LEADBYTES];
801 } CPINFO, *LPCPINFO;
802
803 typedef struct _cpinfoexA
804 { UINT                  MaxCharSize;
805   BYTE                  DefaultChar[MAX_DEFAULTCHAR];
806   BYTE                  LeadByte[MAX_LEADBYTES];
807   WCHAR                 UnicodeDefaultChar;
808   UINT                  CodePage;
809   CHAR                  CodePageName[MAX_PATH];
810 } CPINFOEXA, *LPCPINFOEXA;
811
812 typedef struct _cpinfoexW
813 { UINT                  MaxCharSize;
814   BYTE                  DefaultChar[MAX_DEFAULTCHAR];
815   BYTE                  LeadByte[MAX_LEADBYTES];
816   WCHAR                 UnicodeDefaultChar;
817   UINT                  CodePage;
818   WCHAR                 CodePageName[MAX_PATH];
819 } CPINFOEXW, *LPCPINFOEXW;
820
821 typedef __AW_ALIAS__( CPINFOEX ), *LPCPINFOEX;
822
823 typedef struct _currencyfmtA
824 { UINT                  NumDigits;
825   UINT                  LeadingZero;
826   UINT                  Grouping;
827   LPSTR                 lpDecimalSep;
828   LPSTR                 lpThousandSep;
829   UINT                  NegativeOrder;
830   UINT                  PositiveOrder;
831   LPSTR                 lpCurrencySymbol;
832 } CURRENCYFMTA, *LPCURRENCYFMTA;
833
834 typedef struct _currencyfmtW
835 { UINT                  NumDigits;
836   UINT                  LeadingZero;
837   UINT                  Grouping;
838   LPWSTR                lpDecimalSep;
839   LPWSTR                lpThousandSep;
840   UINT                  NegativeOrder;
841   UINT                  PositiveOrder;
842   LPWSTR                lpCurrencySymbol;
843 } CURRENCYFMTW, *LPCURRENCYFMTW;
844
845 typedef __AW_ALIAS__( CURRENCYFMT ), *LPCURRENCYFMT;
846
847 typedef struct nlsversioninfo
848 { DWORD                 dwNLSVersionInfoSize;
849   DWORD                 dwNLSVersion;
850   DWORD                 dwDefinedVersion;
851 } NLSVERSIONINFO, *LPNLSVERSIONINFO;
852
853 typedef struct _numberfmtA
854 { UINT                  NumDigits;
855   UINT                  LeadingZero;
856   UINT                  Grouping;
857   LPSTR                 lpDecimalSep;
858   LPSTR                 lpThousandSep;
859   UINT                  NegativeOrder;
860 } NUMBERFMTA, *LPNUMBERFMTA;
861
862 typedef struct _numberfmtW
863 { UINT                  NumDigits;
864   UINT                  LeadingZero;
865   UINT                  Grouping;
866   LPWSTR                lpDecimalSep;
867   LPWSTR                lpThousandSep;
868   UINT                  NegativeOrder;
869 } NUMBERFMTW, *LPNUMBERFMTW;
870
871 typedef __AW_ALIAS__( NUMBERFMT ), *LPNUMBERFMT;
872
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);
876
877 WINBASEAPI WINAPI  LCID   ConvertDefaultLocale (LCID);
878
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);
882
883 #define EnumDateFormats  __AW_SUFFIXED__( EnumDateFormats )
884 WINBASEAPI WINAPI  BOOL   EnumDateFormatsA (DATEFMT_ENUMPROCA, LCID, DWORD);
885 WINBASEAPI WINAPI  BOOL   EnumDateFormatsW (DATEFMT_ENUMPROCW, LCID, DWORD);
886
887 #define EnumSystemCodePages  __AW_SUFFIXED__( EnumSystemCodePages )
888 WINBASEAPI WINAPI  BOOL   EnumSystemCodePagesA (CODEPAGE_ENUMPROCA, DWORD);
889 WINBASEAPI WINAPI  BOOL   EnumSystemCodePagesW (CODEPAGE_ENUMPROCW, DWORD);
890
891 WINBASEAPI WINAPI  BOOL   EnumSystemGeoID (GEOCLASS, GEOID, GEO_ENUMPROC);
892
893 #define EnumSystemLocales  __AW_SUFFIXED__( EnumSystemLocales )
894 WINBASEAPI WINAPI  BOOL   EnumSystemLocalesA (LOCALE_ENUMPROCA, DWORD);
895 WINBASEAPI WINAPI  BOOL   EnumSystemLocalesW (LOCALE_ENUMPROCW, DWORD);
896
897 #define EnumTimeFormats  __AW_SUFFIXED__( EnumTimeFormats )
898 WINBASEAPI WINAPI  BOOL   EnumTimeFormatsA (TIMEFMT_ENUMPROCA, LCID, DWORD);
899 WINBASEAPI WINAPI  BOOL   EnumTimeFormatsW (TIMEFMT_ENUMPROCW, LCID, DWORD);
900
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);
904
905 WINBASEAPI WINAPI  UINT   GetACP (void);
906
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);
910
911 WINBASEAPI WINAPI  BOOL   GetCPInfo (UINT, LPCPINFO);
912
913 #define GetCPInfoEx  __AW_SUFFIXED__( GetCPInfoEx )
914 WINBASEAPI WINAPI  BOOL   GetCPInfoExA (UINT, DWORD, LPCPINFOEXA);
915 WINBASEAPI WINAPI  BOOL   GetCPInfoExW (UINT, DWORD, LPCPINFOEXW);
916
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);
920
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);
924
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);
928
929 #define GetLocaleInfo  __AW_SUFFIXED__( GetLocaleInfo )
930 WINBASEAPI WINAPI  int    GetLocaleInfoA (LCID, LCTYPE, LPSTR, int);
931 WINBASEAPI WINAPI  int    GetLocaleInfoW (LCID, LCTYPE, LPWSTR, int);
932
933 WINBASEAPI WINAPI  BOOL   GetNLSVersion (NLS_FUNCTION, LCID, LPNLSVERSIONINFO);
934
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);
938
939 WINBASEAPI WINAPI  UINT   GetOEMCP (void);
940
941 WINBASEAPI WINAPI  BOOL   GetStringTypeA (LCID, DWORD, LPCSTR, int, LPWORD);
942 WINBASEAPI WINAPI  BOOL   GetStringTypeW (DWORD, LPCWSTR, int, LPWORD);
943
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);
947
948 WINBASEAPI WINAPI  LANGID GetSystemDefaultLangID (void);
949 WINBASEAPI WINAPI  LCID   GetSystemDefaultLCID (void);
950 WINBASEAPI WINAPI  LCID   GetThreadLocale (void);
951
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);
955
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);
964
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);
968
969 WINBASEAPI WINAPI  int    MultiByteToWideChar (UINT, DWORD, LPCSTR, int, LPWSTR, int);
970
971 #define SetCalendarInfo  __AW_SUFFIXED__( SetCalendarInfo )
972 WINBASEAPI WINAPI  int    SetCalendarInfoA (LCID, CALID, CALTYPE, LPCSTR);
973 WINBASEAPI WINAPI  int    SetCalendarInfoW (LCID, CALID, CALTYPE, LPCWSTR);
974
975 #define SetLocaleInfo  __AW_SUFFIXED__( SetLocaleInfo )
976 WINBASEAPI WINAPI  BOOL   SetLocaleInfoA (LCID, LCTYPE, LPCSTR);
977 WINBASEAPI WINAPI  BOOL   SetLocaleInfoW (LCID, LCTYPE, LPCWSTR);
978
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);
982
983 #if _WIN32_WINNT >= _WIN32_WINNT_WIN2K
984
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);
988
989 #define EnumDateFormatsEx  __AW_SUFFIXED__( EnumDateFormatsEx )
990 WINBASEAPI WINAPI  BOOL   EnumDateFormatsExA (DATEFMT_ENUMPROCEXA, LCID, DWORD);
991 WINBASEAPI WINAPI  BOOL   EnumDateFormatsExW (DATEFMT_ENUMPROCEXW, LCID, DWORD);
992
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);
996
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);
1000
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);
1004
1005 WINBASEAPI WINAPI  LANGID GetSystemDefaultUILanguage (void);
1006 WINBASEAPI WINAPI  LANGID GetUserDefaultUILanguage (void);
1007 WINBASEAPI WINAPI  BOOL   IsValidLanguageGroup (LGRPID, DWORD);
1008
1009 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
1010
1011 WINBASEAPI WINAPI  int    GetCalendarInfoEx (LPCWSTR, CALID, LPCWSTR, CALTYPE, LPCSTR, int, LPDWORD );
1012
1013 #endif /* Win-Vista and later */
1014 #endif /* Win2K and later */
1015 #endif /* ! RC_INVOKED */
1016
1017 _END_C_DECLS
1018
1019 #endif  /* !_WINNLS_H: $RCSfile$: end of file */