36#define WINVER DLL_EXPORT_VERSION
39#define LOCALE_NAME_USER_DEFAULT NULL
50#define NLSRC_OFFSET 5000
54#define LOCALE_LOCALEINFOFLAGSMASK (LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP|\
55 LOCALE_RETURN_NUMBER|LOCALE_RETURN_GENITIVE_NAMES)
58 '\\',
'R',
'e',
'g',
'i',
's',
't',
'r',
'y',
'\\',
59 'M',
'a',
'c',
'h',
'i',
'n',
'e',
'\\',
'S',
'y',
's',
't',
'e',
'm',
'\\',
60 'C',
'u',
'r',
'r',
'e',
'n',
't',
'C',
'o',
'n',
't',
'r',
'o',
'l',
'S',
'e',
't',
'\\',
61 'C',
'o',
'n',
't',
'r',
'o',
'l',
'\\',
'N',
'l',
's',
'\\',
'L',
'o',
'c',
'a',
'l',
'e',0
65 '\\',
'R',
'e',
'g',
'i',
's',
't',
'r',
'y',
'\\',
66 'M',
'a',
'c',
'h',
'i',
'n',
'e',
'\\',
'S',
'y',
's',
't',
'e',
'm',
'\\',
67 'C',
'u',
'r',
'r',
'e',
'n',
't',
'C',
'o',
'n',
't',
'r',
'o',
'l',
'S',
'e',
't',
'\\',
68 'C',
'o',
'n',
't',
'r',
'o',
'l',
'\\',
'N',
'l',
's',
'\\',
69 'L',
'a',
'n',
'g',
'u',
'a',
'g',
'e',
' ',
'G',
'r',
'o',
'u',
'p',
's',0
76 const char *charset_name;
115 {
"ISO88591", 28591 },
116 {
"ISO885910", 28600 },
117 {
"ISO885913", 28603 },
118 {
"ISO885914", 28604 },
119 {
"ISO885915", 28605 },
120 {
"ISO885916", 28606 },
121 {
"ISO88592", 28592 },
122 {
"ISO88593", 28593 },
123 {
"ISO88594", 28594 },
124 {
"ISO88595", 28595 },
125 {
"ISO88596", 28596 },
126 {
"ISO88597", 28597 },
127 {
"ISO88598", 28598 },
128 {
"ISO88599", 28599 },
158static const WCHAR iCalendarTypeW[] = {
'i',
'C',
'a',
'l',
'e',
'n',
'd',
'a',
'r',
'T',
'y',
'p',
'e',0};
160static const WCHAR iCurrDigitsW[] = {
'i',
'C',
'u',
'r',
'r',
'D',
'i',
'g',
'i',
't',
's',0};
164static const WCHAR iFirstDayOfWeekW[] = {
'i',
'F',
'i',
'r',
's',
't',
'D',
'a',
'y',
'O',
'f',
'W',
'e',
'e',
'k',0};
165static const WCHAR iFirstWeekOfYearW[] = {
'i',
'F',
'i',
'r',
's',
't',
'W',
'e',
'e',
'k',
'O',
'f',
'Y',
'e',
'a',
'r',0};
170static const WCHAR iNegNumberW[] = {
'i',
'N',
'e',
'g',
'N',
'u',
'm',
'b',
'e',
'r',0};
171static const WCHAR iPaperSizeW[] = {
'i',
'P',
'a',
'p',
'e',
'r',
'S',
'i',
'z',
'e',0};
173static const WCHAR iTimePrefixW[] = {
'i',
'T',
'i',
'm',
'e',
'P',
'r',
'e',
'f',
'i',
'x',0};
185static const WCHAR sMonDecimalSepW[] = {
's',
'M',
'o',
'n',
'D',
'e',
'c',
'i',
'm',
'a',
'l',
'S',
'e',
'p',0};
186static const WCHAR sMonGroupingW[] = {
's',
'M',
'o',
'n',
'G',
'r',
'o',
'u',
'p',
'i',
'n',
'g',0};
187static const WCHAR sMonThousandSepW[] = {
's',
'M',
'o',
'n',
'T',
'h',
'o',
'u',
's',
'a',
'n',
'd',
'S',
'e',
'p',0};
188static const WCHAR sNativeDigitsW[] = {
's',
'N',
'a',
't',
'i',
'v',
'e',
'D',
'i',
'g',
'i',
't',
's',0};
189static const WCHAR sNegativeSignW[] = {
's',
'N',
'e',
'g',
'a',
't',
'i',
'v',
'e',
'S',
'i',
'g',
'n',0};
190static const WCHAR sPositiveSignW[] = {
's',
'P',
'o',
's',
'i',
't',
'i',
'v',
'e',
'S',
'i',
'g',
'n',0};
191static const WCHAR sShortDateW[] = {
's',
'S',
'h',
'o',
'r',
't',
'D',
'a',
't',
'e',0};
193static const WCHAR sTimeFormatW[] = {
's',
'T',
'i',
'm',
'e',
'F',
'o',
'r',
'm',
'a',
't',0};
195static const WCHAR sYearMonthW[] = {
's',
'Y',
'e',
'a',
'r',
'M',
'o',
'n',
't',
'h',0};
245 { LOCALE_IDIGITSUBSTITUTION,
NumShapeW },
256 while (
n > 1 && *
src)
278#if (WINVER >= 0x0600)
282static int charset_cmp(
const void *
name,
const void *
entry )
294 char charset_name[16];
298 for (
i =
j = 0;
name[
i] &&
j <
sizeof(charset_name)-1;
i++)
303 sizeof(charset_names[0]), charset_cmp );
340 if (
data->win_name[0] &&
386 if (
lang == get_default_sublang( def_lang ))
matches++;
407 return (
data->matches < 4);
420 static const WCHAR sepW[] = {
'-',
'_',
'.',
'@',0};
421 static const WCHAR winsepW[] = {
'-',
'_',0};
422 static const WCHAR posixW[] = {
'P',
'O',
'S',
'I',
'X',0};
423 static const WCHAR cW[] = {
'C',0};
424 static const WCHAR latinW[] = {
'l',
'a',
't',
'i',
'n',0};
425 static const WCHAR latnW[] = {
'-',
'L',
'a',
't',
'n',0};
434 name->win_name[0] = 0;
498 name->codepage = find_charset(
name->charset );
502 if (
name->charset)
goto done;
533 switch(lctype & 0xffff)
535 case LOCALE_SSORTNAME:
542 case LOCALE_IDEFAULTEBCDICCODEPAGE:
563 case LOCALE_SNATIVECURRNAME:
568 case LOCALE_IDIGITSUBSTITUTION:
650 case LOCALE_SYEARMONTH:
654 case LOCALE_IPAPERSIZE:
666 if (default_id)
lcid = default_id;
678 switch(lctype & 0xffff)
706 static const WCHAR cplW[] = {
'C',
'o',
'n',
't',
'r',
'o',
'l',
' ',
'P',
'a',
'n',
'e',
'l',0};
707 static const WCHAR intlW[] = {
'I',
'n',
't',
'e',
'r',
'n',
'a',
't',
'i',
'o',
'n',
'a',
'l',0};
715 attr.RootDirectory = hkey;
719 attr.SecurityQualityOfService =
NULL;
725 attr.RootDirectory = cpl_key;
843#if (WINVER >= 0x0600)
852 if (
flags && !once++)
861 TRACE(
"found lcid %x for %s, matches %d\n",
871 WARN(
"locale %s not recognized, defaulting to %s\n",
961 cached_value[
length-1] = 0;
1058 if ((lctype & LOCALE_RETURN_NUMBER) ||
1149 if (lcflags & LOCALE_RETURN_NUMBER)
1174 if (
ret != -1)
return ret;
1208 for (
i = 0;
i < (
lctype & 0x0f);
i++)
p += *
p + 1;
1211 if (lcflags & LOCALE_RETURN_NUMBER)
ret =
sizeof(
UINT)/
sizeof(
WCHAR);
1215 for (
i = 1;
i <= *
p;
i++)
if (!
p[
i])
break;
1237 if (lcflags & LOCALE_RETURN_NUMBER)
1254 TRACE(
"(lcid=0x%x,lctype=0x%x,%p,%d) returning number %d\n",
1263 TRACE(
"(lcid=0x%x,lctype=0x%x,%p,%d) returning %d %s\n",
1269#if (WINVER >= 0x0600)
1279 TRACE(
"GetLocaleInfoEx not implemented (lcid=%s,lctype=0x%x,%s,%d)\n",
debugstr_w(lpLocaleName), LCType,
debugstr_w(lpLCData), cchData );
1289 TRACE(
"IsValidLocaleName not implemented (lpLocaleName=%s)\n",
debugstr_w(lpLocaleName));
1295GetUserDefaultLocaleName(
1300 TRACE(
"GetUserDefaultLocaleName not implemented (lpLocaleName=%s, cchLocaleName=%d)\n",
debugstr_w(lpLocaleName), cchLocaleName);
1364 static const WCHAR intlW[] = {
'i',
'n',
't',
'l',0 };
1403 WCHAR *lpD, *lpM, *lpY;
1480 TRACE(
"(0x%04X)\n", lcid);
1573 return lpfnLocaleEnum(
buf );
1579 static const WCHAR formatW[] = {
'%',
'0',
'8',
'x',0};
1583 return lpfnLocaleEnum(
buf );
1643 (
LPWSTR)&neutral,
sizeof(neutral) /
sizeof(
WCHAR) ))
1711 static const unsigned char type2_map[16] =
1748 WARN(
"CT_CTYPE3: semi-stub.\n");
1752 WORD type1, type3 = 0;
1771 if ((
c>=0xFF21)&&(
c<=0xFF3A)) type3 |=
C3_ALPHA;
1772 if ((
c>=0xFF41)&&(
c<=0xFF5A)) type3 |=
C3_ALPHA;
1779 if ((
c>=0xFF65)&&(
c<=0xFF9F)) type3 |=
C3_ALPHA;
1782 *chartype++ = type3;
1834 FIXME(
"For locale %04x using current ANSI code page\n",
locale);
1894 if ((0x30A1 <= wch && wch <= 0x30F3) ||
1895 wch == 0x30F4 || wch == 0x30F5 || wch == 0x30FD || wch == 0x30FE)
1918 if ((0x3041 <= wch && wch <= 0x3093) ||
1919 wch == 3094 || wch == 0x3095 || wch == 0x309D || wch == 0x309E)
1933#define DEFINE_FULL2HALF(full, half1, half2) { full, half1, half2 },
1935#undef DEFINE_FULL2HALF
1937#define GET_FULL(table, index) ((table)[index][0])
1938#define GET_HALF1(table, index) ((table)[index][1])
1939#define GET_HALF2(table, index) ((table)[index][2])
1945#define DEFINE_DAKUTEN(voiced, single1, single2, half1, half2) { voiced, single1, single2 },
1947#undef DEFINE_DAKUTEN
1949#define GET_VOICED(table, index) ((table)[index][0])
1950#define GET_SINGLE1(table, index) ((table)[index][1])
1951#define GET_SINGLE2(table, index) ((table)[index][2])
1975 if (0xFF01 <= ch && ch <= 0xFF5E)
1983 for (
i = count1 - 1;
i >= 0; --
i)
2038 if (0x21 <= ch && ch <= 0x7E)
2053 for (
i = count1 - 1;
i >= 0; --
i)
2080 for (
i = count2 - 1;
i >= 0; --
i)
2144#define DEFINE_SIM2TRA(from, to) { from, to },
2146#undef DEFINE_SIM2TRA
2152#define DEFINE_TRA2SIM(from, to) { from, to },
2154#undef DEFINE_TRA2SIM
2162 if (
a->from <
b->from)
2164 if (
a->from >
b->from)
2290 flags &= ~LCMAP_LOWERCASE;
2296 flags &= ~LCMAP_UPPERCASE;
2363 if (!once++)
FIXME(
"unsupported lparam %Ix\n",
handle);
2374 TRACE(
"(%s,0x%08lx,%s,%d,%p,%d)\n",
2377 flags &= ~LOCALE_USE_CP_ACP;
2420 TRACE(
"(0x%04x,0x%08x,%s,%d,%p,%d)\n",
2448 INT ret = 0, srclenW, dstlenW;
2479 goto map_string_exit;
2486 goto map_string_exit;
2492 goto map_string_exit;
2497 goto map_string_exit;
2503 goto map_string_exit;
2536 INT ret = 0, srclenW = 0;
2552 goto FoldStringA_exit;
2568 goto FoldStringA_exit;
2644 if (
flags & ~(supported_flags|semistub_flags))
2650 if (
flags & semistub_flags)
2653 FIXME(
"semi-stub behavior for flag(s) 0x%x\n",
flags & semistub_flags);
2656 if (len1 < 0) len1 =
strlenW(str1);
2657 if (len2 < 0) len2 =
strlenW(str2);
2699 WCHAR *buf2W = buf1W + 130;
2701 INT len1W = 0, len2W = 0,
ret;
2709 if (len1 < 0) len1 =
strlen(str1);
2710 if (len2 < 0) len2 =
strlen(str2);
2768#if (WINVER >= 0x0600)
2781 if (len1 < 0) len1 =
strlenW(str1);
2782 if (len2 < 0) len2 =
strlenW(str2);
2830 info->NameLength > valueNameSize ||
2831 info->DataLength > valueDataSize)
2839 szValueName[
info->NameLength /
sizeof(
WCHAR)] =
'\0';
2841 szValueData[
info->DataLength /
sizeof(
WCHAR)] =
'\0';
2889 ULONG iResourceIndex = lgrpid & 0xf;
2893 for (
i = 0;
i < iResourceIndex;
i++)
2894 lpResEntry += *lpResEntry + 1;
2896 if (*lpResEntry < nameSize)
2899 szName[*lpResEntry] =
'\0';
2921 WCHAR szNumber[10], szValue[4];
2949 FIXME(
"NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
2954 szValue,
sizeof(szValue) ))
2956 BOOL bInstalled = szValue[0] ==
'1';
2960 bInstalled ?
"" :
"not ");
2964 WCHAR szGrpName[48];
2967 szGrpName[0] =
'\0';
2970 bContinue = lpProcs->
procW( lgrpid, szNumber, szGrpName, lpProcs->
dwFlags,
2974 char szNumberA[
sizeof(szNumber)/
sizeof(
WCHAR)];
2975 char szGrpNameA[48];
2984 bContinue = lpProcs->
procA( lgrpid, szNumberA, szGrpNameA, lpProcs->
dwFlags,
3025 procs.
procA = pLangGrpEnumProc;
3046 procs.
procW = pLangGrpEnumProc;
3068 static const WCHAR szFormat[] = {
'%',
'x',
'\0' };
3069 WCHAR szValueName[16], szValue[2];
3081 sprintfW( szValueName, szFormat, lgrpid );
3087 if (szValue[0] ==
'1')
3117 static const WCHAR szAlternateSortsKeyName[] = {
3118 'A',
'l',
't',
'e',
'r',
'n',
'a',
't',
'e',
' ',
'S',
'o',
'r',
't',
's',
'\0'
3120 WCHAR szNumber[10], szValue[4];
3141 WARN(
"NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
3146 szValue,
sizeof(szValue) ))
3151 lgrpid, lgrpid == lpProcs->
lgrpid ?
"" :
"not ");
3153 if (lgrpid == lpProcs->
lgrpid)
3165 bContinue = lpProcs->
procW( lgrpid, lcid, szNumber, lpProcs->
lParam );
3168 char szNumberA[
sizeof(szNumber)/
sizeof(
WCHAR)];
3172 bContinue = lpProcs->
procA( lgrpid, lcid, szNumberA, lpProcs->
lParam );
3218 { 2, {
'A',
'G',0}, {
'A',
'T',
'G',0}, 10039880, 28 },
3219 { 3, {
'A',
'F',0}, {
'A',
'F',
'G',0}, 47614, 4 },
3220 { 4, {
'D',
'Z',0}, {
'D',
'Z',
'A',0}, 42487, 12 },
3221 { 5, {
'A',
'Z',0}, {
'A',
'Z',
'E',0}, 47611, 31 },
3222 { 6, {
'A',
'L',0}, {
'A',
'L',
'B',0}, 47610, 8 },
3223 { 7, {
'A',
'M',0}, {
'A',
'R',
'M',0}, 47611, 51 },
3224 { 8, {
'A',
'D',0}, {
'A',
'N',
'D',0}, 47610, 20 },
3225 { 9, {
'A',
'O',0}, {
'A',
'G',
'O',0}, 42484, 24 },
3226 { 10, {
'A',
'S',0}, {
'A',
'S',
'M',0}, 26286, 16 },
3227 { 11, {
'A',
'R',0}, {
'A',
'R',
'G',0}, 31396, 32 },
3228 { 12, {
'A',
'U',0}, {
'A',
'U',
'S',0}, 10210825, 36 },
3229 { 14, {
'A',
'T',0}, {
'A',
'U',
'T',0}, 10210824, 40 },
3230 { 17, {
'B',
'H',0}, {
'B',
'H',
'R',0}, 47611, 48 },
3231 { 18, {
'B',
'B',0}, {
'B',
'R',
'B',0}, 10039880, 52 },
3232 { 19, {
'B',
'W',0}, {
'B',
'W',
'A',0}, 10039883, 72 },
3233 { 20, {
'B',
'M',0}, {
'B',
'M',
'U',0}, 23581, 60 },
3234 { 21, {
'B',
'E',0}, {
'B',
'E',
'L',0}, 10210824, 56 },
3235 { 22, {
'B',
'S',0}, {
'B',
'H',
'S',0}, 10039880, 44 },
3236 { 23, {
'B',
'D',0}, {
'B',
'G',
'D',0}, 47614, 50 },
3237 { 24, {
'B',
'Z',0}, {
'B',
'L',
'Z',0}, 27082, 84 },
3238 { 25, {
'B',
'A',0}, {
'B',
'I',
'H',0}, 47610, 70 },
3239 { 26, {
'B',
'O',0}, {
'B',
'O',
'L',0}, 31396, 68 },
3240 { 27, {
'M',
'M',0}, {
'M',
'M',
'R',0}, 47599, 104 },
3241 { 28, {
'B',
'J',0}, {
'B',
'E',
'N',0}, 42483, 204 },
3242 { 29, {
'B',
'Y',0}, {
'B',
'L',
'R',0}, 47609, 112 },
3243 { 30, {
'S',
'B',0}, {
'S',
'L',
'B',0}, 20900, 90 },
3244 { 32, {
'B',
'R',0}, {
'B',
'R',
'A',0}, 31396, 76 },
3245 { 34, {
'B',
'T',0}, {
'B',
'T',
'N',0}, 47614, 64 },
3246 { 35, {
'B',
'G',0}, {
'B',
'G',
'R',0}, 47609, 100 },
3247 { 37, {
'B',
'N',0}, {
'B',
'R',
'N',0}, 47599, 96 },
3248 { 38, {
'B',
'I',0}, {
'B',
'D',
'I',0}, 47603, 108 },
3249 { 39, {
'C',
'A',0}, {
'C',
'A',
'N',0}, 23581, 124 },
3250 { 40, {
'K',
'H',0}, {
'K',
'H',
'M',0}, 47599, 116 },
3251 { 41, {
'T',
'D',0}, {
'T',
'C',
'D',0}, 42484, 148 },
3252 { 42, {
'L',
'K',0}, {
'L',
'K',
'A',0}, 47614, 144 },
3253 { 43, {
'C',
'G',0}, {
'C',
'O',
'G',0}, 42484, 178 },
3254 { 44, {
'C',
'D',0}, {
'C',
'O',
'D',0}, 42484, 180 },
3255 { 45, {
'C',
'N',0}, {
'C',
'H',
'N',0}, 47600, 156 },
3256 { 46, {
'C',
'L',0}, {
'C',
'H',
'L',0}, 31396, 152 },
3257 { 49, {
'C',
'M',0}, {
'C',
'M',
'R',0}, 42484, 120 },
3258 { 50, {
'K',
'M',0}, {
'C',
'O',
'M',0}, 47603, 174 },
3259 { 51, {
'C',
'O',0}, {
'C',
'O',
'L',0}, 31396, 170 },
3260 { 54, {
'C',
'R',0}, {
'C',
'R',
'I',0}, 27082, 188 },
3261 { 55, {
'C',
'F',0}, {
'C',
'A',
'F',0}, 42484, 140 },
3262 { 56, {
'C',
'U',0}, {
'C',
'U',
'B',0}, 10039880, 192 },
3263 { 57, {
'C',
'V',0}, {
'C',
'P',
'V',0}, 42483, 132 },
3264 { 59, {
'C',
'Y',0}, {
'C',
'Y',
'P',0}, 47611, 196 },
3265 { 61, {
'D',
'K',0}, {
'D',
'N',
'K',0}, 10039882, 208 },
3266 { 62, {
'D',
'J',0}, {
'D',
'J',
'I',0}, 47603, 262 },
3267 { 63, {
'D',
'M',0}, {
'D',
'M',
'A',0}, 10039880, 212 },
3268 { 65, {
'D',
'O',0}, {
'D',
'O',
'M',0}, 10039880, 214 },
3269 { 66, {
'E',
'C',0}, {
'E',
'C',
'U',0}, 31396, 218 },
3270 { 67, {
'E',
'G',0}, {
'E',
'G',
'Y',0}, 42487, 818 },
3271 { 68, {
'I',
'E',0}, {
'I',
'R',
'L',0}, 10039882, 372 },
3272 { 69, {
'G',
'Q',0}, {
'G',
'N',
'Q',0}, 42484, 226 },
3273 { 70, {
'E',
'E',0}, {
'E',
'S',
'T',0}, 10039882, 233 },
3274 { 71, {
'E',
'R',0}, {
'E',
'R',
'I',0}, 47603, 232 },
3275 { 72, {
'S',
'V',0}, {
'S',
'L',
'V',0}, 27082, 222 },
3276 { 73, {
'E',
'T',0}, {
'E',
'T',
'H',0}, 47603, 231 },
3277 { 75, {
'C',
'Z',0}, {
'C',
'Z',
'E',0}, 47609, 203 },
3278 { 77, {
'F',
'I',0}, {
'F',
'I',
'N',0}, 10039882, 246 },
3279 { 78, {
'F',
'J',0}, {
'F',
'J',
'I',0}, 20900, 242 },
3280 { 80, {
'F',
'M',0}, {
'F',
'S',
'M',0}, 21206, 583 },
3281 { 81, {
'F',
'O',0}, {
'F',
'R',
'O',0}, 10039882, 234 },
3282 { 84, {
'F',
'R',0}, {
'F',
'R',
'A',0}, 10210824, 250 },
3283 { 86, {
'G',
'M',0}, {
'G',
'M',
'B',0}, 42483, 270 },
3284 { 87, {
'G',
'A',0}, {
'G',
'A',
'B',0}, 42484, 266 },
3285 { 88, {
'G',
'E',0}, {
'G',
'E',
'O',0}, 47611, 268 },
3286 { 89, {
'G',
'H',0}, {
'G',
'H',
'A',0}, 42483, 288 },
3287 { 90, {
'G',
'I',0}, {
'G',
'I',
'B',0}, 47610, 292 },
3288 { 91, {
'G',
'D',0}, {
'G',
'R',
'D',0}, 10039880, 308 },
3289 { 93, {
'G',
'L',0}, {
'G',
'R',
'L',0}, 23581, 304 },
3290 { 94, {
'D',
'E',0}, {
'D',
'E',
'U',0}, 10210824, 276 },
3291 { 98, {
'G',
'R',0}, {
'G',
'R',
'C',0}, 47610, 300 },
3292 { 99, {
'G',
'T',0}, {
'G',
'T',
'M',0}, 27082, 320 },
3293 { 100, {
'G',
'N',0}, {
'G',
'I',
'N',0}, 42483, 324 },
3294 { 101, {
'G',
'Y',0}, {
'G',
'U',
'Y',0}, 31396, 328 },
3295 { 103, {
'H',
'T',0}, {
'H',
'T',
'I',0}, 10039880, 332 },
3296 { 104, {
'H',
'K',0}, {
'H',
'K',
'G',0}, 47600, 344 },
3297 { 106, {
'H',
'N',0}, {
'H',
'N',
'D',0}, 27082, 340 },
3298 { 108, {
'H',
'R',0}, {
'H',
'R',
'V',0}, 47610, 191 },
3299 { 109, {
'H',
'U',0}, {
'H',
'U',
'N',0}, 47609, 348 },
3300 { 110, {
'I',
'S',0}, {
'I',
'S',
'L',0}, 10039882, 352 },
3301 { 111, {
'I',
'D',0}, {
'I',
'D',
'N',0}, 47599, 360 },
3302 { 113, {
'I',
'N',0}, {
'I',
'N',
'D',0}, 47614, 356 },
3303 { 114, {
'I',
'O',0}, {
'I',
'O',
'T',0}, 39070, 86 },
3304 { 116, {
'I',
'R',0}, {
'I',
'R',
'N',0}, 47614, 364 },
3305 { 117, {
'I',
'L',0}, {
'I',
'S',
'R',0}, 47611, 376 },
3306 { 118, {
'I',
'T',0}, {
'I',
'T',
'A',0}, 47610, 380 },
3307 { 119, {
'C',
'I',0}, {
'C',
'I',
'V',0}, 42483, 384 },
3308 { 121, {
'I',
'Q',0}, {
'I',
'R',
'Q',0}, 47611, 368 },
3309 { 122, {
'J',
'P',0}, {
'J',
'P',
'N',0}, 47600, 392 },
3310 { 124, {
'J',
'M',0}, {
'J',
'A',
'M',0}, 10039880, 388 },
3311 { 125, {
'S',
'J',0}, {
'S',
'J',
'M',0}, 10039882, 744 },
3312 { 126, {
'J',
'O',0}, {
'J',
'O',
'R',0}, 47611, 400 },
3313 { 127, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3314 { 129, {
'K',
'E',0}, {
'K',
'E',
'N',0}, 47603, 404 },
3315 { 130, {
'K',
'G',0}, {
'K',
'G',
'Z',0}, 47590, 417 },
3316 { 131, {
'K',
'P',0}, {
'P',
'R',
'K',0}, 47600, 408 },
3317 { 133, {
'K',
'I',0}, {
'K',
'I',
'R',0}, 21206, 296 },
3318 { 134, {
'K',
'R',0}, {
'K',
'O',
'R',0}, 47600, 410 },
3319 { 136, {
'K',
'W',0}, {
'K',
'W',
'T',0}, 47611, 414 },
3320 { 137, {
'K',
'Z',0}, {
'K',
'A',
'Z',0}, 47590, 398 },
3321 { 138, {
'L',
'A',0}, {
'L',
'A',
'O',0}, 47599, 418 },
3322 { 139, {
'L',
'B',0}, {
'L',
'B',
'N',0}, 47611, 422 },
3323 { 140, {
'L',
'V',0}, {
'L',
'V',
'A',0}, 10039882, 428 },
3324 { 141, {
'L',
'T',0}, {
'L',
'T',
'U',0}, 10039882, 440 },
3325 { 142, {
'L',
'R',0}, {
'L',
'B',
'R',0}, 42483, 430 },
3326 { 143, {
'S',
'K',0}, {
'S',
'V',
'K',0}, 47609, 703 },
3327 { 145, {
'L',
'I',0}, {
'L',
'I',
'E',0}, 10210824, 438 },
3328 { 146, {
'L',
'S',0}, {
'L',
'S',
'O',0}, 10039883, 426 },
3329 { 147, {
'L',
'U',0}, {
'L',
'U',
'X',0}, 10210824, 442 },
3330 { 148, {
'L',
'Y',0}, {
'L',
'B',
'Y',0}, 42487, 434 },
3331 { 149, {
'M',
'G',0}, {
'M',
'D',
'G',0}, 47603, 450 },
3332 { 151, {
'M',
'O',0}, {
'M',
'A',
'C',0}, 47600, 446 },
3333 { 152, {
'M',
'D',0}, {
'M',
'D',
'A',0}, 47609, 498 },
3334 { 154, {
'M',
'N',0}, {
'M',
'N',
'G',0}, 47600, 496 },
3335 { 156, {
'M',
'W',0}, {
'M',
'W',
'I',0}, 47603, 454 },
3336 { 157, {
'M',
'L',0}, {
'M',
'L',
'I',0}, 42483, 466 },
3337 { 158, {
'M',
'C',0}, {
'M',
'C',
'O',0}, 10210824, 492 },
3338 { 159, {
'M',
'A',0}, {
'M',
'A',
'R',0}, 42487, 504 },
3339 { 160, {
'M',
'U',0}, {
'M',
'U',
'S',0}, 47603, 480 },
3340 { 162, {
'M',
'R',0}, {
'M',
'R',
'T',0}, 42483, 478 },
3341 { 163, {
'M',
'T',0}, {
'M',
'L',
'T',0}, 47610, 470 },
3342 { 164, {
'O',
'M',0}, {
'O',
'M',
'N',0}, 47611, 512 },
3343 { 165, {
'M',
'V',0}, {
'M',
'D',
'V',0}, 47614, 462 },
3344 { 166, {
'M',
'X',0}, {
'M',
'E',
'X',0}, 27082, 484 },
3345 { 167, {
'M',
'Y',0}, {
'M',
'Y',
'S',0}, 47599, 458 },
3346 { 168, {
'M',
'Z',0}, {
'M',
'O',
'Z',0}, 47603, 508 },
3347 { 173, {
'N',
'E',0}, {
'N',
'E',
'R',0}, 42483, 562 },
3348 { 174, {
'V',
'U',0}, {
'V',
'U',
'T',0}, 20900, 548 },
3349 { 175, {
'N',
'G',0}, {
'N',
'G',
'A',0}, 42483, 566 },
3350 { 176, {
'N',
'L',0}, {
'N',
'L',
'D',0}, 10210824, 528 },
3351 { 177, {
'N',
'O',0}, {
'N',
'O',
'R',0}, 10039882, 578 },
3352 { 178, {
'N',
'P',0}, {
'N',
'P',
'L',0}, 47614, 524 },
3353 { 180, {
'N',
'R',0}, {
'N',
'R',
'U',0}, 21206, 520 },
3354 { 181, {
'S',
'R',0}, {
'S',
'U',
'R',0}, 31396, 740 },
3355 { 182, {
'N',
'I',0}, {
'N',
'I',
'C',0}, 27082, 558 },
3356 { 183, {
'N',
'Z',0}, {
'N',
'Z',
'L',0}, 10210825, 554 },
3357 { 184, {
'P',
'S',0}, {
'P',
'S',
'E',0}, 47611, 275 },
3358 { 185, {
'P',
'Y',0}, {
'P',
'R',
'Y',0}, 31396, 600 },
3359 { 187, {
'P',
'E',0}, {
'P',
'E',
'R',0}, 31396, 604 },
3360 { 190, {
'P',
'K',0}, {
'P',
'A',
'K',0}, 47614, 586 },
3361 { 191, {
'P',
'L',0}, {
'P',
'O',
'L',0}, 47609, 616 },
3362 { 192, {
'P',
'A',0}, {
'P',
'A',
'N',0}, 27082, 591 },
3363 { 193, {
'P',
'T',0}, {
'P',
'R',
'T',0}, 47610, 620 },
3364 { 194, {
'P',
'G',0}, {
'P',
'N',
'G',0}, 20900, 598 },
3365 { 195, {
'P',
'W',0}, {
'P',
'L',
'W',0}, 21206, 585 },
3366 { 196, {
'G',
'W',0}, {
'G',
'N',
'B',0}, 42483, 624 },
3367 { 197, {
'Q',
'A',0}, {
'Q',
'A',
'T',0}, 47611, 634 },
3368 { 198, {
'R',
'E',0}, {
'R',
'E',
'U',0}, 47603, 638 },
3369 { 199, {
'M',
'H',0}, {
'M',
'H',
'L',0}, 21206, 584 },
3370 { 200, {
'R',
'O',0}, {
'R',
'O',
'U',0}, 47609, 642 },
3371 { 201, {
'P',
'H',0}, {
'P',
'H',
'L',0}, 47599, 608 },
3372 { 202, {
'P',
'R',0}, {
'P',
'R',
'I',0}, 10039880, 630 },
3373 { 203, {
'R',
'U',0}, {
'R',
'U',
'S',0}, 47609, 643 },
3374 { 204, {
'R',
'W',0}, {
'R',
'W',
'A',0}, 47603, 646 },
3375 { 205, {
'S',
'A',0}, {
'S',
'A',
'U',0}, 47611, 682 },
3376 { 206, {
'P',
'M',0}, {
'S',
'P',
'M',0}, 23581, 666 },
3377 { 207, {
'K',
'N',0}, {
'K',
'N',
'A',0}, 10039880, 659 },
3378 { 208, {
'S',
'C',0}, {
'S',
'Y',
'C',0}, 47603, 690 },
3379 { 209, {
'Z',
'A',0}, {
'Z',
'A',
'F',0}, 10039883, 710 },
3380 { 210, {
'S',
'N',0}, {
'S',
'E',
'N',0}, 42483, 686 },
3381 { 212, {
'S',
'I',0}, {
'S',
'V',
'N',0}, 47610, 705 },
3382 { 213, {
'S',
'L',0}, {
'S',
'L',
'E',0}, 42483, 694 },
3383 { 214, {
'S',
'M',0}, {
'S',
'M',
'R',0}, 47610, 674 },
3384 { 215, {
'S',
'G',0}, {
'S',
'G',
'P',0}, 47599, 702 },
3385 { 216, {
'S',
'O',0}, {
'S',
'O',
'M',0}, 47603, 706 },
3386 { 217, {
'E',
'S',0}, {
'E',
'S',
'P',0}, 47610, 724 },
3387 { 218, {
'L',
'C',0}, {
'L',
'C',
'A',0}, 10039880, 662 },
3388 { 219, {
'S',
'D',0}, {
'S',
'D',
'N',0}, 42487, 736 },
3389 { 220, {
'S',
'J',0}, {
'S',
'J',
'M',0}, 10039882, 744 },
3390 { 221, {
'S',
'E',0}, {
'S',
'W',
'E',0}, 10039882, 752 },
3391 { 222, {
'S',
'Y',0}, {
'S',
'Y',
'R',0}, 47611, 760 },
3392 { 223, {
'C',
'H',0}, {
'C',
'H',
'E',0}, 10210824, 756 },
3393 { 224, {
'A',
'E',0}, {
'A',
'R',
'E',0}, 47611, 784 },
3394 { 225, {
'T',
'T',0}, {
'T',
'T',
'O',0}, 10039880, 780 },
3395 { 227, {
'T',
'H',0}, {
'T',
'H',
'A',0}, 47599, 764 },
3396 { 228, {
'T',
'J',0}, {
'T',
'J',
'K',0}, 47590, 762 },
3397 { 231, {
'T',
'O',0}, {
'T',
'O',
'N',0}, 26286, 776 },
3398 { 232, {
'T',
'G',0}, {
'T',
'G',
'O',0}, 42483, 768 },
3399 { 233, {
'S',
'T',0}, {
'S',
'T',
'P',0}, 42484, 678 },
3400 { 234, {
'T',
'N',0}, {
'T',
'U',
'N',0}, 42487, 788 },
3401 { 235, {
'T',
'R',0}, {
'T',
'U',
'R',0}, 47611, 792 },
3402 { 236, {
'T',
'V',0}, {
'T',
'U',
'V',0}, 26286, 798 },
3403 { 237, {
'T',
'W',0}, {
'T',
'W',
'N',0}, 47600, 158 },
3404 { 238, {
'T',
'M',0}, {
'T',
'K',
'M',0}, 47590, 795 },
3405 { 239, {
'T',
'Z',0}, {
'T',
'Z',
'A',0}, 47603, 834 },
3406 { 240, {
'U',
'G',0}, {
'U',
'G',
'A',0}, 47603, 800 },
3407 { 241, {
'U',
'A',0}, {
'U',
'K',
'R',0}, 47609, 804 },
3408 { 242, {
'G',
'B',0}, {
'G',
'B',
'R',0}, 10039882, 826 },
3409 { 244, {
'U',
'S',0}, {
'U',
'S',
'A',0}, 23581, 840 },
3410 { 245, {
'B',
'F',0}, {
'B',
'F',
'A',0}, 42483, 854 },
3411 { 246, {
'U',
'Y',0}, {
'U',
'R',
'Y',0}, 31396, 858 },
3412 { 247, {
'U',
'Z',0}, {
'U',
'Z',
'B',0}, 47590, 860 },
3413 { 248, {
'V',
'C',0}, {
'V',
'C',
'T',0}, 10039880, 670 },
3414 { 249, {
'V',
'E',0}, {
'V',
'E',
'N',0}, 31396, 862 },
3415 { 251, {
'V',
'N',0}, {
'V',
'N',
'M',0}, 47599, 704 },
3416 { 252, {
'V',
'I',0}, {
'V',
'I',
'R',0}, 10039880, 850 },
3417 { 253, {
'V',
'A',0}, {
'V',
'A',
'T',0}, 47610, 336 },
3418 { 254, {
'N',
'A',0}, {
'N',
'A',
'M',0}, 10039883, 516 },
3419 { 257, {
'E',
'H',0}, {
'E',
'S',
'H',0}, 42487, 732 },
3420 { 258, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3421 { 259, {
'W',
'S',0}, {
'W',
'S',
'M',0}, 26286, 882 },
3422 { 260, {
'S',
'Z',0}, {
'S',
'W',
'Z',0}, 10039883, 748 },
3423 { 261, {
'Y',
'E',0}, {
'Y',
'E',
'M',0}, 47611, 887 },
3424 { 263, {
'Z',
'M',0}, {
'Z',
'M',
'B',0}, 47603, 894 },
3425 { 264, {
'Z',
'W',0}, {
'Z',
'W',
'E',0}, 47603, 716 },
3426 { 269, {
'C',
'S',0}, {
'S',
'C',
'G',0}, 47610, 891 },
3427 { 270, {
'M',
'E',0}, {
'M',
'N',
'E',0}, 47610, 499 },
3428 { 271, {
'R',
'S',0}, {
'S',
'R',
'B',0}, 47610, 688 },
3429 { 273, {
'C',
'W',0}, {
'C',
'U',
'W',0}, 10039880, 531 },
3430 { 276, {
'S',
'S',0}, {
'S',
'S',
'D',0}, 42487, 728 },
3431 { 300, {
'A',
'I',0}, {
'A',
'I',
'A',0}, 10039880, 660 },
3432 { 301, {
'A',
'Q',0}, {
'A',
'T',
'A',0}, 39070, 10 },
3433 { 302, {
'A',
'W',0}, {
'A',
'B',
'W',0}, 10039880, 533 },
3434 { 303, {
'X',
'X',0}, {
'X',
'X',0}, 39070 },
3435 { 304, {
'X',
'X',0}, {
'X',
'X',0}, 10210825 },
3436 { 305, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3437 { 306, {
'B',
'V',0}, {
'B',
'V',
'T',0}, 39070, 74 },
3438 { 307, {
'K',
'Y',0}, {
'C',
'Y',
'M',0}, 10039880, 136 },
3439 { 308, {
'X',
'X',0}, {
'X',
'X',0}, 10210824, 0,
LOCATION_BOTH },
3440 { 309, {
'C',
'X',0}, {
'C',
'X',
'R',0}, 12, 162 },
3441 { 310, {
'X',
'X',0}, {
'X',
'X',0}, 27114 },
3442 { 311, {
'C',
'C',0}, {
'C',
'C',
'K',0}, 10210825, 166 },
3443 { 312, {
'C',
'K',0}, {
'C',
'O',
'K',0}, 26286, 184 },
3444 { 313, {
'X',
'X',0}, {
'X',
'X',0}, 10210825 },
3445 { 314, {
'X',
'X',0}, {
'X',
'X',0}, 114 },
3446 { 315, {
'F',
'K',0}, {
'F',
'L',
'K',0}, 31396, 238 },
3447 { 317, {
'G',
'F',0}, {
'G',
'U',
'F',0}, 31396, 254 },
3448 { 318, {
'P',
'F',0}, {
'P',
'Y',
'F',0}, 26286, 258 },
3449 { 319, {
'T',
'F',0}, {
'A',
'T',
'F',0}, 39070, 260 },
3450 { 321, {
'G',
'P',0}, {
'G',
'L',
'P',0}, 10039880, 312 },
3451 { 322, {
'G',
'U',0}, {
'G',
'U',
'M',0}, 21206, 316 },
3452 { 323, {
'X',
'X',0}, {
'X',
'X',0}, 39070 },
3453 { 324, {
'G',
'G',0}, {
'G',
'G',
'Y',0}, 308, 831 },
3454 { 325, {
'H',
'M',0}, {
'H',
'M',
'D',0}, 39070, 334 },
3455 { 326, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3456 { 327, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3457 { 328, {
'J',
'E',0}, {
'J',
'E',
'Y',0}, 308, 832 },
3458 { 329, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3459 { 330, {
'M',
'Q',0}, {
'M',
'T',
'Q',0}, 10039880, 474 },
3460 { 331, {
'Y',
'T',0}, {
'M',
'Y',
'T',0}, 47603, 175 },
3461 { 332, {
'M',
'S',0}, {
'M',
'S',
'R',0}, 10039880, 500 },
3462 { 333, {
'A',
'N',0}, {
'A',
'N',
'T',0}, 10039880, 530,
LOCATION_BOTH },
3463 { 334, {
'N',
'C',0}, {
'N',
'C',
'L',0}, 20900, 540 },
3464 { 335, {
'N',
'U',0}, {
'N',
'I',
'U',0}, 26286, 570 },
3465 { 336, {
'N',
'F',0}, {
'N',
'F',
'K',0}, 10210825, 574 },
3466 { 337, {
'M',
'P',0}, {
'M',
'N',
'P',0}, 21206, 580 },
3467 { 338, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3468 { 339, {
'P',
'N',0}, {
'P',
'C',
'N',0}, 26286, 612 },
3469 { 340, {
'X',
'X',0}, {
'X',
'X',0}, 337 },
3470 { 341, {
'X',
'X',0}, {
'X',
'X',0}, 337 },
3471 { 342, {
'G',
'S',0}, {
'S',
'G',
'S',0}, 39070, 239 },
3472 { 343, {
'S',
'H',0}, {
'S',
'H',
'N',0}, 42483, 654 },
3473 { 346, {
'X',
'X',0}, {
'X',
'X',0}, 337 },
3474 { 347, {
'T',
'K',0}, {
'T',
'K',
'L',0}, 26286, 772 },
3475 { 348, {
'X',
'X',0}, {
'X',
'X',0}, 39070 },
3476 { 349, {
'T',
'C',0}, {
'T',
'C',
'A',0}, 10039880, 796 },
3477 { 351, {
'V',
'G',0}, {
'V',
'G',
'B',0}, 10039880, 92 },
3478 { 352, {
'W',
'F',0}, {
'W',
'L',
'F',0}, 26286, 876 },
3479 { 742, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3480 { 2129, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3481 { 10541, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3482 { 15126, {
'I',
'M',0}, {
'I',
'M',
'N',0}, 10039882, 833 },
3483 { 19618, {
'M',
'K',0}, {
'M',
'K',
'D',0}, 47610, 807 },
3484 { 20900, {
'X',
'X',0}, {
'X',
'X',0}, 27114, 0,
LOCATION_REGION },
3485 { 21206, {
'X',
'X',0}, {
'X',
'X',0}, 27114, 0,
LOCATION_REGION },
3486 { 21242, {
'X',
'X',0}, {
'X',
'X',0}, 161832256 },
3487 { 23581, {
'X',
'X',0}, {
'X',
'X',0}, 10026358, 0,
LOCATION_REGION },
3488 { 26286, {
'X',
'X',0}, {
'X',
'X',0}, 27114, 0,
LOCATION_REGION },
3489 { 27082, {
'X',
'X',0}, {
'X',
'X',0}, 161832257, 0,
LOCATION_REGION },
3490 { 27114, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3491 { 30967, {
'S',
'X',0}, {
'S',
'X',
'M',0}, 10039880, 534 },
3492 { 31396, {
'X',
'X',0}, {
'X',
'X',0}, 161832257, 0,
LOCATION_REGION },
3493 { 31706, {
'M',
'F',0}, {
'M',
'A',
'F',0}, 10039880, 663 },
3494 { 39070, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3495 { 42483, {
'X',
'X',0}, {
'X',
'X',0}, 742, 0,
LOCATION_REGION },
3496 { 42484, {
'X',
'X',0}, {
'X',
'X',0}, 742, 0,
LOCATION_REGION },
3497 { 42487, {
'X',
'X',0}, {
'X',
'X',0}, 742, 0,
LOCATION_REGION },
3498 { 47590, {
'X',
'X',0}, {
'X',
'X',0}, 2129, 0,
LOCATION_REGION },
3499 { 47599, {
'X',
'X',0}, {
'X',
'X',0}, 2129, 0,
LOCATION_REGION },
3500 { 47600, {
'X',
'X',0}, {
'X',
'X',0}, 2129, 0,
LOCATION_REGION },
3501 { 47603, {
'X',
'X',0}, {
'X',
'X',0}, 742, 0,
LOCATION_REGION },
3502 { 47609, {
'X',
'X',0}, {
'X',
'X',0}, 10541, 0,
LOCATION_REGION },
3503 { 47610, {
'X',
'X',0}, {
'X',
'X',0}, 10541, 0,
LOCATION_REGION },
3504 { 47611, {
'X',
'X',0}, {
'X',
'X',0}, 2129, 0,
LOCATION_REGION },
3505 { 47614, {
'X',
'X',0}, {
'X',
'X',0}, 2129, 0,
LOCATION_REGION },
3506 { 7299303, {
'T',
'L',0}, {
'T',
'L',
'S',0}, 47599, 626 },
3507 { 10026358, {
'X',
'X',0}, {
'X',
'X',0}, 39070, 0,
LOCATION_REGION },
3508 { 10028789, {
'A',
'X',0}, {
'A',
'L',
'A',0}, 10039882, 248 },
3509 { 10039880, {
'X',
'X',0}, {
'X',
'X',0}, 161832257, 0,
LOCATION_REGION },
3510 { 10039882, {
'X',
'X',0}, {
'X',
'X',0}, 10541, 0,
LOCATION_REGION },
3511 { 10039883, {
'X',
'X',0}, {
'X',
'X',0}, 742, 0,
LOCATION_REGION },
3512 { 10210824, {
'X',
'X',0}, {
'X',
'X',0}, 10541, 0,
LOCATION_REGION },
3513 { 10210825, {
'X',
'X',0}, {
'X',
'X',0}, 27114, 0,
LOCATION_REGION },
3514 { 161832015, {
'B',
'L',0}, {
'B',
'L',
'M',0}, 10039880, 652 },
3515 { 161832256, {
'U',
'M',0}, {
'U',
'M',
'I',0}, 27114, 581 },
3516 { 161832257, {
'X',
'X',0}, {
'X',
'X',0}, 10026358, 0,
LOCATION_REGION },
3603 hKey =
NLS_RegOpenKey(0,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage");
3606 WARN(
"NLS_RegOpenKey() failed\n");
3613 szValue,
sizeof(szValue)))
3620 bContinue = lpProcs->
procW(szNumber);
3624 char szNumberA[
sizeof(szNumber)/
sizeof(
WCHAR)];
3627 bContinue = lpProcs->
procA(szNumberA);
3633 }
else bContinue =
FALSE;
3660 procs.
procW = lpCodePageEnumProc;
3681 procs.
procA = lpCodePageEnumProc;
3706 TRACE(
"(%d, %d, %p)\n", geoclass,
parent, enumproc);
3730 if (!enumproc(
ptr->id))
3766 static const WCHAR geoW[] = {
'G',
'e',
'o',0};
3767 static const WCHAR nationW[] = {
'N',
'a',
't',
'i',
'o',
'n',0};
3770 HANDLE hkey, hSubkey = 0;
3774 count =
sizeof(bufferW);
3788 FIXME(
"GEOCLASS_REGION not handled yet\n");
3793 if (hSubkey)
NtClose(hSubkey);
3802 static const WCHAR geoW[] = {
'G',
'e',
'o',0};
3803 static const WCHAR nationW[] = {
'N',
'a',
't',
'i',
'o',
'n',0};
3804 static const WCHAR formatW[] = {
'%',
'i',0};
3813 attr.RootDirectory = hkey;
3815 attr.Attributes = 0;