|
|
1.1 root 1: /*++ BUILD Version: 0003 // Increment this if a change has global effects
2:
3: Copyright (c) 1991, Microsoft Corporation
4:
5: Module Name:
6:
7: winnls.h
8:
9: Abstract:
10:
11: Procedure declarations, constant definitions, and macros for the
12: NLS component.
13:
14: Author:
15:
16: Julie Bennett (julieb) 31-May-1991
17:
18: --*/
19:
20: #ifndef _WINNLS_
21: #define _WINNLS_
22:
1.1.1.4 ! root 23: #ifdef __cplusplus
! 24: extern "C" {
! 25: #endif
! 26:
1.1 root 27: #ifndef NONLS
28:
29:
30: /***************************************************************************\
31: * Constants
32: *
33: * Define all constants for the NLS component here.
34: \***************************************************************************/
35:
36: /*
37: * String Length Maximums.
38: */
1.1.1.2 root 39: #define MAX_LEADBYTES 12 /* 5 ranges, 2 bytes ea., 0 term. */
40: #define MAX_DEFAULTCHAR 2 /* single or double byte */
1.1 root 41:
42:
43: /*
44: * MBCS and Unicode Translation Flags.
45: */
46: #define MB_PRECOMPOSED 0x00000001 /* use precomposed chars */
47: #define MB_COMPOSITE 0x00000002 /* use composite chars */
1.1.1.2 root 48: #define MB_USEGLYPHCHARS 0x00000004 /* use glyph chars, not ctrl chars */
1.1 root 49:
1.1.1.2 root 50: #define WC_DEFAULTCHECK 0x00000100 /* check for default char */
51: #define WC_COMPOSITECHECK 0x00000200 /* convert composite to precomposed */
1.1 root 52: #define WC_DISCARDNS 0x00000010 /* discard non-spacing chars */
1.1.1.2 root 53: #define WC_SEPCHARS 0x00000020 /* generate separate chars */
54: #define WC_DEFAULTCHAR 0x00000040 /* replace w/ default char */
55:
1.1 root 56:
57:
58: /*
59: * Character Type Flags.
60: */
61: #define CT_CTYPE1 0x00000001 /* ctype 1 information */
62: #define CT_CTYPE2 0x00000002 /* ctype 2 information */
1.1.1.2 root 63: #define CT_CTYPE3 0x00000004 /* ctype 3 information */
1.1 root 64:
65: /*
66: * CType 1 Flag Bits.
67: */
1.1.1.2 root 68: #define C1_UPPER 0x0001 /* upper case */
69: #define C1_LOWER 0x0002 /* lower case */
70: #define C1_DIGIT 0x0004 /* decimal digits */
71: #define C1_SPACE 0x0008 /* spacing characters */
72: #define C1_PUNCT 0x0010 /* punctuation characters */
73: #define C1_CNTRL 0x0020 /* control characters */
74: #define C1_BLANK 0x0040 /* blank characters */
75: #define C1_XDIGIT 0x0080 /* other digits */
76: #define C1_ALPHA 0x0100 /* any letter */
1.1 root 77:
78: /*
79: * CType 2 Flag Bits.
80: */
1.1.1.4 ! root 81: #define C2_LEFTTORIGHT 0x0001 /* left to right */
! 82: #define C2_RIGHTTOLEFT 0x0002 /* right to left */
1.1.1.2 root 83:
1.1.1.4 ! root 84: #define C2_EUROPENUMBER 0x0003 /* European number, digit */
! 85: #define C2_EUROPESEPARATOR 0x0004 /* European numeric separator */
! 86: #define C2_EUROPETERMINATOR 0x0005 /* European numeric terminator */
! 87: #define C2_ARABICNUMBER 0x0006 /* Arabic number */
! 88: #define C2_COMMONSEPARATOR 0x0007 /* common numeric separator */
! 89:
! 90: #define C2_BLOCKSEPARATOR 0x0008 /* block separator */
! 91: #define C2_SEGMENTSEPARATOR 0x0009 /* segment separator */
! 92: #define C2_WHITESPACE 0x000A /* white space */
! 93: #define C2_OTHERNEUTRAL 0x000B /* other neutrals */
1.1 root 94:
1.1.1.4 ! root 95: #define C2_NOTAPPLICABLE 0x0000 /* no implicit directionality */
1.1 root 96:
97: /*
1.1.1.2 root 98: * CType 3 Flag Bits.
1.1 root 99: */
1.1.1.2 root 100: #define C3_NONSPACING 0x0001 /* nonspacing character */
101: #define C3_DIACRITIC 0x0002 /* diacritic mark */
102: #define C3_VOWELMARK 0x0004 /* vowel mark */
103: #define C3_SYMBOL 0x0008 /* symbols */
104:
1.1.1.4 ! root 105: #define C3_NOTAPPLICABLE 0x0000 /* ctype 3 is not applicable */
1.1.1.2 root 106:
1.1 root 107:
108: /*
1.1.1.2 root 109: * String Flags.
1.1 root 110: */
1.1.1.2 root 111: #define NORM_IGNORECASE 0x00000001 /* ignore case */
112: #define NORM_IGNORENONSPACE 0x00000002 /* ignore nonspacing chars */
113: #define NORM_IGNORESYMBOLS 0x00000004 /* ignore symbols */
1.1 root 114:
115:
1.1.1.2 root 116: /*
117: * Locale Independent Mapping Flags.
118: */
119: #define MAP_FOLDCZONE 0x00000010 /* fold compatibility zone chars */
1.1.1.4 ! root 120: #define MAP_PRECOMPOSED 0x00000020 /* convert to precomposed chars */
! 121: #define MAP_COMPOSITE 0x00000040 /* convert to composite chars */
1.1.1.2 root 122: #define MAP_FOLDDIGITS 0x00000080 /* all digits to ASCII 0-9 */
1.1 root 123:
124:
125: /*
1.1.1.2 root 126: * Locale Dependent Mapping Flags.
1.1 root 127: */
1.1.1.2 root 128: #define LCMAP_LOWERCASE 0x00000100 /* lower case letters */
129: #define LCMAP_UPPERCASE 0x00000200 /* upper case letters */
130: #define LCMAP_SORTKEY 0x00000400 /* WC sort key (normalize) */
131: #define LCMAP_BYTEREV 0x00000800 /* byte reversal */
1.1 root 132:
133:
134: /*
1.1.1.4 ! root 135: * Sorting Flags.
1.1 root 136: *
1.1.1.4 ! root 137: * WORD Sort: culturally correct sort
! 138: * hyphen and apostrophe are special cased
! 139: * example: "coop" and "co-op" will sort together in a list
! 140: *
! 141: * co_op <------- underscore (symbol)
! 142: * coat
! 143: * comb
! 144: * coop
! 145: * co-op <------- hyphen (punctuation)
! 146: * cork
! 147: * went
! 148: * were
! 149: * we're <------- apostrophe (punctuation)
! 150: *
! 151: *
! 152: * STRING Sort: hyphen and apostrophe will sort with all other symbols
! 153: *
! 154: * co-op <------- hyphen (punctuation)
! 155: * co_op <------- underscore (symbol)
! 156: * coat
! 157: * comb
! 158: * coop
! 159: * cork
! 160: * we're <------- apostrophe (punctuation)
! 161: * went
! 162: * were
1.1 root 163: */
1.1.1.4 ! root 164: #define SORT_STRINGSORT 0x00001000 /* use string sort method */
1.1 root 165:
166:
167: /*
1.1.1.4 ! root 168: * Code Page Default Values.
! 169: */
! 170: #define CP_ACP 0 /* default to ANSI code page */
! 171: #define CP_OEMCP 1 /* default to OEM code page */
1.1 root 172:
173:
1.1.1.2 root 174: /*
175: * Country Codes.
176: */
177: #define CTRY_DEFAULT 0
178:
179: #define CTRY_AUSTRALIA 61 /* Australia */
180: #define CTRY_AUSTRIA 43 /* Austria */
181: #define CTRY_BELGIUM 32 /* Belgium */
182: #define CTRY_BRAZIL 55 /* Brazil */
183: #define CTRY_CANADA 2 /* Canada */
184: #define CTRY_DENMARK 45 /* Denmark */
185: #define CTRY_FINLAND 358 /* Finland */
186: #define CTRY_FRANCE 33 /* France */
187: #define CTRY_GERMANY 49 /* Germany */
188: #define CTRY_ICELAND 354 /* Iceland */
189: #define CTRY_IRELAND 353 /* Ireland */
190: #define CTRY_ITALY 39 /* Italy */
191: #define CTRY_JAPAN 81 /* Japan */
192: #define CTRY_MEXICO 52 /* Mexico */
193: #define CTRY_NETHERLANDS 31 /* Netherlands */
194: #define CTRY_NEW_ZEALAND 64 /* New Zealand */
195: #define CTRY_NORWAY 47 /* Norway */
196: #define CTRY_PORTUGAL 351 /* Portugal */
197: #define CTRY_PRCHINA 86 /* PR China */
198: #define CTRY_SOUTH_KOREA 82 /* South Korea */
199: #define CTRY_SPAIN 34 /* Spain */
200: #define CTRY_SWEDEN 46 /* Sweden */
201: #define CTRY_SWITZERLAND 41 /* Switzerland */
202: #define CTRY_TAIWAN 886 /* Taiwan */
203: #define CTRY_UNITED_KINGDOM 44 /* United Kingdom */
204: #define CTRY_UNITED_STATES 1 /* United States */
205:
1.1 root 206:
1.1.1.2 root 207: /*
208: * Locale Types.
209: *
210: * These types are used for the GetLocaleInfoW NLS API routine.
1.1.1.4 ! root 211: *
! 212: * LOCALE_NOUSEROVERRIDE is also used in GetTimeFormatW and GetDateFormatW.
1.1.1.2 root 213: */
1.1.1.4 ! root 214: #define LOCALE_NOUSEROVERRIDE 0x80000000 /* do not use user overrides */
! 215:
! 216: #define LOCALE_ILANGUAGE 0x00000001 /* language id */
! 217: #define LOCALE_SLANGUAGE 0x00000002 /* localized name of language */
! 218: #define LOCALE_SENGLANGUAGE 0x00001001 /* English name of language */
! 219: #define LOCALE_SABBREVLANGNAME 0x00000003 /* abbreviated language name */
! 220: #define LOCALE_SNATIVELANGNAME 0x00000004 /* native name of language */
! 221: #define LOCALE_ICOUNTRY 0x00000005 /* country code */
! 222: #define LOCALE_SCOUNTRY 0x00000006 /* localized name of country */
! 223: #define LOCALE_SENGCOUNTRY 0x00001002 /* English name of country */
! 224: #define LOCALE_SABBREVCTRYNAME 0x00000007 /* abbreviated country name */
! 225: #define LOCALE_SNATIVECTRYNAME 0x00000008 /* native name of country */
! 226: #define LOCALE_IDEFAULTLANGUAGE 0x00000009 /* default language id */
! 227: #define LOCALE_IDEFAULTCOUNTRY 0x0000000A /* default country code */
! 228: #define LOCALE_IDEFAULTCODEPAGE 0x0000000B /* default code page */
! 229:
! 230: #define LOCALE_SLIST 0x0000000C /* list item separator */
! 231: #define LOCALE_IMEASURE 0x0000000D /* 0 = metric, 1 = US */
! 232:
! 233: #define LOCALE_SDECIMAL 0x0000000E /* decimal separator */
! 234: #define LOCALE_STHOUSAND 0x0000000F /* thousand separator */
! 235: #define LOCALE_SGROUPING 0x00000010 /* digit grouping */
! 236: #define LOCALE_IDIGITS 0x00000011 /* number of fractional digits */
! 237: #define LOCALE_ILZERO 0x00000012 /* leading zeros for decimal */
! 238: #define LOCALE_SNATIVEDIGITS 0x00000013 /* native ascii 0-9 */
! 239:
! 240: #define LOCALE_SCURRENCY 0x00000014 /* local monetary symbol */
! 241: #define LOCALE_SINTLSYMBOL 0x00000015 /* intl monetary symbol */
! 242: #define LOCALE_SMONDECIMALSEP 0x00000016 /* monetary decimal separator */
! 243: #define LOCALE_SMONTHOUSANDSEP 0x00000017 /* monetary thousand separator */
! 244: #define LOCALE_SMONGROUPING 0x00000018 /* monetary grouping */
! 245: #define LOCALE_ICURRDIGITS 0x00000019 /* # local monetary digits */
! 246: #define LOCALE_IINTLCURRDIGITS 0x0000001A /* # intl monetary digits */
! 247: #define LOCALE_ICURRENCY 0x0000001B /* positive currency mode */
! 248: #define LOCALE_INEGCURR 0x0000001C /* negative currency mode */
! 249:
! 250: #define LOCALE_SDATE 0x0000001D /* date separator */
! 251: #define LOCALE_STIME 0x0000001E /* time separator */
! 252: #define LOCALE_SSHORTDATE 0x0000001F /* short date format string */
! 253: #define LOCALE_SLONGDATE 0x00000020 /* long date format string */
! 254: #define LOCALE_STIMEFORMAT 0x00001003 /* time format string */
! 255: #define LOCALE_IDATE 0x00000021 /* short date format ordering */
! 256: #define LOCALE_ILDATE 0x00000022 /* long date format ordering */
! 257: #define LOCALE_ITIME 0x00000023 /* time format specifier */
! 258: #define LOCALE_ICENTURY 0x00000024 /* century format specifier */
! 259: #define LOCALE_ITLZERO 0x00000025 /* leading zeros in time field */
! 260: #define LOCALE_IDAYLZERO 0x00000026 /* leading zeros in day field */
! 261: #define LOCALE_IMONLZERO 0x00000027 /* leading zeros in month field */
! 262: #define LOCALE_S1159 0x00000028 /* AM designator */
! 263: #define LOCALE_S2359 0x00000029 /* PM designator */
! 264:
! 265: #define LOCALE_SDAYNAME1 0x0000002A /* long name for Monday */
! 266: #define LOCALE_SDAYNAME2 0x0000002B /* long name for Tuesday */
! 267: #define LOCALE_SDAYNAME3 0x0000002C /* long name for Wednesday */
! 268: #define LOCALE_SDAYNAME4 0x0000002D /* long name for Thursday */
! 269: #define LOCALE_SDAYNAME5 0x0000002E /* long name for Friday */
! 270: #define LOCALE_SDAYNAME6 0x0000002F /* long name for Saturday */
! 271: #define LOCALE_SDAYNAME7 0x00000030 /* long name for Sunday */
! 272: #define LOCALE_SABBREVDAYNAME1 0x00000031 /* abbreviated name for Monday */
! 273: #define LOCALE_SABBREVDAYNAME2 0x00000032 /* abbreviated name for Tuesday */
! 274: #define LOCALE_SABBREVDAYNAME3 0x00000033 /* abbreviated name for Wednesday */
! 275: #define LOCALE_SABBREVDAYNAME4 0x00000034 /* abbreviated name for Thursday */
! 276: #define LOCALE_SABBREVDAYNAME5 0x00000035 /* abbreviated name for Friday */
! 277: #define LOCALE_SABBREVDAYNAME6 0x00000036 /* abbreviated name for Saturday */
! 278: #define LOCALE_SABBREVDAYNAME7 0x00000037 /* abbreviated name for Sunday */
! 279: #define LOCALE_SMONTHNAME1 0x00000038 /* long name for January */
! 280: #define LOCALE_SMONTHNAME2 0x00000039 /* long name for February */
! 281: #define LOCALE_SMONTHNAME3 0x0000003A /* long name for March */
! 282: #define LOCALE_SMONTHNAME4 0x0000003B /* long name for April */
! 283: #define LOCALE_SMONTHNAME5 0x0000003C /* long name for May */
! 284: #define LOCALE_SMONTHNAME6 0x0000003D /* long name for June */
! 285: #define LOCALE_SMONTHNAME7 0x0000003E /* long name for July */
! 286: #define LOCALE_SMONTHNAME8 0x0000003F /* long name for August */
! 287: #define LOCALE_SMONTHNAME9 0x00000040 /* long name for September */
! 288: #define LOCALE_SMONTHNAME10 0x00000041 /* long name for October */
! 289: #define LOCALE_SMONTHNAME11 0x00000042 /* long name for November */
! 290: #define LOCALE_SMONTHNAME12 0x00000043 /* long name for December */
! 291: #define LOCALE_SABBREVMONTHNAME1 0x00000044 /* abbreviated name for January */
! 292: #define LOCALE_SABBREVMONTHNAME2 0x00000045 /* abbreviated name for February */
! 293: #define LOCALE_SABBREVMONTHNAME3 0x00000046 /* abbreviated name for March */
! 294: #define LOCALE_SABBREVMONTHNAME4 0x00000047 /* abbreviated name for April */
! 295: #define LOCALE_SABBREVMONTHNAME5 0x00000048 /* abbreviated name for May */
! 296: #define LOCALE_SABBREVMONTHNAME6 0x00000049 /* abbreviated name for June */
! 297: #define LOCALE_SABBREVMONTHNAME7 0x0000004A /* abbreviated name for July */
! 298: #define LOCALE_SABBREVMONTHNAME8 0x0000004B /* abbreviated name for August */
! 299: #define LOCALE_SABBREVMONTHNAME9 0x0000004C /* abbreviated name for September */
! 300: #define LOCALE_SABBREVMONTHNAME10 0x0000004D /* abbreviated name for October */
! 301: #define LOCALE_SABBREVMONTHNAME11 0x0000004E /* abbreviated name for November */
! 302: #define LOCALE_SABBREVMONTHNAME12 0x0000004F /* abbreviated name for December */
! 303:
! 304: #define LOCALE_SPOSITIVESIGN 0x00000050 /* positive sign */
! 305: #define LOCALE_SNEGATIVESIGN 0x00000051 /* negative sign */
! 306: #define LOCALE_IPOSSIGNPOSN 0x00000052 /* positive sign position */
! 307: #define LOCALE_INEGSIGNPOSN 0x00000053 /* negative sign position */
! 308: #define LOCALE_IPOSSYMPRECEDES 0x00000054 /* mon sym precedes pos amt */
! 309: #define LOCALE_IPOSSEPBYSPACE 0x00000055 /* mon sym sep by space from pos amt */
! 310: #define LOCALE_INEGSYMPRECEDES 0x00000056 /* mon sym precedes neg amt */
! 311: #define LOCALE_INEGSEPBYSPACE 0x00000057 /* mon sym sep by space from neg amt */
! 312:
! 313:
! 314: /*
! 315: * Time Flags for GetTimeFormatW.
! 316: */
! 317: #define TIME_NOMINUTESORSECONDS 0x00000001 /* do not use minutes or seconds */
! 318: #define TIME_NOSECONDS 0x00000002 /* do not use seconds */
! 319: #define TIME_NOTIMEMARKER 0x00000004 /* do not use time marker */
! 320: #define TIME_FORCE24HOURFORMAT 0x00000008 /* always use 24 hour format */
! 321:
! 322:
! 323: /*
! 324: * Date Flags for GetDateFormatW.
! 325: */
! 326: #define DATE_SHORTDATE 0x00000001 /* use short date picture */
! 327: #define DATE_LONGDATE 0x00000002 /* use long date picture */
! 328:
! 329:
! 330:
1.1 root 331: /***************************************************************************\
332: * Typedefs
333: *
334: * Define all types for the NLS component here.
335: \***************************************************************************/
336:
337: /*
1.1.1.4 ! root 338: * Locale type constant
1.1 root 339: */
1.1.1.4 ! root 340:
! 341: typedef DWORD LCTYPE;
1.1 root 342:
343:
344: /*
1.1.1.2 root 345: * CP Info.
1.1 root 346: */
1.1.1.2 root 347: typedef struct _cpinfo {
348: UINT MaxCharSize; /* max length (bytes) of a char */
349: BYTE DefaultChar[MAX_DEFAULTCHAR]; /* default character */
350: BYTE LeadByte[MAX_LEADBYTES]; /* lead byte ranges */
351: } CPINFO, *LPCPINFO;
1.1 root 352:
353:
354:
355: /***************************************************************************\
356: * Macros
357: *
358: * Define all macros for the NLS component here.
359: \***************************************************************************/
360:
361:
362:
363: /***************************************************************************\
364: * Function Prototypes
365: *
366: * Only prototypes for the NLS APIs should go here.
367: \***************************************************************************/
368:
369: /*
1.1.1.2 root 370: * Code Page Dependent APIs.
1.1 root 371: */
1.1.1.4 ! root 372: BOOL
! 373: WINAPI
! 374: IsValidCodePage(
! 375: UINT CodePage);
! 376:
! 377: UINT
! 378: WINAPI
! 379: GetACP(void);
! 380:
! 381: UINT
! 382: WINAPI
! 383: GetOEMCP(void);
! 384:
! 385: BOOL
! 386: WINAPI
! 387: GetCPInfo(
! 388: UINT CodePage,
! 389: LPCPINFO lpCPInfo);
! 390:
! 391: BOOL
! 392: WINAPI
! 393: IsDBCSLeadByte(
! 394: BYTE TestChar);
! 395:
! 396: int
! 397: WINAPI
! 398: MultiByteToWideChar(
! 399: UINT CodePage,
! 400: DWORD dwFlags,
! 401: LPCSTR lpMultiByteStr,
! 402: int cchMultiByte,
! 403: LPWSTR lpWideCharStr,
! 404: int cchWideChar);
! 405:
! 406: int
! 407: WINAPI
! 408: WideCharToMultiByte(
! 409: UINT CodePage,
! 410: DWORD dwFlags,
! 411: LPCWSTR lpWideCharStr,
! 412: int cchWideChar,
! 413: LPSTR lpMultiByteStr,
! 414: int cchMultiByte,
! 415: LPCSTR lpDefaultChar,
! 416: LPBOOL lpUsedDefaultChar);
1.1 root 417:
418:
419: /*
1.1.1.2 root 420: * Locale Dependent APIs.
1.1 root 421: */
1.1.1.4 ! root 422: int
! 423: WINAPI
! 424: CompareStringW(
! 425: LCID Locale,
! 426: DWORD dwCmpFlags,
! 427: LPCWSTR lpString1,
! 428: int cchCount1,
! 429: LPCWSTR lpString2,
! 430: int cchCount2);
! 431:
! 432: int
! 433: WINAPI
! 434: LCMapStringW(
! 435: LCID Locale,
! 436: DWORD dwMapFlags,
! 437: LPCWSTR lpSrcStr,
! 438: int cchSrc,
! 439: LPWSTR lpDestStr,
! 440: int cchDest);
! 441:
! 442: int
! 443: WINAPI
! 444: GetLocaleInfoW(
! 445: LCID Locale,
! 446: LCTYPE LCType,
! 447: LPWSTR lpLCData,
! 448: int cchData);
! 449:
! 450: int
! 451: WINAPI
! 452: GetTimeFormatW(
! 453: LCID Locale,
! 454: DWORD dwFlags,
! 455: CONST SYSTEMTIME *lpTime,
! 456: LPCWSTR lpFormat,
! 457: LPWSTR lpTimeStr,
! 458: int cchTime);
! 459:
! 460: int
! 461: WINAPI
! 462: GetDateFormatW(
! 463: LCID Locale,
! 464: DWORD dwFlags,
! 465: CONST SYSTEMTIME *lpDate,
! 466: LPCWSTR lpFormat,
! 467: LPWSTR lpDateStr,
! 468: int cchDate);
! 469:
! 470: LCID
! 471: WINAPI
! 472: GetThreadLocale(void);
! 473:
! 474: BOOL
! 475: WINAPI
! 476: SetThreadLocale(
! 477: LCID Locale
! 478: );
! 479:
! 480: LANGID
! 481: WINAPI
! 482: GetSystemDefaultLangID(void);
! 483:
! 484: LANGID
! 485: WINAPI
! 486: GetUserDefaultLangID(void);
! 487:
! 488: LCID
! 489: WINAPI
! 490: GetSystemDefaultLCID(void);
! 491:
! 492: LCID
! 493: WINAPI
! 494: GetUserDefaultLCID(void);
1.1 root 495:
496:
497: /*
1.1.1.2 root 498: * Locale Independent APIs.
1.1 root 499: */
1.1.1.4 ! root 500: BOOL
! 501: WINAPI
! 502: GetStringTypeW(
! 503: DWORD dwInfoType,
! 504: LPCWSTR lpSrcStr,
! 505: int cchSrc,
! 506: LPWORD lpCharType);
! 507:
! 508: int
! 509: WINAPI
! 510: FoldStringW(
! 511: DWORD dwMapFlags,
! 512: LPCWSTR lpSrcStr,
! 513: int cchSrc,
! 514: LPWSTR lpDestStr,
! 515: int cchDest);
1.1 root 516:
517:
518:
519: #endif // NONLS
520:
1.1.1.4 ! root 521: #ifdef __cplusplus
! 522: }
! 523: #endif
1.1.1.2 root 524:
1.1.1.4 ! root 525: #endif // _WINNLS_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.