update for HEAD-2003091401
[reactos.git] / lib / kernel32 / nls / locale.c
diff --git a/lib/kernel32/nls/locale.c b/lib/kernel32/nls/locale.c
deleted file mode 100644 (file)
index 3bfe2c5..0000000
+++ /dev/null
@@ -1,1290 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
-                   Addition copyrights might be specified in LGPL.c
- * PROJECT:         ReactOS system libraries
- * FILE:            lib/kernel32/nls/locale.c
- * PURPOSE:         National language support functions
- * PROGRAMMER:      Boudewijn ( ariadne@xs4all.nl)
- * UPDATE HISTORY:  Modified from Onno Hovers wfc. ( 08/02/99 )
-                   Modified from wine. ( 08/02/99 )
- *                  
- */
-
-/*
- * nls/locale.c
- *
- */
-/*
- *     OLE2NLS library
- *
- *     Copyright 1995  Martin von Loewis
- *      Copyright 1998  David Lee Lambert
- */
-#undef WIN32_LEAN_AND_MEAN
-#include<stdlib.h>
-#include<string.h>
-#include<windows.h>
-#include <wchar.h>
-
-#include <kernel32/thread.h>
-#include <kernel32/nls.h>
-
-#undef tolower
-#undef toupper
-#undef isupper
-#undef islower
-#undef isalnum
-#undef isalpha
-#undef isblank
-#undef isdigit
-
-#undef towlower
-#undef towupper
-#undef iswupper
-#undef iswlower
-#undef iswalnum
-#undef iswalpha
-
-#define tolower(c)     ((c >= 'A' && c <= 'Z')   ? c - ( 'A' - 'a' ) : c)
-#define toupper(c)     ((c >= 'a' && c <= 'z')   ? c + 'A' - 'a' : c);
-#define isupper(c)     (c >= 'A' && c <= 'Z' )
-#define islower(c)     (c >= 'a' && c <= 'z')
-#define isalnum(c)     ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')  || (c >= '0' && c <= '9'))
-#define isalpha(c)     (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')
-#define isblank(c)     ( c == ' ' || c == '\t' )
-#define isdigit(c)     ((c >= '0' && c <= '9'))
-#define isspace(c)     ((c == ' '))
-#define ispunct(c)     ((c == '.'))
-#define isxdigit(c)    ((c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')  || (c >= '0' && c <= '9'))
-#define iscntrl(c)     ((c >=0x00 && c <= 0x1f) || c == 0x7f)
-
-
-#define towlower(c)    ((c >= L'A' && c <= L'Z')   ? c - ( L'A' - L'a' ) : c)
-#define towupper(c)    ((c >= L'a' && c <= L'z')   ? c + L'A' - L'a' : c);
-#define iswupper(c)    (c >= L'A' && c <= L'Z' )
-#define iswlower(c)    (c >= L'a' && c <= L'z')
-#define iswalnum(c)    ((c >= L'A' && c <= L'Z') || (c >= L'a' && c <= L'z')  || (c >= L'0' && c <= L'9'))
-#define iswalpha(c)    (c >= L'A' && c <= L'Z') || (c >= L'a' && c <= L'z')
-
-/*
-
-int OLE_GetFormatA(LCID locale,
-                           DWORD flags,
-                           DWORD tflags,
-                           LPSYSTEMTIME xtime,
-                           LPCSTR _format,     
-                           LPSTR date,         
-                           int datelen);
-*/
-
-#undef LCID
-
-#define SYSTEM_DEFAULT_LANGUAGE                LANG_ENGLISH
-#define SYSTEM_DEFAULT_SUBLANGUAGE     SUBLANG_ENGLISH_US
-#define SYSTEM_DEFAULT_SORTORDER       SORT_DEFAULT
-
-
-PLOCALE __UserLocale;
-PLOCALE __TebLocale;
-LOCALE  __Locale[LOCALE_ARRAY];
-
-WINBOOL __LocaleInit(void)
-{
-   PSTR                locstr;   
-   LCID                lcid;
-   PLOCALE     plocale=NULL;
-   
-   locstr=getenv("WF_LOCALE");
-   if(locstr)
-   {  
-      plocale=__Locale;
-      while((plocale->Id)&&(strcasecmp(locstr,plocale->AbbrName)))
-         plocale++;
-   }
-   /* if we do not have a locale, default */
-   if(!plocale)
-   {
-      lcid=MAKELCID(MAKELANGID(SYSTEM_DEFAULT_LANGUAGE,
-                               SYSTEM_DEFAULT_SUBLANGUAGE),
-                      SYSTEM_DEFAULT_SORTORDER);
-      plocale=__Locale;
-      while((plocale->Id)&&(lcid!=plocale->Id))
-         plocale++;                                                   
-   }
-   /* if this does not work, use our disaster plan */
-   if(!plocale)
-      plocale=__Locale;
-
-   __UserLocale=plocale;
-   __TebLocale=plocale;
-   return TRUE;
-}
-
-LANGID STDCALL GetUserDefaultLangID(void)
-{
-   return LANGIDFROMLCID(__UserLocale->Id);
-}
-
-#ifndef _OLE2NLS_IN_BUILD_
-
-LCID
-STDCALL
-GetUserDefaultLCID(void)
-{
-   return __UserLocale->Id;
-}
-
-LANGID STDCALL GetSystemDefaultLangID(void)
-{
-   return MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US);
-}
-
-LCID STDCALL GetSystemDefaultLCID(void)
-{
-   return MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), 
-                   SORT_DEFAULT);
-}
-
-#endif /*_OLE2NLS_IN_BUILD_*/
-
-LCID STDCALL GetThreadLocale(void)
-{
-   return __TebLocale;
-}
-
-WINBOOL STDCALL SetThreadLocale(LCID  Locale)
-{
-   PLOCALE plocale;
-
-   plocale=__Locale;   
-   /* find locale */
-   while((plocale->Id)&&(Locale!=plocale->Id))
-      plocale++;      
-   if(!plocale) {
-       SetLastError(ERROR_INVALID_PARAMETER);
-       return FALSE;
-   }
-   __TebLocale=plocale;
-   return TRUE;   
-}
-
-WINBOOL
-STDCALL
-IsValidLocale(
-    LCID   Locale,
-    DWORD  dwFlags)
-{
-   PLOCALE plocale;
-
-   plocale=__Locale;   
-   
-   /* find locale */
-   while((plocale->Id)&&(Locale!=plocale->Id))
-      plocale++;     
-   /* is it valid ?? */    
-   if(!plocale)
-      return FALSE;
-   else
-      return TRUE;   
-}
-
-LPSTR static __xtoa(LPSTR str, DWORD val)
-{
-   LPSTR retstr=str;
-   DWORD hex;
-   
-   do
-   {
-      hex=val%16;
-      if(hex<10)
-         *str=val + '0';
-      else
-         *str=val + 'A';
-      val=val/16;
-      str++;
-   }
-   while(val);
-   return retstr;
-}
-
-LPWSTR static __xtow(LPWSTR str, DWORD val)
-{
-   LPWSTR retstr=str;
-   DWORD hex;
-   
-   do
-   {
-      hex=val%16;
-      if(hex<10)
-         *str=val + '0';
-      else
-         *str=val + 'A';
-      val=val/16;
-      str++;
-   }
-   while(val);
-   return retstr;
-}
-
-
-WINBOOL
-STDCALL
-EnumSystemLocalesA(
-    LOCALE_ENUMPROC lpLocaleEnumProc,
-    DWORD            dwFlags)
-{
-   CHAR                locstr[10];
-   BOOL                retval;
-   PLOCALE     plocale;   
-   
-   if(!lpLocaleEnumProc) {
-        SetLastError(ERROR_INVALID_PARAMETER);
-       return FALSE;
-   }
-      
-   plocale=__Locale;
-   retval=TRUE;
-   while((plocale->Id)&&(retval))
-   {
-      __xtoa(locstr,plocale->Id); 
-      retval=lpLocaleEnumProc((void *)locstr);
-   }
-   return TRUE;
-}
-WINBOOL
-STDCALL
-EnumSystemLocalesW(
-    LOCALE_ENUMPROC lpLocaleEnumProc,
-    DWORD            dwFlags)
-{
-   WCHAR       locstr[10];
-   WINBOOL     retval=TRUE;
-   PLOCALE     plocale=__Locale;  
-   
-   
-   if(!lpLocaleEnumProc) {
-        SetLastError(ERROR_INVALID_PARAMETER);
-       return FALSE;
-   }
-      
-   while((plocale->Id)&&(retval))
-   {
-      __xtow(locstr,plocale->Id);
-      retval=lpLocaleEnumProc((void *)locstr);
-   }
-   return TRUE;
-}
-
-int
-STDCALL
-GetLocaleInfoW(
-    LCID     Locale,
-    LCTYPE   LCType,
-    LPWSTR  lpLCData,
-    int      cchData)
-{
-   INT         retcnt=0;
-   PLOCALE     plocale=__Locale;  
-   LPWSTR      infostr; 
-   
-   while(plocale->Id!=Locale)
-      plocale++;
-   
-   if(LCType<89)
-      infostr=plocale->Info0[LCType];
-   else if((LCType>0x1000)&&(LCType<0x1011))
-      infostr=plocale->Info1[LCType-0x1000];
-   else
-      { SetLastError(ERROR_INVALID_PARAMETER); return 0; }
-      
-   if(cchData)
-   {   
-      /* I really need a wide string copy, here */
-      do      
-      {
-         *lpLCData=*infostr;
-         infostr++;
-         lpLCData++;
-         cchData--;
-         retcnt++;
-      }
-      while((*infostr)&&(cchData));
-   }
-   else
-   {
-      /* I really need a wide string length, here */
-      do
-      {
-         infostr++;
-         retcnt++;
-      }
-      while(*infostr);
-   }
-   return retcnt;
-}
-int
-STDCALL
-GetLocaleInfoA(
-    LCID     Locale,
-    LCTYPE   LCType,
-    LPSTR  lpLCData,
-    int      cchData)
-{
-   INT         retcnt=0;
-   PLOCALE     plocale=__Locale;  
-   LPWSTR      infostr; 
-   
-   while(plocale->Id!=Locale)
-      plocale++;
-   
-   if(LCType<89)
-      infostr=plocale->Info0[LCType];
-   else if((LCType>0x1000)&&(LCType<0x1011))
-      infostr=plocale->Info1[LCType-0x1000];
-   else
-      { SetLastError(ERROR_INVALID_PARAMETER); return 0; }
-      
-   if(cchData)
-   {   
-      /* I really need a wide string copy, here */
-      do      
-      {
-         *lpLCData=*infostr;
-         infostr++;
-         lpLCData++;
-         cchData--;
-         retcnt++;
-      }
-      while((*infostr)&&(cchData));
-   }
-   else
-   {
-      /* I really need a wide string length, here */
-      do
-      {
-         infostr++;
-         retcnt++;
-      }
-      while(*infostr);
-   }
-   return retcnt;
-}
-
-const struct map_lcid2str {
-       LCID            langid;
-       const char      *langname;
-} languages[]={
-       {0x0401,"Arabic (Saudi Arabia)"},
-       {0x0801,"Arabic (Iraq)"},
-       {0x0c01,"Arabic (Egypt)"},
-       {0x1001,"Arabic (Libya)"},
-       {0x1401,"Arabic (Algeria)"},
-       {0x1801,"Arabic (Morocco)"},
-       {0x1c01,"Arabic (Tunisia)"},
-       {0x2001,"Arabic (Oman)"},
-       {0x2401,"Arabic (Yemen)"},
-       {0x2801,"Arabic (Syria)"},
-       {0x2c01,"Arabic (Jordan)"},
-       {0x3001,"Arabic (Lebanon)"},
-       {0x3401,"Arabic (Kuwait)"},
-       {0x3801,"Arabic (United Arab Emirates)"},
-       {0x3c01,"Arabic (Bahrain)"},
-       {0x4001,"Arabic (Qatar)"},
-       {0x0402,"Bulgarian"},
-       {0x0403,"Catalan"},
-       {0x0404,"Chinese (Taiwan)"},
-       {0x0804,"Chinese (People's Republic of China)"},
-       {0x0c04,"Chinese (Hong Kong)"},
-       {0x1004,"Chinese (Singapore)"},
-       {0x1404,"Chinese (Macau)"},
-       {0x0405,"Czech"},
-       {0x0406,"Danish"},
-       {0x0407,"German (Germany)"},
-       {0x0807,"German (Switzerland)"},
-       {0x0c07,"German (Austria)"},
-       {0x1007,"German (Luxembourg)"},
-       {0x1407,"German (Liechtenstein)"},
-       {0x0408,"Greek"},
-       {0x0409,"English (United States)"},
-       {0x0809,"English (United Kingdom)"},
-       {0x0c09,"English (Australia)"},
-       {0x1009,"English (Canada)"},
-       {0x1409,"English (New Zealand)"},
-       {0x1809,"English (Ireland)"},
-       {0x1c09,"English (South Africa)"},
-       {0x2009,"English (Jamaica)"},
-       {0x2409,"English (Caribbean)"},
-       {0x2809,"English (Belize)"},
-       {0x2c09,"English (Trinidad)"},
-       {0x3009,"English (Zimbabwe)"},
-       {0x3409,"English (Philippines)"},
-       {0x040a,"Spanish (Spain, traditional sorting)"},
-       {0x080a,"Spanish (Mexico)"},
-       {0x0c0a,"Spanish (Spain, international sorting)"},
-       {0x100a,"Spanish (Guatemala)"},
-       {0x140a,"Spanish (Costa Rica)"},
-       {0x180a,"Spanish (Panama)"},
-       {0x1c0a,"Spanish (Dominican Republic)"},
-       {0x200a,"Spanish (Venezuela)"},
-       {0x240a,"Spanish (Colombia)"},
-       {0x280a,"Spanish (Peru)"},
-       {0x2c0a,"Spanish (Argentina)"},
-       {0x300a,"Spanish (Ecuador)"},
-       {0x340a,"Spanish (Chile)"},
-       {0x380a,"Spanish (Uruguay)"},
-       {0x3c0a,"Spanish (Paraguay)"},
-       {0x400a,"Spanish (Bolivia)"},
-       {0x440a,"Spanish (El Salvador)"},
-       {0x480a,"Spanish (Honduras)"},
-       {0x4c0a,"Spanish (Nicaragua)"},
-       {0x500a,"Spanish (Puerto Rico)"},
-       {0x040b,"Finnish"},
-       {0x040c,"French (France)"},
-       {0x080c,"French (Belgium)"},
-       {0x0c0c,"French (Canada)"},
-       {0x100c,"French (Switzerland)"},
-       {0x140c,"French (Luxembourg)"},
-       {0x180c,"French (Monaco)"},
-       {0x040d,"Hebrew"},
-       {0x040e,"Hungarian"},
-       {0x040f,"Icelandic"},
-       {0x0410,"Italian (Italy)"},
-       {0x0810,"Italian (Switzerland)"},
-       {0x0411,"Japanese"},
-       {0x0412,"Korean (Wansung)"},
-       {0x0812,"Korean (Johab)"},
-       {0x0413,"Dutch (Netherlands)"},
-       {0x0813,"Dutch (Belgium)"},
-       {0x0414,"Norwegian (Bokmal)"},
-       {0x0814,"Norwegian (Nynorsk)"},
-       {0x0415,"Polish"},
-       {0x0416,"Portuguese (Brazil)"},
-       {0x0816,"Portuguese (Portugal)"},
-       {0x0417,"Rhaeto Romanic"},
-       {0x0418,"Romanian"},
-       {0x0818,"Moldavian"},
-       {0x0419,"Russian (Russia)"},
-       {0x0819,"Russian (Moldavia)"},
-       {0x041a,"Croatian"},
-       {0x081a,"Serbian (latin)"},
-       {0x0c1a,"Serbian (cyrillic)"},
-       {0x041b,"Slovak"},
-       {0x041c,"Albanian"},
-       {0x041d,"Swedish (Sweden)"},
-       {0x081d,"Swedish (Finland)"},
-       {0x041e,"Thai"},
-       {0x041f,"Turkish"},
-       {0x0420,"Urdu"},
-       {0x0421,"Indonesian"},
-       {0x0422,"Ukrainian"},
-       {0x0423,"Belarusian"},
-       {0x0424,"Slovene"},
-       {0x0425,"Estonian"},
-       {0x0426,"Latvian"},
-       {0x0427,"Lithuanian (modern)"},
-       {0x0827,"Lithuanian (classic)"},
-       {0x0428,"Maori"},
-       {0x0429,"Farsi"},
-       {0x042a,"Vietnamese"},
-       {0x042b,"Armenian"},
-       {0x042c,"Azeri (latin)"},
-       {0x082c,"Azeri (cyrillic)"},
-       {0x042d,"Basque"},
-       {0x042e,"Sorbian"},
-       {0x042f,"Macedonian"},
-       {0x0430,"Sutu"},
-       {0x0431,"Tsonga"},
-       {0x0432,"Tswana"},
-       {0x0433,"Venda"},
-       {0x0434,"Xhosa"},
-       {0x0435,"Zulu"},
-       {0x0436,"Afrikaans"},
-       {0x0437,"Georgian"},
-       {0x0438,"Faeroese"},
-       {0x0439,"Hindi"},
-       {0x043a,"Maltese"},
-       {0x043b,"Saami"},
-       {0x043c,"Irish gaelic"},
-       {0x083c,"Scottish gaelic"},
-       {0x043e,"Malay (Malaysia)"},
-       {0x083e,"Malay (Brunei Darussalam)"},
-       {0x043f,"Kazak"},
-       {0x0441,"Swahili"},
-       {0x0443,"Uzbek (latin)"},
-       {0x0843,"Uzbek (cyrillic)"},
-       {0x0444,"Tatar"},
-       {0x0445,"Bengali"},
-       {0x0446,"Punjabi"},
-       {0x0447,"Gujarati"},
-       {0x0448,"Oriya"},
-       {0x0449,"Tamil"},
-       {0x044a,"Telugu"},
-       {0x044b,"Kannada"},
-       {0x044c,"Malayalam"},
-       {0x044d,"Assamese"},
-       {0x044e,"Marathi"},
-       {0x044f,"Sanskrit"},
-       {0x0457,"Konkani"},
-       {0x048f,"Esperanto"}, /* Non official */
-       {0x0000,"Unknown"}
-    
-};
-
-
-static const unsigned char CT_CType2_LUT[] = {
-  C2_NOTAPPLICABLE, /*   -   0 */
-  C2_NOTAPPLICABLE, /*   -   1 */
-  C2_NOTAPPLICABLE, /*   -   2 */
-  C2_NOTAPPLICABLE, /*   -   3 */
-  C2_NOTAPPLICABLE, /*   -   4 */
-  C2_NOTAPPLICABLE, /*   -   5 */
-  C2_NOTAPPLICABLE, /*   -   6 */
-  C2_NOTAPPLICABLE, /*   -   7 */
-  C2_NOTAPPLICABLE, /*   -   8 */
-  C2_SEGMENTSEPARATOR, /*   -   9 */
-  C2_NOTAPPLICABLE, /*   -  10 */
-  C2_NOTAPPLICABLE, /*   -  11 */
-  C2_NOTAPPLICABLE, /*   -  12 */
-  C2_NOTAPPLICABLE, /*   -  13 */
-  C2_NOTAPPLICABLE, /*   -  14 */
-  C2_NOTAPPLICABLE, /*   -  15 */
-  C2_NOTAPPLICABLE, /*   -  16 */
-  C2_NOTAPPLICABLE, /*   -  17 */
-  C2_NOTAPPLICABLE, /*   -  18 */
-  C2_NOTAPPLICABLE, /*   -  19 */
-  C2_NOTAPPLICABLE, /*   -  20 */
-  C2_NOTAPPLICABLE, /*   -  21 */
-  C2_NOTAPPLICABLE, /*   -  22 */
-  C2_NOTAPPLICABLE, /*   -  23 */
-  C2_NOTAPPLICABLE, /*   -  24 */
-  C2_NOTAPPLICABLE, /*   -  25 */
-  C2_NOTAPPLICABLE, /*   -  26 */
-  C2_NOTAPPLICABLE, /*   -  27 */
-  C2_NOTAPPLICABLE, /*   -  28 */
-  C2_NOTAPPLICABLE, /*   -  29 */
-  C2_NOTAPPLICABLE, /*   -  30 */
-  C2_NOTAPPLICABLE, /*   -  31 */
-  C2_WHITESPACE, /*   -  32 */
-  C2_OTHERNEUTRAL, /* ! -  33 */
-  C2_OTHERNEUTRAL, /* " -  34 */ /* " */
-  C2_EUROPETERMINATOR, /* # -  35 */
-  C2_EUROPETERMINATOR, /* $ -  36 */
-  C2_EUROPETERMINATOR, /* % -  37 */
-  C2_LEFTTORIGHT, /* & -  38 */
-  C2_OTHERNEUTRAL, /* ' -  39 */
-  C2_OTHERNEUTRAL, /* ( -  40 */
-  C2_OTHERNEUTRAL, /* ) -  41 */
-  C2_OTHERNEUTRAL, /* * -  42 */
-  C2_EUROPETERMINATOR, /* + -  43 */
-  C2_COMMONSEPARATOR, /* , -  44 */
-  C2_EUROPETERMINATOR, /* - -  45 */
-  C2_EUROPESEPARATOR, /* . -  46 */
-  C2_EUROPESEPARATOR, /* / -  47 */
-  C2_EUROPENUMBER, /* 0 -  48 */
-  C2_EUROPENUMBER, /* 1 -  49 */
-  C2_EUROPENUMBER, /* 2 -  50 */
-  C2_EUROPENUMBER, /* 3 -  51 */
-  C2_EUROPENUMBER, /* 4 -  52 */
-  C2_EUROPENUMBER, /* 5 -  53 */
-  C2_EUROPENUMBER, /* 6 -  54 */
-  C2_EUROPENUMBER, /* 7 -  55 */
-  C2_EUROPENUMBER, /* 8 -  56 */
-  C2_EUROPENUMBER, /* 9 -  57 */
-  C2_COMMONSEPARATOR, /* : -  58 */
-  C2_OTHERNEUTRAL, /* ; -  59 */
-  C2_OTHERNEUTRAL, /* < -  60 */
-  C2_OTHERNEUTRAL, /* = -  61 */
-  C2_OTHERNEUTRAL, /* > -  62 */
-  C2_OTHERNEUTRAL, /* ? -  63 */
-  C2_LEFTTORIGHT, /* @ -  64 */
-  C2_LEFTTORIGHT, /* A -  65 */
-  C2_LEFTTORIGHT, /* B -  66 */
-  C2_LEFTTORIGHT, /* C -  67 */
-  C2_LEFTTORIGHT, /* D -  68 */
-  C2_LEFTTORIGHT, /* E -  69 */
-  C2_LEFTTORIGHT, /* F -  70 */
-  C2_LEFTTORIGHT, /* G -  71 */
-  C2_LEFTTORIGHT, /* H -  72 */
-  C2_LEFTTORIGHT, /* I -  73 */
-  C2_LEFTTORIGHT, /* J -  74 */
-  C2_LEFTTORIGHT, /* K -  75 */
-  C2_LEFTTORIGHT, /* L -  76 */
-  C2_LEFTTORIGHT, /* M -  77 */
-  C2_LEFTTORIGHT, /* N -  78 */
-  C2_LEFTTORIGHT, /* O -  79 */
-  C2_LEFTTORIGHT, /* P -  80 */
-  C2_LEFTTORIGHT, /* Q -  81 */
-  C2_LEFTTORIGHT, /* R -  82 */
-  C2_LEFTTORIGHT, /* S -  83 */
-  C2_LEFTTORIGHT, /* T -  84 */
-  C2_LEFTTORIGHT, /* U -  85 */
-  C2_LEFTTORIGHT, /* V -  86 */
-  C2_LEFTTORIGHT, /* W -  87 */
-  C2_LEFTTORIGHT, /* X -  88 */
-  C2_LEFTTORIGHT, /* Y -  89 */
-  C2_LEFTTORIGHT, /* Z -  90 */
-  C2_OTHERNEUTRAL, /* [ -  91 */
-  C2_OTHERNEUTRAL, /* \ -  92 */
-  C2_OTHERNEUTRAL, /* ] -  93 */
-  C2_OTHERNEUTRAL, /* ^ -  94 */
-  C2_OTHERNEUTRAL, /* _ -  95 */
-  C2_OTHERNEUTRAL, /* ` -  96 */
-  C2_LEFTTORIGHT, /* a -  97 */
-  C2_LEFTTORIGHT, /* b -  98 */
-  C2_LEFTTORIGHT, /* c -  99 */
-  C2_LEFTTORIGHT, /* d - 100 */
-  C2_LEFTTORIGHT, /* e - 101 */
-  C2_LEFTTORIGHT, /* f - 102 */
-  C2_LEFTTORIGHT, /* g - 103 */
-  C2_LEFTTORIGHT, /* h - 104 */
-  C2_LEFTTORIGHT, /* i - 105 */
-  C2_LEFTTORIGHT, /* j - 106 */
-  C2_LEFTTORIGHT, /* k - 107 */
-  C2_LEFTTORIGHT, /* l - 108 */
-  C2_LEFTTORIGHT, /* m - 109 */
-  C2_LEFTTORIGHT, /* n - 110 */
-  C2_LEFTTORIGHT, /* o - 111 */
-  C2_LEFTTORIGHT, /* p - 112 */
-  C2_LEFTTORIGHT, /* q - 113 */
-  C2_LEFTTORIGHT, /* r - 114 */
-  C2_LEFTTORIGHT, /* s - 115 */
-  C2_LEFTTORIGHT, /* t - 116 */
-  C2_LEFTTORIGHT, /* u - 117 */
-  C2_LEFTTORIGHT, /* v - 118 */
-  C2_LEFTTORIGHT, /* w - 119 */
-  C2_LEFTTORIGHT, /* x - 120 */
-  C2_LEFTTORIGHT, /* y - 121 */
-  C2_LEFTTORIGHT, /* z - 122 */
-  C2_OTHERNEUTRAL, /* { - 123 */
-  C2_OTHERNEUTRAL, /* | - 124 */
-  C2_OTHERNEUTRAL, /* } - 125 */
-  C2_OTHERNEUTRAL, /* ~ - 126 */
-  C2_NOTAPPLICABLE, /* \7f - 127 */
-  C2_NOTAPPLICABLE, /* \80 - 128 */
-  C2_NOTAPPLICABLE, /* \81 - 129 */
-  C2_OTHERNEUTRAL, /* \82 - 130 */
-  C2_LEFTTORIGHT, /* \83 - 131 */
-  C2_OTHERNEUTRAL, /* \84 - 132 */
-  C2_OTHERNEUTRAL, /* \85 - 133 */
-  C2_OTHERNEUTRAL, /* \86 - 134 */
-  C2_OTHERNEUTRAL, /* \87 - 135 */
-  C2_LEFTTORIGHT, /* \88 - 136 */
-  C2_EUROPETERMINATOR, /* \89 - 137 */
-  C2_LEFTTORIGHT, /* \8a - 138 */
-  C2_OTHERNEUTRAL, /* \8b - 139 */
-  C2_LEFTTORIGHT, /* \8c - 140 */
-  C2_NOTAPPLICABLE, /* \8d - 141 */
-  C2_NOTAPPLICABLE, /* \8e - 142 */
-  C2_NOTAPPLICABLE, /* \8f - 143 */
-  C2_NOTAPPLICABLE, /* \90 - 144 */
-  C2_OTHERNEUTRAL, /* \91 - 145 */
-  C2_OTHERNEUTRAL, /* \92 - 146 */
-  C2_OTHERNEUTRAL, /* \93 - 147 */
-  C2_OTHERNEUTRAL, /* \94 - 148 */
-  C2_OTHERNEUTRAL, /* \95 - 149 */
-  C2_OTHERNEUTRAL, /* \96 - 150 */
-  C2_OTHERNEUTRAL, /* \97 - 151 */
-  C2_LEFTTORIGHT, /* \98 - 152 */
-  C2_OTHERNEUTRAL, /* \99 - 153 */
-  C2_LEFTTORIGHT, /* \9a - 154 */
-  C2_OTHERNEUTRAL, /* \9b - 155 */
-  C2_LEFTTORIGHT, /* \9c - 156 */
-  C2_NOTAPPLICABLE, /* \9d - 157 */
-  C2_NOTAPPLICABLE, /* \9e - 158 */
-  C2_LEFTTORIGHT, /* \9f - 159 */
-  C2_WHITESPACE, /*   - 160 */
-  C2_OTHERNEUTRAL, /* ¡ - 161 */
-  C2_EUROPETERMINATOR, /* ¢ - 162 */
-  C2_EUROPETERMINATOR, /* £ - 163 */
-  C2_EUROPETERMINATOR, /* ¤ - 164 */
-  C2_EUROPETERMINATOR, /* ¥ - 165 */
-  C2_OTHERNEUTRAL, /* ¦ - 166 */
-  C2_OTHERNEUTRAL, /* § - 167 */
-  C2_OTHERNEUTRAL, /* ¨ - 168 */
-  C2_OTHERNEUTRAL, /* © - 169 */
-  C2_OTHERNEUTRAL, /* ª - 170 */
-  C2_OTHERNEUTRAL, /* « - 171 */
-  C2_OTHERNEUTRAL, /* ¬ - 172 */
-  C2_OTHERNEUTRAL, /* ­ - 173 */
-  C2_OTHERNEUTRAL, /* ® - 174 */
-  C2_OTHERNEUTRAL, /* ¯ - 175 */
-  C2_EUROPETERMINATOR, /* ° - 176 */
-  C2_EUROPETERMINATOR, /* ± - 177 */
-  C2_EUROPENUMBER, /* ² - 178 */
-  C2_EUROPENUMBER, /* ³ - 179 */
-  C2_OTHERNEUTRAL, /* ´ - 180 */
-  C2_OTHERNEUTRAL, /* µ - 181 */
-  C2_OTHERNEUTRAL, /* ¶ - 182 */
-  C2_OTHERNEUTRAL, /* · - 183 */
-  C2_OTHERNEUTRAL, /* ¸ - 184 */
-  C2_EUROPENUMBER, /* ¹ - 185 */
-  C2_OTHERNEUTRAL, /* º - 186 */
-  C2_OTHERNEUTRAL, /* » - 187 */
-  C2_OTHERNEUTRAL, /* ¼ - 188 */
-  C2_OTHERNEUTRAL, /* ½ - 189 */
-  C2_OTHERNEUTRAL, /* ¾ - 190 */
-  C2_OTHERNEUTRAL, /* ¿ - 191 */
-  C2_LEFTTORIGHT, /* À - 192 */
-  C2_LEFTTORIGHT, /* Á - 193 */
-  C2_LEFTTORIGHT, /* Â - 194 */
-  C2_LEFTTORIGHT, /* Ã - 195 */
-  C2_LEFTTORIGHT, /* Ä - 196 */
-  C2_LEFTTORIGHT, /* Å - 197 */
-  C2_LEFTTORIGHT, /* Æ - 198 */
-  C2_LEFTTORIGHT, /* Ç - 199 */
-  C2_LEFTTORIGHT, /* È - 200 */
-  C2_LEFTTORIGHT, /* É - 201 */
-  C2_LEFTTORIGHT, /* Ê - 202 */
-  C2_LEFTTORIGHT, /* Ë - 203 */
-  C2_LEFTTORIGHT, /* Ì - 204 */
-  C2_LEFTTORIGHT, /* Í - 205 */
-  C2_LEFTTORIGHT, /* Î - 206 */
-  C2_LEFTTORIGHT, /* Ï - 207 */
-  C2_LEFTTORIGHT, /* Ð - 208 */
-  C2_LEFTTORIGHT, /* Ñ - 209 */
-  C2_LEFTTORIGHT, /* Ò - 210 */
-  C2_LEFTTORIGHT, /* Ó - 211 */
-  C2_LEFTTORIGHT, /* Ô - 212 */
-  C2_LEFTTORIGHT, /* Õ - 213 */
-  C2_LEFTTORIGHT, /* Ö - 214 */
-  C2_OTHERNEUTRAL, /* × - 215 */
-  C2_LEFTTORIGHT, /* Ø - 216 */
-  C2_LEFTTORIGHT, /* Ù - 217 */
-  C2_LEFTTORIGHT, /* Ú - 218 */
-  C2_LEFTTORIGHT, /* Û - 219 */
-  C2_LEFTTORIGHT, /* Ü - 220 */
-  C2_LEFTTORIGHT, /* Ý - 221 */
-  C2_LEFTTORIGHT, /* Þ - 222 */
-  C2_LEFTTORIGHT, /* ß - 223 */
-  C2_LEFTTORIGHT, /* à - 224 */
-  C2_LEFTTORIGHT, /* á - 225 */
-  C2_LEFTTORIGHT, /* â - 226 */
-  C2_LEFTTORIGHT, /* ã - 227 */
-  C2_LEFTTORIGHT, /* ä - 228 */
-  C2_LEFTTORIGHT, /* å - 229 */
-  C2_LEFTTORIGHT, /* æ - 230 */
-  C2_LEFTTORIGHT, /* ç - 231 */
-  C2_LEFTTORIGHT, /* è - 232 */
-  C2_LEFTTORIGHT, /* é - 233 */
-  C2_LEFTTORIGHT, /* ê - 234 */
-  C2_LEFTTORIGHT, /* ë - 235 */
-  C2_LEFTTORIGHT, /* ì - 236 */
-  C2_LEFTTORIGHT, /* í - 237 */
-  C2_LEFTTORIGHT, /* î - 238 */
-  C2_LEFTTORIGHT, /* ï - 239 */
-  C2_LEFTTORIGHT, /* ð - 240 */
-  C2_LEFTTORIGHT, /* ñ - 241 */
-  C2_LEFTTORIGHT, /* ò - 242 */
-  C2_LEFTTORIGHT, /* ó - 243 */
-  C2_LEFTTORIGHT, /* ô - 244 */
-  C2_LEFTTORIGHT, /* õ - 245 */
-  C2_LEFTTORIGHT, /* ö - 246 */
-  C2_OTHERNEUTRAL, /* ÷ - 247 */
-  C2_LEFTTORIGHT, /* ø - 248 */
-  C2_LEFTTORIGHT, /* ù - 249 */
-  C2_LEFTTORIGHT, /* ú - 250 */
-  C2_LEFTTORIGHT, /* û - 251 */
-  C2_LEFTTORIGHT, /* ü - 252 */
-  C2_LEFTTORIGHT, /* ý - 253 */
-  C2_LEFTTORIGHT, /* þ - 254 */
-  C2_LEFTTORIGHT /* ÿ - 255 */
-};
-
-static const WORD CT_CType3_LUT[] = { 
-  0x0000, /*   -   0 */
-  0x0000, /*   -   1 */
-  0x0000, /*   -   2 */
-  0x0000, /*   -   3 */
-  0x0000, /*   -   4 */
-  0x0000, /*   -   5 */
-  0x0000, /*   -   6 */
-  0x0000, /*   -   7 */
-  0x0000, /*   -   8 */
-  0x0008, /*   -   9 */
-  0x0008, /*   -  10 */
-  0x0008, /*   -  11 */
-  0x0008, /*   -  12 */
-  0x0008, /*   -  13 */
-  0x0000, /*   -  14 */
-  0x0000, /*   -  15 */
-  0x0000, /*   -  16 */
-  0x0000, /*   -  17 */
-  0x0000, /*   -  18 */
-  0x0000, /*   -  19 */
-  0x0000, /*   -  20 */
-  0x0000, /*   -  21 */
-  0x0000, /*   -  22 */
-  0x0000, /*   -  23 */
-  0x0000, /*   -  24 */
-  0x0000, /*   -  25 */
-  0x0000, /*   -  26 */
-  0x0000, /*   -  27 */
-  0x0000, /*   -  28 */
-  0x0000, /*   -  29 */
-  0x0000, /*   -  30 */
-  0x0000, /*   -  31 */
-  0x0048, /*   -  32 */
-  0x0048, /* ! -  33 */
-  0x0448, /* " -  34 */ /* " */
-  0x0048, /* # -  35 */
-  0x0448, /* $ -  36 */
-  0x0048, /* % -  37 */
-  0x0048, /* & -  38 */
-  0x0440, /* ' -  39 */
-  0x0048, /* ( -  40 */
-  0x0048, /* ) -  41 */
-  0x0048, /* * -  42 */
-  0x0048, /* + -  43 */
-  0x0048, /* , -  44 */
-  0x0440, /* - -  45 */
-  0x0048, /* . -  46 */
-  0x0448, /* / -  47 */
-  0x0040, /* 0 -  48 */
-  0x0040, /* 1 -  49 */
-  0x0040, /* 2 -  50 */
-  0x0040, /* 3 -  51 */
-  0x0040, /* 4 -  52 */
-  0x0040, /* 5 -  53 */
-  0x0040, /* 6 -  54 */
-  0x0040, /* 7 -  55 */
-  0x0040, /* 8 -  56 */
-  0x0040, /* 9 -  57 */
-  0x0048, /* : -  58 */
-  0x0048, /* ; -  59 */
-  0x0048, /* < -  60 */
-  0x0448, /* = -  61 */
-  0x0048, /* > -  62 */
-  0x0048, /* ? -  63 */
-  0x0448, /* @ -  64 */
-  0x8040, /* A -  65 */
-  0x8040, /* B -  66 */
-  0x8040, /* C -  67 */
-  0x8040, /* D -  68 */
-  0x8040, /* E -  69 */
-  0x8040, /* F -  70 */
-  0x8040, /* G -  71 */
-  0x8040, /* H -  72 */
-  0x8040, /* I -  73 */
-  0x8040, /* J -  74 */
-  0x8040, /* K -  75 */
-  0x8040, /* L -  76 */
-  0x8040, /* M -  77 */
-  0x8040, /* N -  78 */
-  0x8040, /* O -  79 */
-  0x8040, /* P -  80 */
-  0x8040, /* Q -  81 */
-  0x8040, /* R -  82 */
-  0x8040, /* S -  83 */
-  0x8040, /* T -  84 */
-  0x8040, /* U -  85 */
-  0x8040, /* V -  86 */
-  0x8040, /* W -  87 */
-  0x8040, /* X -  88 */
-  0x8040, /* Y -  89 */
-  0x8040, /* Z -  90 */
-  0x0048, /* [ -  91 */
-  0x0448, /* \ -  92 */
-  0x0048, /* ] -  93 */
-  0x0448, /* ^ -  94 */
-  0x0448, /* _ -  95 */
-  0x0448, /* ` -  96 */
-  0x8040, /* a -  97 */
-  0x8040, /* b -  98 */
-  0x8040, /* c -  99 */
-  0x8040, /* d - 100 */
-  0x8040, /* e - 101 */
-  0x8040, /* f - 102 */
-  0x8040, /* g - 103 */
-  0x8040, /* h - 104 */
-  0x8040, /* i - 105 */
-  0x8040, /* j - 106 */
-  0x8040, /* k - 107 */
-  0x8040, /* l - 108 */
-  0x8040, /* m - 109 */
-  0x8040, /* n - 110 */
-  0x8040, /* o - 111 */
-  0x8040, /* p - 112 */
-  0x8040, /* q - 113 */
-  0x8040, /* r - 114 */
-  0x8040, /* s - 115 */
-  0x8040, /* t - 116 */
-  0x8040, /* u - 117 */
-  0x8040, /* v - 118 */
-  0x8040, /* w - 119 */
-  0x8040, /* x - 120 */
-  0x8040, /* y - 121 */
-  0x8040, /* z - 122 */
-  0x0048, /* { - 123 */
-  0x0048, /* | - 124 */
-  0x0048, /* } - 125 */
-  0x0448, /* ~ - 126 */
-  0x0000, /* \7f - 127 */
-  0x0000, /* \80 - 128 */
-  0x0000, /* \81 - 129 */
-  0x0008, /* \82 - 130 */
-  0x8000, /* \83 - 131 */
-  0x0008, /* \84 - 132 */
-  0x0008, /* \85 - 133 */
-  0x0008, /* \86 - 134 */
-  0x0008, /* \87 - 135 */
-  0x0001, /* \88 - 136 */
-  0x0008, /* \89 - 137 */
-  0x8003, /* \8a - 138 */
-  0x0008, /* \8b - 139 */
-  0x8000, /* \8c - 140 */
-  0x0000, /* \8d - 141 */
-  0x0000, /* \8e - 142 */
-  0x0000, /* \8f - 143 */
-  0x0000, /* \90 - 144 */
-  0x0088, /* \91 - 145 */
-  0x0088, /* \92 - 146 */
-  0x0088, /* \93 - 147 */
-  0x0088, /* \94 - 148 */
-  0x0008, /* \95 - 149 */
-  0x0400, /* \96 - 150 */
-  0x0400, /* \97 - 151 */
-  0x0408, /* \98 - 152 */
-  0x0000, /* \99 - 153 */
-  0x8003, /* \9a - 154 */
-  0x0008, /* \9b - 155 */
-  0x8000, /* \9c - 156 */
-  0x0000, /* \9d - 157 */
-  0x0000, /* \9e - 158 */
-  0x8003, /* \9f - 159 */
-  0x0008, /*   - 160 */
-  0x0008, /* ¡ - 161 */
-  0x0048, /* ¢ - 162 */
-  0x0048, /* £ - 163 */
-  0x0008, /* ¤ - 164 */
-  0x0048, /* ¥ - 165 */
-  0x0048, /* ¦ - 166 */
-  0x0008, /* § - 167 */
-  0x0408, /* ¨ - 168 */
-  0x0008, /* © - 169 */
-  0x0400, /* ª - 170 */
-  0x0008, /* « - 171 */
-  0x0048, /* ¬ - 172 */
-  0x0408, /* ­ - 173 */
-  0x0008, /* ® - 174 */
-  0x0448, /* ¯ - 175 */
-  0x0008, /* ° - 176 */
-  0x0008, /* ± - 177 */
-  0x0000, /* ² - 178 */
-  0x0000, /* ³ - 179 */
-  0x0408, /* ´ - 180 */
-  0x0008, /* µ - 181 */
-  0x0008, /* ¶ - 182 */
-  0x0008, /* · - 183 */
-  0x0408, /* ¸ - 184 */
-  0x0000, /* ¹ - 185 */
-  0x0400, /* º - 186 */
-  0x0008, /* » - 187 */
-  0x0000, /* ¼ - 188 */
-  0x0000, /* ½ - 189 */
-  0x0000, /* ¾ - 190 */
-  0x0008, /* ¿ - 191 */
-  0x8003, /* À - 192 */
-  0x8003, /* Á - 193 */
-  0x8003, /* Â - 194 */
-  0x8003, /* Ã - 195 */
-  0x8003, /* Ä - 196 */
-  0x8003, /* Å - 197 */
-  0x8000, /* Æ - 198 */
-  0x8003, /* Ç - 199 */
-  0x8003, /* È - 200 */
-  0x8003, /* É - 201 */
-  0x8003, /* Ê - 202 */
-  0x8003, /* Ë - 203 */
-  0x8003, /* Ì - 204 */
-  0x8003, /* Í - 205 */
-  0x8003, /* Î - 206 */
-  0x8003, /* Ï - 207 */
-  0x8000, /* Ð - 208 */
-  0x8003, /* Ñ - 209 */
-  0x8003, /* Ò - 210 */
-  0x8003, /* Ó - 211 */
-  0x8003, /* Ô - 212 */
-  0x8003, /* Õ - 213 */
-  0x8003, /* Ö - 214 */
-  0x0008, /* × - 215 */
-  0x8003, /* Ø - 216 */
-  0x8003, /* Ù - 217 */
-  0x8003, /* Ú - 218 */
-  0x8003, /* Û - 219 */
-  0x8003, /* Ü - 220 */
-  0x8003, /* Ý - 221 */
-  0x8000, /* Þ - 222 */
-  0x8000, /* ß - 223 */
-  0x8003, /* à - 224 */
-  0x8003, /* á - 225 */
-  0x8003, /* â - 226 */
-  0x8003, /* ã - 227 */
-  0x8003, /* ä - 228 */
-  0x8003, /* å - 229 */
-  0x8000, /* æ - 230 */
-  0x8003, /* ç - 231 */
-  0x8003, /* è - 232 */
-  0x8003, /* é - 233 */
-  0x8003, /* ê - 234 */
-  0x8003, /* ë - 235 */
-  0x8003, /* ì - 236 */
-  0x8003, /* í - 237 */
-  0x8003, /* î - 238 */
-  0x8003, /* ï - 239 */
-  0x8000, /* ð - 240 */
-  0x8003, /* ñ - 241 */
-  0x8003, /* ò - 242 */
-  0x8003, /* ó - 243 */
-  0x8003, /* ô - 244 */
-  0x8003, /* õ - 245 */
-  0x8003, /* ö - 246 */
-  0x0008, /* ÷ - 247 */
-  0x8003, /* ø - 248 */
-  0x8003, /* ù - 249 */
-  0x8003, /* ú - 250 */
-  0x8003, /* û - 251 */
-  0x8003, /* ü - 252 */
-  0x8003, /* ý - 253 */
-  0x8000, /* þ - 254 */
-  0x8003  /* ÿ - 255 */
-};
-
-
-
-WINBOOL
-STDCALL
-GetStringTypeExA(
-    LCID     Locale,
-    DWORD    dwInfoType,
-    LPCSTR lpSrcStr,
-    int      cchSrc,
-    LPWORD   lpCharType)
-{
-       int     i;
-       
-       if ((lpSrcStr==NULL) || (lpCharType==NULL) || (lpSrcStr==(LPCSTR)lpCharType))
-       {
-         SetLastError(ERROR_INVALID_PARAMETER);
-         return FALSE;
-       }
-
-       if (cchSrc==-1)
-         cchSrc=lstrlenA(lpSrcStr)+1;
-         
-       switch (dwInfoType) {
-       case CT_CTYPE1:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i] = 0;
-           if (isdigit(lpSrcStr[i])) lpCharType[i]|=C1_DIGIT;
-           if (isalpha(lpSrcStr[i])) lpCharType[i]|=C1_ALPHA;
-           if (islower(lpSrcStr[i])) lpCharType[i]|=C1_LOWER;
-           if (isupper(lpSrcStr[i])) lpCharType[i]|=C1_UPPER;
-           if (isspace(lpSrcStr[i])) lpCharType[i]|=C1_SPACE;
-           if (ispunct(lpSrcStr[i])) lpCharType[i]|=C1_PUNCT;
-           if (iscntrl(lpSrcStr[i])) lpCharType[i]|=C1_CNTRL;
-           if (isblank(lpSrcStr[i])) lpCharType[i]|=C1_BLANK; 
-           if (isxdigit(lpSrcStr[i])) lpCharType[i]|=C1_XDIGIT; 
-       }
-       return TRUE;
-
-       case CT_CTYPE2:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i]=(WORD)CT_CType2_LUT[i];
-         }
-         return TRUE;
-
-       case CT_CTYPE3:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i]=CT_CType3_LUT[i];
-         }
-         return TRUE;
-
-       default:
-         return FALSE;
-       }
-}
-
-WINBOOL
-STDCALL
-GetStringTypeA(
-    LCID     Locale,
-    DWORD    dwInfoType,
-    LPCSTR   lpSrcStr,
-    int      cchSrc,
-    LPWORD   lpCharType)
-{
-       return GetStringTypeExA(Locale, dwInfoType, lpSrcStr, cchSrc, lpCharType);
-}
-
-WINBOOL
-STDCALL
-GetStringTypeExW(
-    LCID     Locale,
-    DWORD    dwInfoType,
-    LPCWSTR lpSrcStr,
-    int      cchSrc,
-    LPWORD   lpCharType)
-{
-       int     i;
-       
-       if ((lpSrcStr==NULL) || (lpCharType==NULL) || (lpSrcStr==(LPCWSTR)lpCharType))
-       {
-         SetLastError(ERROR_INVALID_PARAMETER);
-         return FALSE;
-       }
-
-       if (cchSrc==-1)
-         cchSrc=lstrlenW(lpSrcStr)+1;
-         
-       switch (dwInfoType) {
-       case CT_CTYPE1:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i] = 0;
-           if (isdigit(lpSrcStr[i])) lpCharType[i]|=C1_DIGIT;
-           if (iswalpha(lpSrcStr[i])) lpCharType[i]|=C1_ALPHA;
-           if (iswlower(lpSrcStr[i])) lpCharType[i]|=C1_LOWER;
-           if (iswupper(lpSrcStr[i])) lpCharType[i]|=C1_UPPER;
-           if (isspace(lpSrcStr[i])) lpCharType[i]|=C1_SPACE;
-           if (ispunct(lpSrcStr[i])) lpCharType[i]|=C1_PUNCT;
-           if (iscntrl(lpSrcStr[i])) lpCharType[i]|=C1_CNTRL;
-           if (isblank(lpSrcStr[i])) lpCharType[i]|=C1_BLANK; 
-           if (isxdigit(lpSrcStr[i])) lpCharType[i]|=C1_XDIGIT; 
-       }
-       return TRUE;
-
-       case CT_CTYPE2:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i]=(WORD)CT_CType2_LUT[i];
-         }
-         return TRUE;
-
-       case CT_CTYPE3:
-         for (i=0;i<cchSrc;i++) 
-         {
-           lpCharType[i]=CT_CType3_LUT[i];
-         }
-         return TRUE;
-
-       default:
-         return FALSE;
-       }
-}
-
-WINBOOL
-STDCALL
-GetStringTypeW(
-    DWORD    dwInfoType,
-    LPCWSTR  lpSrcStr,
-    int      cchSrc,
-    LPWORD   lpCharType)
-{
-       LCID     Locale = GetThreadLocale();
-       return GetStringTypeExW(Locale, dwInfoType, lpSrcStr, cchSrc, lpCharType);
-}
-
-DWORD
-STDCALL
-VerLanguageNameA(
-        DWORD wLang,
-        LPSTR szLang,
-        DWORD nSize
-        )
-{
-       int     i;
-       int len;
-       for (i=0;languages[i].langid!=0;i++)
-               if (wLang==languages[i].langid)
-                       break;
-
-       len = min(strlen(languages[i].langname),nSize);
-       strncpy(szLang,languages[i].langname,len);
-       return len;
-}
-
-DWORD
-STDCALL
-VerLanguageNameW(
-        DWORD wLang,
-        LPWSTR szLang,
-        DWORD nSize
-        )
-{
-       int     i,j;
-       
-       for (i=0;languages[i].langid!=0;i++)
-               if (wLang==languages[i].langid)
-                       break;
-       for(j=0;j<nSize && languages[i].langname[j] != 0 ;i++)
-               szLang[j] = languages[i].langname[j];
-       szLang[j] = 0;
-       return strlen(languages[i].langname);
-}
-
-
-
-
-int
-STDCALL
-GetDateFormatW(
-    LCID     Locale,
-    DWORD    dwFlags,
-    CONST SYSTEMTIME *lpDate,
-    LPCWSTR lpFormat,
-    LPWSTR  lpDateStr,
-    int      cchDate)
-{
-       return 0;
-}
-
-/******************************************************************************
- *             GetDateFormatA  [KERNEL32.310]
- * Makes an ASCII string of the date
- *
- * This function uses format to format the date,  or,  if format
- * is NULL, uses the default for the locale.  format is a string
- * of literal fields and characters as follows:
- *
- * - d    single-digit (no leading zero) day (of month)
- * - dd   two-digit day (of month)
- * - ddd  short day-of-week name
- * - dddd long day-of-week name
- * - M    single-digit month
- * - MM   two-digit month
- * - MMM  short month name
- * - MMMM full month name
- * - y    two-digit year, no leading 0
- * - yy   two-digit year
- * - yyyy four-digit year
- * - gg   era string
- *
- */
-
-#if 0
-
-int STDCALL GetDateFormatA(LCID locale,DWORD flags,
-                             CONST SYSTEMTIME *xtime,
-                             LPCSTR format, LPSTR date,int datelen) 
-{
-   
-  char format_buf[40];
-  LPCSTR thisformat;
-  SYSTEMTIME t;
-  LPSYSTEMTIME thistime;
-  LCID thislocale;
-  INT ret;
-
-
-  
-  thislocale = OLE2NLS_CheckLocale ( locale );
-
-  if (xtime == NULL) {
-     GetSystemTime(&t);
-     thisti
-
-
-#endif