Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1640 lines
60 KiB

  1. /*++
  2. Copyright (c) Microsoft Corporation All rights reserved.
  3. Module Name:
  4. winnls.h
  5. Abstract:
  6. Procedure declarations, constant definitions, and macros for the
  7. NLS component.
  8. --*/
  9. /*++ BUILD Version: 0003 // Increment this if a change has global effects ;internal_NT
  10. ;internal_NT
  11. Copyright (c) Microsoft Corporation. All rights reserved. ;internal_NT
  12. ;internal_NT
  13. Module Name: ;internal_NT
  14. ;internal_NT
  15. winnlsp.h ;internal_NT
  16. ;internal_NT
  17. Abstract: ;internal_NT
  18. ;internal_NT
  19. Private procedure declarations, constant definitions, and macros for the ;internal_NT
  20. NLS component. ;internal_NT
  21. ;internal_NT
  22. --*/ ;internal_NT
  23. ;internal_NT
  24. #ifndef _WINNLS_
  25. #define _WINNLS_
  26. #ifndef _WINNLSP_ ;internal_NT
  27. #define _WINNLSP_ ;internal_NT
  28. ;both
  29. #ifdef __cplusplus ;both
  30. extern "C" { ;both
  31. #endif ;both
  32. ;both
  33. #ifndef NONLS
  34. #ifdef _MAC
  35. #include <macwin32.h>
  36. #endif
  37. ////////////////////////////////////////////////////////////////////////////
  38. //
  39. // Constants
  40. //
  41. // Define all constants for the NLS component here.
  42. //
  43. ////////////////////////////////////////////////////////////////////////////
  44. //
  45. // String Length Maximums.
  46. //
  47. #define MAX_LEADBYTES 12 // 5 ranges, 2 bytes ea., 0 term.
  48. #define MAX_DEFAULTCHAR 2 // single or double byte
  49. //
  50. // MBCS and Unicode Translation Flags.
  51. //
  52. #define MB_PRECOMPOSED 0x00000001 // use precomposed chars
  53. #define MB_COMPOSITE 0x00000002 // use composite chars
  54. #define MB_USEGLYPHCHARS 0x00000004 // use glyph chars, not ctrl chars
  55. #define MB_ERR_INVALID_CHARS 0x00000008 // error for invalid chars
  56. #define WC_COMPOSITECHECK 0x00000200 // convert composite to precomposed
  57. #define WC_DISCARDNS 0x00000010 // discard non-spacing chars
  58. #define WC_SEPCHARS 0x00000020 // generate separate chars
  59. #define WC_DEFAULTCHAR 0x00000040 // replace w/ default char
  60. ;begin_winver_500
  61. #define WC_NO_BEST_FIT_CHARS 0x00000400 // do not use best fit chars
  62. ;end_winver_500
  63. ;internal_NT
  64. // ;internal_NT
  65. // Flags for DLL Code Page Translation Function. ;internal_NT
  66. // ;internal_NT
  67. #define NLS_CP_CPINFO 0x10000000 ;internal_NT
  68. #define NLS_CP_CPINFOEX 0x20000000 ;internal_NT
  69. #define NLS_CP_MBTOWC 0x40000000 ;internal_NT
  70. #define NLS_CP_WCTOMB 0x80000000 ;internal_NT
  71. ;internal_NT
  72. ;both
  73. //
  74. // Character Type Flags.
  75. //
  76. #define CT_CTYPE1 0x00000001 // ctype 1 information
  77. #define CT_CTYPE2 0x00000002 // ctype 2 information
  78. #define CT_CTYPE3 0x00000004 // ctype 3 information
  79. //
  80. // CType 1 Flag Bits.
  81. //
  82. #define C1_UPPER 0x0001 // upper case
  83. #define C1_LOWER 0x0002 // lower case
  84. #define C1_DIGIT 0x0004 // decimal digits
  85. #define C1_SPACE 0x0008 // spacing characters
  86. #define C1_PUNCT 0x0010 // punctuation characters
  87. #define C1_CNTRL 0x0020 // control characters
  88. #define C1_BLANK 0x0040 // blank characters
  89. #define C1_XDIGIT 0x0080 // other digits
  90. #define C1_ALPHA 0x0100 // any linguistic character
  91. #define C1_DEFINED 0x0200 // defined character
  92. //
  93. // CType 2 Flag Bits.
  94. //
  95. #define C2_LEFTTORIGHT 0x0001 // left to right
  96. #define C2_RIGHTTOLEFT 0x0002 // right to left
  97. #define C2_EUROPENUMBER 0x0003 // European number, digit
  98. #define C2_EUROPESEPARATOR 0x0004 // European numeric separator
  99. #define C2_EUROPETERMINATOR 0x0005 // European numeric terminator
  100. #define C2_ARABICNUMBER 0x0006 // Arabic number
  101. #define C2_COMMONSEPARATOR 0x0007 // common numeric separator
  102. #define C2_BLOCKSEPARATOR 0x0008 // block separator
  103. #define C2_SEGMENTSEPARATOR 0x0009 // segment separator
  104. #define C2_WHITESPACE 0x000A // white space
  105. #define C2_OTHERNEUTRAL 0x000B // other neutrals
  106. #define C2_NOTAPPLICABLE 0x0000 // no implicit directionality
  107. //
  108. // CType 3 Flag Bits.
  109. //
  110. #define C3_NONSPACING 0x0001 // nonspacing character
  111. #define C3_DIACRITIC 0x0002 // diacritic mark
  112. #define C3_VOWELMARK 0x0004 // vowel mark
  113. #define C3_SYMBOL 0x0008 // symbols
  114. #define C3_KATAKANA 0x0010 // katakana character
  115. #define C3_HIRAGANA 0x0020 // hiragana character
  116. #define C3_HALFWIDTH 0x0040 // half width character
  117. #define C3_FULLWIDTH 0x0080 // full width character
  118. #define C3_IDEOGRAPH 0x0100 // ideographic character
  119. #define C3_KASHIDA 0x0200 // Arabic kashida character
  120. #define C3_LEXICAL 0x0400 // lexical character
  121. #define C3_ALPHA 0x8000 // any linguistic char (C1_ALPHA)
  122. #define C3_NOTAPPLICABLE 0x0000 // ctype 3 is not applicable
  123. //
  124. // String Flags.
  125. //
  126. #define NORM_IGNORECASE 0x00000001 // ignore case
  127. #define NORM_IGNORENONSPACE 0x00000002 // ignore nonspacing chars
  128. #define NORM_IGNORESYMBOLS 0x00000004 // ignore symbols
  129. #define NORM_IGNOREKANATYPE 0x00010000 // ignore kanatype
  130. #define NORM_IGNOREWIDTH 0x00020000 // ignore width
  131. #define NORM_STOP_ON_NULL 0x10000000 // stop at the null termination ;internal_NT
  132. ;internal_NT
  133. //
  134. // Locale Independent Mapping Flags.
  135. //
  136. #define MAP_FOLDCZONE 0x00000010 // fold compatibility zone chars
  137. #define MAP_PRECOMPOSED 0x00000020 // convert to precomposed chars
  138. #define MAP_COMPOSITE 0x00000040 // convert to composite chars
  139. #define MAP_FOLDDIGITS 0x00000080 // all digits to ASCII 0-9
  140. ;begin_winver_500
  141. #define MAP_EXPAND_LIGATURES 0x00002000 // expand all ligatures
  142. ;end_winver_500
  143. //
  144. // Locale Dependent Mapping Flags.
  145. //
  146. #define LCMAP_LOWERCASE 0x00000100 // lower case letters
  147. #define LCMAP_UPPERCASE 0x00000200 // upper case letters
  148. #define LCMAP_SORTKEY 0x00000400 // WC sort key (normalize)
  149. #define LCMAP_BYTEREV 0x00000800 // byte reversal
  150. #define LCMAP_HIRAGANA 0x00100000 // map katakana to hiragana
  151. #define LCMAP_KATAKANA 0x00200000 // map hiragana to katakana
  152. #define LCMAP_HALFWIDTH 0x00400000 // map double byte to single byte
  153. #define LCMAP_FULLWIDTH 0x00800000 // map single byte to double byte
  154. #define LCMAP_LINGUISTIC_CASING 0x01000000 // use linguistic rules for casing
  155. #define LCMAP_SIMPLIFIED_CHINESE 0x02000000 // map traditional chinese to simplified chinese
  156. #define LCMAP_TRADITIONAL_CHINESE 0x04000000 // map simplified chinese to traditional chinese
  157. #define LCMAP_IGNOREDBCS 0x80000000 // don't casemap DBCS characters ;internal_win40
  158. ;internal_win40
  159. //
  160. // Language Group Enumeration Flags.
  161. //
  162. #define LGRPID_INSTALLED 0x00000001 // installed language group ids
  163. #define LGRPID_SUPPORTED 0x00000002 // supported language group ids
  164. //
  165. // Locale Enumeration Flags.
  166. //
  167. #define LCID_INSTALLED 0x00000001 // installed locale ids
  168. #define LCID_SUPPORTED 0x00000002 // supported locale ids
  169. #define LCID_ALTERNATE_SORTS 0x00000004 // alternate sort locale ids
  170. //
  171. // Code Page Enumeration Flags.
  172. //
  173. #define CP_INSTALLED 0x00000001 // installed code page ids
  174. #define CP_SUPPORTED 0x00000002 // supported code page ids
  175. //
  176. // Sorting Flags.
  177. //
  178. // WORD Sort: culturally correct sort
  179. // hyphen and apostrophe are special cased
  180. // example: "coop" and "co-op" will sort together in a list
  181. //
  182. // co_op <------- underscore (symbol)
  183. // coat
  184. // comb
  185. // coop
  186. // co-op <------- hyphen (punctuation)
  187. // cork
  188. // went
  189. // were
  190. // we're <------- apostrophe (punctuation)
  191. //
  192. //
  193. // STRING Sort: hyphen and apostrophe will sort with all other symbols
  194. //
  195. // co-op <------- hyphen (punctuation)
  196. // co_op <------- underscore (symbol)
  197. // coat
  198. // comb
  199. // coop
  200. // cork
  201. // we're <------- apostrophe (punctuation)
  202. // went
  203. // were
  204. //
  205. #define SORT_STRINGSORT 0x00001000 // use string sort method
  206. //
  207. // Compare String Return Values.
  208. //
  209. #define CSTR_LESS_THAN 1 // string 1 less than string 2
  210. #define CSTR_EQUAL 2 // string 1 equal to string 2
  211. #define CSTR_GREATER_THAN 3 // string 1 greater than string 2
  212. //
  213. // Code Page Default Values.
  214. //
  215. #define CP_ACP 0 // default to ANSI code page
  216. #define CP_OEMCP 1 // default to OEM code page
  217. #define CP_MACCP 2 // default to MAC code page
  218. #define CP_THREAD_ACP 3 // current thread's ANSI code page
  219. #define CP_SYMBOL 42 // SYMBOL translations
  220. #define CP_UTF7 65000 // UTF-7 translation
  221. #define CP_UTF8 65001 // UTF-8 translation
  222. //
  223. // Country/Region Codes.
  224. //
  225. #define CTRY_DEFAULT 0
  226. #define CTRY_ALBANIA 355 // Albania
  227. #define CTRY_ALGERIA 213 // Algeria
  228. #define CTRY_ARGENTINA 54 // Argentina
  229. #define CTRY_ARMENIA 374 // Armenia
  230. #define CTRY_AUSTRALIA 61 // Australia
  231. #define CTRY_AUSTRIA 43 // Austria
  232. #define CTRY_AZERBAIJAN 994 // Azerbaijan
  233. #define CTRY_BAHRAIN 973 // Bahrain
  234. #define CTRY_BELARUS 375 // Belarus
  235. #define CTRY_BELGIUM 32 // Belgium
  236. #define CTRY_BELIZE 501 // Belize
  237. #define CTRY_BOLIVIA 591 // Bolivia
  238. #define CTRY_BRAZIL 55 // Brazil
  239. #define CTRY_BRUNEI_DARUSSALAM 673 // Brunei Darussalam
  240. #define CTRY_BULGARIA 359 // Bulgaria
  241. #define CTRY_CANADA 2 // Canada
  242. #define CTRY_CARIBBEAN 1 // Caribbean
  243. #define CTRY_CHILE 56 // Chile
  244. #define CTRY_COLOMBIA 57 // Colombia
  245. #define CTRY_COSTA_RICA 506 // Costa Rica
  246. #define CTRY_CROATIA 385 // Croatia
  247. #define CTRY_CZECH 420 // Czech Republic
  248. #define CTRY_DENMARK 45 // Denmark
  249. #define CTRY_DOMINICAN_REPUBLIC 1 // Dominican Republic
  250. #define CTRY_ECUADOR 593 // Ecuador
  251. #define CTRY_EGYPT 20 // Egypt
  252. #define CTRY_EL_SALVADOR 503 // El Salvador
  253. #define CTRY_ESTONIA 372 // Estonia
  254. #define CTRY_FAEROE_ISLANDS 298 // Faeroe Islands
  255. #define CTRY_FINLAND 358 // Finland
  256. #define CTRY_FRANCE 33 // France
  257. #define CTRY_GEORGIA 995 // Georgia
  258. #define CTRY_GERMANY 49 // Germany
  259. #define CTRY_GREECE 30 // Greece
  260. #define CTRY_GUATEMALA 502 // Guatemala
  261. #define CTRY_HONDURAS 504 // Honduras
  262. #define CTRY_HONG_KONG 852 // Hong Kong S.A.R., P.R.C.
  263. #define CTRY_HUNGARY 36 // Hungary
  264. #define CTRY_ICELAND 354 // Iceland
  265. #define CTRY_INDIA 91 // India
  266. #define CTRY_INDONESIA 62 // Indonesia
  267. #define CTRY_IRAN 981 // Iran
  268. #define CTRY_IRAQ 964 // Iraq
  269. #define CTRY_IRELAND 353 // Ireland
  270. #define CTRY_ISRAEL 972 // Israel
  271. #define CTRY_ITALY 39 // Italy
  272. #define CTRY_JAMAICA 1 // Jamaica
  273. #define CTRY_JAPAN 81 // Japan
  274. #define CTRY_JORDAN 962 // Jordan
  275. #define CTRY_KAZAKSTAN 7 // Kazakstan
  276. #define CTRY_KENYA 254 // Kenya
  277. #define CTRY_KUWAIT 965 // Kuwait
  278. #define CTRY_KYRGYZSTAN 996 // Kyrgyzstan
  279. #define CTRY_LATVIA 371 // Latvia
  280. #define CTRY_LEBANON 961 // Lebanon
  281. #define CTRY_LIBYA 218 // Libya
  282. #define CTRY_LIECHTENSTEIN 41 // Liechtenstein
  283. #define CTRY_LITHUANIA 370 // Lithuania
  284. #define CTRY_LUXEMBOURG 352 // Luxembourg
  285. #define CTRY_MACAU 853 // Macau S.A.R., PRC
  286. #define CTRY_MACEDONIA 389 // Former Yugoslav Republic of Macedonia
  287. #define CTRY_MALAYSIA 60 // Malaysia
  288. #define CTRY_MALDIVES 960 // Maldives
  289. #define CTRY_MEXICO 52 // Mexico
  290. #define CTRY_MONACO 33 // Principality of Monaco
  291. #define CTRY_MONGOLIA 976 // Mongolia
  292. #define CTRY_MOROCCO 212 // Morocco
  293. #define CTRY_NETHERLANDS 31 // Netherlands
  294. #define CTRY_NEW_ZEALAND 64 // New Zealand
  295. #define CTRY_NICARAGUA 505 // Nicaragua
  296. #define CTRY_NORWAY 47 // Norway
  297. #define CTRY_OMAN 968 // Oman
  298. #define CTRY_PAKISTAN 92 // Islamic Republic of Pakistan
  299. #define CTRY_PANAMA 507 // Panama
  300. #define CTRY_PARAGUAY 595 // Paraguay
  301. #define CTRY_PERU 51 // Peru
  302. #define CTRY_PHILIPPINES 63 // Republic of the Philippines
  303. #define CTRY_POLAND 48 // Poland
  304. #define CTRY_PORTUGAL 351 // Portugal
  305. #define CTRY_PRCHINA 86 // People's Republic of China
  306. #define CTRY_PUERTO_RICO 1 // Puerto Rico
  307. #define CTRY_QATAR 974 // Qatar
  308. #define CTRY_ROMANIA 40 // Romania
  309. #define CTRY_RUSSIA 7 // Russia
  310. #define CTRY_SAUDI_ARABIA 966 // Saudi Arabia
  311. #define CTRY_SERBIA 381 // Serbia
  312. #define CTRY_SINGAPORE 65 // Singapore
  313. #define CTRY_SLOVAK 421 // Slovak Republic
  314. #define CTRY_SLOVENIA 386 // Slovenia
  315. #define CTRY_SOUTH_AFRICA 27 // South Africa
  316. #define CTRY_SOUTH_KOREA 82 // Korea
  317. #define CTRY_SPAIN 34 // Spain
  318. #define CTRY_SWEDEN 46 // Sweden
  319. #define CTRY_SWITZERLAND 41 // Switzerland
  320. #define CTRY_SYRIA 963 // Syria
  321. #define CTRY_TAIWAN 886 // Taiwan
  322. #define CTRY_TATARSTAN 7 // Tatarstan
  323. #define CTRY_THAILAND 66 // Thailand
  324. #define CTRY_TRINIDAD_Y_TOBAGO 1 // Trinidad y Tobago
  325. #define CTRY_TUNISIA 216 // Tunisia
  326. #define CTRY_TURKEY 90 // Turkey
  327. #define CTRY_UAE 971 // U.A.E.
  328. #define CTRY_UKRAINE 380 // Ukraine
  329. #define CTRY_UNITED_KINGDOM 44 // United Kingdom
  330. #define CTRY_UNITED_STATES 1 // United States
  331. #define CTRY_URUGUAY 598 // Uruguay
  332. #define CTRY_UZBEKISTAN 7 // Uzbekistan
  333. #define CTRY_VENEZUELA 58 // Venezuela
  334. #define CTRY_VIET_NAM 84 // Viet Nam
  335. #define CTRY_YEMEN 967 // Yemen
  336. #define CTRY_ZIMBABWE 263 // Zimbabwe
  337. //
  338. // Locale Types.
  339. //
  340. // These types are used for the GetLocaleInfo NLS API routine.
  341. // Some of these types are also used for the SetLocaleInfo NLS API routine.
  342. //
  343. //
  344. // The following LCTypes may be used in combination with any other LCTypes.
  345. //
  346. // LOCALE_NOUSEROVERRIDE is also used in GetTimeFormat and
  347. // GetDateFormat.
  348. //
  349. // LOCALE_USE_CP_ACP is used in many of the A (Ansi) apis that need
  350. // to do string translation.
  351. //
  352. // LOCALE_RETURN_NUMBER will return the result from GetLocaleInfo as a
  353. // number instead of a string. This flag is only valid for the LCTypes
  354. // beginning with LOCALE_I.
  355. //
  356. #define LOCALE_NOUSEROVERRIDE 0x80000000 // do not use user overrides
  357. #define LOCALE_USE_CP_ACP 0x40000000 // use the system ACP
  358. ;begin_winver_400
  359. #define LOCALE_RETURN_NUMBER 0x20000000 // return number instead of string
  360. ;end_winver_400
  361. //
  362. // The following LCTypes are mutually exclusive in that they may NOT
  363. // be used in combination with each other.
  364. //
  365. #define LOCALE_ILANGUAGE 0x00000001 // language id
  366. #define LOCALE_SLANGUAGE 0x00000002 // localized name of language
  367. #define LOCALE_SENGLANGUAGE 0x00001001 // English name of language
  368. #define LOCALE_SABBREVLANGNAME 0x00000003 // abbreviated language name
  369. #define LOCALE_SNATIVELANGNAME 0x00000004 // native name of language
  370. #define LOCALE_ICOUNTRY 0x00000005 // country code
  371. #define LOCALE_SCOUNTRY 0x00000006 // localized name of country
  372. #define LOCALE_SENGCOUNTRY 0x00001002 // English name of country
  373. #define LOCALE_SABBREVCTRYNAME 0x00000007 // abbreviated country name
  374. #define LOCALE_SNATIVECTRYNAME 0x00000008 // native name of country
  375. #define LOCALE_IGEOID 0x0000005B // geographical location id ;internal_NT
  376. #define LOCALE_IDEFAULTLANGUAGE 0x00000009 // default language id
  377. #define LOCALE_IDEFAULTCOUNTRY 0x0000000A // default country code
  378. #define LOCALE_IDEFAULTCODEPAGE 0x0000000B // default oem code page
  379. #define LOCALE_IDEFAULTANSICODEPAGE 0x00001004 // default ansi code page
  380. #define LOCALE_IDEFAULTMACCODEPAGE 0x00001011 // default mac code page
  381. #define LOCALE_SLIST 0x0000000C // list item separator
  382. #define LOCALE_IMEASURE 0x0000000D // 0 = metric, 1 = US
  383. #define LOCALE_SDECIMAL 0x0000000E // decimal separator
  384. #define LOCALE_STHOUSAND 0x0000000F // thousand separator
  385. #define LOCALE_SGROUPING 0x00000010 // digit grouping
  386. #define LOCALE_IDIGITS 0x00000011 // number of fractional digits
  387. #define LOCALE_ILZERO 0x00000012 // leading zeros for decimal
  388. #define LOCALE_INEGNUMBER 0x00001010 // negative number mode
  389. #define LOCALE_SNATIVEDIGITS 0x00000013 // native ascii 0-9
  390. #define LOCALE_SCURRENCY 0x00000014 // local monetary symbol
  391. #define LOCALE_SINTLSYMBOL 0x00000015 // intl monetary symbol
  392. #define LOCALE_SMONDECIMALSEP 0x00000016 // monetary decimal separator
  393. #define LOCALE_SMONTHOUSANDSEP 0x00000017 // monetary thousand separator
  394. #define LOCALE_SMONGROUPING 0x00000018 // monetary grouping
  395. #define LOCALE_ICURRDIGITS 0x00000019 // # local monetary digits
  396. #define LOCALE_IINTLCURRDIGITS 0x0000001A // # intl monetary digits
  397. #define LOCALE_ICURRENCY 0x0000001B // positive currency mode
  398. #define LOCALE_INEGCURR 0x0000001C // negative currency mode
  399. #define LOCALE_SDATE 0x0000001D // date separator
  400. #define LOCALE_STIME 0x0000001E // time separator
  401. #define LOCALE_SSHORTDATE 0x0000001F // short date format string
  402. #define LOCALE_SLONGDATE 0x00000020 // long date format string
  403. #define LOCALE_STIMEFORMAT 0x00001003 // time format string
  404. #define LOCALE_IDATE 0x00000021 // short date format ordering
  405. #define LOCALE_ILDATE 0x00000022 // long date format ordering
  406. #define LOCALE_ITIME 0x00000023 // time format specifier
  407. #define LOCALE_ITIMEMARKPOSN 0x00001005 // time marker position
  408. #define LOCALE_ICENTURY 0x00000024 // century format specifier (short date)
  409. #define LOCALE_ITLZERO 0x00000025 // leading zeros in time field
  410. #define LOCALE_IDAYLZERO 0x00000026 // leading zeros in day field (short date)
  411. #define LOCALE_IMONLZERO 0x00000027 // leading zeros in month field (short date)
  412. #define LOCALE_S1159 0x00000028 // AM designator
  413. #define LOCALE_S2359 0x00000029 // PM designator
  414. #define LOCALE_ICALENDARTYPE 0x00001009 // type of calendar specifier
  415. #define LOCALE_IOPTIONALCALENDAR 0x0000100B // additional calendar types specifier
  416. #define LOCALE_IFIRSTDAYOFWEEK 0x0000100C // first day of week specifier
  417. #define LOCALE_IFIRSTWEEKOFYEAR 0x0000100D // first week of year specifier
  418. #define LOCALE_SDAYNAME1 0x0000002A // long name for Monday
  419. #define LOCALE_SDAYNAME2 0x0000002B // long name for Tuesday
  420. #define LOCALE_SDAYNAME3 0x0000002C // long name for Wednesday
  421. #define LOCALE_SDAYNAME4 0x0000002D // long name for Thursday
  422. #define LOCALE_SDAYNAME5 0x0000002E // long name for Friday
  423. #define LOCALE_SDAYNAME6 0x0000002F // long name for Saturday
  424. #define LOCALE_SDAYNAME7 0x00000030 // long name for Sunday
  425. #define LOCALE_SABBREVDAYNAME1 0x00000031 // abbreviated name for Monday
  426. #define LOCALE_SABBREVDAYNAME2 0x00000032 // abbreviated name for Tuesday
  427. #define LOCALE_SABBREVDAYNAME3 0x00000033 // abbreviated name for Wednesday
  428. #define LOCALE_SABBREVDAYNAME4 0x00000034 // abbreviated name for Thursday
  429. #define LOCALE_SABBREVDAYNAME5 0x00000035 // abbreviated name for Friday
  430. #define LOCALE_SABBREVDAYNAME6 0x00000036 // abbreviated name for Saturday
  431. #define LOCALE_SABBREVDAYNAME7 0x00000037 // abbreviated name for Sunday
  432. #define LOCALE_SMONTHNAME1 0x00000038 // long name for January
  433. #define LOCALE_SMONTHNAME2 0x00000039 // long name for February
  434. #define LOCALE_SMONTHNAME3 0x0000003A // long name for March
  435. #define LOCALE_SMONTHNAME4 0x0000003B // long name for April
  436. #define LOCALE_SMONTHNAME5 0x0000003C // long name for May
  437. #define LOCALE_SMONTHNAME6 0x0000003D // long name for June
  438. #define LOCALE_SMONTHNAME7 0x0000003E // long name for July
  439. #define LOCALE_SMONTHNAME8 0x0000003F // long name for August
  440. #define LOCALE_SMONTHNAME9 0x00000040 // long name for September
  441. #define LOCALE_SMONTHNAME10 0x00000041 // long name for October
  442. #define LOCALE_SMONTHNAME11 0x00000042 // long name for November
  443. #define LOCALE_SMONTHNAME12 0x00000043 // long name for December
  444. #define LOCALE_SMONTHNAME13 0x0000100E // long name for 13th month (if exists)
  445. #define LOCALE_SABBREVMONTHNAME1 0x00000044 // abbreviated name for January
  446. #define LOCALE_SABBREVMONTHNAME2 0x00000045 // abbreviated name for February
  447. #define LOCALE_SABBREVMONTHNAME3 0x00000046 // abbreviated name for March
  448. #define LOCALE_SABBREVMONTHNAME4 0x00000047 // abbreviated name for April
  449. #define LOCALE_SABBREVMONTHNAME5 0x00000048 // abbreviated name for May
  450. #define LOCALE_SABBREVMONTHNAME6 0x00000049 // abbreviated name for June
  451. #define LOCALE_SABBREVMONTHNAME7 0x0000004A // abbreviated name for July
  452. #define LOCALE_SABBREVMONTHNAME8 0x0000004B // abbreviated name for August
  453. #define LOCALE_SABBREVMONTHNAME9 0x0000004C // abbreviated name for September
  454. #define LOCALE_SABBREVMONTHNAME10 0x0000004D // abbreviated name for October
  455. #define LOCALE_SABBREVMONTHNAME11 0x0000004E // abbreviated name for November
  456. #define LOCALE_SABBREVMONTHNAME12 0x0000004F // abbreviated name for December
  457. #define LOCALE_SABBREVMONTHNAME13 0x0000100F // abbreviated name for 13th month (if exists)
  458. #define LOCALE_SPOSITIVESIGN 0x00000050 // positive sign
  459. #define LOCALE_SNEGATIVESIGN 0x00000051 // negative sign
  460. #define LOCALE_IPOSSIGNPOSN 0x00000052 // positive sign position
  461. #define LOCALE_INEGSIGNPOSN 0x00000053 // negative sign position
  462. #define LOCALE_IPOSSYMPRECEDES 0x00000054 // mon sym precedes pos amt
  463. #define LOCALE_IPOSSEPBYSPACE 0x00000055 // mon sym sep by space from pos amt
  464. #define LOCALE_INEGSYMPRECEDES 0x00000056 // mon sym precedes neg amt
  465. #define LOCALE_INEGSEPBYSPACE 0x00000057 // mon sym sep by space from neg amt
  466. ;begin_winver_400
  467. #define LOCALE_FONTSIGNATURE 0x00000058 // font signature
  468. #define LOCALE_SISO639LANGNAME 0x00000059 // ISO abbreviated language name
  469. #define LOCALE_SISO3166CTRYNAME 0x0000005A // ISO abbreviated country name
  470. ;end_winver_400
  471. ;begin_winver_500
  472. #define LOCALE_IDEFAULTEBCDICCODEPAGE 0x00001012 // default ebcdic code page
  473. #define LOCALE_IPAPERSIZE 0x0000100A // 1 = letter, 5 = legal, 8 = a3, 9 = a4
  474. #define LOCALE_SENGCURRNAME 0x00001007 // english name of currency
  475. #define LOCALE_SNATIVECURRNAME 0x00001008 // native name of currency
  476. #define LOCALE_SYEARMONTH 0x00001006 // year month format string
  477. #define LOCALE_SSORTNAME 0x00001013 // sort name
  478. #define LOCALE_IDIGITSUBSTITUTION 0x00001014 // 0 = context, 1 = none, 2 = national
  479. // ;internal_NT
  480. // LCType to represent the registry locale value ;internal_NT
  481. // ;internal_NT
  482. #define LOCALE_SLOCALE (-1) ;internal_NT
  483. ;end_winver_500
  484. //
  485. // Time Flags for GetTimeFormat.
  486. //
  487. #define TIME_NOMINUTESORSECONDS 0x00000001 // do not use minutes or seconds
  488. #define TIME_NOSECONDS 0x00000002 // do not use seconds
  489. #define TIME_NOTIMEMARKER 0x00000004 // do not use time marker
  490. #define TIME_FORCE24HOURFORMAT 0x00000008 // always use 24 hour format
  491. //
  492. // Date Flags for GetDateFormat.
  493. //
  494. #define DATE_SHORTDATE 0x00000001 // use short date picture
  495. #define DATE_LONGDATE 0x00000002 // use long date picture
  496. #define DATE_USE_ALT_CALENDAR 0x00000004 // use alternate calendar (if any)
  497. ;begin_winver_500
  498. #define DATE_YEARMONTH 0x00000008 // use year month picture
  499. #define DATE_LTRREADING 0x00000010 // add marks for left to right reading order layout
  500. #define DATE_RTLREADING 0x00000020 // add marks for right to left reading order layout
  501. #define DATE_ADDHIJRIDATETEMP 0x80000000 // use AddHijriDateTemp reg value ;internal_NT
  502. ;end_winver_500
  503. //
  504. // Calendar Types.
  505. //
  506. // These types are used for the EnumCalendarInfo and GetCalendarInfo
  507. // NLS API routines.
  508. // Some of these types are also used for the SetCalendarInfo NLS API
  509. // routine.
  510. //
  511. //
  512. // The following CalTypes may be used in combination with any other CalTypes.
  513. //
  514. // CAL_NOUSEROVERRIDE
  515. //
  516. // CAL_USE_CP_ACP is used in the A (Ansi) apis that need to do string
  517. // translation.
  518. //
  519. // CAL_RETURN_NUMBER will return the result from GetCalendarInfo as a
  520. // number instead of a string. This flag is only valid for the CalTypes
  521. // beginning with CAL_I.
  522. //
  523. ;begin_winver_500
  524. #define CAL_NOUSEROVERRIDE LOCALE_NOUSEROVERRIDE // do not use user overrides
  525. #define CAL_USE_CP_ACP LOCALE_USE_CP_ACP // use the system ACP
  526. #define CAL_RETURN_NUMBER LOCALE_RETURN_NUMBER // return number instead of string
  527. ;end_winver_400
  528. //
  529. // The following CalTypes are mutually exclusive in that they may NOT
  530. // be used in combination with each other.
  531. //
  532. #define CAL_ICALINTVALUE 0x00000001 // calendar type
  533. #define CAL_SCALNAME 0x00000002 // native name of calendar
  534. #define CAL_IYEAROFFSETRANGE 0x00000003 // starting years of eras
  535. #define CAL_SERASTRING 0x00000004 // era name for IYearOffsetRanges
  536. #define CAL_SSHORTDATE 0x00000005 // short date format string
  537. #define CAL_SLONGDATE 0x00000006 // long date format string
  538. #define CAL_SDAYNAME1 0x00000007 // native name for Monday
  539. #define CAL_SDAYNAME2 0x00000008 // native name for Tuesday
  540. #define CAL_SDAYNAME3 0x00000009 // native name for Wednesday
  541. #define CAL_SDAYNAME4 0x0000000a // native name for Thursday
  542. #define CAL_SDAYNAME5 0x0000000b // native name for Friday
  543. #define CAL_SDAYNAME6 0x0000000c // native name for Saturday
  544. #define CAL_SDAYNAME7 0x0000000d // native name for Sunday
  545. #define CAL_SABBREVDAYNAME1 0x0000000e // abbreviated name for Monday
  546. #define CAL_SABBREVDAYNAME2 0x0000000f // abbreviated name for Tuesday
  547. #define CAL_SABBREVDAYNAME3 0x00000010 // abbreviated name for Wednesday
  548. #define CAL_SABBREVDAYNAME4 0x00000011 // abbreviated name for Thursday
  549. #define CAL_SABBREVDAYNAME5 0x00000012 // abbreviated name for Friday
  550. #define CAL_SABBREVDAYNAME6 0x00000013 // abbreviated name for Saturday
  551. #define CAL_SABBREVDAYNAME7 0x00000014 // abbreviated name for Sunday
  552. #define CAL_SMONTHNAME1 0x00000015 // native name for January
  553. #define CAL_SMONTHNAME2 0x00000016 // native name for February
  554. #define CAL_SMONTHNAME3 0x00000017 // native name for March
  555. #define CAL_SMONTHNAME4 0x00000018 // native name for April
  556. #define CAL_SMONTHNAME5 0x00000019 // native name for May
  557. #define CAL_SMONTHNAME6 0x0000001a // native name for June
  558. #define CAL_SMONTHNAME7 0x0000001b // native name for July
  559. #define CAL_SMONTHNAME8 0x0000001c // native name for August
  560. #define CAL_SMONTHNAME9 0x0000001d // native name for September
  561. #define CAL_SMONTHNAME10 0x0000001e // native name for October
  562. #define CAL_SMONTHNAME11 0x0000001f // native name for November
  563. #define CAL_SMONTHNAME12 0x00000020 // native name for December
  564. #define CAL_SMONTHNAME13 0x00000021 // native name for 13th month (if any)
  565. #define CAL_SABBREVMONTHNAME1 0x00000022 // abbreviated name for January
  566. #define CAL_SABBREVMONTHNAME2 0x00000023 // abbreviated name for February
  567. #define CAL_SABBREVMONTHNAME3 0x00000024 // abbreviated name for March
  568. #define CAL_SABBREVMONTHNAME4 0x00000025 // abbreviated name for April
  569. #define CAL_SABBREVMONTHNAME5 0x00000026 // abbreviated name for May
  570. #define CAL_SABBREVMONTHNAME6 0x00000027 // abbreviated name for June
  571. #define CAL_SABBREVMONTHNAME7 0x00000028 // abbreviated name for July
  572. #define CAL_SABBREVMONTHNAME8 0x00000029 // abbreviated name for August
  573. #define CAL_SABBREVMONTHNAME9 0x0000002a // abbreviated name for September
  574. #define CAL_SABBREVMONTHNAME10 0x0000002b // abbreviated name for October
  575. #define CAL_SABBREVMONTHNAME11 0x0000002c // abbreviated name for November
  576. #define CAL_SABBREVMONTHNAME12 0x0000002d // abbreviated name for December
  577. #define CAL_SABBREVMONTHNAME13 0x0000002e // abbreviated name for 13th month (if any)
  578. ;begin_winver_500
  579. #define CAL_SYEARMONTH 0x0000002f // year month format string
  580. #define CAL_ITWODIGITYEARMAX 0x00000030 // two digit year max
  581. ;end_winver_500
  582. //
  583. // Calendar Enumeration Value.
  584. //
  585. #define ENUM_ALL_CALENDARS 0xffffffff // enumerate all calendars
  586. //
  587. // Calendar ID Values.
  588. //
  589. #define CAL_GREGORIAN 1 // Gregorian (localized) calendar
  590. #define CAL_GREGORIAN_US 2 // Gregorian (U.S.) calendar
  591. #define CAL_JAPAN 3 // Japanese Emperor Era calendar
  592. #define CAL_TAIWAN 4 // Taiwan calendar
  593. #define CAL_KOREA 5 // Korean Tangun Era calendar
  594. #define CAL_HIJRI 6 // Hijri (Arabic Lunar) calendar
  595. #define CAL_THAI 7 // Thai calendar
  596. #define CAL_HEBREW 8 // Hebrew (Lunar) calendar
  597. #define CAL_GREGORIAN_ME_FRENCH 9 // Gregorian Middle East French calendar
  598. #define CAL_GREGORIAN_ARABIC 10 // Gregorian Arabic calendar
  599. #define CAL_GREGORIAN_XLIT_ENGLISH 11 // Gregorian Transliterated English calendar
  600. #define CAL_GREGORIAN_XLIT_FRENCH 12 // Gregorian Transliterated French calendar
  601. //
  602. // Language Group ID Values.
  603. //
  604. #define LGRPID_WESTERN_EUROPE 0x0001 // Western Europe & U.S.
  605. #define LGRPID_CENTRAL_EUROPE 0x0002 // Central Europe
  606. #define LGRPID_BALTIC 0x0003 // Baltic
  607. #define LGRPID_GREEK 0x0004 // Greek
  608. #define LGRPID_CYRILLIC 0x0005 // Cyrillic
  609. #define LGRPID_TURKISH 0x0006 // Turkish
  610. #define LGRPID_JAPANESE 0x0007 // Japanese
  611. #define LGRPID_KOREAN 0x0008 // Korean
  612. #define LGRPID_TRADITIONAL_CHINESE 0x0009 // Traditional Chinese
  613. #define LGRPID_SIMPLIFIED_CHINESE 0x000a // Simplified Chinese
  614. #define LGRPID_THAI 0x000b // Thai
  615. #define LGRPID_HEBREW 0x000c // Hebrew
  616. #define LGRPID_ARABIC 0x000d // Arabic
  617. #define LGRPID_VIETNAMESE 0x000e // Vietnamese
  618. #define LGRPID_INDIC 0x000f // Indic
  619. #define LGRPID_GEORGIAN 0x0010 // Georgian
  620. #define LGRPID_ARMENIAN 0x0011 // Armenian
  621. ////////////////////////////////////////////////////////////////////////////
  622. //
  623. // Typedefs
  624. //
  625. // Define all types for the NLS component here.
  626. //
  627. ////////////////////////////////////////////////////////////////////////////
  628. //
  629. // Language Group ID.
  630. //
  631. typedef DWORD LGRPID;
  632. //
  633. // Locale type constant.
  634. //
  635. typedef DWORD LCTYPE;
  636. //
  637. // Calendar type constant.
  638. //
  639. typedef DWORD CALTYPE;
  640. //
  641. // Calendar ID.
  642. //
  643. typedef DWORD CALID;
  644. //
  645. // CP Info.
  646. //
  647. typedef struct _cpinfo {
  648. UINT MaxCharSize; // max length (in bytes) of a char
  649. BYTE DefaultChar[MAX_DEFAULTCHAR]; // default character
  650. BYTE LeadByte[MAX_LEADBYTES]; // lead byte ranges
  651. } CPINFO, *LPCPINFO;
  652. typedef struct _cpinfoex% {
  653. UINT MaxCharSize; // max length (in bytes) of a char
  654. BYTE DefaultChar[MAX_DEFAULTCHAR]; // default character (MB)
  655. BYTE LeadByte[MAX_LEADBYTES]; // lead byte ranges
  656. WCHAR UnicodeDefaultChar; // default character (Unicode)
  657. UINT CodePage; // code page id
  658. TCHAR% CodePageName[MAX_PATH]; // code page name (Unicode)
  659. } CPINFOEX%, *LPCPINFOEX%;
  660. //
  661. // Number format.
  662. //
  663. typedef struct _numberfmt% {
  664. UINT NumDigits; // number of decimal digits
  665. UINT LeadingZero; // if leading zero in decimal fields
  666. UINT Grouping; // group size left of decimal
  667. LPTSTR% lpDecimalSep; // ptr to decimal separator string
  668. LPTSTR% lpThousandSep; // ptr to thousand separator string
  669. UINT NegativeOrder; // negative number ordering
  670. } NUMBERFMT%, *LPNUMBERFMT%;
  671. //
  672. // Currency format.
  673. //
  674. typedef struct _currencyfmt% {
  675. UINT NumDigits; // number of decimal digits
  676. UINT LeadingZero; // if leading zero in decimal fields
  677. UINT Grouping; // group size left of decimal
  678. LPTSTR% lpDecimalSep; // ptr to decimal separator string
  679. LPTSTR% lpThousandSep; // ptr to thousand separator string
  680. UINT NegativeOrder; // negative currency ordering
  681. UINT PositiveOrder; // positive currency ordering
  682. LPTSTR% lpCurrencySymbol; // ptr to currency symbol string
  683. } CURRENCYFMT%, *LPCURRENCYFMT%;
  684. //
  685. // NLS function capabilities
  686. //
  687. enum SYSNLS_FUNCTION{
  688. COMPARE_STRING = 0x0001,
  689. };
  690. typedef DWORD NLS_FUNCTION;
  691. //
  692. // NLS version structure.
  693. //
  694. typedef struct _nlsversioninfo{
  695. DWORD dwNLSVersionInfoSize;
  696. DWORD dwNLSVersion;
  697. DWORD dwDefinedVersion;
  698. } NLSVERSIONINFO, *LPNLSVERSIONINFO;
  699. //
  700. // GEO defines
  701. //
  702. typedef LONG GEOID;
  703. typedef DWORD GEOTYPE;
  704. typedef DWORD GEOCLASS;
  705. #define GEOID_NOT_AVAILABLE -1
  706. //
  707. // GEO information types for clients to query
  708. //
  709. enum SYSGEOTYPE {
  710. GEO_NATION = 0x0001,
  711. GEO_LATITUDE = 0x0002,
  712. GEO_LONGITUDE = 0x0003,
  713. GEO_ISO2 = 0x0004,
  714. GEO_ISO3 = 0x0005,
  715. GEO_RFC1766 = 0x0006,
  716. GEO_LCID = 0x0007,
  717. GEO_FRIENDLYNAME= 0x0008,
  718. GEO_OFFICIALNAME= 0x0009,
  719. GEO_TIMEZONES = 0x000A,
  720. GEO_OFFICIALLANGUAGES = 0x000B,
  721. };
  722. //
  723. // More GEOCLASS defines will be listed here
  724. //
  725. enum SYSGEOCLASS {
  726. GEOCLASS_NATION = 16,
  727. GEOCLASS_REGION = 14,
  728. };
  729. //
  730. // Enumeration function constants.
  731. //
  732. #ifdef STRICT
  733. typedef BOOL (CALLBACK* LANGUAGEGROUP_ENUMPROCA)(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR);
  734. typedef BOOL (CALLBACK* LANGGROUPLOCALE_ENUMPROCA)(LGRPID, LCID, LPSTR, LONG_PTR);
  735. typedef BOOL (CALLBACK* UILANGUAGE_ENUMPROCA)(LPSTR, LONG_PTR);
  736. typedef BOOL (CALLBACK* LOCALE_ENUMPROCA)(LPSTR);
  737. typedef BOOL (CALLBACK* CODEPAGE_ENUMPROCA)(LPSTR);
  738. typedef BOOL (CALLBACK* DATEFMT_ENUMPROCA)(LPSTR);
  739. typedef BOOL (CALLBACK* DATEFMT_ENUMPROCEXA)(LPSTR, CALID);
  740. typedef BOOL (CALLBACK* TIMEFMT_ENUMPROCA)(LPSTR);
  741. typedef BOOL (CALLBACK* CALINFO_ENUMPROCA)(LPSTR);
  742. typedef BOOL (CALLBACK* CALINFO_ENUMPROCEXA)(LPSTR, CALID);
  743. typedef BOOL (CALLBACK* LANGUAGEGROUP_ENUMPROCW)(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR);
  744. typedef BOOL (CALLBACK* LANGGROUPLOCALE_ENUMPROCW)(LGRPID, LCID, LPWSTR, LONG_PTR);
  745. typedef BOOL (CALLBACK* UILANGUAGE_ENUMPROCW)(LPWSTR, LONG_PTR);
  746. typedef BOOL (CALLBACK* LOCALE_ENUMPROCW)(LPWSTR);
  747. typedef BOOL (CALLBACK* CODEPAGE_ENUMPROCW)(LPWSTR);
  748. typedef BOOL (CALLBACK* DATEFMT_ENUMPROCW)(LPWSTR);
  749. typedef BOOL (CALLBACK* DATEFMT_ENUMPROCEXW)(LPWSTR, CALID);
  750. typedef BOOL (CALLBACK* TIMEFMT_ENUMPROCW)(LPWSTR);
  751. typedef BOOL (CALLBACK* CALINFO_ENUMPROCW)(LPWSTR);
  752. typedef BOOL (CALLBACK* CALINFO_ENUMPROCEXW)(LPWSTR, CALID);
  753. typedef BOOL (CALLBACK* GEO_ENUMPROC)(GEOID);
  754. #else // !STRICT
  755. typedef FARPROC LANGUAGEGROUP_ENUMPROCA;
  756. typedef FARPROC LANGGROUPLOCALE_ENUMPROCA;
  757. typedef FARPROC UILANGUAGE_ENUMPROCA;
  758. typedef FARPROC LOCALE_ENUMPROCA;
  759. typedef FARPROC CODEPAGE_ENUMPROCA;
  760. typedef FARPROC DATEFMT_ENUMPROCA;
  761. typedef FARPROC DATEFMT_ENUMPROCEXA;
  762. typedef FARPROC TIMEFMT_ENUMPROCA;
  763. typedef FARPROC CALINFO_ENUMPROCA;
  764. typedef FARPROC CALINFO_ENUMPROCEXA;
  765. typedef FARPROC GEO_ENUMPROC;
  766. typedef FARPROC LANGUAGEGROUP_ENUMPROCW;
  767. typedef FARPROC LANGGROUPLOCALE_ENUMPROCW;
  768. typedef FARPROC UILANGUAGE_ENUMPROCW;
  769. typedef FARPROC LOCALE_ENUMPROCW;
  770. typedef FARPROC CODEPAGE_ENUMPROCW;
  771. typedef FARPROC DATEFMT_ENUMPROCW;
  772. typedef FARPROC DATEFMT_ENUMPROCEXW;
  773. typedef FARPROC TIMEFMT_ENUMPROCW;
  774. typedef FARPROC CALINFO_ENUMPROCW;
  775. typedef FARPROC CALINFO_ENUMPROCEXW;
  776. #endif // !STRICT
  777. #ifdef UNICODE
  778. #define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCW
  779. #define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCW
  780. #define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCW
  781. #define LOCALE_ENUMPROC LOCALE_ENUMPROCW
  782. #define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCW
  783. #define DATEFMT_ENUMPROC DATEFMT_ENUMPROCW
  784. #define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXW
  785. #define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCW
  786. #define CALINFO_ENUMPROC CALINFO_ENUMPROCW
  787. #define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXW
  788. #else
  789. #define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCA
  790. #define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCA
  791. #define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCA
  792. #define LOCALE_ENUMPROC LOCALE_ENUMPROCA
  793. #define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCA
  794. #define DATEFMT_ENUMPROC DATEFMT_ENUMPROCA
  795. #define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXA
  796. #define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCA
  797. #define CALINFO_ENUMPROC CALINFO_ENUMPROCA
  798. #define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXA
  799. #endif // !UNICODE
  800. ////////////////////////////////////////////////////////////////////////////
  801. //
  802. // Macros
  803. //
  804. // Define all macros for the NLS component here.
  805. //
  806. ////////////////////////////////////////////////////////////////////////////
  807. ////////////////////////////////////////////////////////////////////////////
  808. //
  809. // Function Prototypes
  810. //
  811. // Only prototypes for the NLS APIs should go here.
  812. //
  813. ////////////////////////////////////////////////////////////////////////////
  814. //
  815. // Code Page Dependent APIs.
  816. //
  817. WINBASEAPI
  818. BOOL
  819. WINAPI
  820. IsValidCodePage(
  821. IN UINT CodePage);
  822. WINBASEAPI
  823. UINT
  824. WINAPI
  825. GetACP(void);
  826. WINBASEAPI
  827. UINT
  828. WINAPI
  829. GetOEMCP(void);
  830. WINBASEAPI
  831. BOOL
  832. WINAPI
  833. GetCPInfo(
  834. IN UINT CodePage,
  835. OUT LPCPINFO lpCPInfo);
  836. WINBASEAPI
  837. BOOL
  838. WINAPI
  839. GetCPInfoEx%(
  840. IN UINT CodePage,
  841. IN DWORD dwFlags,
  842. OUT LPCPINFOEX% lpCPInfoEx);
  843. WINBASEAPI
  844. BOOL
  845. WINAPI
  846. IsDBCSLeadByte(
  847. IN BYTE TestChar);
  848. WINBASEAPI
  849. BOOL
  850. WINAPI
  851. IsDBCSLeadByteEx(
  852. IN UINT CodePage,
  853. IN BYTE TestChar);
  854. WINBASEAPI
  855. int
  856. WINAPI
  857. MultiByteToWideChar(
  858. IN UINT CodePage,
  859. IN DWORD dwFlags,
  860. IN LPCSTR lpMultiByteStr,
  861. IN int cbMultiByte,
  862. OUT LPWSTR lpWideCharStr,
  863. IN int cchWideChar);
  864. WINBASEAPI
  865. int
  866. WINAPI
  867. WideCharToMultiByte(
  868. IN UINT CodePage,
  869. IN DWORD dwFlags,
  870. IN LPCWSTR lpWideCharStr,
  871. IN int cchWideChar,
  872. OUT LPSTR lpMultiByteStr,
  873. IN int cbMultiByte,
  874. IN LPCSTR lpDefaultChar,
  875. OUT LPBOOL lpUsedDefaultChar);
  876. //
  877. // Locale Dependent APIs.
  878. //
  879. WINBASEAPI
  880. int
  881. WINAPI
  882. CompareString%(
  883. IN LCID Locale,
  884. IN DWORD dwCmpFlags,
  885. IN LPCTSTR% lpString1,
  886. IN int cchCount1,
  887. IN LPCTSTR% lpString2,
  888. IN int cchCount2);
  889. WINBASEAPI
  890. int
  891. WINAPI
  892. LCMapString%(
  893. IN LCID Locale,
  894. IN DWORD dwMapFlags,
  895. IN LPCTSTR% lpSrcStr,
  896. IN int cchSrc,
  897. OUT LPTSTR% lpDestStr,
  898. IN int cchDest);
  899. WINBASEAPI
  900. int
  901. WINAPI
  902. GetLocaleInfo%(
  903. IN LCID Locale,
  904. IN LCTYPE LCType,
  905. OUT LPTSTR% lpLCData,
  906. IN int cchData);
  907. WINBASEAPI
  908. BOOL
  909. WINAPI
  910. SetLocaleInfo%(
  911. IN LCID Locale,
  912. IN LCTYPE LCType,
  913. IN LPCTSTR% lpLCData);
  914. #if (WINVER >= 0x040A)
  915. WINBASEAPI
  916. int
  917. WINAPI
  918. GetCalendarInfo%(
  919. LCID Locale,
  920. CALID Calendar,
  921. CALTYPE CalType,
  922. LPTSTR% lpCalData,
  923. int cchData,
  924. LPDWORD lpValue);
  925. WINBASEAPI
  926. BOOL
  927. WINAPI
  928. SetCalendarInfo%(
  929. LCID Locale,
  930. CALID Calendar,
  931. CALTYPE CalType,
  932. LPCTSTR% lpCalData);
  933. #endif
  934. WINBASEAPI
  935. int
  936. WINAPI
  937. GetTimeFormat%(
  938. IN LCID Locale,
  939. IN DWORD dwFlags,
  940. IN CONST SYSTEMTIME *lpTime,
  941. IN LPCTSTR% lpFormat,
  942. OUT LPTSTR% lpTimeStr,
  943. IN int cchTime);
  944. WINBASEAPI
  945. int
  946. WINAPI
  947. GetDateFormat%(
  948. IN LCID Locale,
  949. IN DWORD dwFlags,
  950. IN CONST SYSTEMTIME *lpDate,
  951. IN LPCTSTR% lpFormat,
  952. OUT LPTSTR% lpDateStr,
  953. IN int cchDate);
  954. WINBASEAPI
  955. int
  956. WINAPI
  957. GetNumberFormat%(
  958. IN LCID Locale,
  959. IN DWORD dwFlags,
  960. IN LPCTSTR% lpValue,
  961. IN CONST NUMBERFMT% *lpFormat,
  962. OUT LPTSTR% lpNumberStr,
  963. IN int cchNumber);
  964. WINBASEAPI
  965. int
  966. WINAPI
  967. GetCurrencyFormat%(
  968. IN LCID Locale,
  969. IN DWORD dwFlags,
  970. IN LPCTSTR% lpValue,
  971. IN CONST CURRENCYFMT% *lpFormat,
  972. OUT LPTSTR% lpCurrencyStr,
  973. IN int cchCurrency);
  974. WINBASEAPI
  975. BOOL
  976. WINAPI
  977. EnumCalendarInfo%(
  978. IN CALINFO_ENUMPROC% lpCalInfoEnumProc,
  979. IN LCID Locale,
  980. IN CALID Calendar,
  981. IN CALTYPE CalType);
  982. ;begin_winver_500
  983. WINBASEAPI
  984. BOOL
  985. WINAPI
  986. EnumCalendarInfoEx%(
  987. IN CALINFO_ENUMPROCEX% lpCalInfoEnumProcEx,
  988. IN LCID Locale,
  989. IN CALID Calendar,
  990. IN CALTYPE CalType);
  991. ;end_winver_500
  992. WINBASEAPI
  993. BOOL
  994. WINAPI
  995. EnumTimeFormats%(
  996. IN TIMEFMT_ENUMPROC% lpTimeFmtEnumProc,
  997. IN LCID Locale,
  998. IN DWORD dwFlags);
  999. WINBASEAPI
  1000. BOOL
  1001. WINAPI
  1002. EnumDateFormats%(
  1003. IN DATEFMT_ENUMPROC% lpDateFmtEnumProc,
  1004. IN LCID Locale,
  1005. IN DWORD dwFlags);
  1006. ;begin_winver_500
  1007. WINBASEAPI
  1008. BOOL
  1009. WINAPI
  1010. EnumDateFormatsEx%(
  1011. IN DATEFMT_ENUMPROCEX% lpDateFmtEnumProcEx,
  1012. IN LCID Locale,
  1013. IN DWORD dwFlags);
  1014. ;end_winver_500
  1015. ;begin_winver_500
  1016. WINBASEAPI
  1017. BOOL
  1018. WINAPI
  1019. IsValidLanguageGroup(
  1020. IN LGRPID LanguageGroup,
  1021. IN DWORD dwFlags);
  1022. ;end_winver_500
  1023. WINBASEAPI
  1024. BOOL
  1025. WINAPI
  1026. GetNLSVersion(
  1027. IN NLS_FUNCTION Function,
  1028. IN LCID Locale,
  1029. OUT LPNLSVERSIONINFO lpVersionInformation);
  1030. WINBASEAPI
  1031. BOOL
  1032. WINAPI
  1033. IsNLSDefinedString(
  1034. IN NLS_FUNCTION Function,
  1035. IN DWORD dwFlags,
  1036. IN LPNLSVERSIONINFO lpVersionInformation,
  1037. IN LPCWSTR lpString,
  1038. IN INT cchStr);
  1039. WINBASEAPI
  1040. BOOL
  1041. WINAPI
  1042. IsValidLocale(
  1043. IN LCID Locale,
  1044. IN DWORD dwFlags);
  1045. WINBASEAPI
  1046. int
  1047. WINAPI
  1048. GetGeoInfo%(
  1049. GEOID Location,
  1050. GEOTYPE GeoType,
  1051. LPTSTR% lpGeoData,
  1052. int cchData,
  1053. LANGID LangId);
  1054. WINBASEAPI
  1055. BOOL
  1056. WINAPI
  1057. EnumSystemGeoID(
  1058. GEOCLASS GeoClass,
  1059. GEOID ParentGeoId,
  1060. GEO_ENUMPROC lpGeoEnumProc);
  1061. WINBASEAPI
  1062. GEOID
  1063. WINAPI
  1064. GetUserGeoID(
  1065. GEOCLASS GeoClass);
  1066. WINBASEAPI
  1067. BOOL
  1068. WINAPI
  1069. SetUserGeoID(
  1070. GEOID GeoId);
  1071. WINBASEAPI
  1072. LCID
  1073. WINAPI
  1074. ConvertDefaultLocale(
  1075. IN OUT LCID Locale);
  1076. WINBASEAPI
  1077. LCID
  1078. WINAPI
  1079. GetThreadLocale(void);
  1080. WINBASEAPI
  1081. BOOL
  1082. WINAPI
  1083. SetThreadLocale(
  1084. IN LCID Locale
  1085. );
  1086. ;begin_winver_500
  1087. WINBASEAPI
  1088. LANGID
  1089. WINAPI
  1090. GetSystemDefaultUILanguage(void);
  1091. WINBASEAPI
  1092. LANGID
  1093. WINAPI
  1094. GetUserDefaultUILanguage(void);
  1095. ;end_winver_500
  1096. WINBASEAPI
  1097. LANGID
  1098. WINAPI
  1099. GetSystemDefaultLangID(void);
  1100. WINBASEAPI
  1101. LANGID
  1102. WINAPI
  1103. GetUserDefaultLangID(void);
  1104. WINBASEAPI
  1105. LCID
  1106. WINAPI
  1107. GetSystemDefaultLCID(void);
  1108. WINBASEAPI
  1109. LCID
  1110. WINAPI
  1111. GetUserDefaultLCID(void);
  1112. WINBASEAPI ;internal_win40
  1113. BOOL ;internal_win40
  1114. WINAPI ;internal_win40
  1115. InvalidateNLSCache(void); ;internal_win40
  1116. ;internal_win40
  1117. // ;internal_NT
  1118. // This private API is only called by the Complex Script ;internal_NT
  1119. // Language Pack (CSLPK). ;internal_NT
  1120. // ;internal_NT
  1121. ULONG ;internal_NT
  1122. WINAPI NlsGetCacheUpdateCount(void); ;internal_NT
  1123. ;internal_NT
  1124. // ;internal_NT
  1125. // This API is called only from intl.cpl when the user ;internal_NT
  1126. // locale changes. ;internal_NT
  1127. // ;internal_NT
  1128. void ;internal_NT
  1129. WINAPI ;internal_NT
  1130. NlsResetProcessLocale(void); ;internal_NT
  1131. // ;internal_NT
  1132. // This API is called by system console Apps ;internal_NT
  1133. // ;internal_NT
  1134. LANGID ;internal_NT
  1135. WINAPI ;internal_NT
  1136. SetThreadUILanguage(WORD wReserved); ;internal_NT
  1137. // ;internal_NT
  1138. // This API can be used to verify if a UI language is installed.;internal_NT
  1139. // ;internal_NT
  1140. BOOL ;internal_NT
  1141. WINAPI ;internal_NT
  1142. IsValidUILanguage(LANGID UILangID); ;internal_NT
  1143. //
  1144. // Locale Independent APIs.
  1145. //
  1146. WINBASEAPI
  1147. BOOL
  1148. WINAPI
  1149. GetStringTypeEx%(
  1150. IN LCID Locale,
  1151. IN DWORD dwInfoType,
  1152. IN LPCTSTR% lpSrcStr,
  1153. IN int cchSrc,
  1154. OUT LPWORD lpCharType);
  1155. //
  1156. // NOTE: The parameters for GetStringTypeA and GetStringTypeW are
  1157. // NOT the same. The W version was shipped in NT 3.1. The
  1158. // A version was then shipped in 16-bit OLE with the wrong
  1159. // parameters (ported from Win95). To be compatible, we
  1160. // must break the relationship between the A and W versions
  1161. // of GetStringType. There will be NO function call for the
  1162. // generic GetStringType.
  1163. //
  1164. // GetStringTypeEx (above) should be used instead.
  1165. //
  1166. WINBASEAPI
  1167. BOOL
  1168. WINAPI
  1169. GetStringTypeA(
  1170. IN LCID Locale,
  1171. IN DWORD dwInfoType,
  1172. IN LPCSTR lpSrcStr,
  1173. IN int cchSrc,
  1174. OUT LPWORD lpCharType);
  1175. WINBASEAPI
  1176. BOOL
  1177. WINAPI
  1178. GetStringTypeW(
  1179. IN DWORD dwInfoType,
  1180. IN LPCWSTR lpSrcStr,
  1181. IN int cchSrc,
  1182. OUT LPWORD lpCharType);
  1183. WINBASEAPI
  1184. int
  1185. WINAPI
  1186. FoldString%(
  1187. IN DWORD dwMapFlags,
  1188. IN LPCTSTR% lpSrcStr,
  1189. IN int cchSrc,
  1190. OUT LPTSTR% lpDestStr,
  1191. IN int cchDest);
  1192. ;begin_winver_500
  1193. WINBASEAPI
  1194. BOOL
  1195. WINAPI
  1196. EnumSystemLanguageGroups%(
  1197. IN LANGUAGEGROUP_ENUMPROC% lpLanguageGroupEnumProc,
  1198. IN DWORD dwFlags,
  1199. IN LONG_PTR lParam);
  1200. WINBASEAPI
  1201. BOOL
  1202. WINAPI
  1203. EnumLanguageGroupLocales%(
  1204. IN LANGGROUPLOCALE_ENUMPROC% lpLangGroupLocaleEnumProc,
  1205. IN LGRPID LanguageGroup,
  1206. IN DWORD dwFlags,
  1207. IN LONG_PTR lParam);
  1208. WINBASEAPI
  1209. BOOL
  1210. WINAPI
  1211. EnumUILanguages%(
  1212. IN UILANGUAGE_ENUMPROC% lpUILanguageEnumProc,
  1213. IN DWORD dwFlags,
  1214. IN LONG_PTR lParam);
  1215. ;end_winver_500
  1216. WINBASEAPI
  1217. BOOL
  1218. WINAPI
  1219. EnumSystemLocales%(
  1220. IN LOCALE_ENUMPROC% lpLocaleEnumProc,
  1221. IN DWORD dwFlags);
  1222. WINBASEAPI
  1223. BOOL
  1224. WINAPI
  1225. EnumSystemCodePages%(
  1226. IN CODEPAGE_ENUMPROC% lpCodePageEnumProc,
  1227. IN DWORD dwFlags);
  1228. ;begin_internal_NT
  1229. //
  1230. // These definitions are used by both winnls and base\server
  1231. //
  1232. //
  1233. // Names of Registry Value Entries.
  1234. //
  1235. #define NLS_VALUE_ACP L"ACP"
  1236. #define NLS_VALUE_OEMCP L"OEMCP"
  1237. #define NLS_VALUE_MACCP L"MACCP"
  1238. #define NLS_VALUE_DEFAULT L"Default"
  1239. // User Info
  1240. #define NLS_VALUE_LOCALE L"Locale"
  1241. #define NLS_VALUE_SLANGUAGE L"sLanguage"
  1242. #define NLS_VALUE_ICOUNTRY L"iCountry"
  1243. #define NLS_VALUE_SCOUNTRY L"sCountry"
  1244. #define NLS_VALUE_SLIST L"sList"
  1245. #define NLS_VALUE_IMEASURE L"iMeasure"
  1246. #define NLS_VALUE_IPAPERSIZE L"iPaperSize"
  1247. #define NLS_VALUE_SDECIMAL L"sDecimal"
  1248. #define NLS_VALUE_STHOUSAND L"sThousand"
  1249. #define NLS_VALUE_SGROUPING L"sGrouping"
  1250. #define NLS_VALUE_IDIGITS L"iDigits"
  1251. #define NLS_VALUE_ILZERO L"iLZero"
  1252. #define NLS_VALUE_INEGNUMBER L"iNegNumber"
  1253. #define NLS_VALUE_SNATIVEDIGITS L"sNativeDigits"
  1254. #define NLS_VALUE_IDIGITSUBST L"NumShape"
  1255. #define NLS_VALUE_SCURRENCY L"sCurrency"
  1256. #define NLS_VALUE_SMONDECIMALSEP L"sMonDecimalSep"
  1257. #define NLS_VALUE_SMONTHOUSANDSEP L"sMonThousandSep"
  1258. #define NLS_VALUE_SMONGROUPING L"sMonGrouping"
  1259. #define NLS_VALUE_ICURRDIGITS L"iCurrDigits"
  1260. #define NLS_VALUE_ICURRENCY L"iCurrency"
  1261. #define NLS_VALUE_INEGCURR L"iNegCurr"
  1262. #define NLS_VALUE_SPOSITIVESIGN L"sPositiveSign"
  1263. #define NLS_VALUE_SNEGATIVESIGN L"sNegativeSign"
  1264. #define NLS_VALUE_STIMEFORMAT L"sTimeFormat"
  1265. #define NLS_VALUE_STIME L"sTime"
  1266. #define NLS_VALUE_ITIME L"iTime"
  1267. #define NLS_VALUE_ITLZERO L"iTLZero"
  1268. #define NLS_VALUE_ITIMEMARKPOSN L"iTimePrefix"
  1269. #define NLS_VALUE_S1159 L"s1159"
  1270. #define NLS_VALUE_S2359 L"s2359"
  1271. #define NLS_VALUE_SSHORTDATE L"sShortDate"
  1272. #define NLS_VALUE_SDATE L"sDate"
  1273. #define NLS_VALUE_IDATE L"iDate"
  1274. #define NLS_VALUE_SYEARMONTH L"sYearMonth"
  1275. #define NLS_VALUE_SLONGDATE L"sLongDate"
  1276. #define NLS_VALUE_ICALENDARTYPE L"iCalendarType"
  1277. #define NLS_VALUE_IFIRSTDAYOFWEEK L"iFirstDayOfWeek"
  1278. #define NLS_VALUE_IFIRSTWEEKOFYEAR L"iFirstWeekOfYear"
  1279. //
  1280. // String constants for CreateSection/OpenSection name string.
  1281. //
  1282. #define NLS_SECTION_CPPREFIX L"\\NLS\\NlsSectionCP"
  1283. #define NLS_SECTION_LANGPREFIX L"\\NLS\\NlsSectionLANG"
  1284. #define NLS_SECTION_UNICODE L"\\NLS\\NlsSectionUnicode"
  1285. #define NLS_SECTION_LOCALE L"\\NLS\\NlsSectionLocale"
  1286. #define NLS_SECTION_CTYPE L"\\NLS\\NlsSectionCType"
  1287. #define NLS_SECTION_SORTKEY L"\\NLS\\NlsSectionSortkey"
  1288. #define NLS_SECTION_SORTTBLS L"\\NLS\\NlsSectionSortTbls"
  1289. #define NLS_SECTION_LANG_INTL L"\\NLS\\NlsSectionLANG_INTL"
  1290. #define NLS_SECTION_LANG_EXCEPT L"\\NLS\\NlsSectionLANG_EXCEPT"
  1291. #define NLS_SECTION_GEO L"\\NLS\\NlsSectionGeo"
  1292. //
  1293. // Unicode file names.
  1294. // These files will always be installed by setup in the system directory,
  1295. // so there is no need to put these names in the registry.
  1296. //
  1297. #define NLS_FILE_UNICODE L"unicode.nls"
  1298. #define NLS_FILE_LOCALE L"locale.nls"
  1299. #define NLS_FILE_CTYPE L"ctype.nls"
  1300. #define NLS_FILE_SORTKEY L"sortkey.nls"
  1301. #define NLS_FILE_SORTTBLS L"sorttbls.nls"
  1302. #define NLS_FILE_LANG_INTL L"l_intl.nls"
  1303. #define NLS_FILE_LANG_EXCEPT L"l_except.nls"
  1304. #define NLS_FILE_GEO L"geo.nls"
  1305. //
  1306. // Default file names if registry is corrupt.
  1307. //
  1308. #define NLS_DEFAULT_FILE_ACP L"c_1252.nls"
  1309. #define NLS_DEFAULT_FILE_OEMCP L"c_437.nls"
  1310. //
  1311. // Default section names if registry is corrupt.
  1312. //
  1313. #define NLS_DEFAULT_SECTION_ACP L"\\NLS\\NlsSectionCP1252"
  1314. #define NLS_DEFAULT_SECTION_OEMCP L"\\NLS\\NlsSectionCP437"
  1315. #ifdef _WINDOWS_BASE
  1316. //
  1317. // winnls routines that are called from base\server. The prototypes must
  1318. // continue to match the typedefs.
  1319. //
  1320. typedef ULONG
  1321. (*PNLS_CONVERT_INTEGER_TO_STRING)(
  1322. UINT Value,
  1323. UINT Base,
  1324. UINT Padding,
  1325. LPWSTR pResultBuf,
  1326. UINT Size);
  1327. ULONG
  1328. NlsConvertIntegerToString(
  1329. UINT Value,
  1330. UINT Base,
  1331. UINT Padding,
  1332. LPWSTR pResultBuf,
  1333. UINT Size);
  1334. typedef BOOL
  1335. (*PGET_CP_FILE_NAME_FROM_REGISTRY)(
  1336. UINT CodePage,
  1337. LPWSTR pResultBuf,
  1338. UINT Size);
  1339. BOOL
  1340. GetCPFileNameFromRegistry(
  1341. UINT CodePage,
  1342. LPWSTR pResultBuf,
  1343. UINT Size);
  1344. typedef ULONG
  1345. (*PCREATE_NLS_SECURITY_DESCRIPTOR)(
  1346. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  1347. UINT SecurityDescriptorSize,
  1348. ACCESS_MASK AccessMask);
  1349. ULONG
  1350. CreateNlsSecurityDescriptor(
  1351. PSECURITY_DESCRIPTOR pSecurityDescriptor,
  1352. UINT SecurityDescriptorSize,
  1353. ACCESS_MASK AccessMask);
  1354. typedef ULONG
  1355. (*PGET_NLS_SECTION_NAME)(
  1356. UINT Value,
  1357. UINT Base,
  1358. UINT Padding,
  1359. LPWSTR pwszPrefix,
  1360. LPWSTR pwszSecName,
  1361. UINT cchSecName);
  1362. ULONG
  1363. GetNlsSectionName(
  1364. UINT Value,
  1365. UINT Base,
  1366. UINT Padding,
  1367. LPWSTR pwszPrefix,
  1368. LPWSTR pwszSecName,
  1369. UINT cchSecName);
  1370. typedef WINBASEAPI BOOL
  1371. (WINAPI *PIS_VALID_CODEPAGE)(
  1372. UINT CodePage);
  1373. WINBASEAPI BOOL WINAPI
  1374. IsValidCodePage(
  1375. UINT CodePage);
  1376. typedef ULONG
  1377. (*POPEN_DATA_FILE)(HANDLE *phFile, LPWSTR pFile);
  1378. ULONG OpenDataFile(HANDLE *phFile, LPWSTR pFile);
  1379. typedef ULONG
  1380. (*PGET_DEFAULT_SORTKEY_SIZE)(PLARGE_INTEGER pSize);
  1381. ULONG GetDefaultSortkeySize(PLARGE_INTEGER pSize);
  1382. typedef ULONG
  1383. (*PGET_LINGUIST_LANG_SIZE)(PLARGE_INTEGER pSize);
  1384. ULONG GetLinguistLangSize(PLARGE_INTEGER pSize);
  1385. typedef BOOL
  1386. (*PVALIDATE_LOCALE)(LCID Locale);
  1387. BOOL ValidateLocale(LCID Locale);
  1388. typedef BOOL
  1389. (*PVALIDATE_LCTYPE)(PVOID pInfo, LCTYPE LCType, LPWSTR *ppwReg, LPWSTR *ppwCache);
  1390. BOOL ValidateLCType(PNLS_USER_INFO pInfo, LCTYPE LCType, LPWSTR *ppwReg, LPWSTR *ppwCache);
  1391. typedef BOOL
  1392. (*PNLS_LOAD_STRING_EX_W)(HMODULE hModule, UINT wID, LPWSTR lpBuffer, int cchBufferMax, WORD wLangId);
  1393. int NlsLoadStringExW(HMODULE hModule, UINT wID, LPWSTR lpBuffer, int cchBufferMax, WORD wLangId);
  1394. #endif // _WINDOWS_BASE
  1395. ;end_internal_NT
  1396. #endif // NONLS
  1397. #ifdef __cplusplus ;both
  1398. } ;both
  1399. #endif ;both
  1400. ;both
  1401. #endif // _WINNLS_
  1402. #endif // _WINNLSP_ ;internal_NT