From ce4784d8a56bd44533d70286e7ae3031aa21c3df Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 15 Jul 2000 19:59:10 +0000 Subject: [PATCH] Made --language behave the same as setting the LANGUAGE environment variable. --- include/main.h | 1 - include/ntddk.h | 3 --- include/options.h | 46 -------------------------------------- misc/main.c | 66 +------------------------------------------------------ misc/options.c | 9 ++++++-- ole/ole2nls.c | 47 ++++++++++++++++++++------------------- 6 files changed, 32 insertions(+), 140 deletions(-) diff --git a/include/main.h b/include/main.h index b724c07652a..7fd0713612d 100644 --- a/include/main.h +++ b/include/main.h @@ -11,7 +11,6 @@ extern BOOL MAIN_MainInit( char *argv[] ); extern void MAIN_WineInit(void); extern int MAIN_GetLanguageID(char*lang, char*country, char*charset, char*dialect); extern void MAIN_ParseDebugOptions(const char *options); -extern void MAIN_ParseLanguageOption( const char *arg ); extern BOOL RELAY_Init(void); extern int RELAY_ShowDebugmsgRelay(const char *func); diff --git a/include/ntddk.h b/include/ntddk.h index b4792e1f133..bb5c1aa9311 100644 --- a/include/ntddk.h +++ b/include/ntddk.h @@ -585,9 +585,6 @@ DWORD WINAPI RtlGetAce( /* string functions */ -WCHAR CDECL NTDLL_towupper(WCHAR code); -WCHAR CDECL NTDLL_towlower(WCHAR code); - VOID WINAPI RtlInitAnsiString( PANSI_STRING target, LPCSTR source); diff --git a/include/options.h b/include/options.h index fe5d3f53fa6..5df01054e32 100644 --- a/include/options.h +++ b/include/options.h @@ -9,58 +9,12 @@ #include "windef.h" - /* Supported languages */ - /* When adding a new language look at ole/ole2nls.c - * for the LANG_Xx name to choose, and uncomment there - * the proper case line - */ -typedef enum -{ LANG_Xx, /* Just to ensure value 0 is not used */ - LANG_En, /* English */ - LANG_Es, /* Spanish */ - LANG_De, /* German */ - LANG_No, /* Norwegian */ - LANG_Fr, /* French */ - LANG_Fi, /* Finnish */ - LANG_Da, /* Danish */ - LANG_Cs, /* Czech */ - LANG_Eo, /* Esperanto */ - LANG_It, /* Italian */ - LANG_Ko, /* Korean */ - LANG_Hu, /* Hungarian */ - LANG_Pl, /* Polish */ - LANG_Pt, /* Portuguese */ - LANG_Sk, /* Slovak */ - LANG_Sv, /* Swedish */ - LANG_Ca, /* Catalan */ - LANG_Nl, /* Dutch */ - LANG_Ru, /* Russian */ - LANG_Wa, /* Walon */ - LANG_Br, /* Breton */ - LANG_Cy, /* Welsh */ - LANG_Ga, /* Irish Gaelic */ - LANG_Gd, /* Scots Gaelic */ - LANG_Gv, /* Manx Gaelic */ - LANG_Kw, /* Cornish */ - LANG_Ja, /* Japanese */ - LANG_Hr /* Croatian */ -} WINE_LANGUAGE; - -typedef struct -{ - const char *name; - WORD langid; -} WINE_LANGUAGE_DEF; - -extern const WINE_LANGUAGE_DEF Languages[]; - struct options { char * desktopGeometry; /* NULL when no desktop */ char * display; /* display name */ char *dllFlags; /* -dll flags (hack for Winelib support) */ int synchronous; /* X synchronous mode */ - WINE_LANGUAGE language; /* Current language */ int managed; /* Managed windows */ char * configFileName; /* Command line config file */ }; diff --git a/misc/main.c b/misc/main.c index 7207e0f06cf..48d81e81a76 100644 --- a/misc/main.c +++ b/misc/main.c @@ -42,44 +42,7 @@ USER_DRIVER *USER_Driver = NULL; -/* when adding new languages look at ole/ole2nls.c - * for proper iso name and Windows code (add 0x0400 - * to the code listed there) - */ -const WINE_LANGUAGE_DEF Languages[] = -{ - {"En",0x0409}, /* LANG_En */ - {"Es",0x040A}, /* LANG_Es */ - {"De",0x0407}, /* LANG_De */ - {"No",0x0414}, /* LANG_No */ - {"Fr",0x040C}, /* LANG_Fr */ - {"Fi",0x040B}, /* LANG_Fi */ - {"Da",0x0406}, /* LANG_Da */ - {"Cs",0x0405}, /* LANG_Cs */ - {"Eo",0x048f}, /* LANG_Eo */ - {"It",0x0410}, /* LANG_It */ - {"Ko",0x0412}, /* LANG_Ko */ - {"Hu",0x040e}, /* LANG_Hu */ - {"Pl",0x0415}, /* LANG_Pl */ - {"Pt",0x0416}, /* LANG_Pt */ - {"Sk",0x041b}, /* LANG_Sk */ - {"Sv",0x041d}, /* LANG_Sv */ - {"Ca",0x0403}, /* LANG_Ca */ - {"Nl",0x0413}, /* LANG_Nl */ - {"Ru",0x0419}, /* LANG_Ru */ - {"Wa",0x0490}, /* LANG_Wa */ - {"Ga",0x043c}, /* LANG_Ga */ - {"Gd",0x083c}, /* LANG_Gd */ - {"Gv",0x0c3c}, /* LANG_Gv */ - {"Kw",0x0491}, /* LANG_Kw */ - {"Cy",0x0492}, /* LANG_Cy */ - {"Br",0x0493}, /* LANG_Br */ - {"Ja",0x0411}, /* LANG_Ja */ - {"Hr",0x041A}, /* LANG_Hr */ - {NULL,0} -}; - -WORD WINE_LanguageId = 0x409; /* english as default */ + /*********************************************************************** * MAIN_ParseDebugOptions @@ -574,8 +537,6 @@ int MAIN_GetLanguageID(LPCSTR Lang,LPCSTR Country,LPCSTR Charset,LPCSTR Dialect) LANG_ENTRY_BEGIN( "wa", WALON ) /* not official */ LANG_ENTRY_END( WALON ) - ret = LANG_ENGLISH; - end_MAIN_GetLanguageID: if (Charset) free(charset); free(dialect); @@ -583,31 +544,6 @@ end_MAIN_GetLanguageID: return ret; } -/*********************************************************************** - * MAIN_ParseLanguageOption - * - * Parse -language option. - */ -void MAIN_ParseLanguageOption( const char *arg ) -{ - const WINE_LANGUAGE_DEF *p = Languages; - - Options.language = LANG_Xx; /* First (dummy) language */ - for (;p->name;p++) - { - if (!lstrcmpiA( p->name, arg )) - { - WINE_LanguageId = p->langid; - return; - } - Options.language++; - } - MESSAGE( "Invalid language specified '%s'. Supported languages are: ", arg ); - for (p = Languages; p->name; p++) MESSAGE( "%s ", p->name ); - MESSAGE( "\n" ); - ExitProcess(1); -} - /*********************************************************************** * called_at_exit diff --git a/misc/options.c b/misc/options.c index ea5729a3326..d2607349803 100644 --- a/misc/options.c +++ b/misc/options.c @@ -36,7 +36,6 @@ struct options Options = NULL, /* display */ NULL, /* dllFlags */ FALSE, /* synchronous */ - 0, /* language */ FALSE, /* Managed windows */ NULL /* Alternate config file name */ }; @@ -64,6 +63,7 @@ static void do_desktop( const char *arg ); static void do_display( const char *arg ); static void do_dll( const char *arg ); static void do_help( const char *arg ); +static void do_language( const char *arg ); static void do_managed( const char *arg ); static void do_synchronous( const char *arg ); static void do_version( const char *arg ); @@ -84,7 +84,7 @@ static const struct option option_table[] = "--dosver x.xx DOS version to imitate (e.g. 6.22). Only valid with --winver win31" }, { "help", 'h', 0, 0, do_help, "--help,-h Show this help message" }, - { "language", 0, 1, 1, MAIN_ParseLanguageOption, + { "language", 0, 1, 1, do_language, "--language xx Set the language (one of Br,Ca,Cs,Cy,Da,De,En,Eo,Es,Fi,Fr,Ga,Gd,Gv,\n" " Hr,Hu,It,Ja,Ko,Kw,Nl,No,Pl,Pt,Sk,Sv,Ru,Wa)" }, { "managed", 0, 0, 0, do_managed, @@ -138,6 +138,11 @@ static void do_dll( const char *arg ) Options.dllFlags = xstrdup( arg ); } +static void do_language( const char *arg ) +{ + SetEnvironmentVariableA( "LANGUAGE", arg ); +} + static void do_managed( const char *arg ) { Options.managed = TRUE; diff --git a/ole/ole2nls.c b/ole/ole2nls.c index 716342f0ae4..1205314bcb8 100644 --- a/ole/ole2nls.c +++ b/ole/ole2nls.c @@ -166,25 +166,23 @@ LANGID WINAPI GetUserDefaultLangID(void) { /* caching result, if defined from environment, which should (?) not change during a WINE session */ static LANGID userLCID = 0; - if (Options.language) { - return Languages[Options.language].langid; - } - if (userLCID == 0) { - char *buf=NULL; + if (userLCID == 0) + { + char buf[256]; char *lang,*country,*charset,*dialect,*next; - int ret=0; - - buf=getenv("LANGUAGE"); - if (!buf) buf=getenv("LANG"); - if (!buf) buf=getenv("LC_ALL"); - if (!buf) buf=getenv("LC_MESSAGES"); - if (!buf) buf=getenv("LC_CTYPE"); - if (!buf) return userLCID = MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ); - - if (!strcmp(buf,"POSIX") || !strcmp(buf,"C")) { - return MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ); - } + + if (GetEnvironmentVariableA( "LANGUAGE", buf, sizeof(buf) )) goto ok; + if (GetEnvironmentVariableA( "LANG", buf, sizeof(buf) )) goto ok; + if (GetEnvironmentVariableA( "LC_ALL", buf, sizeof(buf) )) goto ok; + if (GetEnvironmentVariableA( "LC_MESSAGES", buf, sizeof(buf) )) goto ok; + if (GetEnvironmentVariableA( "LC_CTYPE", buf, sizeof(buf) )) goto ok; + + return userLCID = MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ); + + ok: + if (!strcmp(buf,"POSIX") || !strcmp(buf,"C")) + return userLCID = MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ); lang=buf; @@ -194,14 +192,17 @@ LANGID WINAPI GetUserDefaultLangID(void) charset=strchr(lang,'.'); if (charset) *charset++='\0'; country=strchr(lang,'_'); if (country) *country++='\0'; - ret=MAIN_GetLanguageID(lang, country, charset, dialect); + userLCID = MAIN_GetLanguageID(lang, country, charset, dialect); lang=next; - - } while (lang && !ret); - - /* FIXME : are strings returned by getenv() to be free()'ed ? */ - userLCID = (LANGID)ret; + } while (lang && !userLCID); + + if (!userLCID) + { + MESSAGE( "Warning: language '%s' not recognized, defaulting to English\n", + buf ); + userLCID = MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ); + } } return userLCID; } -- 2.11.4.GIT