+++ /dev/null
-/*
- * PROJECT: input.dll
- * FILE: dll/cpl/input/locale_list.c
- * PURPOSE: input.dll
- * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
- */
-
-#include "locale_list.h"
-
-
-static LOCALE_LIST_NODE *_LocaleList = NULL;
-
-
-static LOCALE_LIST_NODE*
-LocaleList_Append(DWORD dwId, const WCHAR *pszName)
-{
- LOCALE_LIST_NODE *pCurrent;
- LOCALE_LIST_NODE *pNew;
-
- if (pszName == NULL)
- return NULL;
-
- pCurrent = _LocaleList;
-
- pNew = (LOCALE_LIST_NODE*)malloc(sizeof(LOCALE_LIST_NODE));
- if (pNew == NULL)
- return NULL;
-
- ZeroMemory(pNew, sizeof(LOCALE_LIST_NODE));
-
- pNew->pszName = _wcsdup(pszName);
- if (pNew->pszName == NULL)
- {
- free(pNew);
- return NULL;
- }
-
- pNew->dwId = dwId;
-
- if (pCurrent == NULL)
- {
- _LocaleList = pNew;
- }
- else
- {
- while (pCurrent->pNext != NULL)
- {
- pCurrent = pCurrent->pNext;
- }
-
- pNew->pPrev = pCurrent;
- pCurrent->pNext = pNew;
- }
-
- return pNew;
-}
-
-
-VOID
-LocaleList_Destroy(VOID)
-{
- LOCALE_LIST_NODE *pCurrent;
-
- if (_LocaleList == NULL)
- return;
-
- pCurrent = _LocaleList;
-
- while (pCurrent != NULL)
- {
- LOCALE_LIST_NODE *pNext = pCurrent->pNext;
-
- free(pCurrent->pszName);
- free(pCurrent);
-
- pCurrent = pNext;
- }
-
- _LocaleList = NULL;
-}
-
-
-LOCALE_LIST_NODE*
-LocaleList_Create(VOID)
-{
- WCHAR szValue[MAX_PATH];
- DWORD dwIndex;
- DWORD dwSize;
- HKEY hKey;
-
- if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
- L"SYSTEM\\CurrentControlSet\\Control\\Nls\\Language",
- 0,
- KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE,
- &hKey) != ERROR_SUCCESS)
- {
- return NULL;
- }
-
- dwSize = ARRAYSIZE(szValue);
- dwIndex = 0;
-
- while (RegEnumValueW(hKey, dwIndex, szValue, &dwSize,
- NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
- {
- WCHAR szName[MAX_STR_LEN];
- DWORD dwId;
-
- dwId = DWORDfromString(szValue);
-
- if (GetLocaleInfoW(LOWORD(dwId),
- LOCALE_SLANGUAGE,
- szName, ARRAYSIZE(szName)))
- {
- LocaleList_Append(dwId, szName);
- }
-
- dwSize = ARRAYSIZE(szValue);
- ++dwIndex;
- }
-
- RegCloseKey(hKey);
-
- return _LocaleList;
-}
-
-
-LOCALE_LIST_NODE*
-LocaleList_GetByHkl(HKL hkl)
-{
- LOCALE_LIST_NODE *pCurrent;
-
- for (pCurrent = _LocaleList; pCurrent != NULL; pCurrent = pCurrent->pNext)
- {
- if (LOWORD(pCurrent->dwId) == LOWORD(hkl))
- {
- return pCurrent;
- }
- }
-
- return NULL;
-}
-
-
-LOCALE_LIST_NODE*
-LocaleList_GetFirst(VOID)
-{
- return _LocaleList;
-}