ReactOS  0.4.14-dev-114-gc8cbd56
lang.c File Reference
#include <k32.h>
#include <debug.h>
#include "lcformat_private.h"
Include dependency graph for lang.c:

Go to the source code of this file.

Classes

struct  locale_name
 
struct  registry_value
 
struct  enum_locale_ex_data
 
struct  ENUMLANGUAGEGROUP_CALLBACKS
 
struct  ENUMLANGUAGEGROUPLOCALE_CALLBACKS
 
struct  geoinfo_t
 
struct  ENUMSYSTEMCODEPAGES_CALLBACKS
 
struct  ENUM_UILANG_CALLBACK
 

Macros

#define NDEBUG
 
#define REG_SZ   1
 
#define NLSRC_OFFSET   5000 /* FIXME */
 
#define LOCALE_LOCALEINFOFLAGSMASK
 

Enumerations

enum  locationkind { LOCATION_NATION = 0, LOCATION_REGION, LOCATION_BOTH }
 

Functions

 DEBUG_CHANNEL (nls)
 
int wine_fold_string (int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen)
 
int wine_get_sortkey (int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
 
int wine_compare_string (int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
 
UINT GetLocalisedText (IN UINT uID, IN LPWSTR lpszDest, IN UINT cchDest)
 
static void strcpynAtoW (WCHAR *dst, const char *src, size_t n)
 
static UINT get_lcid_codepage (LCID lcid)
 
static LCID convert_default_lcid (LCID lcid, LCTYPE lctype)
 
static BOOL is_genitive_name_supported (LCTYPE lctype)
 
static HANDLE create_registry_key (void)
 
LANGID WINAPI GetUserDefaultLangID (void)
 
LANGID WINAPI GetSystemDefaultLangID (void)
 
LCID WINAPI GetUserDefaultLCID (void)
 
LCID WINAPI GetSystemDefaultLCID (void)
 
LANGID WINAPI GetUserDefaultUILanguage (void)
 
LANGID WINAPI GetSystemDefaultUILanguage (void)
 
static INT get_registry_locale_info (struct registry_value *registry_value, LPWSTR buffer, INT len)
 
INT WINAPI GetLocaleInfoA (LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
 
static int get_value_base_by_lctype (LCTYPE lctype)
 
static struct registry_valueget_locale_registry_value (DWORD lctype)
 
INT WINAPI GetLocaleInfoW (LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
 
BOOL WINAPI SetLocaleInfoA (LCID lcid, LCTYPE lctype, LPCSTR data)
 
BOOL WINAPI SetLocaleInfoW (LCID lcid, LCTYPE lctype, LPCWSTR data)
 
LCID WINAPI GetThreadLocale (void)
 
BOOL WINAPI SetThreadLocale (LCID lcid)
 
LCID WINAPI ConvertDefaultLocale (LCID lcid)
 
BOOL WINAPI IsValidLocale (LCID lcid, DWORD flags)
 
static BOOL CALLBACK enum_lang_proc_a (HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
 
static BOOL CALLBACK enum_lang_proc_w (HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
 
BOOL WINAPI EnumSystemLocalesA (LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags)
 
BOOL WINAPI EnumSystemLocalesW (LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags)
 
static BOOL CALLBACK enum_locale_ex_proc (HMODULE module, LPCWSTR type, LPCWSTR name, WORD lang, LONG_PTR lparam)
 
BOOL WINAPI EnumSystemLocalesEx (LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved)
 
DWORD WINAPI VerLanguageNameA (DWORD wLang, LPSTR szLang, DWORD nSize)
 
DWORD WINAPI VerLanguageNameW (DWORD wLang, LPWSTR szLang, DWORD nSize)
 
BOOL WINAPI GetStringTypeW (DWORD type, LPCWSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeExW (LCID locale, DWORD type, LPCWSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeA (LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeExA (LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
 
INT WINAPI LCMapStringEx (LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lparam)
 
INT WINAPI LCMapStringW (LCID lcid, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
 
INT WINAPI LCMapStringA (LCID lcid, DWORD flags, LPCSTR src, INT srclen, LPSTR dst, INT dstlen)
 
INT WINAPI FoldStringA (DWORD dwFlags, LPCSTR src, INT srclen, LPSTR dst, INT dstlen)
 
INT WINAPI FoldStringW (DWORD dwFlags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
 
INT WINAPI CompareStringEx (LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam)
 
INT WINAPI CompareStringW (LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
 
INT WINAPI CompareStringA (LCID lcid, DWORD flags, LPCSTR str1, INT len1, LPCSTR str2, INT len2)
 
static HANDLE NLS_RegOpenKey (HANDLE hRootKey, LPCWSTR szKeyName)
 
static BOOL NLS_RegEnumValue (HANDLE hKey, UINT ulIndex, LPWSTR szValueName, ULONG valueNameSize, LPWSTR szValueData, ULONG valueDataSize)
 
static BOOL NLS_RegGetDword (HANDLE hKey, LPCWSTR szValueName, DWORD *lpVal)
 
static BOOL NLS_GetLanguageGroupName (LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
 
static BOOL NLS_EnumSystemLanguageGroups (ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
 
BOOL WINAPI EnumSystemLanguageGroupsA (LANGUAGEGROUP_ENUMPROCA pLangGrpEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumSystemLanguageGroupsW (LANGUAGEGROUP_ENUMPROCW pLangGrpEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI IsValidLanguageGroup (LGRPID lgrpid, DWORD dwFlags)
 
static BOOL NLS_EnumLanguageGroupLocales (ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
 
BOOL WINAPI EnumLanguageGroupLocalesA (LANGGROUPLOCALE_ENUMPROCA pLangGrpLcEnumProc, LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumLanguageGroupLocalesW (LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumProc, LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
 
static BOOL NLS_EnumSystemCodePages (ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs)
 
BOOL WINAPI EnumSystemCodePagesW (CODEPAGE_ENUMPROCW lpCodePageEnumProc, DWORD dwFlags)
 
BOOL WINAPI EnumSystemCodePagesA (CODEPAGE_ENUMPROCA lpCodePageEnumProc, DWORD dwFlags)
 
BOOL WINAPI EnumSystemGeoID (GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc)
 
BOOL WINAPI InvalidateNLSCache (void)
 
GEOID WINAPI GetUserGeoID (GEOCLASS GeoClass)
 
BOOL WINAPI SetUserGeoID (GEOID GeoID)
 
static BOOL CALLBACK enum_uilang_proc_a (HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
 
static BOOL CALLBACK enum_uilang_proc_w (HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
 
BOOL WINAPI EnumUILanguagesA (UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumUILanguagesW (UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
static int NLS_GetGeoFriendlyName (GEOID Location, LPWSTR szFriendlyName, int cchData)
 
static const struct geoinfo_tget_geoinfo_dataptr (GEOID geoid)
 
INT WINAPI GetGeoInfoW (GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang)
 
INT WINAPI GetGeoInfoA (GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, LANGID lang)
 

Variables

HMODULE kernel32_handle
 
static const WCHAR szLocaleKeyName []
 
static const WCHAR szLangGroupsKeyName []
 
static LCID lcid_LC_COLLATE
 
static LCID lcid_LC_CTYPE
 
static LCID lcid_LC_MONETARY
 
static LCID lcid_LC_NUMERIC
 
static LCID lcid_LC_TIME
 
static LCID lcid_LC_PAPER
 
static LCID lcid_LC_MEASUREMENT
 
static LCID lcid_LC_TELEPHONE
 
static const WCHAR iCalendarTypeW [] = {'i','C','a','l','e','n','d','a','r','T','y','p','e',0}
 
static const WCHAR iCountryW [] = {'i','C','o','u','n','t','r','y',0}
 
static const WCHAR iCurrDigitsW [] = {'i','C','u','r','r','D','i','g','i','t','s',0}
 
static const WCHAR iCurrencyW [] = {'i','C','u','r','r','e','n','c','y',0}
 
static const WCHAR iDateW [] = {'i','D','a','t','e',0}
 
static const WCHAR iDigitsW [] = {'i','D','i','g','i','t','s',0}
 
static const WCHAR iFirstDayOfWeekW [] = {'i','F','i','r','s','t','D','a','y','O','f','W','e','e','k',0}
 
static const WCHAR iFirstWeekOfYearW [] = {'i','F','i','r','s','t','W','e','e','k','O','f','Y','e','a','r',0}
 
static const WCHAR iLDateW [] = {'i','L','D','a','t','e',0}
 
static const WCHAR iLZeroW [] = {'i','L','Z','e','r','o',0}
 
static const WCHAR iMeasureW [] = {'i','M','e','a','s','u','r','e',0}
 
static const WCHAR iNegCurrW [] = {'i','N','e','g','C','u','r','r',0}
 
static const WCHAR iNegNumberW [] = {'i','N','e','g','N','u','m','b','e','r',0}
 
static const WCHAR iPaperSizeW [] = {'i','P','a','p','e','r','S','i','z','e',0}
 
static const WCHAR iTLZeroW [] = {'i','T','L','Z','e','r','o',0}
 
static const WCHAR iTimePrefixW [] = {'i','T','i','m','e','P','r','e','f','i','x',0}
 
static const WCHAR iTimeW [] = {'i','T','i','m','e',0}
 
static const WCHAR s1159W [] = {'s','1','1','5','9',0}
 
static const WCHAR s2359W [] = {'s','2','3','5','9',0}
 
static const WCHAR sCountryW [] = {'s','C','o','u','n','t','r','y',0}
 
static const WCHAR sCurrencyW [] = {'s','C','u','r','r','e','n','c','y',0}
 
static const WCHAR sDateW [] = {'s','D','a','t','e',0}
 
static const WCHAR sDecimalW [] = {'s','D','e','c','i','m','a','l',0}
 
static const WCHAR sGroupingW [] = {'s','G','r','o','u','p','i','n','g',0}
 
static const WCHAR sLanguageW [] = {'s','L','a','n','g','u','a','g','e',0}
 
static const WCHAR sListW [] = {'s','L','i','s','t',0}
 
static const WCHAR sLongDateW [] = {'s','L','o','n','g','D','a','t','e',0}
 
static const WCHAR sMonDecimalSepW [] = {'s','M','o','n','D','e','c','i','m','a','l','S','e','p',0}
 
static const WCHAR sMonGroupingW [] = {'s','M','o','n','G','r','o','u','p','i','n','g',0}
 
static const WCHAR sMonThousandSepW [] = {'s','M','o','n','T','h','o','u','s','a','n','d','S','e','p',0}
 
static const WCHAR sNativeDigitsW [] = {'s','N','a','t','i','v','e','D','i','g','i','t','s',0}
 
static const WCHAR sNegativeSignW [] = {'s','N','e','g','a','t','i','v','e','S','i','g','n',0}
 
static const WCHAR sPositiveSignW [] = {'s','P','o','s','i','t','i','v','e','S','i','g','n',0}
 
static const WCHAR sShortDateW [] = {'s','S','h','o','r','t','D','a','t','e',0}
 
static const WCHAR sThousandW [] = {'s','T','h','o','u','s','a','n','d',0}
 
static const WCHAR sTimeFormatW [] = {'s','T','i','m','e','F','o','r','m','a','t',0}
 
static const WCHAR sTimeW [] = {'s','T','i','m','e',0}
 
static const WCHAR sYearMonthW [] = {'s','Y','e','a','r','M','o','n','t','h',0}
 
static const WCHAR NumShapeW [] = {'N','u','m','s','h','a','p','e',0}
 
static struct registry_value registry_values []
 
static RTL_CRITICAL_SECTION cache_section = { NULL, -1, 0, 0, 0, 0 }
 
static const struct geoinfo_t geoinfodata []
 

Macro Definition Documentation

◆ LOCALE_LOCALEINFOFLAGSMASK

#define LOCALE_LOCALEINFOFLAGSMASK
Value:
LOCALE_RETURN_NUMBER|LOCALE_RETURN_GENITIVE_NAMES)
#define LOCALE_RETURN_GENITIVE_NAMES
Definition: winnls.h:24
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20

Definition at line 44 of file lang.c.

◆ NDEBUG

#define NDEBUG

Definition at line 26 of file lang.c.

◆ NLSRC_OFFSET

#define NLSRC_OFFSET   5000 /* FIXME */

Definition at line 40 of file lang.c.

◆ REG_SZ

#define REG_SZ   1

Definition at line 35 of file lang.c.

Enumeration Type Documentation

◆ locationkind

Enumerator
LOCATION_NATION 
LOCATION_REGION 
LOCATION_BOTH 

Definition at line 2783 of file lang.c.

2783  {
2784  LOCATION_NATION = 0,
2787 };

Function Documentation

◆ CompareStringA()

INT WINAPI CompareStringA ( LCID  lcid,
DWORD  flags,
LPCSTR  str1,
INT  len1,
LPCSTR  str2,
INT  len2 
)

Definition at line 2299 of file lang.c.

2301 {
2302  WCHAR *buf1W = NtCurrentTeb()->StaticUnicodeBuffer;
2303  WCHAR *buf2W = buf1W + 130;
2304  LPWSTR str1W, str2W;
2305  INT len1W = 0, len2W = 0, ret;
2306  UINT locale_cp = CP_ACP;
2307 
2308  if (!str1 || !str2)
2309  {
2311  return 0;
2312  }
2313  if (len1 < 0) len1 = strlen(str1);
2314  if (len2 < 0) len2 = strlen(str2);
2315 
2316  if (!(flags & LOCALE_USE_CP_ACP)) locale_cp = get_lcid_codepage( lcid );
2317 
2318  if (len1)
2319  {
2320  if (len1 <= 130) len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, buf1W, 130);
2321  if (len1W)
2322  str1W = buf1W;
2323  else
2324  {
2325  len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, NULL, 0);
2326  str1W = HeapAlloc(GetProcessHeap(), 0, len1W * sizeof(WCHAR));
2327  if (!str1W)
2328  {
2330  return 0;
2331  }
2332  MultiByteToWideChar(locale_cp, 0, str1, len1, str1W, len1W);
2333  }
2334  }
2335  else
2336  {
2337  len1W = 0;
2338  str1W = buf1W;
2339  }
2340 
2341  if (len2)
2342  {
2343  if (len2 <= 130) len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, buf2W, 130);
2344  if (len2W)
2345  str2W = buf2W;
2346  else
2347  {
2348  len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, NULL, 0);
2349  str2W = HeapAlloc(GetProcessHeap(), 0, len2W * sizeof(WCHAR));
2350  if (!str2W)
2351  {
2352  if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W);
2354  return 0;
2355  }
2356  MultiByteToWideChar(locale_cp, 0, str2, len2, str2W, len2W);
2357  }
2358  }
2359  else
2360  {
2361  len2W = 0;
2362  str2W = buf2W;
2363  }
2364 
2365  ret = CompareStringEx(NULL, flags, str1W, len1W, str2W, len2W, NULL, NULL, 0);
2366 
2367  if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W);
2368  if (str2W != buf2W) HeapFree(GetProcessHeap(), 0, str2W);
2369  return ret;
2370 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define CP_ACP
Definition: compat.h:99
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
int32_t INT
Definition: typedefs.h:56
smooth NULL
Definition: ftsmooth.c:416
static UINT get_lcid_codepage(LCID lcid)
Definition: lang.c:260
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
GLbitfield flags
Definition: glext.h:7161
int ret
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam)
Definition: lang.c:2228
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
unsigned int UINT
Definition: ndis.h:50
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by __crtCompareStringA(), _Locale_strcmp_auxA(), check_format(), COMCTL32_ChrCmpHelperA(), compare_line(), compare_string2(), FPropContainsProp(), get_env(), IntlStrEqWorkerA(), lstrcmpA(), lstrcmpiA(), SHLWAPI_ChrCmpHelperA(), StrCmpNA(), StrCmpNIA(), StrIsIntlEqualA(), test_CompareStringA(), test_encoders(), test_sh_new_link_info(), and UrlIsA().

◆ CompareStringEx()

INT WINAPI CompareStringEx ( LPCWSTR  locale,
DWORD  flags,
LPCWSTR  str1,
INT  len1,
LPCWSTR  str2,
INT  len2,
LPNLSVERSIONINFO  version,
LPVOID  reserved,
LPARAM  lParam 
)

Definition at line 2228 of file lang.c.

2230 {
2233  DWORD semistub_flags = NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000;
2234  /* 0x10000000 is related to diacritics in Arabic, Japanese, and Hebrew */
2235  INT ret;
2236  static int once;
2237 
2238  if (version) FIXME("unexpected version parameter\n");
2239  if (reserved) FIXME("unexpected reserved value\n");
2240  if (lParam) FIXME("unexpected lParam\n");
2241 
2242  if (!str1 || !str2)
2243  {
2245  return 0;
2246  }
2247 
2248  if (flags & ~(supported_flags|semistub_flags))
2249  {
2251  return 0;
2252  }
2253 
2254  if (flags & semistub_flags)
2255  {
2256  if (!once++)
2257  FIXME("semi-stub behavior for flag(s) 0x%x\n", flags & semistub_flags);
2258  }
2259 
2260  if (len1 < 0) len1 = strlenW(str1);
2261  if (len2 < 0) len2 = strlenW(str2);
2262 
2263  ret = wine_compare_string(flags, str1, len1, str2, len2);
2264 
2265  if (ret) /* need to translate result */
2266  return (ret < 0) ? CSTR_LESS_THAN : CSTR_GREATER_THAN;
2267  return CSTR_EQUAL;
2268 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define LINGUISTIC_IGNORECASE
Definition: winnls.h:178
#define CSTR_GREATER_THAN
Definition: winnls.h:454
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define SORT_STRINGSORT
Definition: winnls.h:180
#define NORM_IGNORESYMBOLS
Definition: winnls.h:176
#define NORM_IGNORECASE
Definition: winnls.h:173
#define NORM_IGNOREKANATYPE
Definition: winnls.h:174
int32_t INT
Definition: typedefs.h:56
#define NORM_LINGUISTIC_CASING
Definition: winnls.h:179
#define FIXME(fmt,...)
Definition: debug.h:110
r reserved
Definition: btrfs.c:2893
static const WCHAR version[]
Definition: asmname.c:64
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:409
GLbitfield flags
Definition: glext.h:7161
int ret
#define CSTR_EQUAL
Definition: winnls.h:453
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
int wine_compare_string(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
Definition: sortkey.c:358
#define CSTR_LESS_THAN
Definition: winnls.h:452
#define NORM_IGNORENONSPACE
Definition: winnls.h:175
#define NORM_IGNOREWIDTH
Definition: winnls.h:177
LPARAM lParam
Definition: combotst.c:139
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583

Referenced by CompareStringA(), CompareStringW(), and InitFunctionPointers().

◆ CompareStringW()

◆ convert_default_lcid()

static LCID convert_default_lcid ( LCID  lcid,
LCTYPE  lctype 
)
static

Definition at line 515 of file lang.c.

516 {
517  if (lcid == LOCALE_SYSTEM_DEFAULT ||
518  lcid == LOCALE_USER_DEFAULT ||
519  lcid == LOCALE_NEUTRAL)
520  {
521  LCID default_id = 0;
522 
523  switch(lctype & 0xffff)
524  {
525  case LOCALE_SSORTNAME:
526  default_id = lcid_LC_COLLATE;
527  break;
528 
532  case LOCALE_IDEFAULTEBCDICCODEPAGE:
535  default_id = lcid_LC_CTYPE;
536  break;
537 
538  case LOCALE_ICURRDIGITS:
539  case LOCALE_ICURRENCY:
541  case LOCALE_INEGCURR:
543  case LOCALE_INEGSIGNPOSN:
546  case LOCALE_IPOSSIGNPOSN:
548  case LOCALE_SCURRENCY:
549  case LOCALE_SINTLSYMBOL:
551  case LOCALE_SMONGROUPING:
553  case LOCALE_SNATIVECURRNAME:
554  default_id = lcid_LC_MONETARY;
555  break;
556 
557  case LOCALE_IDIGITS:
558  case LOCALE_IDIGITSUBSTITUTION:
559  case LOCALE_ILZERO:
560  case LOCALE_INEGNUMBER:
561  case LOCALE_SDECIMAL:
562  case LOCALE_SGROUPING:
563  //case LOCALE_SNAN:
566  //case LOCALE_SNEGINFINITY:
567  //case LOCALE_SPOSINFINITY:
569  case LOCALE_STHOUSAND:
570  default_id = lcid_LC_NUMERIC;
571  break;
572 
574  case LOCALE_ICENTURY:
575  case LOCALE_IDATE:
576  case LOCALE_IDAYLZERO:
579  case LOCALE_ILDATE:
580  case LOCALE_IMONLZERO:
582  case LOCALE_ITIME:
584  case LOCALE_ITLZERO:
585  case LOCALE_S1159:
586  case LOCALE_S2359:
607  case LOCALE_SDATE:
608  case LOCALE_SDAYNAME1:
609  case LOCALE_SDAYNAME2:
610  case LOCALE_SDAYNAME3:
611  case LOCALE_SDAYNAME4:
612  case LOCALE_SDAYNAME5:
613  case LOCALE_SDAYNAME6:
614  case LOCALE_SDAYNAME7:
615  //case LOCALE_SDURATION:
616  case LOCALE_SLONGDATE:
617  case LOCALE_SMONTHNAME1:
618  case LOCALE_SMONTHNAME2:
619  case LOCALE_SMONTHNAME3:
620  case LOCALE_SMONTHNAME4:
621  case LOCALE_SMONTHNAME5:
622  case LOCALE_SMONTHNAME6:
623  case LOCALE_SMONTHNAME7:
624  case LOCALE_SMONTHNAME8:
625  case LOCALE_SMONTHNAME9:
626  case LOCALE_SMONTHNAME10:
627  case LOCALE_SMONTHNAME11:
628  case LOCALE_SMONTHNAME12:
629  case LOCALE_SMONTHNAME13:
630  case LOCALE_SSHORTDATE:
631  //case LOCALE_SSHORTESTDAYNAME1:
632  //case LOCALE_SSHORTESTDAYNAME2:
633  //case LOCALE_SSHORTESTDAYNAME3:
634  //case LOCALE_SSHORTESTDAYNAME4:
635  //case LOCALE_SSHORTESTDAYNAME5:
636  //case LOCALE_SSHORTESTDAYNAME6:
637  //case LOCALE_SSHORTESTDAYNAME7:
638  case LOCALE_STIME:
639  case LOCALE_STIMEFORMAT:
640  case LOCALE_SYEARMONTH:
641  default_id = lcid_LC_TIME;
642  break;
643 
644  case LOCALE_IPAPERSIZE:
645  default_id = lcid_LC_PAPER;
646  break;
647 
648  case LOCALE_IMEASURE:
649  default_id = lcid_LC_MEASUREMENT;
650  break;
651 
652  case LOCALE_ICOUNTRY:
653  default_id = lcid_LC_TELEPHONE;
654  break;
655  }
656  if (default_id) lcid = default_id;
657  }
658  return ConvertDefaultLocale( lcid );
659 }
#define LOCALE_SGROUPING
Definition: winnls.h:44
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:38
#define LOCALE_SABBREVMONTHNAME12
Definition: winnls.h:115
#define LOCALE_SMONGROUPING
Definition: winnls.h:53
static LCID lcid_LC_TELEPHONE
Definition: lang.c:146
static LCID lcid_LC_NUMERIC
Definition: lang.c:142
#define LOCALE_SABBREVDAYNAME2
Definition: winnls.h:85
#define LOCALE_SABBREVMONTHNAME1
Definition: winnls.h:104
#define LOCALE_SMONTHNAME5
Definition: winnls.h:95
#define LOCALE_IPOSSYMPRECEDES
Definition: winnls.h:122
#define LOCALE_SABBREVMONTHNAME6
Definition: winnls.h:109
#define LOCALE_SMONTHNAME2
Definition: winnls.h:92
static LCID lcid_LC_MEASUREMENT
Definition: lang.c:145
#define LOCALE_SABBREVDAYNAME4
Definition: winnls.h:87
#define LOCALE_SABBREVDAYNAME7
Definition: winnls.h:90
#define LOCALE_SABBREVDAYNAME1
Definition: winnls.h:84
#define LOCALE_IDATE
Definition: winnls.h:63
#define LOCALE_USER_DEFAULT
#define LOCALE_INEGSYMPRECEDES
Definition: winnls.h:124
#define LOCALE_SMONTHNAME13
Definition: winnls.h:103
#define LOCALE_SDAYNAME2
Definition: winnls.h:78
#define LOCALE_IDEFAULTMACCODEPAGE
Definition: winnls.h:39
#define LOCALE_SMONTHNAME6
Definition: winnls.h:96
#define LOCALE_ICALENDARTYPE
Definition: winnls.h:73
#define LOCALE_ILZERO
Definition: winnls.h:46
#define LOCALE_SABBREVMONTHNAME7
Definition: winnls.h:110
DWORD LCID
Definition: nls.h:13
#define LOCALE_IMEASURE
Definition: winnls.h:41
#define LOCALE_SABBREVMONTHNAME3
Definition: winnls.h:106
#define LOCALE_SMONTHNAME8
Definition: winnls.h:98
#define LOCALE_IPOSSEPBYSPACE
Definition: winnls.h:123
#define LOCALE_SABBREVMONTHNAME8
Definition: winnls.h:111
#define LOCALE_SCURRENCY
Definition: winnls.h:49
static LCID lcid_LC_CTYPE
Definition: lang.c:140
#define LOCALE_INEGNUMBER
Definition: winnls.h:47
#define LOCALE_SDAYNAME5
Definition: winnls.h:81
#define LOCALE_SDAYNAME1
Definition: winnls.h:77
#define LOCALE_SABBREVDAYNAME3
Definition: winnls.h:86
#define LOCALE_SABBREVMONTHNAME5
Definition: winnls.h:108
#define LOCALE_SMONTHNAME1
Definition: winnls.h:91
#define LOCALE_STHOUSAND
Definition: winnls.h:43
LCID WINAPI ConvertDefaultLocale(LCID lcid)
Definition: lang.c:1502
#define LOCALE_SABBREVMONTHNAME10
Definition: winnls.h:113
#define LOCALE_SINTLSYMBOL
Definition: winnls.h:50
#define LOCALE_SABBREVDAYNAME6
Definition: winnls.h:89
#define LOCALE_SLONGDATE
Definition: winnls.h:61
#define LOCALE_ITIMEMARKPOSN
Definition: winnls.h:66
#define LOCALE_IMONLZERO
Definition: winnls.h:70
#define LOCALE_INEGCURR
Definition: winnls.h:57
#define LOCALE_SABBREVMONTHNAME4
Definition: winnls.h:107
#define LOCALE_SMONTHNAME4
Definition: winnls.h:94
#define LOCALE_SABBREVMONTHNAME13
Definition: winnls.h:116
#define LOCALE_SDECIMAL
Definition: winnls.h:42
#define LOCALE_STIME
Definition: winnls.h:59
static LCID lcid_LC_COLLATE
Definition: lang.c:139
static LCID lcid_LC_TIME
Definition: lang.c:143
#define LOCALE_SDAYNAME4
Definition: winnls.h:80
#define LOCALE_ICURRENCY
Definition: winnls.h:56
#define LOCALE_SMONDECIMALSEP
Definition: winnls.h:51
#define LOCALE_SMONTHNAME11
Definition: winnls.h:101
#define LOCALE_SDAYNAME3
Definition: winnls.h:79
#define LOCALE_SMONTHOUSANDSEP
Definition: winnls.h:52
#define LOCALE_SMONTHNAME10
Definition: winnls.h:100
#define LOCALE_SDATE
Definition: winnls.h:58
#define LOCALE_SPOSITIVESIGN
Definition: winnls.h:117
#define LOCALE_SABBREVMONTHNAME2
Definition: winnls.h:105
#define LOCALE_IDAYLZERO
Definition: winnls.h:69
#define LOCALE_SYSTEM_DEFAULT
static LCID lcid_LC_PAPER
Definition: lang.c:144
#define LOCALE_SDAYNAME7
Definition: winnls.h:83
#define LOCALE_S1159
Definition: winnls.h:71
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:126
#define LOCALE_ITLZERO
Definition: winnls.h:68
#define LOCALE_INEGSIGNPOSN
Definition: winnls.h:121
#define LOCALE_IINTLCURRDIGITS
Definition: winnls.h:55
#define LOCALE_SMONTHNAME3
Definition: winnls.h:93
#define LOCALE_SDAYNAME6
Definition: winnls.h:82
#define LOCALE_SNEGATIVESIGN
Definition: winnls.h:118
#define LOCALE_SSHORTDATE
Definition: winnls.h:60
#define LOCALE_ICOUNTRY
Definition: winnls.h:30
#define LOCALE_IDIGITS
Definition: winnls.h:45
#define LOCALE_ILDATE
Definition: winnls.h:64
#define LOCALE_IFIRSTDAYOFWEEK
Definition: winnls.h:75
#define LOCALE_IDEFAULTCODEPAGE
Definition: winnls.h:37
#define LOCALE_IFIRSTWEEKOFYEAR
Definition: winnls.h:76
static LCID lcid_LC_MONETARY
Definition: lang.c:141
#define LOCALE_SABBREVMONTHNAME9
Definition: winnls.h:112
#define LOCALE_SABBREVMONTHNAME11
Definition: winnls.h:114
#define LOCALE_ICURRDIGITS
Definition: winnls.h:54
#define LOCALE_SABBREVDAYNAME5
Definition: winnls.h:88
#define LOCALE_ITIME
Definition: winnls.h:65
#define LOCALE_SMONTHNAME9
Definition: winnls.h:99
#define LOCALE_SMONTHNAME12
Definition: winnls.h:102
#define LOCALE_IPOSSIGNPOSN
Definition: winnls.h:120
#define LOCALE_INEGSEPBYSPACE
Definition: winnls.h:125
#define LOCALE_SMONTHNAME7
Definition: winnls.h:97
#define LOCALE_NEUTRAL
#define LOCALE_SNATIVEDIGITS
Definition: winnls.h:48
#define LOCALE_ICENTURY
Definition: winnls.h:67
#define LOCALE_IOPTIONALCALENDAR
Definition: winnls.h:74
#define LOCALE_S2359
Definition: winnls.h:72
#define LOCALE_STIMEFORMAT
Definition: winnls.h:62
#define LOCALE_IDEFAULTUNIXCODEPAGE
Definition: winnls.h:171

Referenced by GetLocaleInfoW().

◆ ConvertDefaultLocale()

LCID WINAPI ConvertDefaultLocale ( LCID  lcid)

Definition at line 1502 of file lang.c.

1503 {
1504  LANGID langid;
1505 
1506  switch (lcid)
1507  {
1508  case LOCALE_INVARIANT:
1509  /* keep as-is */
1510  break;
1511  case LOCALE_SYSTEM_DEFAULT:
1512  lcid = GetSystemDefaultLCID();
1513  break;
1514  case LOCALE_USER_DEFAULT:
1515  case LOCALE_NEUTRAL:
1516  lcid = GetUserDefaultLCID();
1517  break;
1518  default:
1519  /* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */
1520  langid = LANGIDFROMLCID(lcid);
1522  {
1524  lcid = MAKELCID(langid, SORTIDFROMLCID(lcid));
1525  }
1526  }
1527  return lcid;
1528 }
#define MAKELCID(lgid, srtid)
#define LOCALE_USER_DEFAULT
#define SUBLANG_DEFAULT
Definition: nls.h:168
WORD LANGID
Definition: typedefs.h:79
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:768
#define SUBLANG_NEUTRAL
Definition: nls.h:167
LANGID langid
Definition: msctf.idl:605
LCID WINAPI GetSystemDefaultLCID(void)
Definition: lang.c:787
#define LOCALE_SYSTEM_DEFAULT
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define LOCALE_INVARIANT
#define SORTIDFROMLCID(lcid)
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LOCALE_NEUTRAL
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define SUBLANGID(l)
Definition: nls.h:17

Referenced by convert_default_lcid(), GetLocalisedText(), LHashValOfNameSysA(), NLS_IsUnicodeOnlyLcid(), ScriptRecordDigitSubstitution(), SetThreadLocale(), test_ConvertDefaultLocale(), VarBoolFromStr(), and VarBstrFromBool().

◆ create_registry_key()

static HANDLE create_registry_key ( void  )
inlinestatic

Definition at line 694 of file lang.c.

695 {
696  static const WCHAR cplW[] = {'C','o','n','t','r','o','l',' ','P','a','n','e','l',0};
697  static const WCHAR intlW[] = {'I','n','t','e','r','n','a','t','i','o','n','a','l',0};
700  HANDLE cpl_key, hkey = 0;
701 
702  if (RtlOpenCurrentUser( KEY_ALL_ACCESS, &hkey ) != STATUS_SUCCESS) return 0;
703 
704  attr.Length = sizeof(attr);
705  attr.RootDirectory = hkey;
706  attr.ObjectName = &nameW;
707  attr.Attributes = 0;
708  attr.SecurityDescriptor = NULL;
709  attr.SecurityQualityOfService = NULL;
710  RtlInitUnicodeString( &nameW, cplW );
711 
712  if (!NtCreateKey( &cpl_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ))
713  {
714  NtClose( attr.RootDirectory );
715  attr.RootDirectory = cpl_key;
716  RtlInitUnicodeString( &nameW, intlW );
717  if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) hkey = 0;
718  }
719  NtClose( attr.RootDirectory );
720  return hkey;
721 }
NTSTATUS NTAPI NtCreateKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
Definition: ntapi.c:240
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR nameW[]
Definition: main.c:46
__wchar_t WCHAR
Definition: xmlstorage.h:180
Definition: cookie.c:170
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
__u8 attr
Definition: mkdosfs.c:359
NTSYSAPI NTSTATUS NTAPI RtlOpenCurrentUser(_In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE KeyHandle)
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
return STATUS_SUCCESS
Definition: btrfs.c:2966

Referenced by get_registry_locale_info(), GetUserGeoID(), SetLocaleInfoW(), and SetUserGeoID().

◆ DEBUG_CHANNEL()

DEBUG_CHANNEL ( nls  )

◆ enum_lang_proc_a()

static BOOL CALLBACK enum_lang_proc_a ( HMODULE  hModule,
LPCSTR  type,
LPCSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 1556 of file lang.c.

1558 {
1559  LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam;
1560  char buf[20];
1561 
1562  sprintf(buf, "%08x", (UINT)LangID);
1563  return lpfnLocaleEnum( buf );
1564 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define sprintf(buf, format,...)
Definition: sprintf.c:55
BOOL(CALLBACK * LOCALE_ENUMPROCA)(LPSTR)
Definition: winnls.h:534
unsigned int UINT
Definition: ndis.h:50
LPARAM lParam
Definition: combotst.c:139

Referenced by EnumSystemLocalesA().

◆ enum_lang_proc_w()

static BOOL CALLBACK enum_lang_proc_w ( HMODULE  hModule,
LPCWSTR  type,
LPCWSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 1566 of file lang.c.

1568 {
1569  static const WCHAR formatW[] = {'%','0','8','x',0};
1570  LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam;
1571  WCHAR buf[20];
1572  sprintfW( buf, formatW, (UINT)LangID );
1573  return lpfnLocaleEnum( buf );
1574 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define sprintfW
Definition: unicode.h:58
unsigned int UINT
Definition: ndis.h:50
BOOL(CALLBACK * LOCALE_ENUMPROCW)(LPWSTR)
Definition: winnls.h:535
LPARAM lParam
Definition: combotst.c:139

Referenced by EnumSystemLocalesW().

◆ enum_locale_ex_proc()

static BOOL CALLBACK enum_locale_ex_proc ( HMODULE  module,
LPCWSTR  type,
LPCWSTR  name,
WORD  lang,
LONG_PTR  lparam 
)
static

Definition at line 1621 of file lang.c.

1623 {
1624  struct enum_locale_ex_data *data = (struct enum_locale_ex_data *)lparam;
1625  WCHAR buffer[256];
1626  DWORD neutral;
1627  unsigned int flags;
1628 
1630  buffer, ARRAY_SIZE( buffer ));
1632  LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER,
1633  (LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) ))
1634  neutral = 0;
1637  if (data->flags && !(data->flags & flags)) return TRUE;
1638  return data->proc( buffer, flags, data->lparam );
1639 }
#define MAKELCID(lgid, srtid)
#define TRUE
Definition: types.h:120
#define LOCALE_INEUTRAL
Definition: winnls.h:154
GLuint buffer
Definition: glext.h:5915
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
#define LOCALE_NEUTRALDATA
Definition: winnls.h:207
static const WCHAR lang[]
Definition: wbemdisp.c:287
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SORT_DEFAULT
#define LOCALE_SNAME
Definition: winnls.h:129
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define LOCALE_SPECIFICDATA
Definition: winnls.h:208
GLbitfield flags
Definition: glext.h:7161
#define LOCALE_WINDOWS
Definition: winnls.h:203
#define ARRAY_SIZE(a)
Definition: main.h:24
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by EnumSystemLocalesEx().

◆ enum_uilang_proc_a()

static BOOL CALLBACK enum_uilang_proc_a ( HMODULE  hModule,
LPCSTR  type,
LPCSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 3427 of file lang.c.

3429 {
3431  char buf[20];
3432 
3433  sprintf(buf, "%08x", (UINT)LangID);
3434  return enum_uilang->u.procA( buf, enum_uilang->param );
3435 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
union ENUM_UILANG_CALLBACK::@444 u
#define sprintf(buf, format,...)
Definition: sprintf.c:55
UILANGUAGE_ENUMPROCA procA
Definition: lang.c:3420
LONG_PTR param
Definition: lang.c:3424
unsigned int UINT
Definition: ndis.h:50
LPARAM lParam
Definition: combotst.c:139

Referenced by EnumUILanguagesA().

◆ enum_uilang_proc_w()

static BOOL CALLBACK enum_uilang_proc_w ( HMODULE  hModule,
LPCWSTR  type,
LPCWSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 3437 of file lang.c.

3439 {
3440  static const WCHAR formatW[] = {'%','0','8','x',0};
3442  WCHAR buf[20];
3443 
3444  sprintfW( buf, formatW, (UINT)LangID );
3445  return enum_uilang->u.procW( buf, enum_uilang->param );
3446 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
union ENUM_UILANG_CALLBACK::@444 u
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG_PTR param
Definition: lang.c:3424
UILANGUAGE_ENUMPROCW procW
Definition: lang.c:3421
#define sprintfW
Definition: unicode.h:58
unsigned int UINT
Definition: ndis.h:50
LPARAM lParam
Definition: combotst.c:139

Referenced by EnumUILanguagesW().

◆ EnumLanguageGroupLocalesA()

BOOL WINAPI EnumLanguageGroupLocalesA ( LANGGROUPLOCALE_ENUMPROCA  pLangGrpLcEnumProc,
LGRPID  lgrpid,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 3115 of file lang.c.

3117 {
3119 
3120  TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
3121 
3122  callbacks.procA = pLangGrpLcEnumProc;
3123  callbacks.procW = NULL;
3124  callbacks.dwFlags = dwFlags;
3125  callbacks.lgrpid = lgrpid;
3126  callbacks.lParam = lParam;
3127 
3128  return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
3129 }
static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
Definition: lang.c:2696
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static int callbacks
Definition: xmllint.c:873
LPARAM lParam
Definition: combotst.c:139

Referenced by InitFunctionPointers(), and test_digit_substitution().

◆ EnumLanguageGroupLocalesW()

BOOL WINAPI EnumLanguageGroupLocalesW ( LANGGROUPLOCALE_ENUMPROCW  pLangGrpLcEnumProc,
LGRPID  lgrpid,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 3136 of file lang.c.

3138 {
3140 
3141  TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
3142 
3143  callbacks.procA = NULL;
3144  callbacks.procW = pLangGrpLcEnumProc;
3145  callbacks.dwFlags = dwFlags;
3146  callbacks.lgrpid = lgrpid;
3147  callbacks.lParam = lParam;
3148 
3149  return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
3150 }
static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
Definition: lang.c:2696
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static int callbacks
Definition: xmllint.c:873
LPARAM lParam
Definition: combotst.c:139

◆ EnumSystemCodePagesA()

BOOL WINAPI EnumSystemCodePagesA ( CODEPAGE_ENUMPROCA  lpCodePageEnumProc,
DWORD  dwFlags 
)

Definition at line 3253 of file lang.c.

3257 {
3259 
3260  TRACE("(%p,0x%08X,0x%08lX)\n", lpCodePageEnumProc, dwFlags);
3261 
3262  procs.procA = lpCodePageEnumProc;
3263  procs.procW = NULL;
3264  procs.dwFlags = dwFlags;
3265 
3266  return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL);
3267 }
static BOOL NLS_EnumSystemCodePages(ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs)
Definition: lang.c:3161
smooth NULL
Definition: ftsmooth.c:416
CODEPAGE_ENUMPROCW procW
Definition: lang.c:3156
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
CODEPAGE_ENUMPROCA procA
Definition: lang.c:3155

◆ EnumSystemCodePagesW()

BOOL WINAPI EnumSystemCodePagesW ( CODEPAGE_ENUMPROCW  lpCodePageEnumProc,
DWORD  dwFlags 
)

Definition at line 3231 of file lang.c.

3235 {
3237 
3238  TRACE("(%p,0x%08X,0x%08lX)\n", lpCodePageEnumProc, dwFlags);
3239 
3240  procs.procA = NULL;
3241  procs.procW = lpCodePageEnumProc;
3242  procs.dwFlags = dwFlags;
3243 
3244  return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL);
3245 }
static BOOL NLS_EnumSystemCodePages(ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs)
Definition: lang.c:3161
smooth NULL
Definition: ftsmooth.c:416
CODEPAGE_ENUMPROCW procW
Definition: lang.c:3156
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
CODEPAGE_ENUMPROCA procA
Definition: lang.c:3155

Referenced by InitCodePagesList().

◆ EnumSystemGeoID()

BOOL WINAPI EnumSystemGeoID ( GEOCLASS  geoclass,
GEOID  parent,
GEO_ENUMPROC  enumproc 
)

Definition at line 3283 of file lang.c.

3284 {
3285  INT i;
3286 
3287  TRACE("(%d, %d, %p)\n", geoclass, parent, enumproc);
3288 
3289  if (!enumproc) {
3291  return FALSE;
3292  }
3293 
3294  if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION) {
3296  return FALSE;
3297  }
3298 
3299  for (i = 0; i < sizeof(geoinfodata)/sizeof(struct geoinfo_t); i++) {
3300  const struct geoinfo_t *ptr = &geoinfodata[i];
3301 
3302  if (geoclass == GEOCLASS_NATION && (ptr->kind == LOCATION_REGION))
3303  continue;
3304 
3305  if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION))
3306  continue;
3307 
3308  if (parent && ptr->parent != parent)
3309  continue;
3310 
3311  if (!enumproc(ptr->id))
3312  return TRUE;
3313  }
3314 
3315  return TRUE;
3316 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const struct geoinfo_t geoinfodata[]
Definition: lang.c:2798
static PVOID ptr
Definition: dispmode.c:27
#define TRACE(s)
Definition: solgame.cpp:4
r parent
Definition: btrfs.c:2897
#define SetLastError(x)
Definition: compat.h:409
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583

Referenced by CreateLocationsList(), and InitFunctionPointers().

◆ EnumSystemLanguageGroupsA()

BOOL WINAPI EnumSystemLanguageGroupsA ( LANGUAGEGROUP_ENUMPROCA  pLangGrpEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 2599 of file lang.c.

2601 {
2603 
2604  TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
2605 
2606  procs.procA = pLangGrpEnumProc;
2607  procs.procW = NULL;
2608  procs.dwFlags = dwFlags;
2609  procs.lParam = lParam;
2610 
2611  return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
2612 }
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LANGUAGEGROUP_ENUMPROCA procA
Definition: lang.c:2493
static BOOL NLS_EnumSystemLanguageGroups(ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
Definition: lang.c:2500
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LANGUAGEGROUP_ENUMPROCW procW
Definition: lang.c:2494
LPARAM lParam
Definition: combotst.c:139

Referenced by InitFunctionPointers().

◆ EnumSystemLanguageGroupsW()

BOOL WINAPI EnumSystemLanguageGroupsW ( LANGUAGEGROUP_ENUMPROCW  pLangGrpEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 2619 of file lang.c.

2621 {
2623 
2624  TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
2625 
2626  procs.procA = NULL;
2627  procs.procW = pLangGrpEnumProc;
2628  procs.dwFlags = dwFlags;
2629  procs.lParam = lParam;
2630 
2631  return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
2632 }
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LANGUAGEGROUP_ENUMPROCA procA
Definition: lang.c:2493
static BOOL NLS_EnumSystemLanguageGroups(ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
Definition: lang.c:2500
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LANGUAGEGROUP_ENUMPROCW procW
Definition: lang.c:2494
LPARAM lParam
Definition: combotst.c:139

◆ EnumSystemLocalesA()

BOOL WINAPI EnumSystemLocalesA ( LOCALE_ENUMPROCA  lpfnLocaleEnum,
DWORD  dwFlags 
)

Definition at line 1589 of file lang.c.

1590 {
1591  TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
1594  (LONG_PTR)lpfnLocaleEnum);
1595  return TRUE;
1596 }
#define TRUE
Definition: types.h:120
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
char * LPSTR
Definition: xmlstorage.h:182
HMODULE kernel32_handle
Definition: dllmain.c:26
const char * LPCSTR
Definition: xmlstorage.h:183
#define TRACE(s)
Definition: solgame.cpp:4
BOOL WINAPI EnumResourceLanguagesA(HMODULE hmod, LPCSTR type, LPCSTR name, ENUMRESLANGPROCA lpfun, LONG_PTR lparam)
Definition: res.c:428
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define RT_STRING
Definition: pedump.c:368
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
static BOOL CALLBACK enum_lang_proc_a(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
Definition: lang.c:1556

Referenced by __GetLCID().

◆ EnumSystemLocalesEx()

BOOL WINAPI EnumSystemLocalesEx ( LOCALE_ENUMPROCEX  proc,
DWORD  flags,
LPARAM  lparam,
LPVOID  reserved 
)

Definition at line 1644 of file lang.c.

1645 {
1646  struct enum_locale_ex_data data;
1647 
1648  if (reserved)
1649  {
1651  return FALSE;
1652  }
1653  data.proc = proc;
1654  data.flags = flags;
1655  data.lparam = lparam;
1657  (LPCWSTR)MAKEINTRESOURCE((LOCALE_SNAME >> 4) + 1),
1659  return TRUE;
1660 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define TRUE
Definition: types.h:120
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static HANDLE proc()
Definition: pdb.c:32
static BOOL CALLBACK enum_locale_ex_proc(HMODULE module, LPCWSTR type, LPCWSTR name, WORD lang, LONG_PTR lparam)
Definition: lang.c:1621
HMODULE kernel32_handle
Definition: dllmain.c:26
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
r reserved
Definition: btrfs.c:2893
BOOL WINAPI EnumResourceLanguagesW(HMODULE hmod, LPCWSTR type, LPCWSTR name, ENUMRESLANGPROCW lpfun, LONG_PTR lparam)
Definition: res.c:480
#define LOCALE_SNAME
Definition: winnls.h:129
#define SetLastError(x)
Definition: compat.h:409
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
#define RT_STRING
Definition: pedump.c:368
__int3264 LONG_PTR
Definition: mstsclib_h.h:276

Referenced by InitFunctionPointers().

◆ EnumSystemLocalesW()

BOOL WINAPI EnumSystemLocalesW ( LOCALE_ENUMPROCW  lpfnLocaleEnum,
DWORD  dwFlags 
)

Definition at line 1604 of file lang.c.

1605 {
1606  TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
1609  (LONG_PTR)lpfnLocaleEnum);
1610  return TRUE;
1611 }
#define TRUE
Definition: types.h:120
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
HMODULE kernel32_handle
Definition: dllmain.c:26
BOOL WINAPI EnumResourceLanguagesW(HMODULE hmod, LPCWSTR type, LPCWSTR name, ENUMRESLANGPROCW lpfun, LONG_PTR lparam)
Definition: res.c:480
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define RT_STRING
Definition: pedump.c:368
static BOOL CALLBACK enum_lang_proc_w(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
Definition: lang.c:1566
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CreateLanguagesList(), CreateSortList(), EnumRfc1766_create(), InitLanguagesList(), and IsSortPageNeeded().

◆ EnumUILanguagesA()

BOOL WINAPI EnumUILanguagesA ( UILANGUAGE_ENUMPROCA  pUILangEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 3451 of file lang.c.

3452 {
3453  ENUM_UILANG_CALLBACK enum_uilang;
3454 
3455  TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
3456 
3457  if(!pUILangEnumProc) {
3459  return FALSE;
3460  }
3461  if(dwFlags) {
3463  return FALSE;
3464  }
3465 
3466  enum_uilang.u.procA = pUILangEnumProc;
3467  enum_uilang.flags = dwFlags;
3468  enum_uilang.param = lParam;
3469 
3472  (LONG_PTR)&enum_uilang);
3473  return TRUE;
3474 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
union ENUM_UILANG_CALLBACK::@444 u
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
HMODULE kernel32_handle
Definition: dllmain.c:26
const char * LPCSTR
Definition: xmlstorage.h:183
#define TRACE(s)
Definition: solgame.cpp:4
UILANGUAGE_ENUMPROCA procA
Definition: lang.c:3420
#define SetLastError(x)
Definition: compat.h:409
BOOL WINAPI EnumResourceLanguagesA(HMODULE hmod, LPCSTR type, LPCSTR name, ENUMRESLANGPROCA lpfun, LONG_PTR lparam)
Definition: res.c:428
LONG_PTR param
Definition: lang.c:3424
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define RT_STRING
Definition: pedump.c:368
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
LPARAM lParam
Definition: combotst.c:139
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
static BOOL CALLBACK enum_uilang_proc_a(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
Definition: lang.c:3427

Referenced by InitFunctionPointers().

◆ EnumUILanguagesW()

BOOL WINAPI EnumUILanguagesW ( UILANGUAGE_ENUMPROCW  pUILangEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 3479 of file lang.c.

3480 {
3481  ENUM_UILANG_CALLBACK enum_uilang;
3482 
3483  TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
3484 
3485 
3486  if(!pUILangEnumProc) {
3488  return FALSE;
3489  }
3490  if(dwFlags) {
3492  return FALSE;
3493  }
3494 
3495  enum_uilang.u.procW = pUILangEnumProc;
3496  enum_uilang.flags = dwFlags;
3497  enum_uilang.param = lParam;
3498 
3501  (LONG_PTR)&enum_uilang);
3502  return TRUE;
3503 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
union ENUM_UILANG_CALLBACK::@444 u
static BOOL CALLBACK enum_uilang_proc_w(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
Definition: lang.c:3437
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
HMODULE kernel32_handle
Definition: dllmain.c:26
BOOL WINAPI EnumResourceLanguagesW(HMODULE hmod, LPCWSTR type, LPCWSTR name, ENUMRESLANGPROCW lpfun, LONG_PTR lparam)
Definition: res.c:480
#define TRACE(s)
Definition: solgame.cpp:4
#define SetLastError(x)
Definition: compat.h:409
LONG_PTR param
Definition: lang.c:3424
UILANGUAGE_ENUMPROCW procW
Definition: lang.c:3421
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define RT_STRING
Definition: pedump.c:368
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
LPARAM lParam
Definition: combotst.c:139
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583

◆ FoldStringA()

INT WINAPI FoldStringA ( DWORD  dwFlags,
LPCSTR  src,
INT  srclen,
LPSTR  dst,
INT  dstlen 
)

Definition at line 2137 of file lang.c.

2139 {
2140  INT ret = 0, srclenW = 0;
2141  WCHAR *srcW = NULL, *dstW = NULL;
2142 
2143  if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
2144  {
2146  return 0;
2147  }
2148 
2150  src, srclen, NULL, 0);
2151  srcW = HeapAlloc(GetProcessHeap(), 0, srclenW * sizeof(WCHAR));
2152 
2153  if (!srcW)
2154  {
2156  goto FoldStringA_exit;
2157  }
2158 
2160  src, srclen, srcW, srclenW);
2161 
2163 
2164  ret = FoldStringW(dwFlags, srcW, srclenW, NULL, 0);
2165  if (ret && dstlen)
2166  {
2167  dstW = HeapAlloc(GetProcessHeap(), 0, ret * sizeof(WCHAR));
2168 
2169  if (!dstW)
2170  {
2172  goto FoldStringA_exit;
2173  }
2174 
2175  ret = FoldStringW(dwFlags, srcW, srclenW, dstW, ret);
2176  if (!WideCharToMultiByte(CP_ACP, 0, dstW, ret, dst, dstlen, NULL, NULL))
2177  {
2178  ret = 0;
2180  }
2181  }
2182 
2183  HeapFree(GetProcessHeap(), 0, dstW);
2184 
2185 FoldStringA_exit:
2186  HeapFree(GetProcessHeap(), 0, srcW);
2187  return ret;
2188 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
INT WINAPI FoldStringW(DWORD dwFlags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
Definition: lang.c:2195
#define MB_COMPOSITE
Definition: unicode.h:40
#define MAP_COMPOSITE
Definition: winnls.h:213
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define MAP_FOLDCZONE
Definition: winnls.h:210
int32_t INT
Definition: typedefs.h:56
#define MAP_PRECOMPOSED
Definition: winnls.h:212
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:51
#define SetLastError(x)
Definition: compat.h:409
int ret
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
GLenum src
Definition: glext.h:6340
static DWORD dstlen
Definition: directory.c:51
GLenum GLenum dst
Definition: glext.h:6340
#define MultiByteToWideChar
Definition: compat.h:100
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by InitFunctionPointers().

◆ FoldStringW()

INT WINAPI FoldStringW ( DWORD  dwFlags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen 
)

Definition at line 2195 of file lang.c.

2197 {
2198  int ret;
2199 
2200  switch (dwFlags & (MAP_COMPOSITE|MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES))
2201  {
2202  case 0:
2203  if (dwFlags)
2204  break;
2205  /* Fall through for dwFlags == 0 */
2207  case MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES:
2208  case MAP_COMPOSITE|MAP_EXPAND_LIGATURES:
2210  return 0;
2211  }
2212 
2213  if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
2214  {
2216  return 0;
2217  }
2218 
2220  if (!ret)
2222  return ret;
2223 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define MAP_COMPOSITE
Definition: winnls.h:213
int wine_fold_string(int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen)
Definition: fold.c:118
#define MAP_PRECOMPOSED
Definition: winnls.h:212
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:51
#define SetLastError(x)
Definition: compat.h:409
int ret
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
GLenum src
Definition: glext.h:6340
static DWORD dstlen
Definition: directory.c:51
GLenum GLenum dst
Definition: glext.h:6340
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by FoldStringA(), IdnToNameprepUnicode(), and InitFunctionPointers().

◆ get_geoinfo_dataptr()

static const struct geoinfo_t* get_geoinfo_dataptr ( GEOID  geoid)
static

Definition at line 3521 of file lang.c.

3522 {
3523  int min, max;
3524 
3525  min = 0;
3526  max = sizeof(geoinfodata)/sizeof(struct geoinfo_t)-1;
3527 
3528  while (min <= max) {
3529  const struct geoinfo_t *ptr;
3530  int n = (min+max)/2;
3531 
3532  ptr = &geoinfodata[n];
3533  if (geoid == ptr->id)
3534  /* we don't need empty entry */
3535  return *ptr->iso2W ? ptr : NULL;
3536 
3537  if (ptr->id > geoid)
3538  max = n-1;
3539  else
3540  min = n+1;
3541  }
3542 
3543  return NULL;
3544 }
#define max(a, b)
Definition: svc.c:63
GLdouble n
Definition: glext.h:7729
static const struct geoinfo_t geoinfodata[]
Definition: lang.c:2798
static PVOID ptr
Definition: dispmode.c:27
smooth NULL
Definition: ftsmooth.c:416
#define min(a, b)
Definition: monoChain.cc:55

Referenced by GetGeoInfoW().

◆ get_lcid_codepage()

static UINT get_lcid_codepage ( LCID  lcid)
inlinestatic

Definition at line 260 of file lang.c.

261 {
262  UINT ret;
263  if (!GetLocaleInfoW( lcid, LOCALE_IDEFAULTANSICODEPAGE|LOCALE_RETURN_NUMBER, (WCHAR *)&ret,
264  sizeof(ret)/sizeof(WCHAR) )) ret = 0;
265  return ret;
266 }
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:38
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
__wchar_t WCHAR
Definition: xmlstorage.h:180
int ret
unsigned int UINT
Definition: ndis.h:50

Referenced by CompareStringA(), GetLocaleInfoA(), GetStringTypeA(), LCMapStringA(), and SetLocaleInfoA().

◆ get_locale_registry_value()

static struct registry_value* get_locale_registry_value ( DWORD  lctype)
static

Definition at line 1084 of file lang.c.

1085 {
1086  int i;
1087  for (i=0; i < sizeof(registry_values)/sizeof(registry_values[0]); i++)
1088  if (registry_values[i].lctype == lctype)
1089  return &registry_values[i];
1090  return NULL;
1091 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
static struct registry_value registry_values[]

Referenced by GetLocaleInfoW(), and SetLocaleInfoW().

◆ get_registry_locale_info()

static INT get_registry_locale_info ( struct registry_value registry_value,
LPWSTR  buffer,
INT  len 
)
static

Definition at line 886 of file lang.c.

887 {
888  DWORD size;
889  INT ret;
890  HANDLE hkey;
894  static const int info_size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data);
895 
897 
899  {
900  if (!(hkey = create_registry_key()))
901  {
903  return -1;
904  }
905 
907  size = info_size + len * sizeof(WCHAR);
908 
909  if (!(info = HeapAlloc( GetProcessHeap(), 0, size )))
910  {
911  NtClose( hkey );
914  return 0;
915  }
916 
918 
919  /* try again with a bigger buffer when we have to return the correct size */
920  if (status == STATUS_BUFFER_OVERFLOW && !buffer && size > info_size)
921  {
923  if ((new_info = HeapReAlloc( GetProcessHeap(), 0, info, size )))
924  {
925  info = new_info;
927  }
928  }
929 
930  NtClose( hkey );
931 
932  if (!status)
933  {
934  INT length = (size - info_size) / sizeof(WCHAR);
935  LPWSTR cached_value;
936 
937  if (!length || ((WCHAR *)&info->Data)[length-1])
938  length++;
939 
940  cached_value = HeapAlloc( GetProcessHeap(), 0, length * sizeof(WCHAR) );
941 
942  if (!cached_value)
943  {
944  HeapFree( GetProcessHeap(), 0, info );
947  return 0;
948  }
949 
950  memcpy( cached_value, info->Data, (length-1) * sizeof(WCHAR) );
951  cached_value[length-1] = 0;
952  HeapFree( GetProcessHeap(), 0, info );
953  registry_value->cached_value = cached_value;
954  }
955  else
956  {
958  {
959  ret = (size - info_size) / sizeof(WCHAR);
960  }
962  {
963  ret = -1;
964  }
965  else
966  {
968  ret = 0;
969  }
970  HeapFree( GetProcessHeap(), 0, info );
972  return ret;
973  }
974  }
975 
977 
978  if (buffer)
979  {
980  if (ret > len)
981  {
983  ret = 0;
984  }
985  else
986  {
988  }
989  }
990 
992 
993  return ret;
994 }
WCHAR * cached_value
Definition: lang.c:192
LONG NTSTATUS
Definition: precomp.h:26
static HANDLE create_registry_key(void)
Definition: lang.c:694
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
GLuint buffer
Definition: glext.h:5915
static RTL_CRITICAL_SECTION cache_section
Definition: lang.c:240
#define lstrlenW
Definition: compat.h:407
int32_t INT
Definition: typedefs.h:56
struct _test_info info[]
Definition: SetCursorPos.c:19
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
static const WCHAR nameW[]
Definition: main.c:46
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
unsigned long DWORD
Definition: ntddk_ex.h:95
const WCHAR * name
Definition: lang.c:191
#define SetLastError(x)
Definition: compat.h:409
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
int ret
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define STATUS_OBJECT_NAME_NOT_FOUND
Definition: udferr_usr.h:149
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:61
#define lstrcpyW
Definition: compat.h:406
#define HeapReAlloc
Definition: compat.h:393
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static SERVICE_STATUS status
Definition: service.c:31
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
Definition: ps.c:97

Referenced by GetLocaleInfoW().

◆ get_value_base_by_lctype()

static int get_value_base_by_lctype ( LCTYPE  lctype)
static

Definition at line 1074 of file lang.c.

1075 {
1076  return lctype == LOCALE_ILANGUAGE || lctype == LOCALE_IDEFAULTLANGUAGE ? 16 : 10;
1077 }
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
#define LOCALE_IDEFAULTLANGUAGE
Definition: winnls.h:35

Referenced by GetLocaleInfoW().

◆ GetGeoInfoA()

INT WINAPI GetGeoInfoA ( GEOID  geoid,
GEOTYPE  geotype,
LPSTR  data,
int  data_len,
LANGID  lang 
)

Definition at line 3619 of file lang.c.

3620 {
3621  WCHAR *buffW;
3622  INT len;
3623 
3624  TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang);
3625 
3626  len = GetGeoInfoW(geoid, geotype, NULL, 0, lang);
3627  if (!len)
3628  return 0;
3629 
3630  buffW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
3631  if (!buffW)
3632  return 0;
3633 
3634  GetGeoInfoW(geoid, geotype, buffW, len, lang);
3635  len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, NULL, 0, NULL, NULL);
3636  if (!data || !data_len) {
3637  HeapFree(GetProcessHeap(), 0, buffW);
3638  return len;
3639  }
3640 
3641  len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, data, data_len, NULL, NULL);
3642  HeapFree(GetProcessHeap(), 0, buffW);
3643 
3644  if (data_len < len)
3646  return data_len < len ? 0 : len;
3647 }
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
int32_t INT
Definition: typedefs.h:56
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
INT WINAPI GetGeoInfoW(GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang)
Definition: lang.c:3549
#define SetLastError(x)
Definition: compat.h:409
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum GLsizei len
Definition: glext.h:6722
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by InitFunctionPointers().

◆ GetGeoInfoW()

INT WINAPI GetGeoInfoW ( GEOID  geoid,
GEOTYPE  geotype,
LPWSTR  data,
int  data_len,
LANGID  lang 
)

Definition at line 3549 of file lang.c.

3550 {
3551  const struct geoinfo_t *ptr;
3552  const WCHAR *str = NULL;
3553  WCHAR buffW[12];
3554  LONG val = 0;
3555  INT len;
3556 
3557  TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang);
3558 
3559  if (!(ptr = get_geoinfo_dataptr(geoid))) {
3561  return 0;
3562  }
3563 
3564  switch (geotype) {
3565  case GEO_FRIENDLYNAME:
3566  {
3567  return NLS_GetGeoFriendlyName(geoid, data, data_len);
3568  }
3569  case GEO_NATION:
3570  val = geoid;
3571  break;
3572  case GEO_ISO_UN_NUMBER:
3573  val = ptr->uncode;
3574  break;
3575  case GEO_PARENT:
3576  val = ptr->parent;
3577  break;
3578  case GEO_ISO2:
3579  case GEO_ISO3:
3580  {
3581  str = geotype == GEO_ISO2 ? ptr->iso2W : ptr->iso3W;
3582  break;
3583  }
3584  case GEO_RFC1766:
3585  case GEO_LCID:
3586  case GEO_OFFICIALNAME:
3587  case GEO_TIMEZONES:
3588  case GEO_OFFICIALLANGUAGES:
3589  case GEO_LATITUDE:
3590  case GEO_LONGITUDE:
3591  FIXME("type %d is not supported\n", geotype);
3593  return 0;
3594  default:
3595  WARN("unrecognized type %d\n", geotype);
3597  return 0;
3598  }
3599 
3600  if (val) {
3601  static const WCHAR fmtW[] = {'%','d',0};
3602  sprintfW(buffW, fmtW, val);
3603  str = buffW;
3604  }
3605 
3606  len = strlenW(str) + 1;
3607  if (!data || !data_len)
3608  return len;
3609 
3610  memcpy(data, str, min(len, data_len)*sizeof(WCHAR));
3611  if (data_len < len)
3613  return data_len < len ? 0 : len;
3614 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define WARN(fmt,...)
Definition: debug.h:111
int32_t INT
Definition: typedefs.h:56
long LONG
Definition: pedump.c:60
#define FIXME(fmt,...)
Definition: debug.h:110
static PVOID ptr
Definition: dispmode.c:27
const WCHAR * str
static int NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData)
Definition: lang.c:3506
smooth NULL
Definition: ftsmooth.c:416
GLuint GLfloat * val
Definition: glext.h:7180
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
static const struct geoinfo_t * get_geoinfo_dataptr(GEOID geoid)
Definition: lang.c:3521
#define sprintfW
Definition: unicode.h:58
#define min(a, b)
Definition: monoChain.cc:55
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:92
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by CreateLocationsList(), GetGeoInfoA(), InitFunctionPointers(), and LocationsEnumProc().

◆ GetLocaleInfoA()

INT WINAPI GetLocaleInfoA ( LCID  lcid,
LCTYPE  lctype,
LPSTR  buffer,
INT  len 
)

Definition at line 1018 of file lang.c.

1019 {
1020  WCHAR *bufferW;
1021  INT lenW, ret;
1022 
1023  TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d)\n", lcid, lctype, buffer, len );
1024 
1025  if (len < 0 || (len && !buffer))
1026  {
1028  return 0;
1029  }
1030  if (((lctype & ~LOCALE_LOCALEINFOFLAGSMASK) == LOCALE_SSHORTTIME) ||
1031  (lctype & LOCALE_RETURN_GENITIVE_NAMES))
1032  {
1034  return 0;
1035  }
1036 
1037  if (!len) buffer = NULL;
1038 
1039  if (!(lenW = GetLocaleInfoW( lcid, lctype, NULL, 0 ))) return 0;
1040 
1041  if (!(bufferW = HeapAlloc( GetProcessHeap(), 0, lenW * sizeof(WCHAR) )))
1042  {
1044  return 0;
1045  }
1046  if ((ret = GetLocaleInfoW( lcid, lctype, bufferW, lenW )))
1047  {
1048  if ((lctype & LOCALE_RETURN_NUMBER) ||
1050  {
1051  /* it's not an ASCII string, just bytes */
1052  ret *= sizeof(WCHAR);
1053  if (buffer)
1054  {
1055  if (ret <= len) memcpy( buffer, bufferW, ret );
1056  else
1057  {
1059  ret = 0;
1060  }
1061  }
1062  }
1063  else
1064  {
1065  UINT codepage = CP_ACP;
1066  if (!(lctype & LOCALE_USE_CP_ACP)) codepage = get_lcid_codepage( lcid );
1067  ret = WideCharToMultiByte( codepage, 0, bufferW, ret, buffer, len, NULL, NULL );
1068  }
1069  }
1070  HeapFree( GetProcessHeap(), 0, bufferW );
1071  return ret;
1072 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define LOCALE_LOCALEINFOFLAGSMASK
Definition: lang.c:44
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
GLuint buffer
Definition: glext.h:5915
int32_t INT
Definition: typedefs.h:56
#define LOCALE_RETURN_GENITIVE_NAMES
Definition: winnls.h:24
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
int codepage
Definition: win_iconv.c:156
smooth NULL
Definition: ftsmooth.c:416
#define LOCALE_SSHORTTIME
Definition: winnls.h:160
static UINT get_lcid_codepage(LCID lcid)
Definition: lang.c:260
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:126
int ret
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
unsigned int UINT
Definition: ndis.h:50
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by __GetLocaleInfoUsingACP(), __GetLocaleName(), __intGetACP(), __intGetOCP(), _Locale_monetary_create(), _Locale_n_cs_precedes(), _Locale_n_sep_by_space(), _Locale_n_sign_posn(), _Locale_numeric_create(), _Locale_p_cs_precedes(), _Locale_p_sep_by_space(), _Locale_p_sign_posn(), _Locale_time_create(), compare_info(), detect_locale(), DosGetCountryInfo(), EnumLocalesProcA(), filetime_to_str(), is_rtl(), lcid_to_rfc1766A(), lineGetTranslateCapsA(), MSVCRT__create_locale(), MSVCRT_locale_to_LCID(), NLS_EnumDateFormats(), NLS_EnumTimeFormats(), START_TEST(), test__Gettnames(), test_EM_POSFROMCHAR(), test_EM_SETCHARFORMAT(), test_EnumDateFormatsA(), test_EnumTimeFormatsA(), test_EnumTimeFormatsW(), test_firstDay(), test_GetAcceptLanguagesA(), test_GetLocaleInfoA(), test_GetLocaleInfoW(), test_hittest(), test_invariant(), test_setlocale(), test_threadcp(), test_VarAbs(), test_VarCat(), test_VarFormat(), test_VarFormatNumber(), test_VarRound(), test_wm_set_get_text(), update_threadlocinfo_category(), and VerLanguageNameA().

◆ GetLocaleInfoW()

INT WINAPI GetLocaleInfoW ( LCID  lcid,
LCTYPE  lctype,
LPWSTR  buffer,
INT  len 
)

Definition at line 1098 of file lang.c.

1099 {
1100  LANGID lang_id;
1101  HRSRC hrsrc;
1102  HGLOBAL hmem;
1103  LPCWSTR lpType, lpName;
1104  INT ret;
1105  UINT lcflags;
1106  const WCHAR *p;
1107  unsigned int i;
1108 
1109  if (len < 0 || (len && !buffer))
1110  {
1112  return 0;
1113  }
1114  if (lctype & LOCALE_RETURN_GENITIVE_NAMES &&
1115  !is_genitive_name_supported( lctype ))
1116  {
1118  return 0;
1119  }
1120 
1121  if (!len) buffer = NULL;
1122 
1123  lcid = convert_default_lcid( lcid, lctype );
1124 
1125  lcflags = lctype & LOCALE_LOCALEINFOFLAGSMASK;
1126  lctype &= 0xffff;
1127 
1128  TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d)\n", lcid, lctype, buffer, len );
1129 
1130  /* first check for overrides in the registry */
1131 
1132  if (!(lcflags & LOCALE_NOUSEROVERRIDE) &&
1133  lcid == convert_default_lcid( LOCALE_USER_DEFAULT, lctype ))
1134  {
1136 
1137  if (value)
1138  {
1139  if (lcflags & LOCALE_RETURN_NUMBER)
1140  {
1141  WCHAR tmp[16];
1142  ret = get_registry_locale_info( value, tmp, sizeof(tmp)/sizeof(WCHAR) );
1143  if (ret > 0)
1144  {
1145  WCHAR *end;
1147  if (*end) /* invalid number */
1148  {
1150  return 0;
1151  }
1152  ret = sizeof(UINT)/sizeof(WCHAR);
1153  if (!buffer) return ret;
1154  if (ret > len)
1155  {
1157  return 0;
1158  }
1159  memcpy( buffer, &number, sizeof(number) );
1160  }
1161  }
1163 
1164  if (ret != -1) return ret;
1165  }
1166  }
1167 
1168  /* now load it from kernel resources */
1169 
1170  lang_id = LANGIDFROMLCID( lcid );
1171 
1172  /* replace SUBLANG_NEUTRAL by SUBLANG_DEFAULT */
1173  if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL)
1174  lang_id = MAKELANGID(PRIMARYLANGID(lang_id), SUBLANG_DEFAULT);
1175 
1177  {
1178  lpType = MAKEINTRESOURCEW(RT_STRING);
1179  lpName = MAKEINTRESOURCEW(ULongToPtr((lctype >> 4) + 1));
1180  }
1181  else
1182  {
1183  lpType = MAKEINTRESOURCEW(RT_RCDATA);
1185  }
1186 
1187  if (!(hrsrc = FindResourceExW( kernel32_handle, lpType, lpName, lang_id )))
1188  {
1189  SetLastError( ERROR_INVALID_FLAGS ); /* no such lctype */
1190  return 0;
1191  }
1192  if (!(hmem = LoadResource( kernel32_handle, hrsrc )))
1193  return 0;
1194 
1195  p = LockResource( hmem );
1197  {
1198  for (i = 0; i < (lctype & 0x0f); i++) p += *p + 1;
1199  }
1200 
1201  if (lcflags & LOCALE_RETURN_NUMBER) ret = sizeof(UINT)/sizeof(WCHAR);
1202  else if (is_genitive_name_supported( lctype ) && *p)
1203  {
1204  /* genitive form's stored after a null separator from a nominative */
1205  for (i = 1; i <= *p; i++) if (!p[i]) break;
1206 
1207  if (i <= *p && (lcflags & LOCALE_RETURN_GENITIVE_NAMES))
1208  {
1209  ret = *p - i + 1;
1210  p += i;
1211  }
1212  else ret = i;
1213  }
1214  else if (lctype != LOCALE_FONTSIGNATURE)
1215  ret = *p + 1;
1216  else
1217  ret = SizeofResource(kernel32_handle, hrsrc) / sizeof(WCHAR);
1218 
1219  if (!buffer) return ret;
1220 
1221  if (ret > len)
1222  {
1224  return 0;
1225  }
1226 
1227  if (lcflags & LOCALE_RETURN_NUMBER)
1228  {
1229  UINT number;
1230  WCHAR *end, *tmp = HeapAlloc( GetProcessHeap(), 0, (*p + 1) * sizeof(WCHAR) );
1231  if (!tmp) return 0;
1232  memcpy( tmp, p + 1, *p * sizeof(WCHAR) );
1233  tmp[*p] = 0;
1235  if (!*end)
1236  memcpy( buffer, &number, sizeof(number) );
1237  else /* invalid number */
1238  {
1240  ret = 0;
1241  }
1242  HeapFree( GetProcessHeap(), 0, tmp );
1243 
1244  TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d) returning number %d\n",
1245  lcid, lctype, buffer, len, number );
1246  }
1247  else
1248  {
1249  if (lctype != LOCALE_FONTSIGNATURE) p++;
1250  memcpy( buffer, p, ret * sizeof(WCHAR) );
1251  if (lctype != LOCALE_FONTSIGNATURE) buffer[ret-1] = 0;
1252 
1253  TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d) returning %d %s\n",
1254  lcid, lctype, buffer, len, ret, debugstr_w(buffer) );
1255  }
1256  return ret;
1257 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
static struct registry_value * get_locale_registry_value(DWORD lctype)
Definition: lang.c:1084
#define LOCALE_LOCALEINFOFLAGSMASK
Definition: lang.c:44
#define ULongToPtr(ul)
Definition: basetsd.h:92
static int get_value_base_by_lctype(LCTYPE lctype)
Definition: lang.c:1074
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define LOCALE_USER_DEFAULT
#define strtolW(s, e, b)
Definition: unicode.h:33
#define SUBLANG_DEFAULT
Definition: nls.h:168
_In_ LPCSTR lpName
Definition: winbase.h:2736
static INT get_registry_locale_info(struct registry_value *registry_value, LPWSTR buffer, INT len)
Definition: lang.c:886
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
GLuint buffer
Definition: glext.h:5915
GLuint GLuint end
Definition: gl.h:1545
WORD LANGID
Definition: typedefs.h:79
#define SUBLANG_NEUTRAL
Definition: nls.h:167
int32_t INT
Definition: typedefs.h:56
#define LOCALE_RETURN_GENITIVE_NAMES
Definition: winnls.h:24
DWORD lctype
Definition: lang.c:190
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HMODULE kernel32_handle
Definition: dllmain.c:26
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19
static size_t double number
Definition: printf.c:64
#define debugstr_w
Definition: kernel32.h:32
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
#define RT_RCDATA
Definition: pedump.c:372
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:126
HRSRC WINAPI FindResourceExW(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD lang)
Definition: res.c:164
int ret
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define RT_STRING
Definition: pedump.c:368
unsigned int UINT
Definition: ndis.h:50
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
static BOOL is_genitive_name_supported(LCTYPE lctype)
Definition: lang.c:666
static LCID convert_default_lcid(LCID lcid, LCTYPE lctype)
Definition: lang.c:515
#define MAKELANGID(p, s)
Definition: nls.h:15
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
GLfloat GLfloat p
Definition: glext.h:8902
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define SUBLANGID(l)
Definition: nls.h:17

Referenced by __crtGetLocaleInfoW(), _WLocale_abbrev_dayofweek(), _WLocale_abbrev_monthname(), _WLocale_am_str(), _WLocale_currency_symbol(), _WLocale_decimal_point(), _WLocale_full_dayofweek(), _WLocale_full_monthname(), _WLocale_int_curr_symbol(), _WLocale_negative_sign(), _WLocale_pm_str(), _WLocale_positive_sign(), _WLocale_thousands_sep(), AboutDlgProc(), add_cert_to_list(), add_cert_to_view(), add_date_string_to_control(), AddCommasW(), AddNewKbLayoutsByLcid(), AddNewLayout(), AllSysInfo(), CConfigParser::CacheINILocale(), create_utc_string(), CreateLanguagesList(), CreateSortList(), date_parse(), date_to_string(), dateobj_to_date_string(), DATETIME_ReturnFieldWidth(), DATETIME_ReturnTxt(), DATETIME_SetFormatW(), detect_locale(), enum_locale_ex_proc(), enum_locales_proc(), fill_language_information(), FillMonthsComboBox(), FillNumberFmt(), fnIMultiLanguage3_GetRfc1766Info(), fnIMultiLanguage_GetRfc1766Info(), format_long_date(), format_size(), FormatInteger(), GeneralPropertyPageLocalesEnumProc(), get_countrycode(), get_date_format(), get_decimal_sep(), get_input_codepage(), get_lcid_codepage(), get_locale(), get_localized_dayname(), GetCalendarInfoW(), GetCurrencyFormatW(), GetFileVersion(), GetLocaleInfoA(), GetNumberFormatW(), InitializeDefaultUserLocale(), InitLanguagesList(), InputList_Add(), InputList_Create(), IntGetCodePageEntry(), is_default_metric(), IsLayoutExists(), lcid_to_rfc1766W(), LocaleList_Create(), LocalesEnumProc(), MONTHCAL_LButtonDown(), MONTHCAL_PaintTitle(), MONTHCAL_PaintWeeknumbers(), MONTHCAL_SetFirstDayOfWeek(), MonthCalFirstDayOfWeek(), MonthCalReload(), MSVCRT__create_locale(), NLS_EnumCalendarInfo(), NLS_EnumDateFormats(), NLS_EnumTimeFormats(), NLS_GetLocaleNumber(), NLS_GetLocaleString(), ParseDate(), ReadChmSystem(), SaveFontSubstitutionSettings(), SaveSystemSettings(), ScriptRecordDigitSubstitution(), SH_FormatInteger(), SortEnumProc(), START_TEST(), test_EnumTimeFormatsW(), test_GetLocaleInfoEx(), test_GetLocaleInfoW(), test_unicode_wm_char(), test_VarWeekdayName(), TranslateCharsetInfo(), UPDOWN_GetThousandSep(), VarBstrFromDate(), VarDateFromStr(), VarFormatCurrency(), VarFormatNumber(), VARIANT_BstrReplaceDecimal(), VARIANT_FormatDate(), VARIANT_FormatNumber(), VARIANT_GetLocalisedNumberChars(), VarMonthName(), VarWeekdayName(), VerLanguageNameW(), and WriteUserLocale().

◆ GetLocalisedText()

UINT GetLocalisedText ( IN UINT  uID,
IN LPWSTR  lpszDest,
IN UINT  cchDest 
)

Definition at line 1817 of file nls.c.

1821 {
1822  HRSRC hrsrc;
1823  HGLOBAL hmem;
1824  LCID lcid;
1825  LANGID langId;
1826  const WCHAR *p;
1827  UINT i;
1828 
1829  /* See HACK in winnls/lang/xx-XX.rc files */
1830  if (uID == 37)
1831  uID = uID * 100;
1832 
1833  lcid = GetUserDefaultLCID();
1834  lcid = ConvertDefaultLocale(lcid);
1835 
1836  langId = LANGIDFROMLCID(lcid);
1837 
1838  if (PRIMARYLANGID(langId) == LANG_NEUTRAL)
1840 
1842  (LPWSTR)RT_STRING,
1843  MAKEINTRESOURCEW((uID >> 4) + 1),
1844  langId);
1845 
1846  /* English fallback */
1847  if (!hrsrc)
1848  {
1850  (LPWSTR)RT_STRING,
1851  MAKEINTRESOURCEW((uID >> 4) + 1),
1853  }
1854 
1855  if (!hrsrc)
1856  goto NotFound;
1857 
1858  hmem = LoadResource(hCurrentModule, hrsrc);
1859  if (!hmem)
1860  goto NotFound;
1861 
1862  p = LockResource(hmem);
1863 
1864  for (i = 0; i < (uID & 0x0F); i++)
1865  p += *p + 1;
1866 
1867  /* Needed for GetGeoInfo(): return the needed string size including the NULL terminator */
1868  if (cchDest == 0)
1869  return *p + 1;
1870  /* Needed for GetGeoInfo(): bail out if the user buffer is not large enough */
1871  if (*p + 1 > cchDest)
1872  {
1874  return 0;
1875  }
1876 
1877  i = *p;
1878  if (i > 0)
1879  {
1880  memcpy(lpszDest, p + 1, i * sizeof(WCHAR));
1881  lpszDest[i] = L'\0';
1882  return i;
1883  }
1884 #if 0
1885  else
1886  {
1887  if (cchDest >= 1)
1888  lpszDest[0] = L'\0';
1889  /* Fall-back */
1890  }
1891 #endif
1892 
1893 NotFound:
1894  DPRINT1("Resource not found: uID = %lu\n", uID);
1896  return 0;
1897 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define LANG_NEUTRAL
Definition: nls.h:22
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
DWORD LCID
Definition: nls.h:13
WORD LANGID
Definition: typedefs.h:79
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:768
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
LCID WINAPI ConvertDefaultLocale(LCID lcid)
Definition: lang.c:1502
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
WCHAR lpszDest[260]
HMODULE hCurrentModule
Definition: dllmain.c:25
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
#define LANG_ENGLISH
Definition: nls.h:52
HRSRC WINAPI FindResourceExW(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD lang)
Definition: res.c:164
static const WCHAR L[]
Definition: oid.c:1250
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define RT_STRING
Definition: pedump.c:368
unsigned int UINT
Definition: ndis.h:50
#define DPRINT1
Definition: precomp.h:8
#define MAKELANGID(p, s)
Definition: nls.h:15
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by GetCPInfoExW(), and NLS_GetGeoFriendlyName().

◆ GetStringTypeA()

BOOL WINAPI GetStringTypeA ( LCID  locale,
DWORD  type,
LPCSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 1813 of file lang.c.

1814 {
1815  UINT cp;
1816  INT countW;
1817  LPWSTR srcW;
1818  BOOL ret = FALSE;
1819 
1820  if(count == -1) count = strlen(src) + 1;
1821 
1822  if (!(cp = get_lcid_codepage( locale )))
1823  {
1824  FIXME("For locale %04x using current ANSI code page\n", locale);
1825  cp = GetACP();
1826  }
1827 
1828  countW = MultiByteToWideChar(cp, 0, src, count, NULL, 0);
1829  if((srcW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
1830  {
1831  MultiByteToWideChar(cp, 0, src, count, srcW, countW);
1832  /*
1833  * NOTE: the target buffer has 1 word for each CHARACTER in the source
1834  * string, with multibyte characters there maybe be more bytes in count
1835  * than character space in the buffer!
1836  */
1837  ret = GetStringTypeW(type, srcW, countW, chartype);
1838  HeapFree(GetProcessHeap(), 0, srcW);
1839  }
1840  return ret;
1841 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
int32_t INT
Definition: typedefs.h:56
Definition: _locale.h:75
unsigned int BOOL
Definition: ntddk_ex.h:94
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
UINT WINAPI GetACP(VOID)
Definition: nls.c:2169
static UINT get_lcid_codepage(LCID lcid)
Definition: lang.c:260
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: lang.c:1699
int ret
GLenum src
Definition: glext.h:6340
unsigned int UINT
Definition: ndis.h:50
#define MultiByteToWideChar
Definition: compat.h:100
POINT cp
Definition: magnifier.c:59
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by _Locale_ctype_create(), GetStringTypeExA(), IsCharSpaceA(), and MSVCRT__create_locale().

◆ GetStringTypeExA()

BOOL WINAPI GetStringTypeExA ( LCID  locale,
DWORD  type,
LPCSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 1860 of file lang.c.

1861 {
1862  return GetStringTypeA(locale, type, src, count, chartype);
1863 }
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: _locale.h:75
BOOL WINAPI GetStringTypeA(LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
Definition: lang.c:1813
GLenum src
Definition: glext.h:6340

Referenced by _isctype_l().

◆ GetStringTypeExW()

BOOL WINAPI GetStringTypeExW ( LCID  locale,
DWORD  type,
LPCWSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 1789 of file lang.c.

1790 {
1791  /* locale is ignored for Unicode */
1792  return GetStringTypeW( type, src, count, chartype );
1793 }
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: lang.c:1699
GLenum src
Definition: glext.h:6340

◆ GetStringTypeW()

BOOL WINAPI GetStringTypeW ( DWORD  type,
LPCWSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 1699 of file lang.c.

1700 {
1701  static const unsigned char type2_map[16] =
1702  {
1703  C2_NOTAPPLICABLE, /* unassigned */
1704  C2_LEFTTORIGHT, /* L */
1705  C2_RIGHTTOLEFT, /* R */
1706  C2_EUROPENUMBER, /* EN */
1707  C2_EUROPESEPARATOR, /* ES */
1708  C2_EUROPETERMINATOR, /* ET */
1709  C2_ARABICNUMBER, /* AN */
1710  C2_COMMONSEPARATOR, /* CS */
1711  C2_BLOCKSEPARATOR, /* B */
1712  C2_SEGMENTSEPARATOR, /* S */
1713  C2_WHITESPACE, /* WS */
1714  C2_OTHERNEUTRAL, /* ON */
1715  C2_RIGHTTOLEFT, /* AL */
1716  C2_NOTAPPLICABLE, /* NSM */
1717  C2_NOTAPPLICABLE, /* BN */
1718  C2_OTHERNEUTRAL /* LRE, LRO, RLE, RLO, PDF */
1719  };
1720 
1721  if (!src)
1722  {
1724  return FALSE;
1725  }
1726 
1727  if (count == -1) count = strlenW(src) + 1;
1728  switch(type)
1729  {
1730  case CT_CTYPE1:
1731  while (count--) *chartype++ = get_char_typeW( *src++ ) & 0xfff;
1732  break;
1733  case CT_CTYPE2:
1734  while (count--) *chartype++ = type2_map[get_char_typeW( *src++ ) >> 12];
1735  break;
1736  case CT_CTYPE3:
1737  {
1738  WARN("CT_CTYPE3: semi-stub.\n");
1739  while (count--)
1740  {
1741  int c = *src;
1742  WORD type1, type3 = 0; /* C3_NOTAPPLICABLE */
1743 
1744  type1 = get_char_typeW( *src++ ) & 0xfff;
1745  /* try to construct type3 from type1 */
1746  if(type1 & C1_SPACE) type3 |= C3_SYMBOL;
1747  if(type1 & C1_ALPHA) type3 |= C3_ALPHA;
1748  if ((c>=0x30A0)&&(c<=0x30FF)) type3 |= C3_KATAKANA;
1749  if ((c>=0x3040)&&(c<=0x309F)) type3 |= C3_HIRAGANA;
1750  if ((c>=0x4E00)&&(c<=0x9FAF)) type3 |= C3_IDEOGRAPH;
1751  if (c == 0x0640) type3 |= C3_KASHIDA;
1752  if ((c>=0x3000)&&(c<=0x303F)) type3 |= C3_SYMBOL;
1753 
1754  if ((c>=0xD800)&&(c<=0xDBFF)) type3 |= C3_HIGHSURROGATE;
1755  if ((c>=0xDC00)&&(c<=0xDFFF)) type3 |= C3_LOWSURROGATE;
1756 
1757  if ((c>=0xFF00)&&(c<=0xFF60)) type3 |= C3_FULLWIDTH;
1758  if ((c>=0xFF00)&&(c<=0xFF20)) type3 |= C3_SYMBOL;
1759  if ((c>=0xFF3B)&&(c<=0xFF40)) type3 |= C3_SYMBOL;
1760  if ((c>=0xFF5B)&&(c<=0xFF60)) type3 |= C3_SYMBOL;
1761  if ((c>=0xFF21)&&(c<=0xFF3A)) type3 |= C3_ALPHA;
1762  if ((c>=0xFF41)&&(c<=0xFF5A)) type3 |= C3_ALPHA;
1763  if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH;
1764  if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_SYMBOL;
1765 
1766  if ((c>=0xFF61)&&(c<=0xFFDC)) type3 |= C3_HALFWIDTH;
1767  if ((c>=0xFF61)&&(c<=0xFF64)) type3 |= C3_SYMBOL;
1768  if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_KATAKANA;
1769  if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_ALPHA;
1770  if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_HALFWIDTH;
1771  if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_SYMBOL;
1772  *chartype++ = type3;
1773  }
1774  break;
1775  }
1776  default:
1778  return FALSE;
1779  }
1780  return TRUE;
1781 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define C2_LEFTTORIGHT
Definition: winnls.h:247
#define C3_FULLWIDTH
Definition: winnls.h:266
#define CT_CTYPE2
Definition: winnls.h:235
#define TRUE
Definition: types.h:120
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define C2_RIGHTTOLEFT
Definition: winnls.h:248
#define C2_BLOCKSEPARATOR
Definition: winnls.h:254
#define C2_EUROPENUMBER
Definition: winnls.h:249
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define WARN(fmt,...)
Definition: debug.h:111
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define C3_IDEOGRAPH
Definition: winnls.h:267
#define C3_HALFWIDTH
Definition: winnls.h:265
#define C2_EUROPESEPARATOR
Definition: winnls.h:250
#define C2_NOTAPPLICABLE
Definition: winnls.h:258
#define CT_CTYPE3
Definition: winnls.h:236
#define C3_KASHIDA
Definition: winnls.h:268
#define C3_KATAKANA
Definition: winnls.h:263
#define C1_ALPHA
Definition: unicode.h:39
#define C2_COMMONSEPARATOR
Definition: winnls.h:253
const GLubyte * c
Definition: glext.h:8905
unsigned short WORD
Definition: ntddk_ex.h:93
#define SetLastError(x)
Definition: compat.h:409
WINE_UNICODE_INLINE unsigned short get_char_typeW(WCHAR ch)
Definition: unicode.h:149
#define C3_HIRAGANA
Definition: winnls.h:264
#define CT_CTYPE1
Definition: winnls.h:234
#define C2_EUROPETERMINATOR
Definition: winnls.h:251
#define C3_SYMBOL
Definition: winnls.h:262
GLenum src
Definition: glext.h:6340
#define C3_ALPHA
Definition: winnls.h:270
#define C3_LOWSURROGATE
Definition: winnls.h:273
#define C2_ARABICNUMBER
Definition: winnls.h:252
#define C3_HIGHSURROGATE
Definition: winnls.h:272
#define C2_WHITESPACE
Definition: winnls.h:256
#define C1_SPACE
Definition: unicode.h:34
#define C2_SEGMENTSEPARATOR
Definition: winnls.h:255
#define C2_OTHERNEUTRAL
Definition: winnls.h:257

Referenced by __crtGetStringTypeW(), _Locale_ctype_create(), _setmbcp_l(), _WLocale_ctype(), get_char_script(), GetC1Type(), GetStringType3ExW(), GetStringTypeA(), GetStringTypeExW(), IsCharBlankW(), IsCharCntrlW(), IsCharDigitW(), IsCharPunctW(), IsCharSpaceW(), IsCharXDigitW(), isdigitW(), SampCheckPassword(), test_crtGetStringTypeW(), and test_GetStringTypeW().

◆ GetSystemDefaultLangID()

◆ GetSystemDefaultLCID()

◆ GetSystemDefaultUILanguage()

LANGID WINAPI GetSystemDefaultUILanguage ( void  )

Definition at line 826 of file lang.c.

827 {
828  LANGID lang;
830  return lang;
831 }
WORD LANGID
Definition: typedefs.h:79
static const WCHAR lang[]
Definition: wbemdisp.c:287
NTSTATUS NTAPI NtQueryInstallUILanguage(OUT LANGID *LanguageId)
Definition: locale.c:368

Referenced by LsaLookupPrivilegeDisplayName(), and SHGetWebFolderFilePathW().

◆ GetThreadLocale()

◆ GetUserDefaultLangID()

◆ GetUserDefaultLCID()

◆ GetUserDefaultUILanguage()

LANGID WINAPI GetUserDefaultUILanguage ( void  )

Definition at line 806 of file lang.c.

807 {
808  LANGID lang;
810  return lang;
811 }
WORD LANGID
Definition: typedefs.h:79
static const WCHAR lang[]
Definition: wbemdisp.c:287
NTSTATUS NTAPI NtQueryDefaultUILanguage(OUT LANGID *LanguageId)
Definition: locale.c:402

Referenced by _tWinMain(), detect_locale(), FGetComponentPath(), LsaLookupPrivilegeDisplayName(), OmNavigator_get_browserLanguage(), SHGetWebFolderFilePathW(), test_GetFileVersionInfoEx(), WinMain(), and wWinMain().

◆ GetUserGeoID()

GEOID WINAPI GetUserGeoID ( GEOCLASS  GeoClass)

Definition at line 3344 of file lang.c.

3345 {
3347  static const WCHAR geoW[] = {'G','e','o',0};
3348  static const WCHAR nationW[] = {'N','a','t','i','o','n',0};
3349  WCHAR bufferW[40], *end;
3350  DWORD count;
3351  HANDLE hkey, hSubkey = 0;
3354  RtlInitUnicodeString( &keyW, nationW );
3355  count = sizeof(bufferW);
3356 
3357  if(!(hkey = create_registry_key())) return ret;
3358 
3359  switch( GeoClass ){
3360  case GEOCLASS_NATION:
3361  if ((hSubkey = NLS_RegOpenKey(hkey, geoW)))
3362  {
3364  bufferW, count, &count) == STATUS_SUCCESS ) && info->DataLength)
3365  ret = strtolW((LPCWSTR)info->Data, &end, 10);
3366  }
3367  break;
3368  case GEOCLASS_REGION:
3369  FIXME("GEOCLASS_REGION not handled yet\n");
3370  break;
3371  }
3372 
3373  NtClose(hkey);
3374  if (hSubkey) NtClose(hSubkey);
3375  return ret;
3376 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define strtolW(s, e, b)
Definition: unicode.h:33
static HANDLE create_registry_key(void)
Definition: lang.c:694
GLuint GLuint end
Definition: gl.h:1545
#define FIXME(fmt,...)
Definition: debug.h:110
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static const WCHAR keyW[]
Definition: tokenize.c:60
unsigned long DWORD
Definition: ntddk_ex.h:95
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
int ret
DWORD GEOID
Definition: winnls.h:518
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
static HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName)
Definition: lang.c:2375
#define GEOID_NOT_AVAILABLE
Definition: winnls.h:13
return STATUS_SUCCESS
Definition: btrfs.c:2966

Referenced by CreateLocationsList().

◆ InvalidateNLSCache()

BOOL WINAPI InvalidateNLSCache ( void  )

Definition at line 3330 of file lang.c.

3331 {
3332 #ifdef __REACTOS__
3334  return TRUE;
3335 #else
3336  FIXME("() stub\n");
3337  return FALSE;
3338 #endif
3339 }
#define TRUE
Definition: types.h:120
void JapaneseEra_ClearCache(void)
Definition: japanese.c:38
#define FIXME(fmt,...)
Definition: debug.h:110

◆ is_genitive_name_supported()

static BOOL is_genitive_name_supported ( LCTYPE  lctype)
static

Definition at line 666 of file lang.c.

667 {
668  switch(lctype & 0xffff)
669  {
670  case LOCALE_SMONTHNAME1:
671  case LOCALE_SMONTHNAME2:
672  case LOCALE_SMONTHNAME3:
673  case LOCALE_SMONTHNAME4:
674  case LOCALE_SMONTHNAME5:
675  case LOCALE_SMONTHNAME6:
676  case LOCALE_SMONTHNAME7:
677  case LOCALE_SMONTHNAME8:
678  case LOCALE_SMONTHNAME9:
679  case LOCALE_SMONTHNAME10:
680  case LOCALE_SMONTHNAME11:
681  case LOCALE_SMONTHNAME12:
682  case LOCALE_SMONTHNAME13:
683  return TRUE;
684  default:
685  return FALSE;
686  }
687 }
#define TRUE
Definition: types.h:120
#define LOCALE_SMONTHNAME5
Definition: winnls.h:95
#define LOCALE_SMONTHNAME2
Definition: winnls.h:92
#define LOCALE_SMONTHNAME13
Definition: winnls.h:103
#define LOCALE_SMONTHNAME6
Definition: winnls.h:96
#define LOCALE_SMONTHNAME8
Definition: winnls.h:98
DWORD lctype
Definition: lang.c:190
#define LOCALE_SMONTHNAME1
Definition: winnls.h:91
#define LOCALE_SMONTHNAME4
Definition: winnls.h:94
#define LOCALE_SMONTHNAME11
Definition: winnls.h:101
#define LOCALE_SMONTHNAME10
Definition: winnls.h:100
#define LOCALE_SMONTHNAME3
Definition: winnls.h:93
#define LOCALE_SMONTHNAME9
Definition: winnls.h:99
#define LOCALE_SMONTHNAME12
Definition: winnls.h:102
#define LOCALE_SMONTHNAME7
Definition: winnls.h:97

Referenced by GetLocaleInfoW().

◆ IsValidLanguageGroup()

BOOL WINAPI IsValidLanguageGroup ( LGRPID  lgrpid,
DWORD  dwFlags 
)

Definition at line 2647 of file lang.c.

2648 {
2649  static const WCHAR szFormat[] = { '%','x','\0' };
2650  WCHAR szValueName[16], szValue[2];
2651  BOOL bSupported = FALSE, bInstalled = FALSE;
2652  HANDLE hKey;
2653 
2654 
2655  switch (dwFlags)
2656  {
2657  case LGRPID_INSTALLED:
2658  case LGRPID_SUPPORTED:
2659 
2660  hKey = NLS_RegOpenKey( 0, szLangGroupsKeyName );
2661 
2662  sprintfW( szValueName, szFormat, lgrpid );
2663 
2664  if (NLS_RegGetDword( hKey, szValueName, (LPDWORD)szValue ))
2665  {
2666  bSupported = TRUE;
2667 
2668  if (szValue[0] == '1')
2669  bInstalled = TRUE;
2670  }
2671 
2672  if (hKey)
2673  NtClose( hKey );
2674 
2675  break;
2676  }
2677 
2678  if ((dwFlags == LGRPID_SUPPORTED && bSupported) ||
2679  (dwFlags == LGRPID_INSTALLED && bInstalled))
2680  return TRUE;
2681 
2682  return FALSE;
2683 }
static BOOL NLS_RegGetDword(HANDLE hKey, LPCWSTR szValueName, DWORD *lpVal)
Definition: lang.c:2428
#define TRUE
Definition: types.h:120
static const WCHAR szLangGroupsKeyName[]
Definition: lang.c:54
unsigned int BOOL
Definition: ntddk_ex.h:94
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define LGRPID_INSTALLED
Definition: winnls.h:455
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
const char * szValue
Definition: shortcut.c:57
#define LGRPID_SUPPORTED
Definition: winnls.h:456
#define sprintfW
Definition: unicode.h:58
uint32_t * LPDWORD
Definition: typedefs.h:57
static HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName)
Definition: lang.c:2375

Referenced by InitFunctionPointers().

◆ IsValidLocale()

BOOL WINAPI IsValidLocale ( LCID  lcid,
DWORD  flags 
)

Definition at line 1548 of file lang.c.

1549 {
1550  /* check if language is registered in the kernel32 resources */
1552  (LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0;
1553 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
HMODULE kernel32_handle
Definition: dllmain.c:26
HRSRC WINAPI FindResourceExW(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD lang)
Definition: res.c:164
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define RT_STRING
Definition: pedump.c:368
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by enum_proc(), GeneralPropertyPageLocalesEnumProc(), GetCurrencyFormatW(), GetNumberFormatW(), lgrplocale_procA(), LISTBOX_WindowProc(), ListBoxWndProc_common(), LocalesEnumProc(), ScriptRecordDigitSubstitution(), SetThreadLocale(), START_TEST(), test_GetNumberFormatA(), and validate_package().

◆ LCMapStringA()

INT WINAPI LCMapStringA ( LCID  lcid,
DWORD  flags,
LPCSTR  src,
INT  srclen,
LPSTR  dst,
INT  dstlen 
)

Definition at line 2047 of file lang.c.

2049 {
2050  WCHAR *bufW = NtCurrentTeb()->StaticUnicodeBuffer;
2051  LPWSTR srcW, dstW;
2052  INT ret = 0, srclenW, dstlenW;
2053  UINT locale_cp = CP_ACP;
2054 
2055  if (!src || !srclen || dstlen < 0)
2056  {
2058  return 0;
2059  }
2060 
2061  if (!(flags & LOCALE_USE_CP_ACP)) locale_cp = get_lcid_codepage( lcid );
2062 
2063  srclenW = MultiByteToWideChar(locale_cp, 0, src, srclen, bufW, 260);
2064  if (srclenW)
2065  srcW = bufW;
2066  else
2067  {
2068  srclenW = MultiByteToWideChar(locale_cp, 0, src, srclen, NULL, 0);
2069  srcW = HeapAlloc(GetProcessHeap(), 0, srclenW * sizeof(WCHAR));
2070  if (!srcW)
2071  {
2073  return 0;
2074  }
2075  MultiByteToWideChar(locale_cp, 0, src, srclen, srcW, srclenW);
2076  }
2077 
2078  if (flags & LCMAP_SORTKEY)
2079  {
2080  if (src == dst)
2081  {
2083  goto map_string_exit;
2084  }
2085  ret = wine_get_sortkey(flags, srcW, srclenW, dst, dstlen);
2086  if (ret == 0)
2088  else
2089  ret++;
2090  goto map_string_exit;
2091  }
2092 
2093  if (flags & SORT_STRINGSORT)
2094  {
2096  goto map_string_exit;
2097  }
2098 
2099  dstlenW = LCMapStringEx(NULL, flags, srcW, srclenW, NULL, 0, NULL, NULL, 0);
2100  if (!dstlenW)
2101  goto map_string_exit;
2102 
2103  dstW = HeapAlloc(GetProcessHeap(), 0, dstlenW * sizeof(WCHAR));
2104  if (!dstW)
2105  {
2107  goto map_string_exit;
2108  }
2109 
2110  LCMapStringEx(NULL, flags, srcW, srclenW, dstW, dstlenW, NULL, NULL, 0);
2111  ret = WideCharToMultiByte(locale_cp, 0, dstW, dstlenW, dst, dstlen, NULL, NULL);
2112  HeapFree(GetProcessHeap(), 0, dstW);
2113 
2114 map_string_exit:
2115  if (srcW != bufW) HeapFree(GetProcessHeap(), 0, srcW);
2116  return ret;
2117 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
#define SORT_STRINGSORT
Definition: winnls.h:180
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
int32_t INT
Definition: typedefs.h:56
INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lparam)
Definition: lang.c:1885
int wine_get_sortkey(int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
Definition: sortkey.c:33
smooth NULL
Definition: ftsmooth.c:416
static UINT get_lcid_codepage(LCID lcid)
Definition: lang.c:260
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:51
#define LCMAP_SORTKEY
Definition: winnls.h:183
#define SetLastError(x)
Definition: compat.h:409
GLbitfield flags
Definition: glext.h:7161
int ret
GLenum src
Definition: glext.h:6340
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
static DWORD dstlen
Definition: directory.c:51
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
GLenum GLenum dst
Definition: glext.h:6340
unsigned int UINT
Definition: ndis.h:50
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:394
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by __crtLCMapStringA(), _Locale_strxfrm(), _Locale_tolower(), _Locale_toupper(), _strxfrm_l(), compare_string3(), lcid_to_rfc1766A(), MSVCRT__create_locale(), test_GetRfc1766FromLcid(), test_LcidToRfc1766(), and test_LCMapStringA().

◆ LCMapStringEx()

INT WINAPI LCMapStringEx ( LPCWSTR  name,
DWORD  flags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen,
LPNLSVERSIONINFO  version,
LPVOID  reserved,
LPARAM  lparam 
)

Definition at line 1885 of file lang.c.

1887 {
1888  LPWSTR dst_ptr;
1889 
1890  if (version) FIXME("unsupported version structure %p\n", version);
1891  if (reserved) FIXME("unsupported reserved pointer %p\n", reserved);
1892  if (lparam)
1893  {
1894  static int once;
1895  if (!once++) FIXME("unsupported lparam %lx\n", lparam);
1896  }
1897 
1898  if (!src || !srclen || dstlen < 0)
1899  {
1901  return 0;
1902  }
1903 
1904  /* mutually exclusive flags */
1909  {
1911  return 0;
1912  }
1913 
1914  if (!dstlen) dst = NULL;
1915 
1916  if (flags & LCMAP_SORTKEY)
1917  {
1918  INT ret;
1919  if (src == dst)
1920  {
1922  return 0;
1923  }
1924 
1925  if (srclen < 0) srclen = strlenW(src);
1926 
1927  TRACE("(%s,0x%08x,%s,%d,%p,%d)\n",
1929 
1930  ret = wine_get_sortkey(flags, src, srclen, (char *)dst, dstlen);
1931  if (ret == 0)
1933  else
1934  ret++;
1935  return ret;
1936  }
1937 
1938  /* SORT_STRINGSORT must be used exclusively with LCMAP_SORTKEY */
1939  if (flags & SORT_STRINGSORT)
1940  {
1942  return 0;
1943  }
1944 
1945  if (srclen < 0) srclen = strlenW(src) + 1;
1946 
1947  TRACE("(%s,0x%08x,%s,%d,%p,%d)\n",
1949 
1950  if (!dst) /* return required string length */
1951  {
1952  INT len;
1953 
1954  for (len = 0; srclen; src++, srclen--)
1955  {
1956  WCHAR wch = *src;
1957  /* tests show that win2k just ignores NORM_IGNORENONSPACE,
1958  * and skips white space and punctuation characters for
1959  * NORM_IGNORESYMBOLS.
1960  */
1961  if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE)))
1962  continue;
1963  len++;
1964  }
1965  return len;
1966  }
1967 
1968  if (flags & LCMAP_UPPERCASE)
1969  {
1970  for (dst_ptr = dst; srclen && dstlen; src++, srclen--)
1971  {
1972  WCHAR wch = *src;
1973  if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE)))
1974  continue;
1975  *dst_ptr++ = toupperW(wch);
1976  dstlen--;
1977  }
1978  }
1979  else if (flags & LCMAP_LOWERCASE)
1980  {
1981  for (dst_ptr = dst; srclen && dstlen; src++, srclen--)
1982  {
1983  WCHAR wch = *src;
1984  if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE)))
1985  continue;
1986  *dst_ptr++ = tolowerW(wch);
1987  dstlen--;
1988  }
1989  }
1990  else
1991  {
1992  if (src == dst)
1993  {
1995  return 0;
1996  }
1997  for (dst_ptr = dst; srclen && dstlen; src++, srclen--)
1998  {
1999  WCHAR wch = *src;
2000  if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE)))
2001  continue;
2002  *dst_ptr++ = wch;
2003  dstlen--;
2004  }
2005  }
2006 
2007  if (srclen)
2008  {
2010  return 0;
2011  }
2012 
2013  return dst_ptr - dst;
2014 }
#define LCMAP_SIMPLIFIED_CHINESE
Definition: winnls.h:190
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define SORT_STRINGSORT
Definition: winnls.h:180
#define NORM_IGNORESYMBOLS
Definition: winnls.h:176
int32_t INT
Definition: typedefs.h:56
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
r reserved
Definition: btrfs.c:2893
#define LCMAP_LOWERCASE
Definition: winnls.h:181
int wine_get_sortkey(int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
Definition: sortkey.c:33
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR version[]
Definition: asmname.c:64
WINE_UNICODE_INLINE WCHAR toupperW(WCHAR ch)
Definition: unicode.h:141
#define LCMAP_KATAKANA
Definition: winnls.h:186
#define LCMAP_TRADITIONAL_CHINESE
Definition: winnls.h:191
#define TRACE(s)
Definition: solgame.cpp:4
#define LCMAP_FULLWIDTH
Definition: winnls.h:188
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:51
WINE_UNICODE_INLINE WCHAR tolowerW(WCHAR ch)
Definition: unicode.h:135
#define LCMAP_SORTKEY
Definition: winnls.h:183
#define SetLastError(x)
Definition: compat.h:409
WINE_UNICODE_INLINE unsigned short get_char_typeW(WCHAR ch)
Definition: unicode.h:149
GLbitfield flags
Definition: glext.h:7161
#define C1_PUNCT
Definition: unicode.h:35
int ret
#define LCMAP_HALFWIDTH
Definition: winnls.h:187
GLenum GLsizei len
Definition: glext.h:6722
GLenum src
Definition: glext.h:6340
#define debugstr_wn
Definition: kernel32.h:33
static DWORD dstlen
Definition: directory.c:51
GLenum GLenum dst
Definition: glext.h:6340
#define LCMAP_HIRAGANA
Definition: winnls.h:185
#define LCMAP_UPPERCASE
Definition: winnls.h:182
Definition: name.c:36
#define C1_SPACE
Definition: unicode.h:34
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by InitFunctionPointers(), LCMapStringA(), and LCMapStringW().

◆ LCMapStringW()

INT WINAPI LCMapStringW ( LCID  lcid,
DWORD  flags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen 
)

Definition at line 2021 of file lang.c.

2023 {
2024  TRACE("(0x%04x,0x%08x,%s,%d,%p,%d)\n",
2025  lcid, flags, debugstr_wn(src, srclen), srclen, dst, dstlen);
2026 
2027  return LCMapStringEx(NULL, flags, src, srclen, dst, dstlen, NULL, NULL, 0);
2028 }
INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lparam)
Definition: lang.c:1885
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:51
GLbitfield flags
Definition: glext.h:7161
GLenum src
Definition: glext.h:6340
#define debugstr_wn
Definition: kernel32.h:33
static DWORD dstlen
Definition: directory.c:51
GLenum GLenum dst
Definition: glext.h:6340

Referenced by __crtLCMapStringW(), _WLocale_strxfrm(), _WLocale_tolower(), _WLocale_toupper(), lcid_to_rfc1766W(), LCMapStringW_wrapper(), SvchostCharLowerW(), test_LCMapStringW(), and test_tolower().

◆ NLS_EnumLanguageGroupLocales()

static BOOL NLS_EnumLanguageGroupLocales ( ENUMLANGUAGEGROUPLOCALE_CALLBACKS lpProcs)
static

Definition at line 2696 of file lang.c.

2697 {
2698  static const WCHAR szAlternateSortsKeyName[] = {
2699  'A','l','t','e','r','n','a','t','e',' ','S','o','r','t','s','\0'
2700  };
2701  WCHAR szNumber[10], szValue[4];
2702  HANDLE hKey;
2703  BOOL bContinue = TRUE, bAlternate = FALSE;
2704  LGRPID lgrpid;
2705  ULONG ulIndex = 1; /* Ignore default entry of 1st key */
2706 
2707  if (!lpProcs || !lpProcs->lgrpid || lpProcs->lgrpid > LGRPID_ARMENIAN)
2708  {
2710  return FALSE;
2711  }
2712 
2713  if (lpProcs->dwFlags)
2714  {
2716  return FALSE;
2717  }
2718 
2719  hKey = NLS_RegOpenKey( 0, szLocaleKeyName );
2720 
2721  if (!hKey)
2722  WARN("NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
2723 
2724  while (bContinue)
2725  {
2726  if (NLS_RegEnumValue( hKey, ulIndex, szNumber, sizeof(szNumber),
2727  szValue, sizeof(szValue) ))
2728  {
2729  lgrpid = strtoulW( szValue, NULL, 16 );
2730 
2731  TRACE("lcid %s, grpid %d (%smatched)\n", debugstr_w(szNumber),
2732  lgrpid, lgrpid == lpProcs->lgrpid ? "" : "not ");
2733 
2734  if (lgrpid == lpProcs->lgrpid)
2735  {
2736  LCID lcid;
2737 
2738  lcid = strtoulW( szNumber, NULL, 16 );
2739 
2740  /* FIXME: native returns extra text for a few (17/150) locales, e.g:
2741  * '00000437 ;Georgian'
2742  * At present we only pass the LCID string.
2743  */
2744 
2745  if (lpProcs->procW)
2746  bContinue = lpProcs->procW( lgrpid, lcid, szNumber, lpProcs->lParam );
2747  else
2748  {
2749  char szNumberA[sizeof(szNumber)/sizeof(WCHAR)];
2750 
2751  WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0);
2752 
2753  bContinue = lpProcs->procA( lgrpid, lcid, szNumberA, lpProcs->lParam );
2754  }
2755  }
2756 
2757  ulIndex++;
2758  }
2759  else
2760  {
2761  /* Finished enumerating this key */
2762  if (!bAlternate)
2763  {
2764  /* Enumerate alternate sorts also */
2765  hKey = NLS_RegOpenKey( hKey, szAlternateSortsKeyName );
2766  bAlternate = TRUE;
2767  ulIndex = 0;
2768  }
2769  else
2770  bContinue = FALSE; /* Finished both keys */
2771  }
2772 
2773  if (!bContinue)
2774  break;
2775  }
2776 
2777  if (hKey)
2778  NtClose( hKey );
2779 
2780  return TRUE;
2781 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
LANGGROUPLOCALE_ENUMPROCW procW
Definition: lang.c:2689
#define TRUE
Definition: types.h:120
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
DWORD LGRPID
Definition: winnls.h:517
#define WARN(fmt,...)
Definition: debug.h:111
LANGGROUPLOCALE_ENUMPROCA procA
Definition: lang.c:2688
static const WCHAR szNumber[]
Definition: table.c:80
DWORD LCID
Definition: nls.h:13
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
static BOOL NLS_RegEnumValue(HANDLE hKey, UINT ulIndex, LPWSTR szValueName, ULONG valueNameSize, LPWSTR szValueData, ULONG valueDataSize)
Definition: lang.c:2400
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SetLastError(x)
Definition: compat.h:409
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
const char * szValue
Definition: shortcut.c:57
ULONG ulIndex
Definition: symbols.c:92
static const WCHAR szLocaleKeyName[]
Definition: lang.c:47
unsigned int ULONG
Definition: retypes.h:1
static HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName)
Definition: lang.c:2375
#define strtoulW(s1, s2, b)
Definition: unicode.h:41
Definition: nsiface.idl:23