{
PUSER_MODALS_INFO_0 pUserModals = NULL;
PUSER_INFO_4 pUserInfo = NULL;
+ PLOCALGROUP_USERS_INFO_0 pLocalGroupInfo = NULL;
+ PGROUP_USERS_INFO_0 pGroupInfo = NULL;
+ DWORD dwLocalGroupRead, dwLocalGroupTotal;
+ DWORD dwGroupRead, dwGroupTotal;
DWORD dwLastSet;
+ DWORD i;
NET_API_STATUS Status;
/* Modify the user */
if (Status != NERR_Success)
goto done;
+ Status = NetUserGetLocalGroups(NULL,
+ lpUserName,
+ 0,
+ 0,
+ (LPBYTE*)&pLocalGroupInfo,
+ MAX_PREFERRED_LENGTH,
+ &dwLocalGroupRead,
+ &dwLocalGroupTotal);
+ if (Status != NERR_Success)
+ goto done;
+
+ Status = NetUserGetGroups(NULL,
+ lpUserName,
+ 0,
+ (LPBYTE*)&pGroupInfo,
+ MAX_PREFERRED_LENGTH,
+ &dwGroupRead,
+ &dwGroupTotal);
+ if (Status != NERR_Success)
+ goto done;
+
PrintToConsole(L"User name %s\n", pUserInfo->usri4_name);
PrintToConsole(L"Full name %s\n", pUserInfo->usri4_full_name);
PrintToConsole(L"Comment %s\n", pUserInfo->usri4_comment);
PrintToConsole(L"\n");
- PrintToConsole(L"Password expires ");
+ PrintToConsole(L"Password last set ");
dwLastSet = GetTimeInSeconds() - pUserInfo->usri4_password_age;
PrintDateTime(dwLastSet);
PrintToConsole(L"User may change password %s\n", (pUserInfo->usri4_flags & UF_PASSWD_CANT_CHANGE) ? L"No" : L"Yes");
PrintToConsole(L"\n");
- PrintToConsole(L"Workstation allowed %s\n", pUserInfo->usri4_workstations);
+ PrintToConsole(L"Workstations allowed %s\n", (pUserInfo->usri4_workstations == NULL || wcslen(pUserInfo->usri4_workstations) == 0) ? L"All" : pUserInfo->usri4_workstations);
PrintToConsole(L"Logon script %s\n", pUserInfo->usri4_script_path);
PrintToConsole(L"User profile %s\n", pUserInfo->usri4_profile);
PrintToConsole(L"Home directory %s\n", pUserInfo->usri4_home_dir);
else
PrintDateTime(pUserInfo->usri4_last_logon);
PrintToConsole(L"\n");
- PrintToConsole(L"Logon hours allowed \n");
+ PrintToConsole(L"Logon hours allowed ");
+ if (pUserInfo->usri4_logon_hours == NULL)
+ PrintToConsole(L"All\n");
PrintToConsole(L"\n");
- PrintToConsole(L"Local group memberships \n");
- PrintToConsole(L"Global group memberships \n");
+
+ PrintToConsole(L"\n");
+ PrintToConsole(L"Local group memberships ");
+ if (dwLocalGroupTotal != 0 && pLocalGroupInfo != NULL)
+ {
+ for (i = 0; i < dwLocalGroupTotal; i++)
+ {
+ if (i != 0)
+ PrintToConsole(L" ");
+ PrintToConsole(L"*%s\n", pLocalGroupInfo[i].lgrui0_name);
+ }
+ }
+ else
+ {
+ PrintToConsole(L"\n");
+ }
+
+ PrintToConsole(L"Global group memberships ");
+ if (dwGroupTotal != 0 && pGroupInfo != NULL)
+ {
+ for (i = 0; i < dwGroupTotal; i++)
+ {
+ if (i != 0)
+ PrintToConsole(L" ");
+ PrintToConsole(L"*%s\n", pGroupInfo[i].grui0_name);
+ }
+ }
+ else
+ {
+ PrintToConsole(L"\n");
+ }
done:
+ if (pGroupInfo != NULL)
+ NetApiBufferFree(pGroupInfo);
+
+ if (pLocalGroupInfo != NULL)
+ NetApiBufferFree(pLocalGroupInfo);
+
if (pUserModals != NULL)
NetApiBufferFree(pUserModals);
PUSER_INFO_4 pUserInfo = NULL;
USER_INFO_4 UserInfo;
LPWSTR p;
+ LPWSTR endptr;
+ DWORD value;
NET_API_STATUS Status;
if (argc == 2)
lpUserName,
4,
(LPBYTE*)&pUserInfo);
- printf("Status: %lu\n", Status);
+ if (Status != NERR_Success)
+ {
+ printf("Status: %lu\n", Status);
+ result = 1;
+ goto done;
+ }
}
else if (bAdd && !bDelete)
{
p = &argv[i][8];
if (_wcsicmp(p, L"yes") == 0)
{
-
+ pUserInfo->usri4_flags &= ~UF_ACCOUNTDISABLE;
}
else if (_wcsicmp(p, L"no") == 0)
{
-
+ pUserInfo->usri4_flags |= UF_ACCOUNTDISABLE;
}
else
{
}
else if (_wcsnicmp(argv[j], L"/countrycode:", 13) == 0)
{
+ p = &argv[i][13];
+ value = wcstoul(p, &endptr, 10);
+ if (*endptr != 0)
+ {
+ PrintToConsole(L"You entered an invalid value for the /COUNTRYCODE option.\n");
+ result = 1;
+ goto done;
+ }
+
+ /* FIXME: verify the country code */
+
+ pUserInfo->usri4_country_code = value;
}
else if (_wcsnicmp(argv[j], L"/expires:", 9) == 0)
{
}
else if (_wcsnicmp(argv[j], L"/passwordchg:", 13) == 0)
{
+ p = &argv[i][13];
+ if (_wcsicmp(p, L"yes") == 0)
+ {
+ pUserInfo->usri4_flags &= ~UF_PASSWD_CANT_CHANGE;
+ }
+ else if (_wcsicmp(p, L"no") == 0)
+ {
+ pUserInfo->usri4_flags |= UF_PASSWD_CANT_CHANGE;
+ }
+ else
+ {
+ PrintToConsole(L"You entered an invalid value for the /PASSWORDCHG option.\n");
+ result = 1;
+ goto done;
+ }
}
else if (_wcsnicmp(argv[j], L"/passwordreq:", 13) == 0)
{
+ p = &argv[i][13];
+ if (_wcsicmp(p, L"yes") == 0)
+ {
+ pUserInfo->usri4_flags &= ~UF_PASSWD_NOTREQD;
+ }
+ else if (_wcsicmp(p, L"no") == 0)
+ {
+ pUserInfo->usri4_flags |= UF_PASSWD_NOTREQD;
+ }
+ else
+ {
+ PrintToConsole(L"You entered an invalid value for the /PASSWORDREQ option.\n");
+ result = 1;
+ goto done;
+ }
}
else if (_wcsnicmp(argv[j], L"/profilepath:", 13) == 0)
{
HIWORD(lParam) - GetWindowHeight(hToolBar) - GetWindowHeight(hStatusBar),
SWP_NOZORDER|SWP_NOACTIVATE);
- while (NewPos < SPLIT_WIDTH + GetWindowHeight(hToolBar))
+ if(wParam != SIZE_MINIMIZED)
{
- RichPos--;
- NewPos = HIWORD(lParam) - (RichPos +
- SPLIT_WIDTH + GetWindowHeight(hStatusBar));
+ while (NewPos < SPLIT_WIDTH + GetWindowHeight(hToolBar))
+ {
+ RichPos--;
+ NewPos = HIWORD(lParam) - (RichPos +
+ SPLIT_WIDTH + GetWindowHeight(hStatusBar));
+ }
}
SetHSplitterPos(NewPos);
if (lpLogHandle->LogFile == NULL)
{
lpLogHandle->LogFile = LogfListItemByName(L"Application");
+
+ if (lpLogHandle->LogFile == NULL)
+ {
+ DPRINT1("Application log is missing!\n");
+ Status = STATUS_UNSUCCESSFUL;
+ goto Done;
+ }
+
lpLogHandle->CurrentRecord = LogfGetOldestRecord(lpLogHandle->LogFile);
}
}
dwInstanceNumber++;
}
while (ret == CR_ALREADY_SUCH_DEVINST);
-
+
if (ret == CR_SUCCESS)
{
/* pszDeviceID is an out parameter too for generated IDs */
if(ProcessInfo.hThread)
CloseHandle(ProcessInfo.hThread);
- DPRINT1("Success? %d\n", DeviceInstalled);
+ if (!DeviceInstalled)
+ {
+ DPRINT1("InstallDevice failed for DeviceInstance '%ws'\n", DeviceInstance);
+ }
return DeviceInstalled;
}
#if 0
else if (wcscmp(FileSystemList->Selected->FileSystem, L"EXT2") == 0)
{
- PartEntry->PartInfo[PartNum].PartitionType = PARTITION_EXT2;
+ PartEntry->PartitionType = PARTITION_EXT2;
DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].PartitionType = PartEntry->PartitionType;
}
#endif
for (i = 0; i < DiskEntry->LayoutBuffer->PartitionCount; i++)
{
PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[i];
- DbgPrint("%lu: %12I64u %12I64u %10lu %2lu %2x %c %c\n",
+ DPRINT("\n%lu: %12I64u %12I64u %10lu %2lu %2x %c %c\n",
i,
PartitionInfo->StartingOffset.QuadPart,
PartitionInfo->PartitionLength.QuadPart,
PPARTENTRY NewPartEntry;
PLIST_ENTRY Entry;
- DPRINT1("ScanForUnpartitionedDiskSpace()\n");
+ DPRINT("ScanForUnpartitionedDiskSpace()\n");
if (IsListEmpty(&DiskEntry->PrimaryPartListHead))
{
NewPartEntry->StartSector.QuadPart = LastStartSector + LastSectorCount;
NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + LastUnusedSectorCount, DiskEntry->SectorAlignment) -
NewPartEntry->StartSector.QuadPart;
-DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
-DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
-DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
+ DPRINT("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
+ DPRINT("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
+ DPRINT("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
NewPartEntry->FormatState = Unformatted;
NewPartEntry->StartSector.QuadPart = LastStartSector + LastSectorCount;
NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + LastUnusedSectorCount, DiskEntry->SectorAlignment) -
NewPartEntry->StartSector.QuadPart;
-DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
-DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
-DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
+ DPRINT("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
+ DPRINT("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
+ DPRINT("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
NewPartEntry->FormatState = Unformatted;
NewPartEntry->StartSector.QuadPart = LastStartSector + LastSectorCount;
NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + LastUnusedSectorCount, DiskEntry->SectorAlignment) -
NewPartEntry->StartSector.QuadPart;
-DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
-DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
-DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
+ DPRINT("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
+ DPRINT("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
+ DPRINT("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
NewPartEntry->FormatState = Unformatted;
}
}
- DPRINT1("ScanForUnpartitionedDiskSpace() done\n");
+ DPRINT("ScanForUnpartitionedDiskSpace() done\n");
}
DiskEntry->SectorAlignment = DiskGeometry.SectorsPerTrack;
- DPRINT1("SectorCount %I64u\n", DiskEntry->SectorCount);
- DPRINT1("SectorAlignment %lu\n", DiskEntry->SectorAlignment);
+ DPRINT("SectorCount %I64u\n", DiskEntry->SectorCount);
+ DPRINT("SectorAlignment %lu\n", DiskEntry->SectorAlignment);
DiskEntry->DiskNumber = DiskNumber;
DiskEntry->Port = ScsiAddress.PortNumber;
InsertAscendingList(&List->DiskListHead, DiskEntry, DISKENTRY, ListEntry, DiskNumber);
/*
- * Allocate a buffer for 26 logical drives (2 entries each == 52)
+ * Allocate a buffer for 26 logical drives (2 entries each == 52)
* plus the main partiton table (4 entries). Total 56 entries.
*/
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
{
if ((DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector) % DiskEntry->SectorsPerTrack == 0)
{
- DPRINT1("Use %lu Sector alignment!\n", DiskEntry->SectorsPerTrack);
+ DPRINT("Use %lu Sector alignment!\n", DiskEntry->SectorsPerTrack);
}
else if (DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart % 1048756 == 0)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
AddConsoleAliasW(LPCWSTR lpSource,
LPCWSTR lpTarget,
LPCWSTR lpExeName)
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
AddConsoleAliasA(LPCSTR lpSource,
LPCSTR lpTarget,
LPCSTR lpExeName)
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasW(LPWSTR lpSource,
LPWSTR lpTargetBuffer,
DWORD TargetBufferLength,
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasA(LPSTR lpSource,
LPSTR lpTargetBuffer,
DWORD TargetBufferLength,
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasesW(LPWSTR AliasBuffer,
DWORD AliasBufferLength,
LPWSTR ExeName)
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasesA(LPSTR AliasBuffer,
DWORD AliasBufferLength,
LPSTR ExeName)
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasesLengthW(LPWSTR lpExeName)
{
return IntGetConsoleAliasesLength(lpExeName, TRUE);
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasesLengthA(LPSTR lpExeName)
{
return IntGetConsoleAliasesLength(lpExeName, FALSE);
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasExesW(LPWSTR lpExeNameBuffer,
DWORD ExeNameBufferLength)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasExesA(LPSTR lpExeNameBuffer,
DWORD ExeNameBufferLength)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasExesLengthW(VOID)
{
DPRINT1("GetConsoleAliasExesLengthW called\n");
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleAliasExesLengthA(VOID)
{
DPRINT1("GetConsoleAliasExesLengthA called\n");
*/
HMENU
WINAPI
+DECLSPEC_HOTPATCH
ConsoleMenuControl(HANDLE hConsoleOutput,
DWORD dwCmdIdLow,
DWORD dwCmdIdHigh)
*/
HANDLE
WINAPI
+DECLSPEC_HOTPATCH
DuplicateConsoleHandle(HANDLE hConsole,
DWORD dwDesiredAccess,
BOOL bInheritHandle,
*/
COORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleFontSize(HANDLE hConsoleOutput,
DWORD nFont)
{
*/
ULONG
WINAPI
+DECLSPEC_HOTPATCH
GetNumberOfConsoleFonts(VOID)
{
DPRINT1("GetNumberOfConsoleFonts() UNIMPLEMENTED!\n");
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursor(HANDLE hConsoleOutput,
HCURSOR hCursor)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleFont(HANDLE hConsoleOutput,
DWORD nFont)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleKeyShortcuts(DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleMenuClose(BOOL bEnable)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsolePalette(HANDLE hConsoleOutput,
HPALETTE hPalette,
UINT dwUsage)
*/
INT
WINAPI
+DECLSPEC_HOTPATCH
ShowConsoleCursor(HANDLE hConsoleOutput,
BOOL bShow)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
VerifyConsoleIoHandle(HANDLE hIoHandle)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
CloseConsoleHandle(HANDLE hHandle)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
HANDLE
WINAPI
+DECLSPEC_HOTPATCH
GetStdHandle(DWORD nStdHandle)
/*
* FUNCTION: Get a handle for the standard input, standard output
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetStdHandle(DWORD nStdHandle,
HANDLE hHandle)
/*
BOOL
WINAPI
+DECLSPEC_HOTPATCH
AllocConsole(VOID)
{
BOOL Success;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FreeConsole(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursorPosition(HANDLE hConsoleOutput,
COORD dwCursorPosition)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleMode(HANDLE hConsoleHandle,
DWORD dwMode)
{
*/
COORD
WINAPI
+DECLSPEC_HOTPATCH
GetLargestConsoleWindowSize(HANDLE hConsoleOutput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FlushConsoleInputBuffer(HANDLE hConsoleInput)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
COORD dwSize)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ScrollConsoleScreenBufferA(HANDLE hConsoleOutput,
CONST SMALL_RECT* lpScrollRectangle,
CONST SMALL_RECT* lpClipRectangle,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ScrollConsoleScreenBufferW(HANDLE hConsoleOutput,
CONST SMALL_RECT *lpScrollRectangle,
CONST SMALL_RECT *lpClipRectangle,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTextAttribute(HANDLE hConsoleOutput,
WORD wAttributes)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine,
BOOL Add)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
DWORD dwProcessGroupId)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleTitleW(LPWSTR lpConsoleTitle,
DWORD nSize)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleTitleA(LPSTR lpConsoleTitle,
DWORD nSize)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTitleW(LPCWSTR lpConsoleTitle)
{
return IntSetConsoleTitle(lpConsoleTitle, TRUE);
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleTitleA(LPCSTR lpConsoleTitle)
{
return IntSetConsoleTitle(lpConsoleTitle, FALSE);
*/
UINT
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCP(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCP(UINT wCodePageID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
UINT
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleOutputCP(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleOutputCP(UINT wCodePageID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
HWND
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleWindow(VOID)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleIcon(HICON hIcon)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleInputExeNameW(IN LPWSTR lpExeName)
{
DWORD ExeLength;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleInputExeNameA(IN LPSTR lpExeName)
{
NTSTATUS Status;
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleInputExeNameW(IN DWORD nBufferLength,
OUT LPWSTR lpExeName)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleInputExeNameA(IN DWORD nBufferLength,
OUT LPSTR lpExeName)
{
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCursorMode(HANDLE hConsole, PBOOL pUnknown1, PBOOL pUnknown2)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCursorMode(HANDLE hConsole, BOOL Unknown1, BOOL Unknown2)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleNlsMode(HANDLE hConsole, LPDWORD lpMode)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleNlsMode(HANDLE hConsole, DWORD dwMode)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleLocalEUDC(DWORD Unknown1, DWORD Unknown2, DWORD Unknown3, DWORD Unknown4)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
RegisterConsoleIME(HWND hWnd, LPDWORD ThreadId)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
RegisterConsoleOS2(BOOL bUnknown)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleOS2OemFormat(BOOL bUnknown)
{
STUB;
BOOL
WINAPI
+DECLSPEC_HOTPATCH
UnregisterConsoleIME(VOID)
{
STUB;
}
+static
BOOL
IntGetConsoleKeyboardLayoutName(OUT PVOID pszLayoutName,
IN BOOL bAnsi)
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleKeyboardLayoutNameA(OUT LPSTR pszLayoutName)
{
return IntGetConsoleKeyboardLayoutName(pszLayoutName, TRUE);
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleKeyboardLayoutNameW(OUT LPWSTR pszLayoutName)
{
return IntGetConsoleKeyboardLayoutName(pszLayoutName, FALSE);
*/
VOID
WINAPI
+DECLSPEC_HOTPATCH
ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName)
{
IntExpungeConsoleCommandHistory(lpExeName, TRUE);
*/
VOID
WINAPI
+DECLSPEC_HOTPATCH
ExpungeConsoleCommandHistoryA(LPCSTR lpExeName)
{
IntExpungeConsoleCommandHistory(lpExeName, FALSE);
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCommandHistoryW(LPWSTR lpHistory,
DWORD cbHistory,
LPCWSTR lpExeName)
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCommandHistoryA(LPSTR lpHistory,
DWORD cbHistory,
LPCSTR lpExeName)
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName)
{
return IntGetConsoleCommandHistoryLength(lpExeName, TRUE);
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleCommandHistoryLengthA(LPCSTR lpExeName)
{
return IntGetConsoleCommandHistoryLength(lpExeName, FALSE);
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
LPCWSTR lpExeName)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleNumberOfCommandsA(DWORD dwNumCommands,
LPCSTR lpExeName)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleCommandHistoryMode(IN DWORD dwMode)
{
CONSOLE_API_MESSAGE ApiMessage;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleW(IN HANDLE hConsoleInput,
OUT LPVOID lpBuffer,
IN DWORD nNumberOfCharsToRead,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleA(IN HANDLE hConsoleInput,
OUT LPVOID lpBuffer,
IN DWORD nNumberOfCharsToRead,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
PeekConsoleInputW(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
PeekConsoleInputA(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleInputW(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleInputA(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleInputExW(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleInputExA(IN HANDLE hConsoleInput,
OUT PINPUT_RECORD lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleOutputW(IN HANDLE hConsoleOutput,
OUT PCHAR_INFO lpBuffer,
IN COORD dwBufferSize,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleOutputA(IN HANDLE hConsoleOutput,
OUT PCHAR_INFO lpBuffer,
IN COORD dwBufferSize,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
OUT LPWSTR lpCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
OUT LPSTR lpCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
ReadConsoleOutputAttribute(IN HANDLE hConsoleOutput,
OUT LPWORD lpAttribute,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleW(IN HANDLE hConsoleOutput,
IN CONST VOID *lpBuffer,
IN DWORD nNumberOfCharsToWrite,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleA(IN HANDLE hConsoleOutput,
IN CONST VOID *lpBuffer,
IN DWORD nNumberOfCharsToWrite,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleInputW(IN HANDLE hConsoleInput,
IN CONST INPUT_RECORD *lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleInputA(IN HANDLE hConsoleInput,
IN CONST INPUT_RECORD *lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleInputVDMW(IN HANDLE hConsoleInput,
IN CONST INPUT_RECORD *lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleInputVDMA(IN HANDLE hConsoleInput,
IN CONST INPUT_RECORD *lpBuffer,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleOutputW(IN HANDLE hConsoleOutput,
IN CONST CHAR_INFO *lpBuffer,
IN COORD dwBufferSize,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleOutputA(IN HANDLE hConsoleOutput,
IN CONST CHAR_INFO *lpBuffer,
IN COORD dwBufferSize,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
IN LPCWSTR lpCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
IN LPCSTR lpCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
WriteConsoleOutputAttribute(IN HANDLE hConsoleOutput,
IN CONST WORD *lpAttribute,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FillConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
IN WCHAR cCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FillConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
IN CHAR cCharacter,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
FillConsoleOutputAttribute(IN HANDLE hConsoleOutput,
IN WORD wAttribute,
IN DWORD nLength,
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
{
NTSTATUS Status;
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
{
NTSTATUS Status;
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleOriginalTitleW(OUT LPWSTR lpConsoleTitle,
IN DWORD nSize)
{
*/
DWORD
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleOriginalTitleA(OUT LPSTR lpConsoleTitle,
IN DWORD nSize)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetConsoleScreenBufferInfoEx(IN HANDLE hConsoleOutput,
OUT PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
SetConsoleScreenBufferInfoEx(IN HANDLE hConsoleOutput,
IN PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx)
{
*/
BOOL
WINAPI
+DECLSPEC_HOTPATCH
GetCurrentConsoleFontEx(IN HANDLE hConsoleOutput,
IN BOOL bMaximumWindow,
OUT PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx)
return FALSE;
case STATUS_REVISION_MISMATCH:
- DPRINT1("ReactOS returning version mismatch. Investigate!\n");
+ DPRINT1("VerifyVersionInfo -- Version mismatch\n");
SetLastError(ERROR_OLD_WIN_VERSION);
return FALSE;
#include "winnls/locale_rc.rc"
+/* FIXME */
+#define NLSRC_OFFSET 5000
+
/* UTF-8 */
#pragma code_page(65001)
#ifdef LANGUAGE_CS_CZ
52936 "52936 (HZ-GB2312 zjednodušená čínština)"
54936 "54936 (GB18030 zjednodušená čínština)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (Chinesisch vereinfacht (HZ))"
54936 "54936 (Chinesisch vereinfacht (GB18030))"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Simplified Chinese)"
54936 "54936 (GB18030 Simplified Chinese)"
+
+/* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Chino simplificado)"
54936 "54936 (GB18030 Chino simplificado)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Simplified Chinese)"
54936 "54936 (GB18030 Simplified Chinese)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 chinezesc simplificat)"
54936 "54936 (GB18030 chinezesc simplificat)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 китайская упрощенная)"
54936 "54936 (GB18030 китайская упрощенная)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Kineze Thjeshtuar)"
54936 "54936 (GB18030 Kineze Thjeshtesuar)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Bayağılaştırılmış Çince)"
54936 "54936 (GB18030 Bayağılaştırılmış Çince)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
52936 "52936 (HZ-GB2312 Китайська спрощена)"
54936 "54936 (GB18030 Китайська спрощена)"
+
+ /* Locations */
+ 2+NLSRC_OFFSET "Antigua and Barbuda"
+ 3+NLSRC_OFFSET "Afghanistan"
+ 4+NLSRC_OFFSET "Algeria"
+ 5+NLSRC_OFFSET "Azerbaijan"
+ 6+NLSRC_OFFSET "Albania"
+ 7+NLSRC_OFFSET "Armenia"
+ 8+NLSRC_OFFSET "Andorra"
+ 9+NLSRC_OFFSET "Angola"
+ 10+NLSRC_OFFSET "American Samoa"
+ 11+NLSRC_OFFSET "Argentina"
+ 12+NLSRC_OFFSET "Australia"
+ 14+NLSRC_OFFSET "Austria"
+ 17+NLSRC_OFFSET "Bahrain"
+ 18+NLSRC_OFFSET "Barbados"
+ 19+NLSRC_OFFSET "Botswana"
+ 20+NLSRC_OFFSET "Bermuda"
+ 21+NLSRC_OFFSET "Belgium"
+ 22+NLSRC_OFFSET "Bahamas, The"
+ 23+NLSRC_OFFSET "Bangladesh"
+ 24+NLSRC_OFFSET "Belize"
+ 25+NLSRC_OFFSET "Bosnia and Herzegovina"
+ 26+NLSRC_OFFSET "Bolivia"
+ 27+NLSRC_OFFSET "Myanmar"
+ 28+NLSRC_OFFSET "Benin"
+ 29+NLSRC_OFFSET "Belarus"
+ 30+NLSRC_OFFSET "Solomon Islands"
+ 32+NLSRC_OFFSET "Brazil"
+ 34+NLSRC_OFFSET "Bhutan"
+ 35+NLSRC_OFFSET "Bulgaria"
+ 38+NLSRC_OFFSET "Burundi"
+ 39+NLSRC_OFFSET "Canada"
+ 40+NLSRC_OFFSET "Cambodia"
+ 41+NLSRC_OFFSET "Chad"
+ 42+NLSRC_OFFSET "Sri Lanka"
+ 43+NLSRC_OFFSET "Congo"
+ 44+NLSRC_OFFSET "Congo (DRC)"
+ 45+NLSRC_OFFSET "China"
+ 46+NLSRC_OFFSET "Chile"
+ 49+NLSRC_OFFSET "Cameroon"
+ 50+NLSRC_OFFSET "Comoros"
+ 51+NLSRC_OFFSET "Colombia"
+ 54+NLSRC_OFFSET "Costa Rica"
+ 55+NLSRC_OFFSET "Central African Republic"
+ 56+NLSRC_OFFSET "Cuba"
+ 57+NLSRC_OFFSET "Cape Verde"
+ 59+NLSRC_OFFSET "Cyprus"
+ 61+NLSRC_OFFSET "Denmark"
+ 62+NLSRC_OFFSET "Djibouti"
+ 63+NLSRC_OFFSET "Dominica"
+ 65+NLSRC_OFFSET "Dominican Republic"
+ 66+NLSRC_OFFSET "Ecuador"
+ 67+NLSRC_OFFSET "Egypt"
+ 68+NLSRC_OFFSET "Ireland"
+ 69+NLSRC_OFFSET "Equatorial Guinea"
+ 70+NLSRC_OFFSET "Estonia"
+ 71+NLSRC_OFFSET "Eritrea"
+ 72+NLSRC_OFFSET "El Salvador"
+ 73+NLSRC_OFFSET "Ethiopia"
+ 75+NLSRC_OFFSET "Czech Republic"
+ 77+NLSRC_OFFSET "Finland"
+ 78+NLSRC_OFFSET "Fiji Islands"
+ 80+NLSRC_OFFSET "Micronesia"
+ 81+NLSRC_OFFSET "Faroe Islands"
+ 84+NLSRC_OFFSET "France"
+ 86+NLSRC_OFFSET "Gambia, The"
+ 87+NLSRC_OFFSET "Gabon"
+ 88+NLSRC_OFFSET "Georgia"
+ 89+NLSRC_OFFSET "Ghana"
+ 90+NLSRC_OFFSET "Gibraltar"
+ 91+NLSRC_OFFSET "Grenada"
+ 93+NLSRC_OFFSET "Greenland"
+ 94+NLSRC_OFFSET "Germany"
+ 98+NLSRC_OFFSET "Greece"
+ 99+NLSRC_OFFSET "Guatemala"
+ 100+NLSRC_OFFSET "Guinea"
+ 101+NLSRC_OFFSET "Guyana"
+ 103+NLSRC_OFFSET "Haiti"
+ 104+NLSRC_OFFSET "Hong Kong S.A.R."
+ 106+NLSRC_OFFSET "Honduras"
+ 108+NLSRC_OFFSET "Croatia"
+ 109+NLSRC_OFFSET "Hungary"
+ 110+NLSRC_OFFSET "Iceland"
+ 111+NLSRC_OFFSET "Indonesia"
+ 113+NLSRC_OFFSET "India"
+ 114+NLSRC_OFFSET "British Indian Ocean Territory"
+ 116+NLSRC_OFFSET "Iran"
+ 117+NLSRC_OFFSET "Israel"
+ 118+NLSRC_OFFSET "Italy"
+ 119+NLSRC_OFFSET "Côte d'Ivoire"
+ 121+NLSRC_OFFSET "Iraq"
+ 122+NLSRC_OFFSET "Japan"
+ 124+NLSRC_OFFSET "Jamaica"
+ 125+NLSRC_OFFSET "Jan Mayen"
+ 126+NLSRC_OFFSET "Jordan"
+ 127+NLSRC_OFFSET "Johnston Atoll"
+ 129+NLSRC_OFFSET "Kenya"
+ 130+NLSRC_OFFSET "Kyrgyzstan"
+ 131+NLSRC_OFFSET "North Korea"
+ 133+NLSRC_OFFSET "Kiribati"
+ 134+NLSRC_OFFSET "Korea"
+ 136+NLSRC_OFFSET "Kuwait"
+ 137+NLSRC_OFFSET "Kazakhstan"
+ 138+NLSRC_OFFSET "Laos"
+ 139+NLSRC_OFFSET "Lebanon"
+ 140+NLSRC_OFFSET "Latvia"
+ 141+NLSRC_OFFSET "Lithuania"
+ 142+NLSRC_OFFSET "Liberia"
+ 143+NLSRC_OFFSET "Slovakia"
+ 145+NLSRC_OFFSET "Liechtenstein"
+ 146+NLSRC_OFFSET "Lesotho"
+ 147+NLSRC_OFFSET "Luxembourg"
+ 148+NLSRC_OFFSET "Libya"
+ 149+NLSRC_OFFSET "Madagascar"
+ 151+NLSRC_OFFSET "Macao S.A.R."
+ 152+NLSRC_OFFSET "Moldova"
+ 154+NLSRC_OFFSET "Mongolia"
+ 156+NLSRC_OFFSET "Malawi"
+ 157+NLSRC_OFFSET "Mali"
+ 158+NLSRC_OFFSET "Monaco"
+ 159+NLSRC_OFFSET "Morocco"
+ 160+NLSRC_OFFSET "Mauritius"
+ 162+NLSRC_OFFSET "Mauritania"
+ 163+NLSRC_OFFSET "Malta"
+ 164+NLSRC_OFFSET "Oman"
+ 165+NLSRC_OFFSET "Maldives"
+ 166+NLSRC_OFFSET "Mexico"
+ 167+NLSRC_OFFSET "Malaysia"
+ 168+NLSRC_OFFSET "Mozambique"
+ 173+NLSRC_OFFSET "Niger"
+ 174+NLSRC_OFFSET "Vanuatu"
+ 175+NLSRC_OFFSET "Nigeria"
+ 176+NLSRC_OFFSET "Netherlands"
+ 177+NLSRC_OFFSET "Norway"
+ 178+NLSRC_OFFSET "Nepal"
+ 180+NLSRC_OFFSET "Nauru"
+ 181+NLSRC_OFFSET "Suriname"
+ 182+NLSRC_OFFSET "Nicaragua"
+ 183+NLSRC_OFFSET "New Zealand"
+ 184+NLSRC_OFFSET "Palestinian Authority"
+ 185+NLSRC_OFFSET "Paraguay"
+ 187+NLSRC_OFFSET "Peru"
+ 190+NLSRC_OFFSET "Pakistan"
+ 191+NLSRC_OFFSET "Poland"
+ 192+NLSRC_OFFSET "Panama"
+ 193+NLSRC_OFFSET "Portugal"
+ 194+NLSRC_OFFSET "Papua New Guinea"
+ 195+NLSRC_OFFSET "Palau"
+ 196+NLSRC_OFFSET "Guinea-Bissau"
+ 197+NLSRC_OFFSET "Qatar"
+ 198+NLSRC_OFFSET "Reunion"
+ 199+NLSRC_OFFSET "Marshall Islands"
+ 200+NLSRC_OFFSET "Romania"
+ 201+NLSRC_OFFSET "Philippines"
+ 202+NLSRC_OFFSET "Puerto Rico"
+ 203+NLSRC_OFFSET "Russia"
+ 204+NLSRC_OFFSET "Rwanda"
+ 205+NLSRC_OFFSET "Saudi Arabia"
+ 206+NLSRC_OFFSET "St. Pierre and Miquelon"
+ 207+NLSRC_OFFSET "St. Kitts and Nevis"
+ 208+NLSRC_OFFSET "Seychelles"
+ 209+NLSRC_OFFSET "South Africa"
+ 210+NLSRC_OFFSET "Senegal"
+ 212+NLSRC_OFFSET "Slovenia"
+ 213+NLSRC_OFFSET "Sierra Leone"
+ 214+NLSRC_OFFSET "San Marino"
+ 215+NLSRC_OFFSET "Singapore"
+ 216+NLSRC_OFFSET "Somalia"
+ 217+NLSRC_OFFSET "Spain"
+ 218+NLSRC_OFFSET "St. Lucia"
+ 219+NLSRC_OFFSET "Sudan"
+ 220+NLSRC_OFFSET "Svalbard"
+ 221+NLSRC_OFFSET "Sweden"
+ 222+NLSRC_OFFSET "Syria"
+ 223+NLSRC_OFFSET "Switzerland"
+ 224+NLSRC_OFFSET "United Arab Emirates"
+ 225+NLSRC_OFFSET "Trinidad and Tobago"
+ 227+NLSRC_OFFSET "Thailand"
+ 228+NLSRC_OFFSET "Tajikistan"
+ 231+NLSRC_OFFSET "Tonga"
+ 232+NLSRC_OFFSET "Togo"
+ 233+NLSRC_OFFSET "São Tomé and Príncipe"
+ 234+NLSRC_OFFSET "Tunisia"
+ 235+NLSRC_OFFSET "Turkey"
+ 236+NLSRC_OFFSET "Tuvalu"
+ 237+NLSRC_OFFSET "Taiwan"
+ 238+NLSRC_OFFSET "Turkmenistan"
+ 239+NLSRC_OFFSET "Tanzania"
+ 240+NLSRC_OFFSET "Uganda"
+ 241+NLSRC_OFFSET "Ukraine"
+ 242+NLSRC_OFFSET "United Kingdom"
+ 244+NLSRC_OFFSET "United States"
+ 245+NLSRC_OFFSET "Burkina Faso"
+ 246+NLSRC_OFFSET "Uruguay"
+ 247+NLSRC_OFFSET "Uzbekistan"
+ 248+NLSRC_OFFSET "St. Vincent and the Grenadines"
+ 249+NLSRC_OFFSET "Bolivarian Republic of Venezuela"
+ 251+NLSRC_OFFSET "Vietnam"
+ 252+NLSRC_OFFSET "Virgin Islands"
+ 253+NLSRC_OFFSET "Vatican City"
+ 254+NLSRC_OFFSET "Namibia"
+ 257+NLSRC_OFFSET "Western Sahara (disputed)"
+ 258+NLSRC_OFFSET "Wake Island"
+ 259+NLSRC_OFFSET "Samoa"
+ 260+NLSRC_OFFSET "Swaziland"
+ 261+NLSRC_OFFSET "Yemen"
+ 263+NLSRC_OFFSET "Zambia"
+ 264+NLSRC_OFFSET "Zimbabwe"
+ 269+NLSRC_OFFSET "Serbia and Montenegro (Former)"
+ 270+NLSRC_OFFSET "Montenegro"
+ 271+NLSRC_OFFSET "Serbia"
+ 273+NLSRC_OFFSET "Curaçao"
+ 276+NLSRC_OFFSET "South Sudan"
+ 300+NLSRC_OFFSET "Anguilla"
+ 301+NLSRC_OFFSET "Antarctica"
+ 302+NLSRC_OFFSET "Aruba"
+ 303+NLSRC_OFFSET "Ascension Island"
+ 304+NLSRC_OFFSET "Ashmore and Cartier Islands"
+ 305+NLSRC_OFFSET "Baker Island"
+ 306+NLSRC_OFFSET "Bouvet Island"
+ 307+NLSRC_OFFSET "Cayman Islands"
+ 308+NLSRC_OFFSET "Channel Islands"
+ 309+NLSRC_OFFSET "Christmas Island"
+ 310+NLSRC_OFFSET "Clipperton Island"
+ 311+NLSRC_OFFSET "Cocos (Keeling) Islands"
+ 312+NLSRC_OFFSET "Cook Islands"
+ 313+NLSRC_OFFSET "Coral Sea Islands"
+ 314+NLSRC_OFFSET "Diego Garcia"
+ 315+NLSRC_OFFSET "Falkland Islands (Islas Malvinas)"
+ 317+NLSRC_OFFSET "French Guiana"
+ 318+NLSRC_OFFSET "French Polynesia"
+ 319+NLSRC_OFFSET "French Southern and Antarctic Lands"
+ 321+NLSRC_OFFSET "Guadeloupe"
+ 322+NLSRC_OFFSET "Guam"
+ 323+NLSRC_OFFSET "Guantanamo Bay"
+ 324+NLSRC_OFFSET "Guernsey"
+ 325+NLSRC_OFFSET "Heard Island and McDonald Islands"
+ 326+NLSRC_OFFSET "Howland Island"
+ 327+NLSRC_OFFSET "Jarvis Island"
+ 328+NLSRC_OFFSET "Jersey"
+ 329+NLSRC_OFFSET "Kingman Reef"
+ 330+NLSRC_OFFSET "Martinique"
+ 331+NLSRC_OFFSET "Mayotte"
+ 332+NLSRC_OFFSET "Montserrat"
+ 333+NLSRC_OFFSET "Netherlands Antilles (Former)"
+ 334+NLSRC_OFFSET "New Caledonia"
+ 335+NLSRC_OFFSET "Niue"
+ 336+NLSRC_OFFSET "Norfolk Island"
+ 337+NLSRC_OFFSET "Northern Mariana Islands"
+ 338+NLSRC_OFFSET "Palmyra Atoll"
+ 339+NLSRC_OFFSET "Pitcairn Islands"
+ 340+NLSRC_OFFSET "Rota Island"
+ 341+NLSRC_OFFSET "Saipan"
+ 342+NLSRC_OFFSET "South Georgia and the South Sandwich Islands"
+ 343+NLSRC_OFFSET "St. Helena"
+ 346+NLSRC_OFFSET "Tinian Island"
+ 347+NLSRC_OFFSET "Tokelau"
+ 348+NLSRC_OFFSET "Tristan da Cunha"
+ 349+NLSRC_OFFSET "Turks and Caicos Islands"
+ 351+NLSRC_OFFSET "Virgin Islands, British"
+ 352+NLSRC_OFFSET "Wallis and Futuna"
+ 15126+NLSRC_OFFSET "Man, Isle of"
+ 19618+NLSRC_OFFSET "Macedonia, Former Yugoslav Republic of"
+ 21242+NLSRC_OFFSET "Midway Islands"
+ 30967+NLSRC_OFFSET "Sint Maarten (Dutch part)"
+ 31706+NLSRC_OFFSET "Saint Martin (French part)"
END
extern int wine_fold_string(int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen);
extern int wine_get_sortkey(int flags, const WCHAR *src, int srclen, char *dst, int dstlen);
extern int wine_compare_string(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2);
+extern DWORD GetLocalisedText(DWORD dwResId, WCHAR *lpszDest, DWORD dwDestSize);
+#define NLSRC_OFFSET 5000 /* FIXME */
extern HMODULE kernel32_handle;
static int
NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData)
{
- HANDLE hKey;
- WCHAR szPath[MAX_PATH];
- UNICODE_STRING ValueName;
- KEY_VALUE_PARTIAL_INFORMATION *info;
- const int info_size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data);
+ LPWSTR szBuffer;
DWORD dwSize;
- NTSTATUS Status;
- int Ret;
- swprintf(szPath, L"\\REGISTRY\\Machine\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country List\\%lu", Location);
+ /* FIXME: move *.nls resources out of kernel32 into locale.nls */
+ Location += NLSRC_OFFSET;
- hKey = NLS_RegOpenKey(0, szPath);
- if (!hKey)
- {
- WARN("NLS_RegOpenKey() failed\n");
- return 0;
- }
+ if(cchData == 0)
+ return GetLocalisedText(Location, NULL, 0);
- dwSize = info_size + cchData * sizeof(WCHAR);
+ dwSize = cchData * sizeof(WCHAR);
+ szBuffer = HeapAlloc(GetProcessHeap(), 0, dwSize);
- if (!(info = HeapAlloc(GetProcessHeap(), 0, dwSize)))
+ if (!szBuffer)
{
- NtClose(hKey);
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
- RtlInitUnicodeString(&ValueName, L"Name");
-
- Status = NtQueryValueKey(hKey, &ValueName, KeyValuePartialInformation,
- (LPBYTE)info, dwSize, &dwSize);
-
- if (!Status)
+ if(GetLocalisedText(Location, szBuffer, dwSize))
{
- Ret = (dwSize - info_size) / sizeof(WCHAR);
-
- if (!Ret || ((WCHAR *)info->Data)[Ret-1])
- {
- if (Ret < cchData || !szFriendlyName) Ret++;
- else
- {
- WARN("ERROR_INSUFFICIENT_BUFFER\n");
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- Ret = 0;
- }
- }
-
- if (Ret && szFriendlyName)
- {
- memcpy(szFriendlyName, info->Data, (Ret-1) * sizeof(WCHAR));
- szFriendlyName[Ret-1] = 0;
- }
- }
- else if (Status == STATUS_BUFFER_OVERFLOW && !szFriendlyName)
- {
- Ret = (dwSize - info_size) / sizeof(WCHAR) + 1;
+ memcpy(szFriendlyName, szBuffer, dwSize);
+ HeapFree(GetProcessHeap(), 0, szBuffer);
+ return strlenW(szFriendlyName) + 1;
}
- else if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
- {
- Ret = -1;
- }
- else
- {
- SetLastError(RtlNtStatusToDosError(Status));
- Ret = 0;
- }
-
- NtClose(hKey);
- HeapFree(GetProcessHeap(), 0, info);
- return Ret;
+ HeapFree(GetProcessHeap(), 0, szBuffer);
+ return 0;
}
static const struct geoinfo_t *get_geoinfo_dataptr(GEOID geoid)
return c;
}
-static BOOL
-GetLocalisedText(DWORD dwResId, WCHAR *lpszDest)
+DWORD
+GetLocalisedText(DWORD dwResId, WCHAR *lpszDest, DWORD dwDestSize)
{
HRSRC hrsrc;
LCID lcid;
(LPWSTR)RT_STRING,
MAKEINTRESOURCEW((dwId >> 4) + 1),
langId);
+
+ /* english fallback */
+ if(!hrsrc)
+ {
+ hrsrc = FindResourceExW(hCurrentModule,
+ (LPWSTR)RT_STRING,
+ MAKEINTRESOURCEW((dwId >> 4) + 1),
+ MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
+ }
+
if (hrsrc)
{
HGLOBAL hmem = LoadResource(hCurrentModule, hrsrc);
{
const WCHAR *p;
unsigned int i;
+ unsigned int len;
p = LockResource(hmem);
+
for (i = 0; i < (dwId & 0x0f); i++) p += *p + 1;
- memcpy(lpszDest, p + 1, *p * sizeof(WCHAR));
+ if(dwDestSize == 0)
+ return *p + 1;
+
+ len = *p * sizeof(WCHAR);
+
+ if(len + sizeof(WCHAR) > dwDestSize)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+
+ memcpy(lpszDest, p + 1, len);
lpszDest[*p] = '\0';
return TRUE;
}
}
- DPRINT1("Could not get codepage name. dwResId = %lu\n", dwResId);
+ DPRINT1("Resource not found: dwResId = %lu\n", dwResId);
+ SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
{
lpCPInfoEx->CodePage = CP_UTF7;
lpCPInfoEx->UnicodeDefaultChar = 0x3f;
- return GetLocalisedText((DWORD)CodePage, lpCPInfoEx->CodePageName);
+ return GetLocalisedText((DWORD)CodePage, lpCPInfoEx->CodePageName, sizeof(lpCPInfoEx->CodePageName)) != 0;
}
break;
{
lpCPInfoEx->CodePage = CP_UTF8;
lpCPInfoEx->UnicodeDefaultChar = 0x3f;
- return GetLocalisedText((DWORD)CodePage, lpCPInfoEx->CodePageName);
+ return GetLocalisedText((DWORD)CodePage, lpCPInfoEx->CodePageName, sizeof(lpCPInfoEx->CodePageName)) != 0;
}
default:
lpCPInfoEx->CodePage = CodePageEntry->CodePageTable.CodePage;
lpCPInfoEx->UnicodeDefaultChar = CodePageEntry->CodePageTable.UniDefaultChar;
- return GetLocalisedText(CodePageEntry->CodePageTable.CodePage, lpCPInfoEx->CodePageName);
+ return GetLocalisedText(CodePageEntry->CodePageTable.CodePage, lpCPInfoEx->CodePageName, sizeof(lpCPInfoEx->CodePageName)) != 0;
}
break;
}
#include <winsvc.h>
#include <userenv.h>
#include <ndk/sefuncs.h>
+#include <strsafe.h>
HINSTANCE hDllInstance;
pProfile->dwType = WLX_PROFILE_TYPE_V2_0;
pProfile->pszProfile = ProfilePath;
- lpEnvironment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
- (wcslen(pgContext->Domain)+ 14 + 1) * sizeof(WCHAR));
+ cbSize = sizeof(L"LOGONSERVER=\\\\") +
+ wcslen(pgContext->Domain) * sizeof(WCHAR) +
+ sizeof(UNICODE_NULL);
+ lpEnvironment = HeapAlloc(GetProcessHeap(), 0, cbSize);
if (!lpEnvironment)
{
WARN("HeapAlloc() failed\n");
goto cleanup;
}
- wsprintfW(lpEnvironment, L"LOGONSERVER=\\\\%s", pgContext->Domain);
+ StringCbPrintfW(lpEnvironment, cbSize, L"LOGONSERVER=\\\\%ls", pgContext->Domain);
+ ASSERT(wcslen(lpEnvironment) == cbSize / sizeof(WCHAR) - 2);
+ lpEnvironment[cbSize / sizeof(WCHAR) - 1] = UNICODE_NULL;
pProfile->pszEnvironment = lpEnvironment;
TRACE("RegQueryValueEx() failed with error 0x%lx\n", rc);
goto cleanup;
}
- Buffer[dwPathLength] = Buffer[dwPathLength + 1] = '\0';
+
+ Buffer[dwPathLength / sizeof(WCHAR)] = UNICODE_NULL;
+ Buffer[dwPathLength / sizeof(WCHAR) + 1] = UNICODE_NULL;
/* Populate combo box */
for (Path = Buffer; *Path; Path += wcslen(Path) + 1)
LPWSTR Buffer = NULL;
LPWSTR pBuffer; /* Pointer into Buffer */
int ItemsCount, Length;
- DWORD i;
+ int i;
DWORD TotalLength = 0;
BOOL UseCustomPath = TRUE;
HKEY hKey = NULL;
pidlFolder2 = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[0]);
pidlChild = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[1]);
+ if (!_ILIsValue(pidlChild))
+ {
+ TRACE("pidl is not a file\n");
+ GlobalUnlock(medium.hGlobal);
+ GlobalFree(medium.hGlobal);
+ return E_FAIL;
+ }
+
pidl = ILCombine(pidlFolder2, pidlChild);
GlobalUnlock(medium.hGlobal);
ERR("no mem\n");
return E_OUTOFMEMORY;
}
- if (!_ILIsValue(pidlChild))
- {
- TRACE("pidl is not a file\n");
- SHFree((void*)pidl);
- return E_FAIL;
- }
if (!SHGetPathFromIDListW(pidl, m_wszPath))
{
}
/* the FO_MOVE operation */
-static HRESULT move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const FILE_LIST *flTo)
+static DWORD move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const FILE_LIST *flTo)
{
DWORD i;
+ INT mismatched = 0;
const FILE_ENTRY *entryToMove;
const FILE_ENTRY *fileDest;
- if (!flFrom->dwNumFiles || !flTo->dwNumFiles)
- return ERROR_CANCELLED;
+ if (!flFrom->dwNumFiles)
+ return ERROR_SUCCESS;
+
+ if (!flTo->dwNumFiles)
+ return ERROR_FILE_NOT_FOUND;
if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1)
if (!PathFileExistsW(flTo->feFiles[0].szDirectory))
return ERROR_CANCELLED;
- if ((lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
- flFrom->dwNumFiles != flTo->dwNumFiles)
- {
- return ERROR_CANCELLED;
- }
+ if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
+ mismatched = flFrom->dwNumFiles - flTo->dwNumFiles;
fileDest = &flTo->feFiles[0];
for (i = 0; i < flFrom->dwNumFiles; i++)
{
entryToMove = &flFrom->feFiles[i];
- if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
- fileDest = &flTo->feFiles[i];
-
if (!PathFileExistsW(fileDest->szDirectory))
return ERROR_CANCELLED;
+ if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
+ {
+ if (i >= flTo->dwNumFiles)
+ break;
+ fileDest = &flTo->feFiles[i];
+ if (mismatched && !fileDest->bExists)
+ {
+ create_dest_dirs(flTo->feFiles[i].szFullPath);
+ flTo->feFiles[i].bExists = TRUE;
+ flTo->feFiles[i].attributes = FILE_ATTRIBUTE_DIRECTORY;
+ }
+ }
+
if (fileDest->bExists && IsAttribDir(fileDest->attributes))
move_to_dir(lpFileOp, entryToMove, fileDest);
else
SHNotifyMoveFileW(entryToMove->szFullPath, fileDest->szFullPath, IsAttribDir(entryToMove->attributes));
}
+ if (mismatched > 0)
+ {
+ if (flFrom->bAnyDirectories)
+ return DE_DESTSAMETREE;
+ else
+ return DE_SAMEFILE;
+ }
+
return ERROR_SUCCESS;
}
NTSTATUS Status;
- DPRINT1("SYSSETUP: SetAccountDomain\n");
+ DPRINT("SYSSETUP: SetAccountDomain\n");
memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
/*
* Modified for ReactOS and latest ACPICA
- * Copyright (C)2009 Samuel Serapion
+ * Copyright (C)2009 Samuel Serapion
*/
#include <precomp.h>
}
else {
/*
- * Get the device's power state either directly (via _PSC) or
+ * Get the device's power state either directly (via _PSC) or
* indirectly (via power resources).
*/
if (device->power.flags.explicit_get) {
- status = acpi_evaluate_integer(device->handle, "_PSC",
+ status = acpi_evaluate_integer(device->handle, "_PSC",
NULL, &psc);
if (ACPI_FAILURE(status))
return_VALUE(AE_NOT_FOUND);
* On transitions to a high-powered state we first apply power (via
* power resources) then evalute _PSx. Conversly for transitions to
* a lower-powered state.
- */
+ */
if (state < device->power.state) {
if (device->power.flags.power_resources) {
result = acpi_power_transition(device, state);
goto end;
}
if (device->power.states[state].flags.explicit_set) {
- status = AcpiEvaluateObject(device->handle,
+ status = AcpiEvaluateObject(device->handle,
object_name, NULL, NULL);
if (ACPI_FAILURE(status)) {
result = AE_NOT_FOUND;
}
else {
if (device->power.states[state].flags.explicit_set) {
- status = AcpiEvaluateObject(device->handle,
+ status = AcpiEvaluateObject(device->handle,
object_name, NULL, NULL);
if (ACPI_FAILURE(status)) {
result = AE_NOT_FOUND;
struct acpi_device *device = SystemArgument1;
ULONG_PTR TypeData = (ULONG_PTR)SystemArgument2;
KIRQL OldIrql;
-
+
event = ExAllocatePoolWithTag(NonPagedPool,sizeof(struct acpi_bus_event), 'IPCA');
if (!event)
return;
-
+
sprintf(event->device_class, "%s", device->pnp.device_class);
sprintf(event->bus_id, "%s", device->pnp.bus_id);
event->type = (TypeData & 0xFF000000) >> 24;
/* drop event on the floor if no one's listening */
if (!event_is_open)
return_VALUE(0);
-
+
/* Data shouldn't even get near 24 bits */
ASSERT(!(data & 0xFF000000));
-
+
TypeData = data;
TypeData |= type << 24;
*/
static int
acpi_bus_walk (
- struct acpi_device *start,
- acpi_bus_walk_callback callback,
- int direction,
+ struct acpi_device *start,
+ acpi_bus_walk_callback callback,
+ int direction,
void *data)
{
int result = 0;
* ---------------
* Callback for all 'system-level' device notifications (values 0x00-0x7F).
*/
-static void
+static void
acpi_bus_notify (
ACPI_HANDLE handle,
UINT32 type,
switch (type) {
case ACPI_NOTIFY_BUS_CHECK:
- DPRINT("Received BUS CHECK notification for device [%s]\n",
+ DPRINT("Received BUS CHECK notification for device [%s]\n",
device->pnp.bus_id);
acpi_bus_check_scope(handle);
- /*
+ /*
* TBD: We'll need to outsource certain events to non-ACPI
* drivers via the device manager (device.c).
*/
break;
case ACPI_NOTIFY_DEVICE_CHECK:
- DPRINT("Received DEVICE CHECK notification for device [%s]\n",
+ DPRINT("Received DEVICE CHECK notification for device [%s]\n",
device->pnp.bus_id);
acpi_bus_check_device(handle);
- /*
+ /*
* TBD: We'll need to outsource certain events to non-ACPI
* drivers via the device manager (device.c).
*/
break;
case ACPI_NOTIFY_DEVICE_WAKE:
- DPRINT("Received DEVICE WAKE notification for device [%s]\n",
+ DPRINT("Received DEVICE WAKE notification for device [%s]\n",
device->pnp.bus_id);
acpi_bus_check_device(handle);
/*
break;
case ACPI_NOTIFY_EJECT_REQUEST:
- DPRINT1("Received EJECT REQUEST notification for device [%s]\n",
+ DPRINT1("Received EJECT REQUEST notification for device [%s]\n",
device->pnp.bus_id);
/* TBD */
break;
case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
- DPRINT1("Received DEVICE CHECK LIGHT notification for device [%s]\n",
+ DPRINT1("Received DEVICE CHECK LIGHT notification for device [%s]\n",
device->pnp.bus_id);
/* TBD: Exactly what does 'light' mean? */
break;
case ACPI_NOTIFY_FREQUENCY_MISMATCH:
- DPRINT1("Received FREQUENCY MISMATCH notification for device [%s]\n",
+ DPRINT1("Received FREQUENCY MISMATCH notification for device [%s]\n",
device->pnp.bus_id);
/* TBD */
break;
case ACPI_NOTIFY_BUS_MODE_MISMATCH:
- DPRINT1("Received BUS MODE MISMATCH notification for device [%s]\n",
+ DPRINT1("Received BUS MODE MISMATCH notification for device [%s]\n",
device->pnp.bus_id);
/* TBD */
break;
case ACPI_NOTIFY_POWER_FAULT:
- DPRINT1("Received POWER FAULT notification for device [%s]\n",
+ DPRINT1("Received POWER FAULT notification for device [%s]\n",
device->pnp.bus_id);
/* TBD */
break;
default:
- DPRINT1("Received unknown/unsupported notification [%08x]\n",
+ DPRINT1("Received unknown/unsupported notification [%08x]\n",
type);
break;
}
/**
- * acpi_bus_match
+ * acpi_bus_match
* --------------
* Checks the device's hardware (_HID) or compatible (_CID) ids to see if it
* matches the specified driver's criteria.
error = -2;
Done:
-
+
return error;
}
/**
- * acpi_bus_driver_init
+ * acpi_bus_driver_init
* --------------------
- * Used to initialize a device via its device driver. Called whenever a
+ * Used to initialize a device via its device driver. Called whenever a
* driver is bound to a device. Invokes the driver's add() and start() ops.
*/
static int
acpi_bus_driver_init (
- struct acpi_device *device,
+ struct acpi_device *device,
struct acpi_driver *driver)
{
int result = 0;
/**
- * acpi_bus_attach
+ * acpi_bus_attach
* -------------
- * Callback for acpi_bus_walk() used to find devices that match a specific
+ * Callback for acpi_bus_walk() used to find devices that match a specific
* driver's criteria and then attach the driver.
*/
static int
acpi_bus_attach (
- struct acpi_device *device,
- int level,
+ struct acpi_device *device,
+ int level,
void *data)
{
int result = 0;
DPRINT("Found driver [%s] for device [%s]\n",
driver->name, device->pnp.bus_id);
-
+
result = acpi_bus_driver_init(device, driver);
if (result)
return_VALUE(result);
/**
- * acpi_bus_unattach
+ * acpi_bus_unattach
* -----------------
- * Callback for acpi_bus_walk() used to find devices that match a specific
+ * Callback for acpi_bus_walk() used to find devices that match a specific
* driver's criteria and unattach the driver.
*/
static int
acpi_bus_unattach (
- struct acpi_device *device,
- int level,
+ struct acpi_device *device,
+ int level,
void *data)
{
int result = 0;
/**
- * acpi_bus_find_driver
+ * acpi_bus_find_driver
* --------------------
* Parses the list of registered drivers looking for a driver applicable for
* the specified device.
/**
- * acpi_bus_register_driver
- * ------------------------
+ * acpi_bus_register_driver
+ * ------------------------
* Registers a driver with the ACPI bus. Searches the namespace for all
* devices that match the driver's criteria and binds.
*/
list_add_tail(&driver->node, &acpi_bus_drivers);
up(&acpi_bus_drivers_lock);
- acpi_bus_walk(acpi_root, acpi_bus_attach,
+ acpi_bus_walk(acpi_root, acpi_bus_attach,
WALK_DOWN, driver);
return_VALUE(driver->references);
/**
- * acpi_bus_unregister_driver
+ * acpi_bus_unregister_driver
* --------------------------
* Unregisters a driver with the ACPI bus. Searches the namespace for all
* devices that match the driver's criteria and unbinds.
Device Enumeration
-------------------------------------------------------------------------- */
-static int
+static int
acpi_bus_get_flags (
struct acpi_device *device)
{
}
-int
+int
acpi_bus_add (
struct acpi_device **child,
struct acpi_device *parent,
buffer.Pointer = bus_id;
AcpiGetName(handle, ACPI_SINGLE_NAME, &buffer);
-
+
/* Clean up trailing underscores (if any) */
for (i = 3; i > 1; i--) {
if (bus_id[i] == '_')
/* HACK: Skip HPET */
if (strstr(device->pnp.bus_id, "HPET"))
{
- DPRINT1("Using HPET hack\n");
+ DPRINT("Using HPET hack\n");
result = -1;
goto end;
}
break;
}
- /*
+ /*
* \_SB
* ----
* Fix for the system root bus device -- the only root-level device.
/*
* Bind _ADR-Based Devices
* -----------------------
- * If there's a a bus address (_ADR) then we utilize the parent's
+ * If there's a a bus address (_ADR) then we utilize the parent's
* 'bind' function (if exists) to bind the ACPI- and natively-
* enumerated device representations.
*/
static int
acpi_bus_remove (
- struct acpi_device *device,
+ struct acpi_device *device,
int type)
{
parent = start;
phandle = start->handle;
-
+
/*
* Parse through the ACPI namespace, identify all 'devices', and
* create a new 'struct acpi_device' for each.
* power button is present.
*/
if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON)
- result = acpi_bus_add(&device, acpi_root,
+ result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTON);
else
{
* the we have a control method button just like above.
*/
if (AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON)
- result = acpi_bus_add(&device, acpi_root,
+ result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
else
{
int result = 0;
ACPI_STATUS status = AE_OK;
- DPRINT1("acpi_bus_init\n");
+ DPRINT("acpi_bus_init\n");
KeInitializeDpc(&event_dpc, acpi_bus_generate_event_dpc, NULL);
/*
* Create the root device in the bus's device tree
*/
- result = acpi_bus_add(&acpi_root, NULL, ACPI_ROOT_OBJECT,
+ result = acpi_bus_add(&acpi_root, NULL, ACPI_ROOT_OBJECT,
ACPI_BUS_TYPE_SYSTEM);
if (result)
goto error2;
*/
if (power_button)
{
- DPRINT1("Fixed power button reported to power manager\n");
+ DPRINT("Fixed power button reported to power manager\n");
Caps |= SYS_BUTTON_POWER;
}
if (sleep_button)
{
- DPRINT1("Fixed sleep button reported to power manager\n");
+ DPRINT("Fixed sleep button reported to power manager\n");
Caps |= SYS_BUTTON_SLEEP;
}
}
else if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0C"))
{
- DPRINT1("Control method power button reported to power manager\n");
+ DPRINT("Control method power button reported to power manager\n");
Caps |= SYS_BUTTON_POWER;
}
else if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0E"))
{
- DPRINT1("Control method sleep reported to power manager\n");
+ DPRINT("Control method sleep reported to power manager\n");
Caps |= SYS_BUTTON_SLEEP;
}
else
#define NDEBUG
#include <debug.h>
+#if 0
+#define DBGPRINT(...) DbgPrint(__VA_ARGS__)
+#else
+#define DBGPRINT(...)
+#endif
+
/*** PRIVATE *****************************************************************/
static NTSTATUS
if (RawPartialDesc->Type == CmResourceTypeInterrupt)
{
- DPRINT1("Assigning IRQ %u to PCI device 0x%x on bus 0x%x\n",
+ DPRINT("Assigning IRQ %u to PCI device 0x%x on bus 0x%x\n",
RawPartialDesc->u.Interrupt.Vector,
DeviceExtension->PciDevice->SlotNumber.u.AsULONG,
DeviceExtension->PciDevice->BusNumber);
Command = 0;
- DPRINT1("Enabling command flags for PCI device 0x%x on bus 0x%x: ",
+ DBGPRINT("pci!PdoStartDevice: Enabling command flags for PCI device 0x%x on bus 0x%x: ",
DeviceExtension->PciDevice->SlotNumber.u.AsULONG,
DeviceExtension->PciDevice->BusNumber);
if (DeviceExtension->PciDevice->EnableBusMaster)
{
Command |= PCI_ENABLE_BUS_MASTER;
- DbgPrint("[Bus master] ");
+ DBGPRINT("[Bus master] ");
}
if (DeviceExtension->PciDevice->EnableMemorySpace)
{
Command |= PCI_ENABLE_MEMORY_SPACE;
- DbgPrint("[Memory space enable] ");
+ DBGPRINT("[Memory space enable] ");
}
if (DeviceExtension->PciDevice->EnableIoSpace)
{
Command |= PCI_ENABLE_IO_SPACE;
- DbgPrint("[I/O space enable] ");
+ DBGPRINT("[I/O space enable] ");
}
if (Command != 0)
{
- DbgPrint("\n");
+ DBGPRINT("\n");
/* OR with the previous value */
Command |= DeviceExtension->PciDevice->PciConfig.Command;
if (pFcb->Flags & FCB_IS_VOLUME)
{
- DPRINT1("Volume\n");
- pFcb->RefCount--;
+ DPRINT("Volume\n");
FileObject->FsContext2 = NULL;
}
else
if (FileObject->FileName.Length == 0 &&
(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
{
- DPRINT1("Volume opening\n");
+ DPRINT("Volume opening\n");
if (RequestedDisposition != FILE_OPEN &&
RequestedDisposition != FILE_OPEN_IF)
{
ASSERT(ExIsResourceAcquiredExclusive(&pVCB->DirResource));
+ ASSERT(pFCB != pVCB->VolumeFcb);
++pFCB->RefCount;
}
while (pFCB)
{
+ ASSERT(pFCB != pVCB->VolumeFcb);
pFCB->RefCount--;
if (pFCB->RefCount == 0)
{
FsRtlNotifyInitializeSync(&DeviceExt->NotifySync);
InitializeListHead(&DeviceExt->NotifyList);
- DPRINT1("Mount success\n");
+ DPRINT("Mount success\n");
Status = STATUS_SUCCESS;
PFILE_OBJECT FileObject;
PDEVICE_EXTENSION DeviceExt;
- DPRINT1("VfatLockOrUnlockVolume(%p, %d)\n", IrpContext, Lock);
+ DPRINT("VfatLockOrUnlockVolume(%p, %d)\n", IrpContext, Lock);
DeviceExt = IrpContext->DeviceExt;
FileObject = IrpContext->FileObject;
PVFAT_IRP_CONTEXT IrpContext)
{
PDEVICE_EXTENSION DeviceExt;
+ PLIST_ENTRY NextEntry;
+ PVFATFCB Fcb;
- DPRINT1("VfatDismountVolume(%p)\n", IrpContext);
+ DPRINT("VfatDismountVolume(%p)\n", IrpContext);
DeviceExt = IrpContext->DeviceExt;
+ /* We HAVE to be locked. Windows also allows dismount with no lock
+ * but we're here mainly for 1st stage, so KISS
+ */
if (!(DeviceExt->Flags & VCB_VOLUME_LOCKED))
{
return STATUS_ACCESS_DENIED;
}
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ /* Race condition? */
+ if (DeviceExt->Flags & VCB_DISMOUNT_PENDING)
+ {
+ return STATUS_VOLUME_DISMOUNTED;
+ }
+
+ /* Notify we'll dismount. Pass that point there's no reason we fail */
+ FsRtlNotifyVolumeEvent(IrpContext->Stack->FileObject, FSRTL_VOLUME_DISMOUNT);
+
+ ExAcquireResourceExclusiveLite(&DeviceExt->FatResource, TRUE);
+
+ /* Browse all the available FCBs first, and force data writing to disk */
+ for (NextEntry = DeviceExt->FcbListHead.Flink;
+ NextEntry != &DeviceExt->FcbListHead;
+ NextEntry = NextEntry->Flink)
+ {
+ Fcb = CONTAINING_RECORD(NextEntry, VFATFCB, FcbListEntry);
+
+ ExAcquireResourceExclusiveLite(&Fcb->MainResource, TRUE);
+ ExAcquireResourceExclusiveLite(&Fcb->PagingIoResource, TRUE);
+
+ if (Fcb->FileObject)
+ {
+ if (Fcb->Flags & FCB_IS_DIRTY)
+ {
+ VfatUpdateEntry(Fcb);
+ }
+
+ CcPurgeCacheSection(Fcb->FileObject->SectionObjectPointer, NULL, 0, FALSE);
+ CcUninitializeCacheMap(Fcb->FileObject, &Fcb->RFCB.FileSize, NULL);
+ }
+
+ ExReleaseResourceLite(&Fcb->PagingIoResource);
+ ExReleaseResourceLite(&Fcb->MainResource);
+ }
+
+ /* Rebrowse the FCB in order to free them now */
+ while (!IsListEmpty(&DeviceExt->FcbListHead))
+ {
+ NextEntry = RemoveHeadList(&DeviceExt->FcbListHead);
+ Fcb = CONTAINING_RECORD(NextEntry, VFATFCB, FcbListEntry);
+ vfatDestroyFCB(Fcb);
+ }
+
+ /* Mark we're being dismounted */
+ DeviceExt->Flags |= VCB_DISMOUNT_PENDING;
+ IrpContext->DeviceObject->Vpb->Flags &= ~VPB_MOUNTED;
+
+ ExReleaseResourceLite(&DeviceExt->FatResource);
+
+ /* Release a few resources and quit, we're done */
+ ExDeleteResourceLite(&DeviceExt->DirResource);
+ ExDeleteResourceLite(&DeviceExt->FatResource);
+ ObDereferenceObject(DeviceExt->FATFileObject);
+
+ return STATUS_SUCCESS;
}
/*
return STATUS_INVALID_PARAMETER;
}
- if (Stack->Parameters.FileSystemControl.OutputBufferLength < sizeof(NTFS_FILE_RECORD_OUTPUT_BUFFER) ||
+ if (Stack->Parameters.FileSystemControl.OutputBufferLength < (FIELD_OFFSET(NTFS_FILE_RECORD_OUTPUT_BUFFER, FileRecordBuffer) + DeviceExt->NtfsInfo.BytesPerFileRecord) ||
Irp->AssociatedIrp.SystemBuffer == NULL)
{
DPRINT1("Invalid output! %d %p\n", Stack->Parameters.FileSystemControl.OutputBufferLength, Irp->AssociatedIrp.SystemBuffer);
return Status;
}
- if (Stack->Parameters.FileSystemControl.OutputBufferLength < (FIELD_OFFSET(NTFS_FILE_RECORD_OUTPUT_BUFFER, FileRecordBuffer) + FileRecord->BytesInUse))
- {
- DPRINT1("Buffer too small: %lu vs %lu\n", Stack->Parameters.FileSystemControl.OutputBufferLength, FileRecord->BytesInUse);
- ExFreePoolWithTag(FileRecord, TAG_NTFS);
- return STATUS_BUFFER_TOO_SMALL;
- }
-
OutputBuffer = (PNTFS_FILE_RECORD_OUTPUT_BUFFER)Irp->AssociatedIrp.SystemBuffer;
OutputBuffer->FileReferenceNumber.QuadPart = MFTRecord;
- OutputBuffer->FileRecordLength = FileRecord->BytesInUse;
- RtlCopyMemory(OutputBuffer->FileRecordBuffer, FileRecord, FileRecord->BytesInUse);
+ OutputBuffer->FileRecordLength = DeviceExt->NtfsInfo.BytesPerFileRecord;
+ RtlCopyMemory(OutputBuffer->FileRecordBuffer, FileRecord, DeviceExt->NtfsInfo.BytesPerFileRecord);
ExFreePoolWithTag(FileRecord, TAG_NTFS);
{
Busy = TRUE;
}
- else if (Type == NdisWorkItemResetRequested &&
+ else if (Type == NdisWorkItemResetRequested &&
Adapter->NdisMiniportBlock.ResetStatus == NDIS_STATUS_PENDING)
{
Busy = TRUE;
&NdisBufferVA,
&FirstBufferLength,
&TotalBufferLength);
-
+
HeaderSize = NDIS_GET_PACKET_HEADER_SIZE(PacketArray[i]);
LookAheadSize = TotalBufferLength - HeaderSize;
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
return;
}
-
+
CopyBufferChainToBuffer(LookAheadBuffer,
NdisBuffer,
HeaderSize,
LookAheadSize);
-
+
NDIS_DbgPrint(MID_TRACE, ("Indicating packet to protocol's legacy Receive handler\n"));
(*AdapterBinding->ProtocolBinding->Chars.ReceiveHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
LookAheadBuffer,
LookAheadSize,
TotalBufferLength - HeaderSize);
-
+
ExFreePool(LookAheadBuffer);
}
}
Adapter->NdisMiniportBlock.PendingRequest = NULL;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
KeLowerIrql(OldIrql);
-
+
MiniWorkItemComplete(Adapter, NdisWorkItemRequest);
}
Status);
KeLowerIrql(OldIrql);
-
+
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
}
KeAcquireSpinLock(&AdapterListLock, &OldIrql);
{
CurrentEntry = AdapterListHead.Flink;
-
+
while (CurrentEntry != &AdapterListHead)
{
Adapter = CONTAINING_RECORD(CurrentEntry, LOGICAL_ADAPTER, ListEntry);
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0);
NdisMIndicateStatusComplete(Adapter);
-
+
MiniWorkItemComplete(Adapter, NdisWorkItemResetRequested);
}
case 0x00:
MinSize = sizeof(NDIS50_MINIPORT_CHARACTERISTICS);
break;
-
+
case 0x01:
MinSize = sizeof(NDIS51_MINIPORT_CHARACTERISTICS);
break;
-
+
default:
NDIS_DbgPrint(MIN_TRACE, ("Bad 5.x minor characteristics version.\n"));
return NDIS_STATUS_BAD_VERSION;
return NDIS_STATUS_BAD_VERSION;
}
- NDIS_DbgPrint(MIN_TRACE, ("Initializing an NDIS %u.%u miniport\n",
+ NDIS_DbgPrint(MID_TRACE, ("Initializing an NDIS %u.%u miniport\n",
MiniportCharacteristics->MajorNdisVersion,
MiniportCharacteristics->MinorNdisVersion));
if (AttributeFlags & NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER)
NDIS_DbgPrint(MIN_TRACE, ("Intermediate drivers not supported yet.\n"));
- NDIS_DbgPrint(MIN_TRACE, ("Miniport attribute flags: 0x%x\n", AttributeFlags));
+ NDIS_DbgPrint(MID_TRACE, ("Miniport attribute flags: 0x%x\n", AttributeFlags));
if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.AdapterShutdownHandler)
{
NDIS_DbgPrint(MIN_TRACE, ("IoCreateDevice failed (%x)\n", Status));
return Status;
}
-
+
Status = IoCreateSymbolicLink(SymbolicName, DeviceName);
if (!NT_SUCCESS(Status))
NdisStatus = NDIS_STATUS_PENDING;
}
}
-
+
if (NdisStatus != NDIS_STATUS_PENDING) {
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
}
NdisStatus = NDIS_STATUS_PENDING;
}
}
-
+
if (NdisStatus != NDIS_STATUS_PENDING) {
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
}
else
{
if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
- {
+ {
for (i = 0; i < NumberOfPackets; i++)
{
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
if (!NT_SUCCESS(NtStatus))
{
- NDIS_DbgPrint(MIN_TRACE, ("Performing global bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
+ NDIS_DbgPrint(MID_TRACE, ("Performing global bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
KeyInformation = NULL;
CurrentEntry = AdapterListHead.Flink;
}
else
{
- NDIS_DbgPrint(MIN_TRACE, ("Performing standard bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
+ NDIS_DbgPrint(MID_TRACE, ("Performing standard bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
DataPtr = (WCHAR*)KeyInformation->Data;
}
/* It wasn't in the global miniport list, so skip the bind entry */
goto next;
}
-
+
/* Make sure this device isn't already bound to this protocol */
if (LocateAdapterBindingByName(Protocol, &DeviceName))
{
if(BindHandler)
{
BindHandler(Status, BindContext, &DeviceName, &RegistryPath, 0);
- NDIS_DbgPrint(MIN_TRACE, ("%wZ's BindAdapter handler returned 0x%x for %wZ\n", &ProtocolCharacteristics->Name, *Status, &DeviceName));
+ NDIS_DbgPrint(MID_TRACE, ("%wZ's BindAdapter handler returned 0x%x for %wZ\n", &ProtocolCharacteristics->Name, *Status, &DeviceName));
}
else
- NDIS_DbgPrint(MIN_TRACE, ("No protocol bind handler specified\n"));
+ NDIS_DbgPrint(MID_TRACE, ("No protocol bind handler specified\n"));
}
next:
InitializeListHead(&Protocol->AdapterListHead);
- /* We must set this before the call to ndisBindMiniportsToProtocol because the protocol's
+ /* We must set this before the call to ndisBindMiniportsToProtocol because the protocol's
* BindAdapter handler might need it */
*NdisProtocolHandle = Protocol;
NTAPI
PrintTListInfo(IN PSAC_SYSTEM_INFORMATION SacInfo)
{
- SAC_DBG(1, "Testing: %d %d %I64d\n",
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Testing: %d %d %I64d\n",
SacInfo->BasicInfo.NumberOfPhysicalPages,
SacInfo->PerfInfo.AvailablePages,
SacInfo->TimeInfo.BootTime);
LARGE_INTEGER Timeout, TickCount;
NTSTATUS Status;
KEVENT Event;
- SAC_DBG(1, "SAC DoRebootCommand: Entering.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoRebootCommand: Entering.\n");
/* Get the current time now, and setup a timeout in 1 second */
KeQueryTickCount(&TickCount);
NTAPI
DoSetTimeCommand(IN PCHAR InputTime)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoKillCommand(IN PCHAR KillString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoLowerPriorityCommand(IN PCHAR PrioString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoRaisePriorityCommand(IN PCHAR PrioString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoLimitMemoryCommand(IN PCHAR LimitString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoCrashCommand(VOID)
{
- SAC_DBG(1, "SAC DoCrashCommand: Entering.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoCrashCommand: Entering.\n");
/* Crash the machine */
KeBugCheckEx(MANUALLY_INITIATED_CRASH, 0, 0, 0, 0);
NTAPI
DoMachineInformationCommand(VOID)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoChannelCommand(IN PCHAR ChannelString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoCmdCommand(IN PCHAR InputString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoLockCommand(VOID)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
FORCEINLINE
NTAPI
DoGetNetInfo(IN BOOLEAN DoPrint)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
NTAPI
DoSetIpAddressCommand(IN PCHAR IpString)
{
- SAC_DBG(1, "Entering\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering\n");
}
VOID
{
/* Out of memory, bail out */
SacPutSimpleMessage(11);
- SAC_DBG(1, "SAC DoTlistCommand: Exiting.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoTlistCommand: Exiting.\n");
return;
}
}
{
/* Out of memory, bail out */
SacPutSimpleMessage(11);
- SAC_DBG(1, "SAC DoTlistCommand: Exiting.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoTlistCommand: Exiting.\n");
return;
}
PrintTListInfo(GlobalBuffer);
}
- SAC_DBG(1, "SAC DoTlistCommand: Exiting.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoTlistCommand: Exiting.\n");
}
BOOLEAN EnablePaging;
NTSTATUS Status;
- SAC_DBG(4, "SAC Input Test: %s\n", InputBuffer);
+ SAC_DBG(SAC_DBG_INIT, "SAC Input Test: %s\n", InputBuffer);
if (!strncmp(InputBuffer, "t", 1))
{
sizeof(EnablePaging),
NULL,
0);
- if (!NT_SUCCESS(Status)) SAC_DBG(4, "SAC Display Log failed.\n");
+ if (!NT_SUCCESS(Status)) SAC_DBG(SAC_DBG_INIT, "SAC Display Log failed.\n");
}
else if (!strncmp(InputBuffer, "cmd", 3))
{
/* GLOBALS ********************************************************************/
-ULONG SACDebug = 0xFFFFFFFF;
+ULONG SACDebug = 0;
BOOLEAN CommandConsoleLaunchingEnabled;
BOOLEAN GlobalDataInitialized;
KMUTEX SACCMDEventInfoMutex;
FreeGlobalData(VOID)
{
UNICODE_STRING SymbolicLink;
- SAC_DBG(1, "SAC FreeGlobalData: Entering.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC FreeGlobalData: Entering.\n");
/* Only free if we allocated */
if (GlobalDataInitialized)
}
/* All done */
- SAC_DBG(1, "SAC FreeGlobalData: Exiting.\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC FreeGlobalData: Exiting.\n");
}
VOID
if (!NT_SUCCESS(Status))
{
/* For debugging, write down why we failed */
- SAC_DBG(1, "Exiting (6) with status FALSE\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "Exiting (6) with status FALSE\n");
DeviceExtension->PriorityFail = TRUE;
/* Initialize rundown and wait for the thread to do it */
*Buffer = SacAllocatePool(ResultLength, GLOBAL_BLOCK_TAG);
if (!*Buffer)
{
- SAC_DBG(1, "SAC GetRegistryValueBuffer: failed allocation\n");
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC GetRegistryValueBuffer: failed allocation\n");
return Status;
}
if (!NT_SUCCESS(Status))
{
/* Print error on failure */
- SAC_DBG(1, "SAC SetRegistryValue: failed ZwSetValueKey: %X.\n", Status);
+ SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC SetRegistryValue: failed ZwSetValueKey: %X.\n", Status);
}
/* Close the handle and exit */
if (PortStatus.Change & USB_PORT_STATUS_CONNECT)
{
//
- // Clear Port Connect
+ // Clear Port Connect
//
Status = ClearPortFeature(RootHubDeviceObject, PortId, C_PORT_CONNECTION);
if (!NT_SUCCESS(Status))
return TRUE;
}
- if (DeviceDescriptor->bDeviceClass == 0xEF &&
+ if (DeviceDescriptor->bDeviceClass == 0xEF &&
DeviceDescriptor->bDeviceSubClass == 0x02 &&
DeviceDescriptor->bDeviceProtocol == 0x01)
{
if (DeviceDescriptor->bDeviceClass == 0)
{
- Index += swprintf(&Buffer[Index],
+ Index += swprintf(&Buffer[Index],
L"USB\\Class_%02x&SubClass_%02x&Prot_%02x",
InterfaceDescriptor->bInterfaceClass, InterfaceDescriptor->bInterfaceSubClass, InterfaceDescriptor->bInterfaceProtocol) + 1;
Index += swprintf(&Buffer[Index],
}
else
{
- Index += swprintf(&Buffer[Index],
+ Index += swprintf(&Buffer[Index],
L"USB\\Class_%02x&SubClass_%02x&Prot_%02x",
DeviceDescriptor->bDeviceClass, DeviceDescriptor->bDeviceSubClass, DeviceDescriptor->bDeviceProtocol) + 1;
Index += swprintf(&Buffer[Index],
// Construct HardwareIds
//
Index = 0;
- Index += swprintf(&Buffer[Index],
+ Index += swprintf(&Buffer[Index],
L"USB\\Vid_%04x&Pid_%04x&Rev_%04x",
UsbChildExtension->DeviceDesc.idVendor, UsbChildExtension->DeviceDesc.idProduct, UsbChildExtension->DeviceDesc.bcdDevice) + 1;
Index += swprintf(&Buffer[Index],
RootHubDeviceObject = HubDeviceExtension->RootHubPhysicalDeviceObject;
HubInterfaceBusContext = HubDeviceExtension->UsbDInterface.BusContext;
//
- // Find an empty slot in the child device array
+ // Find an empty slot in the child device array
//
for (ChildDeviceCount = 0; ChildDeviceCount < USB_MAXCHILDREN; ChildDeviceCount++)
{
}
// query device details
- Status = HubInterface->QueryDeviceInformation(HubInterfaceBusContext,
+ Status = HubInterface->QueryDeviceInformation(HubInterfaceBusContext,
UsbChildExtension->UsbDeviceHandle,
&UsbChildExtension->DeviceInformation,
sizeof(USB_DEVICE_INFORMATION_0),
sizeof(USB_DEVICE_INFORMATION_0),
&Result);
- DPRINT1("Status %x, Result 0x%08lx\n", Status, Result);
- DPRINT1("InformationLevel %x\n", HubDeviceExtension->DeviceInformation.InformationLevel);
- DPRINT1("ActualLength %x\n", HubDeviceExtension->DeviceInformation.ActualLength);
- DPRINT1("PortNumber %x\n", HubDeviceExtension->DeviceInformation.PortNumber);
- DPRINT1("DeviceDescriptor %x\n", HubDeviceExtension->DeviceInformation.DeviceDescriptor);
- DPRINT1("HubAddress %x\n", HubDeviceExtension->DeviceInformation.HubAddress);
- DPRINT1("NumberofPipes %x\n", HubDeviceExtension->DeviceInformation.NumberOfOpenPipes);
+ DPRINT("Status %x, Result 0x%08lx\n", Status, Result);
+ DPRINT("InformationLevel %x\n", HubDeviceExtension->DeviceInformation.InformationLevel);
+ DPRINT("ActualLength %x\n", HubDeviceExtension->DeviceInformation.ActualLength);
+ DPRINT("PortNumber %x\n", HubDeviceExtension->DeviceInformation.PortNumber);
+ DPRINT("DeviceDescriptor %x\n", HubDeviceExtension->DeviceInformation.DeviceDescriptor);
+ DPRINT("HubAddress %x\n", HubDeviceExtension->DeviceInformation.HubAddress);
+ DPRINT("NumberofPipes %x\n", HubDeviceExtension->DeviceInformation.NumberOfOpenPipes);
// Get Root Hubs Device Descriptor
UsbBuildGetDescriptorRequest(Urb,
return STATUS_UNSUCCESSFUL;
}
- DPRINT1("HubDeviceExtension->UsbExtHubInfo.NumberOfPorts %x\n", HubDeviceExtension->UsbExtHubInfo.NumberOfPorts);
+ DPRINT("HubDeviceExtension->UsbExtHubInfo.NumberOfPorts %x\n", HubDeviceExtension->UsbExtHubInfo.NumberOfPorts);
// Build hub descriptor request
UsbBuildVendorRequest(Urb,
}
else
{
- DPRINT1("UNIMPLEMENTED FdoHandleDeviceControl IoCtl %x InputBufferLength %x OutputBufferLength %x\n", IoStack->Parameters.DeviceIoControl.IoControlCode,
+ DPRINT1("UNIMPLEMENTED FdoHandleDeviceControl IoCtl %x InputBufferLength %x OutputBufferLength %x\n", IoStack->Parameters.DeviceIoControl.IoControlCode,
IoStack->Parameters.DeviceIoControl.InputBufferLength, IoStack->Parameters.DeviceIoControl.OutputBufferLength);
}
//
// store device objects
- //
+ //
m_DriverObject = DriverObject;
m_FunctionalDeviceObject = FunctionalDeviceObject;
m_PhysicalDeviceObject = PhysicalDeviceObject;
}
//
- // Get controllers capabilities
+ // Get controllers capabilities
//
Version = READ_REGISTER_ULONG((PULONG)((ULONG_PTR)ResourceBase + OHCI_REVISION_OFFSET));
//
// Start the controller
//
- DPRINT1("Starting Controller\n");
+ DPRINT("Starting Controller\n");
Status = StartController();
//
//
break;
}
- }
+ }
//
// if the ownership is still not changed, perform reset
//
// read contents of control register
//
-
+
Control = (READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_CONTROL_OFFSET)) & OHCI_HC_FUNCTIONAL_STATE_MASK);
- DPRINT1("Controller State %x\n", Control);
-
+ DPRINT("Controller State %x\n", Control);
+
switch (Control)
{
case OHCI_HC_FUNCTIONAL_STATE_RESET:
NewControl |= OHCI_HC_FUNCTIONAL_STATE_RESET;
WaitInMs = 50;
break;
-
+
case OHCI_HC_FUNCTIONAL_STATE_SUSPEND:
case OHCI_HC_FUNCTIONAL_STATE_RESUME:
NewControl |= OHCI_HC_FUNCTIONAL_STATE_RESUME;
// delay is 100 ms
//
Timeout.QuadPart = WaitInMs;
- DPRINT1("Waiting %lu milliseconds for controller to transition state\n", Timeout.LowPart);
-
+ DPRINT("Waiting %lu milliseconds for controller to transition state\n", Timeout.LowPart);
+
//
// convert to 100 ns units (absolute)
//
Timeout.QuadPart *= -10000;
-
+
//
// perform the wait
//
FrameInterval = ((FrameInterval & OHCI_FRAME_INTERVAL_TOGGLE) ^ OHCI_FRAME_INTERVAL_TOGGLE);
- DPRINT1("FrameInterval %x IntervalValue %x\n", FrameInterval, m_IntervalValue);
+ DPRINT("FrameInterval %x IntervalValue %x\n", FrameInterval, m_IntervalValue);
FrameInterval |= OHCI_FSMPS(m_IntervalValue) | m_IntervalValue;
- DPRINT1("Computed FrameInterval %x\n", FrameInterval);
+ DPRINT("Computed FrameInterval %x\n", FrameInterval);
//
// write frame interval
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_FRAME_INTERVAL_OFFSET), FrameInterval);
FrameInterval = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_FRAME_INTERVAL_OFFSET));
- DPRINT1("Read FrameInterval %x\n", FrameInterval);
+ DPRINT("Read FrameInterval %x\n", FrameInterval);
//
// 90 % periodic
//
Periodic = OHCI_PERIODIC(m_IntervalValue);
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_PERIODIC_START_OFFSET), Periodic);
- DPRINT1("Computed Periodic Start %x\n", Periodic);
+ DPRINT("Computed Periodic Start %x\n", Periodic);
Periodic = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_PERIODIC_START_OFFSET));
- DPRINT1("Read Periodic Start %x\n", Periodic);
+ DPRINT("Read Periodic Start %x\n", Periodic);
// Linux does this hack for some bad controllers
if (!(FrameInterval & 0x3FFF0000) ||
m_NumberOfPorts = OHCI_RH_GET_PORT_COUNT(Descriptor);
} while (m_NumberOfPorts == 0);
- DPRINT1("NumberOfPorts %lu\n", m_NumberOfPorts);
+ DPRINT("NumberOfPorts %lu\n", m_NumberOfPorts);
ASSERT(m_NumberOfPorts < OHCI_MAX_PORT_COUNT);
//
//
// write the configuration back
//
- DPRINT1("Descriptor A: %x\n", Descriptor);
+ DPRINT("Descriptor A: %x\n", Descriptor);
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_RH_DESCRIPTOR_A_OFFSET), Descriptor);
//
//
// write the configuration back
//
- DPRINT1("Descriptor B: %x\n", Descriptor);
+ DPRINT("Descriptor B: %x\n", Descriptor);
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_RH_DESCRIPTOR_B_OFFSET), Descriptor);
//
KeStallExecutionProcessor(10);
Control = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_HCCA_OFFSET));
ASSERT((m_HCCAPhysicalAddress.LowPart & Control) == m_HCCAPhysicalAddress.LowPart);
- DPRINT1("HCCA: %x Alignment mask: %x\n", m_HCCAPhysicalAddress.LowPart, Control);
+ DPRINT("HCCA: %x Alignment mask: %x\n", m_HCCAPhysicalAddress.LowPart, Control);
//
// write address of HCCA
//
ASSERT((Control & OHCI_HC_FUNCTIONAL_STATE_MASK) == OHCI_HC_FUNCTIONAL_STATE_OPERATIONAL);
ASSERT((Control & OHCI_ENABLE_LIST) == OHCI_ENABLE_LIST);
- DPRINT1("Control %x\n", Control);
+ DPRINT("Control %x\n", Control);
//
// done
//
- DPRINT1("OHCI controller is operational\n");
+ DPRINT("OHCI controller is operational\n");
return STATUS_SUCCESS;
}
//
// re-enable root hub change
//
- DPRINT1("Enabling status change\n");
+ DPRINT("Enabling status change\n");
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_INTERRUPT_ENABLE_OFFSET), OHCI_ROOT_HUB_STATUS_CHANGE);
return STATUS_SUCCESS;
// delay is multiplied by 2 ms
//
Timeout.QuadPart *= 2;
- DPRINT1("Waiting %lu milliseconds for port power up\n", Timeout.LowPart);
+ DPRINT("Waiting %lu milliseconds for port power up\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// the interrupt was not caused by DoneHead update
// check if something important happened
//
- DPRINT("InterruptStatus %x InterruptEnable %x\n", READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_STATUS_OFFSET)),
+ DPRINT("InterruptStatus %x InterruptEnable %x\n", READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_STATUS_OFFSET)),
READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_ENABLE_OFFSET)));
- Status = READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_STATUS_OFFSET)) & READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_ENABLE_OFFSET)) & (~OHCI_WRITEBACK_DONE_HEAD);
+ Status = READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_STATUS_OFFSET)) & READ_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_INTERRUPT_ENABLE_OFFSET)) & (~OHCI_WRITEBACK_DONE_HEAD);
if (Status == 0)
{
//
WRITE_REGISTER_ULONG((PULONG)((PUCHAR)This->m_Base + OHCI_CONTROL_OFFSET), OHCI_HC_FUNCTIONAL_STATE_RESET);
}
- if (Status & OHCI_ROOT_HUB_STATUS_CHANGE)
+ if (Status & OHCI_ROOT_HUB_STATUS_CHANGE)
{
//
// disable interrupt as it will fire untill the port has been reset
HalpDispatchPower(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
- DPRINT1("HAL: PnP Driver Power!\n");
+ DPRINT("HAL: PnP Driver Power!\n");
return STATUS_SUCCESS;
}
case IRP_MN_START_DEVICE:
/* We only care about a PCI PDO */
- DPRINT1("Start device received\n");
+ DPRINT("Start device received\n");
/* Complete the IRP normally */
break;
case IRP_MN_REMOVE_DEVICE:
/* Check if this is a PCI device */
- DPRINT1("Remove device received\n");
+ DPRINT("Remove device received\n");
/* We're done */
Status = STATUS_SUCCESS;
case IRP_MN_SURPRISE_REMOVAL:
/* Inherit whatever status we had */
- DPRINT1("Surprise removal IRP\n");
+ DPRINT("Surprise removal IRP\n");
Status = Irp->IoStatus.Status;
break;
default:
/* We don't handle anything else, so inherit the old state */
- DPRINT("Illegal IRP: %lx\n", Minor);
+ DPRINT1("Illegal IRP: %lx\n", Minor);
Status = Irp->IoStatus.Status;
break;
}
#define FSCTL_READ_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,17,METHOD_NEITHER,FILE_READ_DATA)
#define FSCTL_WRITE_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,18,METHOD_NEITHER,FILE_WRITE_DATA)
#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS)
#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS)
#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
LARGE_INTEGER MftZoneStart;
LARGE_INTEGER MftZoneEnd;
} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
+typedef struct {
+ ULONG ByteCount;
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+} NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
+typedef struct {
+ LARGE_INTEGER FileReferenceNumber;
+} NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
+typedef struct {
+ LARGE_INTEGER FileReferenceNumber;
+ ULONG FileRecordLength;
+ UCHAR FileRecordBuffer[1];
+} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
#define IsRecognizedPartition(t)\
(((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_12))||\
#define RFF_NOLABEL 0x08
#define RFF_NOSEPARATEMEM 0x20 /* NT only */
-#define DE_SAMEFILE 0x71
+#define DE_SAMEFILE 0x71
+#define DE_DESTSAMETREE 0x7D
/* RunFileFlg notification structure */
typedef struct
ULONG LastIndex;
PVOID BlockPtr;
BOOLEAN Success;
+ static ULONG PrintCount = 0;
- UNIMPLEMENTED;
+ if (PrintCount++ == 0)
+ {
+ UNIMPLEMENTED;
+ }
return TRUE;
ASSERT(RegistryHive->ReadOnly == FALSE);
// Get the number of ports and check each one for device connected
//
m_Hardware->GetDeviceDetails(NULL, NULL, &PortCount, NULL);
- DPRINT1("[%s] SCE Request %p TransferBufferLength %lu Flags %x MDL %p\n", m_USBType, Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength, Urb->UrbBulkOrInterruptTransfer.TransferFlags, Urb->UrbBulkOrInterruptTransfer.TransferBufferMDL);
+ DPRINT("[%s] SCE Request %p TransferBufferLength %lu Flags %x MDL %p\n", m_USBType, Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength, Urb->UrbBulkOrInterruptTransfer.TransferFlags, Urb->UrbBulkOrInterruptTransfer.TransferBufferMDL);
TransferBuffer = (PUCHAR)Urb->UrbBulkOrInterruptTransfer.TransferBuffer;
{
m_Hardware->GetPortStatus(PortId, &PortStatus, &PortChange);
- DPRINT1("[%s] Port %d: Status %x, Change %x\n", m_USBType, PortId, PortStatus, PortChange);
+ DPRINT("[%s] Port %d: Status %x, Change %x\n", m_USBType, PortId, PortStatus, PortChange);
//
}
}
- DPRINT1("CHubController::CreatePDO: DeviceName %wZ\n", &DeviceName);
+ DPRINT("CHubController::CreatePDO: DeviceName %wZ\n", &DeviceName);
//
// fixup device stack voodoo part #1
NTSTATUS Status;
PHCDCONTROLLER HcdController;
- DPRINT1("USBLIB_AddDevice\n");
+ DPRINT("USBLIB_AddDevice\n");
/* first create the controller object */
Status = CreateHCDController(&HcdController);
NTSTATUS
NTAPI
USBLIB_Dispatch(
- PDEVICE_OBJECT DeviceObject,
+ PDEVICE_OBJECT DeviceObject,
PIRP Irp)
{
PCOMMON_DEVICE_EXTENSION DeviceExtension;
return Status;
}
-}
\ No newline at end of file
+}
ext2_free_block_bitmap(&FileSys);
ext2_free_inode_bitmap(&FileSys);
- if (!bRet)
+ if(bLocked)
{
Ext2DisMountVolume(&FileSys);
- }
- else
- {
- if(bLocked)
- {
- Ext2UnLockVolume(&FileSys);
- }
+ Ext2UnLockVolume(&FileSys);
}
Ext2CloseDevice(&FileSys);
LSA_API_MSG ApiMessage;
NTSTATUS Status;
- DPRINT1("LsaDeregisterLogonProcess()\n");
+ DPRINT("LsaDeregisterLogonProcess()\n");
ApiMessage.ApiNumber = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS;
ApiMessage.h.u1.s1.DataLength = LSA_PORT_DATA_SIZE(ApiMessage.DeregisterLogonProcess);
NtClose(LsaHandle);
- DPRINT1("LsaDeregisterLogonProcess() done (Status 0x%08lx)\n", Status);
+ DPRINT("LsaDeregisterLogonProcess() done (Status 0x%08lx)\n", Status);
return Status;
}
ULONG ConnectInfoLength = sizeof(ConnectInfo);
NTSTATUS Status;
- DPRINT1("LsaConnectUntrusted(%p)\n", LsaHandle);
+ DPRINT("LsaConnectUntrusted(%p)\n", LsaHandle);
RtlInitUnicodeString(&PortName,
L"\\LsaAuthenticationPort");
ULONG ConnectInfoLength = sizeof(ConnectInfo);
NTSTATUS Status;
- DPRINT1("LsaRegisterLogonProcess()\n");
+ DPRINT("LsaRegisterLogonProcess()\n");
/* Check the logon process name length */
if (LsaLogonProcessName->Length > LSASS_MAX_LOGON_PROCESS_NAME_LENGTH)
DPRINT1("Executive: Event Pair initialization failed\n");
return FALSE;
}
-
+
/* Initialize mutants */
if (ExpInitializeMutantImplementation() == FALSE)
{
DPRINT1("Executive: Mutant initialization failed\n");
return FALSE;
}
-
+
/* Initialize callbacks */
if (ExpInitializeCallbacks() == FALSE)
{
DPRINT1("Executive: Callback initialization failed\n");
return FALSE;
}
-
+
/* Initialize semaphores */
if (ExpInitializeSemaphoreImplementation() == FALSE)
{
DPRINT1("Executive: Semaphore initialization failed\n");
return FALSE;
}
-
+
/* Initialize timers */
if (ExpInitializeTimerImplementation() == FALSE)
{
DPRINT1("Executive: Timer initialization failed\n");
return FALSE;
}
-
+
/* Initialize profiling */
if (ExpInitializeProfileImplementation() == FALSE)
{
DPRINT1("Executive: Profile initialization failed\n");
return FALSE;
}
-
+
/* Initialize UUIDs */
ExpInitUuids();
-
+
/* Initialize keyed events */
if (ExpInitializeKeyedEventImplementation() == FALSE)
{
DPRINT1("Executive: Keyed event initialization failed\n");
return FALSE;
}
-
+
/* Initialize Win32K */
if (ExpWin32kInit() == FALSE)
{
InbvEnableDisplayString(TRUE);
/* Launch initial process */
- DPRINT1("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
+ DPRINT("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
ProcessInfo = &InitBuffer->ProcessInfo;
ExpLoadInitialProcess(InitBuffer, &ProcessParameters, &Environment);
/* Free the boot buffer */
ExFreePoolWithTag(InitBuffer, TAG_INIT);
- DPRINT1("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
+ DPRINT("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
}
VOID
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
+
+#define NDEBUG
#include <debug.h>
/* FUNCTIONS *****************************************************************/
NtShutdownSystem(IN SHUTDOWN_ACTION Action)
{
POWER_ACTION PowerAction;
-
+
/* Convert to power action */
if (Action == ShutdownNoReboot)
{
{
return STATUS_INVALID_PARAMETER;
}
-
+
/* Now call the power manager */
- DPRINT1("Setting state to: %lx\n", PowerAction);
+ DPRINT("Setting state to: %lx\n", PowerAction);
return NtSetSystemPowerState(PowerAction,
PowerSystemSleeping3,
POWER_ACTION_OVERRIDE_APPS |
/* Create symbolic link */
IoAssignArcName(&ArcNameStringW, &DeviceStringW);
RtlFreeUnicodeString(&ArcNameStringW);
- DPRINT1("Boot device found\n");
+ DPRINT("Boot device found\n");
}
/* And quit, whatever happens */
continue;
}
- DPRINT1("Installed service '%S' for critical device '%wZ'\n", PartialInfo->Data, &ChildIdNameU);
+ DPRINT("Installed service '%S' for critical device '%wZ'\n", PartialInfo->Data, &ChildIdNameU);
}
else
{
DPRINT1("ZwOpenKey(%wZ) failed with status 0x%08lx\n", &KeyPathU, Status);
}
- DPRINT1("Firmware mapper is %s\n", KeyValue != 0 ? "disabled" : "enabled");
+ DPRINT("Firmware mapper is %s\n", KeyValue != 0 ? "disabled" : "enabled");
return (KeyValue != 0) ? TRUE : FALSE;
}
IopQueueTargetDeviceEvent(&GUID_DEVICE_ARRIVAL,
&DeviceNode->InstancePath);
- DPRINT1("Reported device: %S (%wZ)\n", HardwareId, &DeviceNode->InstancePath);
+ DPRINT("Reported device: %S (%wZ)\n", HardwareId, &DeviceNode->InstancePath);
/* Return the PDO */
if (DeviceObject) *DeviceObject = Pdo;
}
else
{
- DPRINT1("Satisfying port requirement with 0x%I64x (length: 0x%x)\n", Start, CmDesc->u.Port.Length);
+ DPRINT("Satisfying port requirement with 0x%I64x (length: 0x%x)\n", Start, CmDesc->u.Port.Length);
return TRUE;
}
}
+ DPRINT1("IopFindPortResource failed!\n");
return FALSE;
}
/* Get the discardable sections to free them */
MiFindInitializationCode(&StartAddress, &EndAddress);
if (StartAddress) MiFreeInitializationCode(StartAddress, EndAddress);
- DPRINT1("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
+ DPRINT("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
/* Set our priority to 0 */
Thread->BasePriority = 0;
/* Note should notify caller of NtPowerInformation(PowerShutdownNotification) */
/* Unload symbols */
- DPRINT1("It's the final countdown...%lx\n", SystemAction);
+ DPRINT("It's the final countdown...%lx\n", SystemAction);
DbgUnLoadImageSymbols(NULL, (PVOID)-1, 0);
/* Run the thread on the boot processor */
}
/* First, the HAL handles any "end of boot" special functionality */
- DPRINT1("HAL shutting down\n");
+ DPRINT("HAL shutting down\n");
HalEndOfBoot();
/* In this step, the I/O manager does first-chance shutdown notification */
- DPRINT1("I/O manager shutting down in phase 0\n");
+ DPRINT("I/O manager shutting down in phase 0\n");
IoShutdownSystem(0);
/* In this step, all workers are killed and hives are flushed */
- DPRINT1("Configuration Manager shutting down\n");
+ DPRINT("Configuration Manager shutting down\n");
CmShutdownSystem();
/* Note that modified pages should be written here (MiShutdownSystem) */
#endif
/* In this step, the I/O manager does last-chance shutdown notification */
- DPRINT1("I/O manager shutting down in phase 1\n");
+ DPRINT("I/O manager shutting down in phase 1\n");
IoShutdownSystem(1);
CcWaitForCurrentLazyWriterActivity();
/* Note that here, we should broadcast the power IRP to devices */
/* In this step, the HAL disables any wake timers */
- DPRINT1("Disabling wake timers\n");
+ DPRINT("Disabling wake timers\n");
HalSetWakeEnable(FALSE);
/* And finally the power request is sent */
- DPRINT1("Taking the system down\n");
+ DPRINT("Taking the system down\n");
PopShutdownSystem(PopAction.Action);
}
LONG Count;
KEVENT Wait;
} POP_FLUSH_VOLUME, *PPOP_FLUSH_VOLUME;
-
+
ULONG PopFlushPolicy = 0;
KGUARDED_MUTEX PopVolumeLock;
/* Make sure only one caller can assign dope to a device */
KeAcquireSpinLock(&PopDopeGlobalLock, &OldIrql);
-
+
/* Make sure the device still has no dope */
if (!DeviceExtension->Dope)
{
/* Allow other dope transactions now */
KeReleaseSpinLock(&PopDopeGlobalLock, OldIrql);
-
+
/* Check if someone other than us already assigned the dope, so free ours */
if (Dope) ExFreePoolWithTag(Dope, 'Dope');
/* Add this volume into the list of power-manager volumes */
if (!Dope->Volume.Flink) InsertTailList(&PopVolumeDevices, &Dope->Volume);
-
+
/* Allow flushes to go through */
KeReleaseGuardedMutex(&PopVolumeLock);
}
/* Grab the next (ie: current) entry and remove it */
NextEntry = FlushContext->List.Flink;
RemoveEntryList(NextEntry);
-
+
/* Add it back on the volume list */
InsertTailList(&PopVolumeDevices, NextEntry);
-
+
/* Done touching the volume list */
KeReleaseGuardedMutex(&PopVolumeLock);
if ((NT_SUCCESS(Status)) && (NameInfo->Name.Buffer))
{
/* Open the volume */
- DPRINT1("Opening: %wZ\n", &NameInfo->Name);
+ DPRINT("Opening: %wZ\n", &NameInfo->Name);
InitializeObjectAttributes(&ObjectAttributes,
&NameInfo->Name,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
if (NT_SUCCESS(Status))
{
/* Flush it and close it */
- DPRINT1("Sending flush to: %p\n", VolumeHandle);
+ DPRINT("Sending flush to: %p\n", VolumeHandle);
ZwFlushBuffersFile(VolumeHandle, &IoStatusBlock);
ZwClose(VolumeHandle);
}
OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE RegistryHandle;
PLIST_ENTRY NextEntry;
- PDEVICE_OBJECT_POWER_EXTENSION Dope;
+ PDEVICE_OBJECT_POWER_EXTENSION Dope;
ULONG VolumeCount = 0;
NTSTATUS Status;
HANDLE ThreadHandle;
if ((FlushPolicy & 1))
{
/* Registry flush requested, so open it */
- DPRINT1("Opening registry\n");
+ DPRINT("Opening registry\n");
InitializeObjectAttributes(&ObjectAttributes,
&RegistryName,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
if (NT_SUCCESS(Status))
{
/* Flush the registry */
- DPRINT1("Flushing registry\n");
+ DPRINT("Flushing registry\n");
ZwFlushKey(RegistryHandle);
ZwClose(RegistryHandle);
}
/* Serialize with other flushes */
KeAcquireGuardedMutex(&PopVolumeLock);
-
+
/* Scan the volume list */
NextEntry = PopVolumeDevices.Flink;
while (NextEntry != &PopVolumeDevices)
{
/* Get the dope from the link */
Dope = CONTAINING_RECORD(NextEntry, DEVICE_OBJECT_POWER_EXTENSION, Volume);
-
+
/* Grab the next entry now, since we'll be modifying the list */
NextEntry = NextEntry->Flink;
/* Remove it from the dope and add it to the flush context list */
RemoveEntryList(&Dope->Volume);
InsertTailList(&FlushContext.List, &Dope->Volume);
-
+
/* Next */
VolumeCount++;
}
/* We will ourselves become a flusher thread */
FlushContext.Count = 1;
ThreadCount--;
-
+
/* Look for any extra ones we might need */
while (ThreadCount > 0)
{
/* Create a new one */
ThreadCount--;
- DPRINT1("Creating flush thread\n");
+ DPRINT("Creating flush thread\n");
Status = PsCreateSystemThread(&ThreadHandle,
THREAD_ALL_ACCESS,
&ObjectAttributes,
KeReleaseGuardedMutex(&PopVolumeLock);
/* Enter the flush work */
- DPRINT1("Local flush\n");
+ DPRINT("Local flush\n");
PopFlushVolumeWorker(&FlushContext);
-
+
/* Wait for all flushes to be over */
- DPRINT1("Waiting for flushes\n");
+ DPRINT("Waiting for flushes\n");
KeWaitForSingleObject(&FlushContext.Wait, Executive, KernelMode, FALSE, NULL);
- DPRINT1("Flushes have completed\n");
+ DPRINT("Flushes have completed\n");
}
VOID
{
PIO_STACK_LOCATION Stack;
PREQUEST_POWER_ITEM RequestPowerItem;
-
+
Stack = IoGetNextIrpStackLocation(Irp);
RequestPowerItem = (PREQUEST_POWER_ITEM)Context;
-
+
RequestPowerItem->CompletionRoutine(DeviceObject,
Stack->MinorFunction,
RequestPowerItem->PowerState,
{
PPOWER_STATE_TRAVERSE_CONTEXT PowerStateContext = Context;
NTSTATUS Status;
-
+
DPRINT("PopQuerySystemPowerStateTraverse(%p, %p)\n", DeviceNode, Context);
-
+
if (DeviceNode == IopRootDeviceNode)
return STATUS_SUCCESS;
-
+
if (DeviceNode->Flags & DNF_LEGACY_DRIVER)
return STATUS_SUCCESS;
{
DPRINT1("Device '%wZ' failed IRP_MN_QUERY_POWER\n", &DeviceNode->InstancePath);
}
-
+
#if 0
return Status;
#else
{
PPOWER_STATE_TRAVERSE_CONTEXT PowerStateContext = Context;
NTSTATUS Status;
-
+
DPRINT("PopSetSystemPowerStateTraverse(%p, %p)\n", DeviceNode, Context);
-
+
if (DeviceNode == IopRootDeviceNode)
return STATUS_SUCCESS;
-
+
if (DeviceNode->PhysicalDeviceObject == PowerStateContext->PowerDevice)
return STATUS_SUCCESS;
-
+
if (DeviceNode->Flags & DNF_LEGACY_DRIVER)
return STATUS_SUCCESS;
{
DPRINT1("Device '%wZ' failed IRP_MN_SET_POWER\n", &DeviceNode->InstancePath);
}
-
+
#if 0
return Status;
#else
NTSTATUS Status;
DEVICETREE_TRAVERSE_CONTEXT Context;
POWER_STATE_TRAVERSE_CONTEXT PowerContext;
-
+
Status = IopGetSystemPowerDeviceObject(&DeviceObject);
if (!NT_SUCCESS(Status))
{
return STATUS_UNSUCCESSFUL;
}
}
-
+
/* Set up context */
PowerContext.PowerAction = PowerAction;
PowerContext.SystemPowerState = PowerState;
PowerContext.PowerDevice = Fdo;
-
+
/* Query for system power change */
IopInitDeviceTreeTraverseContext(&Context,
IopRootDeviceNode,
PopQuerySystemPowerStateTraverse,
&PowerContext);
-
+
Status = IopTraverseDeviceTree(&Context);
if (!NT_SUCCESS(Status))
{
DPRINT1("Query system power state failed; changing state anyway\n");
}
-
+
/* Set system power change */
IopInitDeviceTreeTraverseContext(&Context,
IopRootDeviceNode,
PopSetSystemPowerStateTraverse,
&PowerContext);
-
+
IopTraverseDeviceTree(&Context);
if (!PopAcpiPresent) return STATUS_NOT_IMPLEMENTED;
-
+
if (Fdo != NULL)
{
if (PowerAction != PowerActionShutdownReset)
PopAddRemoveSysCapsCallback,
NULL,
&NotificationEntry);
-
+
/* Register lid notification */
IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange,
PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES,
PopAcpiPresent = KeLoaderBlock->Extension->AcpiTable != NULL ? TRUE : FALSE;
}
-
+
/* Initialize volume support */
InitializeListHead(&PopVolumeDevices);
KeInitializeGuardedMutex(&PopVolumeLock);
-
+
/* Initialize support for dope */
KeInitializeSpinLock(&PopDopeGlobalLock);
PIO_STACK_LOCATION Stack;
PIRP Irp;
PREQUEST_POWER_ITEM RequestPowerItem;
-
+
if (MinorFunction != IRP_MN_QUERY_POWER
&& MinorFunction != IRP_MN_SET_POWER
&& MinorFunction != IRP_MN_WAIT_WAKE)
return STATUS_INVALID_PARAMETER_2;
-
+
RequestPowerItem = ExAllocatePool(NonPagedPool, sizeof(REQUEST_POWER_ITEM));
if (!RequestPowerItem)
return STATUS_INSUFFICIENT_RESOURCES;
-
+
/* Always call the top of the device stack */
TopDeviceObject = IoGetAttachedDeviceReference(DeviceObject);
-
+
Irp = IoBuildAsynchronousFsdRequest(IRP_MJ_POWER,
TopDeviceObject,
NULL,
ExFreePool(RequestPowerItem);
return STATUS_INSUFFICIENT_RESOURCES;
}
-
+
/* POWER IRPs are always initialized with a status code of
STATUS_NOT_IMPLEMENTED */
Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
Irp->IoStatus.Information = 0;
-
+
Stack = IoGetNextIrpStackLocation(Irp);
Stack->MinorFunction = MinorFunction;
if (MinorFunction == IRP_MN_WAIT_WAKE)
Stack->Parameters.Power.Type = DevicePowerState;
Stack->Parameters.Power.State = PowerState;
}
-
+
RequestPowerItem->CompletionRoutine = CompletionFunction;
RequestPowerItem->PowerState = PowerState;
RequestPowerItem->Context = Context;
RequestPowerItem->TopDeviceObject = TopDeviceObject;
-
+
if (pIrp != NULL)
*pIrp = Irp;
-
+
IoSetCompletionRoutine(Irp, PopRequestPowerIrpCompletion, RequestPowerItem, TRUE, TRUE, TRUE);
PoCallDriver(TopDeviceObject, Irp);
-
+
/* Always return STATUS_PENDING. The completion routine
* will call CompletionFunction and complete the Irp.
*/
PowerInformationLevel,
InputBuffer, InputBufferLength,
OutputBuffer, OutputBufferLength);
-
+
switch (PowerInformationLevel)
{
case SystemBatteryState:
if (SystemAction == PowerActionShutdown) PopReadShutdownPolicy();
/* Disable lazy flushing of registry */
- DPRINT1("Stopping lazy flush\n");
+ DPRINT("Stopping lazy flush\n");
CmSetLazyFlushState(FALSE);
/* Setup the power action */
Action.Flags = Flags;
/* Notify callbacks */
- DPRINT1("Notifying callbacks\n");
+ DPRINT("Notifying callbacks\n");
ExNotifyCallback(PowerStateCallback, (PVOID)3, NULL);
-
+
/* Swap in any worker thread stacks */
- DPRINT1("Swapping worker threads\n");
+ DPRINT("Swapping worker threads\n");
ExSwapinWorkerThreads(FALSE);
-
+
/* Make our action global */
PopAction = Action;
/* Check if we're still in an invalid status */
if (!NT_SUCCESS(Status)) break;
-
+
#ifndef NEWCC
/* Flush dirty cache pages */
CcRosFlushDirtyPages(-1, &Dummy, FALSE); //HACK: We really should wait here!
#endif
/* Flush all volumes and the registry */
- DPRINT1("Flushing volumes, cache flushed %lu pages\n", Dummy);
+ DPRINT("Flushing volumes, cache flushed %lu pages\n", Dummy);
PopFlushVolumes(PopAction.Shutdown);
/* Set IRP for drivers */
PopAction.IrpMinor = IRP_MN_SET_POWER;
if (PopAction.Shutdown)
{
- DPRINT1("Queueing shutdown thread\n");
+ DPRINT("Queueing shutdown thread\n");
/* Check if we are running in the system context */
if (PsGetCurrentProcess() != PsInitialSystemProcess)
{
NULL);
ExQueueWorkItem(&PopShutdownWorkItem, CriticalWorkQueue);
-
+
/* Spend us -- when we wake up, the system is good to go down */
KeSuspendThread(KeGetCurrentThread());
Status = STATUS_SYSTEM_SHUTDOWN;
PopGracefulShutdown(NULL);
}
}
-
+
/* You should not have made it this far */
ASSERTMSG("System is still up and running?!", FALSE);
break;
/*
* @implemented
*/
-NTSTATUS NTAPI
-SeDeassignSecurity(PSECURITY_DESCRIPTOR *SecurityDescriptor)
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+NTAPI
+SeDeassignSecurity(
+ _Inout_ PSECURITY_DESCRIPTOR *SecurityDescriptor)
{
PAGED_CODE();
}
-
-/*
- * @unimplemented
- */
-NTSTATUS NTAPI
-SeAssignSecurityEx(IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
- OUT PSECURITY_DESCRIPTOR *NewDescriptor,
- IN GUID *ObjectType OPTIONAL,
- IN BOOLEAN IsDirectoryObject,
- IN ULONG AutoInheritFlags,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
- IN PGENERIC_MAPPING GenericMapping,
- IN POOL_TYPE PoolType)
-{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
-}
-
/*
* @implemented
*/
-NTSTATUS NTAPI
-SeAssignSecurity(PSECURITY_DESCRIPTOR _ParentDescriptor OPTIONAL,
- PSECURITY_DESCRIPTOR _ExplicitDescriptor OPTIONAL,
- PSECURITY_DESCRIPTOR *NewDescriptor,
- BOOLEAN IsDirectoryObject,
- PSECURITY_SUBJECT_CONTEXT SubjectContext,
- PGENERIC_MAPPING GenericMapping,
- POOL_TYPE PoolType)
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+NTAPI
+SeAssignSecurityEx(
+ _In_opt_ PSECURITY_DESCRIPTOR _ParentDescriptor,
+ _In_opt_ PSECURITY_DESCRIPTOR _ExplicitDescriptor,
+ _Out_ PSECURITY_DESCRIPTOR *NewDescriptor,
+ _In_opt_ GUID *ObjectType,
+ _In_ BOOLEAN IsDirectoryObject,
+ _In_ ULONG AutoInheritFlags,
+ _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ _In_ PGENERIC_MAPPING GenericMapping,
+ _In_ POOL_TYPE PoolType)
{
PISECURITY_DESCRIPTOR ParentDescriptor = _ParentDescriptor;
PISECURITY_DESCRIPTOR ExplicitDescriptor = _ExplicitDescriptor;
PACL Dacl = NULL;
PACL Sacl = NULL;
+ DBG_UNREFERENCED_PARAMETER(ObjectType);
+ DBG_UNREFERENCED_PARAMETER(AutoInheritFlags);
+ DBG_UNREFERENCED_PARAMETER(GenericMapping);
+ UNREFERENCED_PARAMETER(PoolType);
+
PAGED_CODE();
/* Lock subject context */
if (Descriptor == NULL)
{
DPRINT1("ExAlloctePool() failed\n");
- /* FIXME: Unlock subject context */
+ SeUnlockSubjectContext(SubjectContext);
return STATUS_INSUFFICIENT_RESOURCES;
}
*NewDescriptor = Descriptor;
- DPRINT("Descrptor %p\n", Descriptor);
+ DPRINT("Descriptor %p\n", Descriptor);
ASSERT(RtlLengthSecurityDescriptor(Descriptor));
return STATUS_SUCCESS;
}
+/*
+ * @implemented
+ */
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+NTAPI
+SeAssignSecurity(
+ _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor,
+ _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor,
+ _Out_ PSECURITY_DESCRIPTOR *NewDescriptor,
+ _In_ BOOLEAN IsDirectoryObject,
+ _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ _In_ PGENERIC_MAPPING GenericMapping,
+ _In_ POOL_TYPE PoolType)
+{
+ PAGED_CODE();
+
+ return SeAssignSecurityEx(ParentDescriptor,
+ ExplicitDescriptor,
+ NewDescriptor,
+ NULL,
+ IsDirectoryObject,
+ 0,
+ SubjectContext,
+ GenericMapping,
+ PoolType);
+}
+
/* EOF */
HANDLE ProcessHandle, ThreadHandle;
PCSR_THREAD CsrThread;
PCSR_PROCESS Process;
- ULONG Flags = 0, VdmPower = 0, DebugFlags = 0;
+ ULONG Flags = 0, DebugFlags = 0, VdmPower = 0;
/* Get the current client thread */
CsrThread = CsrGetClientThread();
Flags = (ULONG_PTR)CreateProcessRequest->ProcessHandle & 3;
CreateProcessRequest->ProcessHandle = (HANDLE)((ULONG_PTR)CreateProcessRequest->ProcessHandle & ~3);
+ /* Some things should be done if this is a VDM process */
+ if (CreateProcessRequest->VdmBinaryType)
+ {
+ /* We need to set the VDM power later on */
+ VdmPower = 1;
+ }
+
/* Duplicate the process handle */
Status = NtDuplicateObject(Process->ProcessHandle,
CreateProcessRequest->ProcessHandle,
return Status;
}
- /* See if this is a VDM process */
+ /* If this is a VDM process, request VDM power */
if (VdmPower)
{
- /* Request VDM powers */
Status = NtSetInformationProcess(ProcessHandle,
ProcessWx86Information,
&VdmPower,
BOOLEAN NewConsoleRecord = FALSE;
/* Don't do anything if the VDM has been disabled in the registry */
- if (!BaseSrvIsVdmAllowed()) return STATUS_ACCESS_DENIED;
+ if (!BaseSrvIsVdmAllowed()) return STATUS_VDM_DISALLOWED;
/* Validate the message buffers */
if (!CsrValidateMessageBuffer(ApiMessage,
ParameterValue = NULL;
ParameterValue = strchr(ParameterName, '=');
if (ParameterValue) *ParameterValue++ = ANSI_NULL;
- DPRINT1("Name=%s, Value=%s\n", ParameterName, ParameterValue);
+ DPRINT("Name=%s, Value=%s\n", ParameterName, ParameterValue);
/* Check for Object Directory */
if (_stricmp(ParameterName, "ObjectDirectory") == 0)
RtlAppendUnicodeToString(DeviceRegistryPath, Insert2);
}
- DbgPrint("Formatted registry key '%wZ' -> '%wZ'\n",
- DriverRegistryPath, DeviceRegistryPath);
+ DPRINT("Formatted registry key '%wZ' -> '%wZ'\n",
+ DriverRegistryPath, DeviceRegistryPath);
return STATUS_SUCCESS;
}
BrushOrigin.x = 0;
BrushOrigin.y = 0;
- psurf = dc->dclevel.pSurface ;
+ psurf = dc->dclevel.pSurface;
if(!psurf)
psurf = psurfDefaultBitmap;
IN HDC hDC,
IN UINT FirstChar,
IN ULONG Count,
- IN OPTIONAL PWCHAR pwch,
+ IN OPTIONAL PWCHAR UnSafepwch,
IN FLONG fl,
OUT PVOID Buffer)
{
HFONT hFont = 0;
NTSTATUS Status = STATUS_SUCCESS;
PMATRIX pmxWorldToDevice;
+ PWCHAR Safepwch = NULL;
- if (pwch)
+ if (!Buffer)
{
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if (UnSafepwch)
+ {
+ UINT pwchSize = Count * sizeof(WCHAR);
+ Safepwch = ExAllocatePoolWithTag(PagedPool, pwchSize, GDITAG_TEXT);
+
+ if(!Safepwch)
+ {
+ EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
_SEH2_TRY
{
- ProbeForRead(pwch,
- sizeof(PWSTR),
- 1);
+ ProbeForRead(UnSafepwch, pwchSize, 1);
+ RtlCopyMemory(Safepwch, UnSafepwch, pwchSize);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_END;
}
+
if (!NT_SUCCESS(Status))
{
- EngSetLastError(Status);
- return FALSE;
- }
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
- if (!Buffer)
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
+ EngSetLastError(Status);
return FALSE;
}
if (!fl) SafeBuffF = (LPABCFLOAT) SafeBuff;
if (SafeBuff == NULL)
{
+
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
+
EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
if (dc == NULL)
{
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
+
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
+
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (TextObj == NULL)
{
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
+
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
+
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
{
DPRINT1("WARNING: Could not find desired charmap!\n");
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
+
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
+
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
{
int adv, lsb, bbx, left, right;
- if (pwch)
+ if (Safepwch)
{
if (fl & GCABCW_INDICES)
- glyph_index = pwch[i - FirstChar];
+ glyph_index = Safepwch[i - FirstChar];
else
- glyph_index = FT_Get_Char_Index(face, pwch[i - FirstChar]);
+ glyph_index = FT_Get_Char_Index(face, Safepwch[i - FirstChar]);
}
else
{
IntUnLockFreeType;
TEXTOBJ_UnlockText(TextObj);
Status = MmCopyToCaller(Buffer, SafeBuff, BufferSize);
+
+ ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
+
+ if(Safepwch)
+ ExFreePoolWithTag(Safepwch , GDITAG_TEXT);
+
if (! NT_SUCCESS(Status))
{
SetLastNtError(Status);
- ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
return FALSE;
}
- ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
+
DPRINT("NtGdiGetCharABCWidths Worked!\n");
return TRUE;
}
IN HDC hDC,
IN UINT FirstChar,
IN UINT Count,
- IN OPTIONAL PWCHAR pwc,
+ IN OPTIONAL PWCHAR UnSafepwc,
IN FLONG fl,
OUT PVOID Buffer)
{
UINT i, glyph_index, BufferSize;
HFONT hFont = 0;
PMATRIX pmxWorldToDevice;
+ PWCHAR Safepwc = NULL;
- if (pwc)
+ if (UnSafepwc)
{
+ UINT pwcSize = Count * sizeof(WCHAR);
+ Safepwc = ExAllocatePoolWithTag(PagedPool, pwcSize, GDITAG_TEXT);
+
+ if(!Safepwc)
+ {
+ EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
_SEH2_TRY
{
- ProbeForRead(pwc,
- sizeof(PWSTR),
- 1);
+ ProbeForRead(UnSafepwc, pwcSize, 1);
+ RtlCopyMemory(Safepwc, UnSafepwc, pwcSize);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_END;
}
+
if (!NT_SUCCESS(Status))
{
EngSetLastError(Status);
if (!fl) SafeBuffF = (PFLOAT) SafeBuff;
if (SafeBuff == NULL)
{
+ if(Safepwc)
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
+
EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
dc = DC_LockDc(hDC);
if (dc == NULL)
{
+ if(Safepwc)
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
+
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
if (TextObj == NULL)
{
+ if(Safepwc)
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
+
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
if (!found)
{
DPRINT1("WARNING: Could not find desired charmap!\n");
- ExFreePool(SafeBuff);
+
+ if(Safepwc)
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
+
+ ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
EngSetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
for (i = FirstChar; i < FirstChar+Count; i++)
{
- if (pwc)
+ if (Safepwc)
{
if (fl & GCW_INDICES)
- glyph_index = pwc[i - FirstChar];
+ glyph_index = Safepwc[i - FirstChar];
else
- glyph_index = FT_Get_Char_Index(face, pwc[i - FirstChar]);
+ glyph_index = FT_Get_Char_Index(face, Safepwc[i - FirstChar]);
}
else
{
IntUnLockFreeType;
TEXTOBJ_UnlockText(TextObj);
MmCopyToCaller(Buffer, SafeBuff, BufferSize);
+
+ if(Safepwc)
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
+
ExFreePoolWithTag(SafeBuff, GDITAG_TEXT);
return TRUE;
}
FT_Face face;
WCHAR DefChar = 0xffff;
PWSTR Buffer = NULL;
- ULONG Size;
+ ULONG Size, pwcSize;
+ PWSTR Safepwc = NULL;
if ((!UnSafepwc) && (!UnSafepgi)) return cwc;
ExFreePoolWithTag(potm, GDITAG_TEXT);
}
+ pwcSize = cwc * sizeof(WCHAR);
+ Safepwc = ExAllocatePoolWithTag(PagedPool, pwcSize, GDITAG_TEXT);
+
+ if (!Safepwc)
+ {
+ EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return GDI_ERROR;
+ }
+
_SEH2_TRY
{
- ProbeForRead(UnSafepwc,
- sizeof(PWSTR),
- 1);
+ ProbeForRead(UnSafepwc, pwcSize, 1);
+ RtlCopyMemory(Safepwc, UnSafepwc, pwcSize);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
for (i = 0; i < cwc; i++)
{
- Buffer[i] = FT_Get_Char_Index(face, UnSafepwc[i]); // FIXME: Unsafe!
+ Buffer[i] = FT_Get_Char_Index(face, Safepwc[i]);
if (Buffer[i] == 0)
{
Buffer[i] = DefChar;
_SEH2_TRY
{
- ProbeForWrite(UnSafepgi,
- sizeof(WORD),
- 1);
- RtlCopyMemory(UnSafepgi,
- Buffer,
- cwc*sizeof(WORD));
+ ProbeForWrite(UnSafepgi, cwc * sizeof(WORD), 1);
+ RtlCopyMemory(UnSafepgi, Buffer, cwc * sizeof(WORD));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
ErrorRet:
ExFreePoolWithTag(Buffer, GDITAG_TEXT);
+ ExFreePoolWithTag(Safepwc, GDITAG_TEXT);
if (NT_SUCCESS(Status)) return cwc;
EngSetLastError(Status);
return GDI_ERROR;
}
else
{
- ERR("Got handle: %p\n", Ret);
+ TRACE("Got handle: %p\n", Ret);
}
return Ret;
DEVMODEW dmDefault;
DWORD dwVga;
- ERR("InitDisplayDriver(%S, %S);\n",
- pwszDeviceName, pwszRegKey);
+ TRACE("InitDisplayDriver(%S, %S);\n",
+ pwszDeviceName, pwszRegKey);
/* Open the driver's registry key */
Status = RegOpenKey(pwszRegKey, &hkey);
}
return FALSE;
}
- ERR("Mouse Active\n");
+ TRACE("Mouse Active\n");
co_IntSetForegroundAndFocusWindow(Wnd, TRUE);
return TRUE;
}
}
/*
Yes your eye are not deceiving you~!
-
+
First part of wines Win.c test_SetActiveWindow:
flush_events( TRUE );
}
UserRegisterHotKey(PWND_BOTTOM, IDHK_SHIFTF12, MOD_SHIFT, vk);
UserRegisterHotKey(PWND_BOTTOM, IDHK_F12, 0, vk);
- ERR("Start up the debugger hotkeys!! Should see this once!\n");
+ TRACE("Start up the debugger hotkeys!! If you see this you eneabled debugprints. Congrats!\n");
}
/*
if (pHotKey->pWnd == PWND_BOTTOM)
{
if (gpqForeground != NULL)
- {
- pWnd = gpqForeground->spwndFocus;
+ {
+ pWnd = gpqForeground->spwndFocus;
}
else
return FALSE;
pHotKey = pHotKey->pNext;
}
}
-
+
pHotKey = gphkFirst;
pLink = &gphkFirst;
while (pHotKey)
{
ERR("NtDeviceIoControlFile() failed, ignored\n");
}
- ERR("Keyboard type %d, subtype %d and number of func keys %d\n",
+ TRACE("Keyboard type %d, subtype %d and number of func keys %d\n",
gKeyboardInfo.KeyboardIdentifier.Type,
gKeyboardInfo.KeyboardIdentifier.Subtype,
gKeyboardInfo.NumberOfFunctionKeys);
TRACE("HotKey Processed\n");
bPostMsg = FALSE;
}
-
+
wFixedVk = IntFixVk(wSimpleVk, bExt); /* LSHIFT + EXT = RSHIFT */
if (wSimpleVk == VK_SHIFT) /* shift can't be extended */
bExt = FALSE;
IntGetSysCursorInfo()->CurrentCursorObject = NULL;
}
- ERR("DereferenceObject pCursor\n");
+ TRACE("DereferenceObject pCursor\n");
UserDereferenceObject(pCursor);
}
{
HWND Prev;
PUSER_MESSAGE_QUEUE MessageQueue;
-
+
MessageQueue = pti->MessageQueue;
switch(Type)
{
NTSTATUS Status;
- ERR("Enter NtUserInitialize(%lx, %p, %p)\n",
- dwWinVersion, hPowerRequestEvent, hMediaRequestEvent);
+ TRACE("Enter NtUserInitialize(%lx, %p, %p)\n",
+ dwWinVersion, hPowerRequestEvent, hMediaRequestEvent);
/* Check the Windows version */
if (dwWinVersion != 0)
// CsrConnectToUser, we'll pretend we "did something" here. Then the rest will
// continue as normal.
//
- UNIMPLEMENTED;
+ //UNIMPLEMENTED;
return TRUE;
}
Init(VOID)
{
USERCONNECT UserCon;
-
+
/* Set PEB data */
NtCurrentPeb()->KernelCallbackTable = apfnDispatch;
NtCurrentPeb()->PostProcessInitRoutine = NULL;
g_ulSharedDelta = UserCon.siClient.ulSharedDelta;
gpsi = SharedPtrToUser(UserCon.siClient.psi);
gHandleTable = SharedPtrToUser(UserCon.siClient.aheList);
- gHandleEntries = SharedPtrToUser(gHandleTable->handles);
+ gHandleEntries = SharedPtrToUser(gHandleTable->handles);
}
WINAPI
User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength)
{
- ERR("ClientThreadSetup\n");
+ TRACE("ClientThreadSetup\n");
ClientThreadSetup();
- return ZwCallbackReturn(NULL, 0, STATUS_SUCCESS);
+ return ZwCallbackReturn(NULL, 0, STATUS_SUCCESS);
}
NTSTATUS
Ret = TranslateCharsetInfo((DWORD *)pgci->Locale, &pgci->Cs, TCI_SRCLOCALE);
- return ZwCallbackReturn(Arguments, ArgumentLength, Ret ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
+ return ZwCallbackReturn(Arguments, ArgumentLength, Ret ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
}
NTSTATUS
return (HWND)0;
}
}
-
+
/* Copy it to a LARGE_STRING */
lstrClassName.Buffer = ClassName.Buffer;
lstrClassName.Length = ClassName.Length;
NTSTATUS Status;
PSTR AnsiBuffer = WindowName.Buffer;
ULONG AnsiLength = WindowName.Length;
-
+
WindowName.Length = 0;
WindowName.MaximumLength = AnsiLength * sizeof(WCHAR);
WindowName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
{
RtlFreeUnicodeString(&ClassName);
}
-
+
RtlFreeLargeString(&WindowName);
}
if (!RegisterDefaultClasses)
{
- ERR("CreateWindowExA RegisterSystemControls\n");
+ TRACE("CreateWindowExA RegisterSystemControls\n");
RegisterSystemControls();
}
WARN("WS_EX_MDICHILD, but parent %p is not MDIClient\n", hWndParent);
return NULL;
}
-
+
/* lpParams of WM_[NC]CREATE is different for MDI children.
* MDICREATESTRUCT members have the originally passed values.
*/
if (!dwCount)
{
if (!dwThreadId)
- return FALSE;
+ return FALSE;
else
return TRUE;
}
/* FIXME I'm only getting NULLs from Thread Enumeration, and it's
* probably because I'm not doing it right in NtUserBuildHwndList.
* Once that's fixed, we shouldn't have to check for a NULL HWND
- * here
+ * here
* This is now fixed in revision 50205. (jt)
*/
if (!pHwnd[i]) /* don't enumerate a NULL HWND */
{
HWND Ret = NULL;
PWND Ancestor, Wnd;
-
+
Wnd = ValidateHwnd(hwnd);
if (!Wnd)
return NULL;
lpRect->bottom = GetSystemMetrics(SM_CYMINIMIZED);
return TRUE;
}
- if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
+ if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
{
/* lpRect->left = lpRect->top = 0;
lpRect->right = Wnd->rcClient.right - Wnd->rcClient.left;
/* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
lpRect->right = GetSystemMetrics(SM_CXSCREEN);
lpRect->bottom = GetSystemMetrics(SM_CYSCREEN);
-*/ }
+*/ }
return TRUE;
}
if (Wnd->spwndPrev != NULL)
FoundWnd = DesktopPtrToUser(Wnd->spwndPrev);
break;
-
+
case GW_CHILD:
if (Wnd->spwndChild != NULL)
FoundWnd = DesktopPtrToUser(Wnd->spwndChild);
if (!pWnd) return Ret;
ti = pWnd->head.pti;
-
+
if (ti)
{
if (ti == GetW32ThreadInfo())
if (hMenu != NULL)
{
mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_STRING;
+ mii.fMask = MIIM_STRING;
mii.dwTypeData = szMenuStringBack;
mii.cch = sizeof(szMenuStringBack)/sizeof(WCHAR);
{
WORD ActivationState = LOWORD(wParam);
- DPRINT1("WM_ACTIVATE - ActivationState = %d\n");
+ DPRINT("WM_ACTIVATE - ActivationState = %d\n");
if ( ActivationState == WA_ACTIVE ||
ActivationState == WA_CLICKACTIVE )