From 9198ac4dc6f5b3c32e1bd8964a1e42799fd6ec91 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 10 Oct 2011 09:50:43 +0000 Subject: * locale.cc (usage): Restructure, rephrase, add new options. Drop arguments, don't exit. (print_version): New function. (longopts): Add -f, -n, and -V options. Reorder. (opts): Add -f, -n, and -V options. (main): Call GetSystemDefaultUILanguage for -s option. Call GetUserDefaultUILanguage for -u option. Add -f and -n options and call GetUserDefaultLCID and GetSystemDefaultLCID respectively. Return 0 after calling usage in -h case. Add -V option and call print_version. Don't print full usage in default case, rather just a short help message similar to GNU tools. * utils.sgml (locale): Align to above changes. Rephrase description. --- winsup/utils/ChangeLog | 16 +++++++++ winsup/utils/locale.cc | 96 ++++++++++++++++++++++++++++++++++--------------- winsup/utils/utils.sgml | 51 +++++++++++++++++++------- 3 files changed, 123 insertions(+), 40 deletions(-) (limited to 'winsup/utils') diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index e1cca1540..b365b95a0 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,19 @@ +2011-10-10 Andy Koppe + Corinna Vinschen + + * locale.cc (usage): Restructure, rephrase, add new options. Drop + arguments, don't exit. + (print_version): New function. + (longopts): Add -f, -n, and -V options. Reorder. + (opts): Add -f, -n, and -V options. + (main): Call GetSystemDefaultUILanguage for -s option. Call + GetUserDefaultUILanguage for -u option. Add -f and -n options and + call GetUserDefaultLCID and GetSystemDefaultLCID respectively. Return + 0 after calling usage in -h case. Add -V option and call print_version. + Don't print full usage in default case, rather just a short help message + similar to GNU tools. + * utils.sgml (locale): Align to above changes. Rephrase description. + 2011-10-10 Corinna Vinschen * cygcheck.cc (check_keys): Use UNICODE Win32 functions. diff --git a/winsup/utils/locale.cc b/winsup/utils/locale.cc index 30568f638..a287d1f79 100644 --- a/winsup/utils/locale.cc +++ b/winsup/utils/locale.cc @@ -32,6 +32,7 @@ #include #include #include +#include #define WINVER 0x0601 #include @@ -40,44 +41,72 @@ extern char *__progname; -void usage (FILE *, int) __attribute__ ((noreturn)); +void +usage () +{ + printf ( +"Usage: %1$s [-amvhV]\n" +" or: %1$s [-ck] NAME\n" +" or: %1$s [-usfnU]\n" +"Get locale-specific information.\n" +"\n" +"System information:\n" +"\n" +" -a, --all-locales List all available supported locales\n" +" -m, --charmaps List all available character maps\n" +" -v, --verbose More verbose output\n" +"\n" +"Modify output format:\n" +"\n" +" -c, --category-name List information about given category NAME\n" +" -k, --keyword-name Print information about given keyword NAME\n" +"\n" +"Default locale information:\n" +"\n" +" -u, --user Print locale of user's default UI language\n" +" -s, --system Print locale of system default UI language\n" +" -f, --format Print locale of user's regional format settings\n" +" (time, numeric & monetary)\n" +" -n, --no-unicode Print system default locale for non-Unicode programs\n" +" -U, --utf Attach \".UTF-8\" to the result\n" +"\n" +"Other options:\n" +"\n" +" -h, --help This text\n" +" -V, --version Print program version and exit\n\n", + __progname); +} void -usage (FILE * stream, int status) +print_version () { - fprintf (stream, - "Usage: %s [-amsuUvh]\n" - " or: %s [-ck] NAME\n" - "Get locale-specific information.\n" - "\n" - "Options:\n" - "\n" - " -a, --all-locales List all available supported locales\n" - " -c, --category-name List information about given category NAME\n" - " -k, --keyword-name Print information about given keyword NAME\n" - " -m, --charmaps List all available character maps\n" - " -s, --system Print system default locale\n" - " -u, --user Print user's default locale\n" - " -U, --utf Attach \".UTF-8\" to the result\n" - " -v, --verbose More verbose output\n" - " -h, --help This text\n", - __progname, __progname); - exit (status); + printf ("%s (cygwin) %d.%d.%d\n" + "Get locale-specific information.\n" + "Copyright 2011 Red Hat, Inc.\n" + "Compiled on %s\n", + __progname, + CYGWIN_VERSION_DLL_MAJOR / 1000, + CYGWIN_VERSION_DLL_MAJOR % 1000, + CYGWIN_VERSION_DLL_MINOR, + __DATE__); } struct option longopts[] = { {"all-locales", no_argument, NULL, 'a'}, {"category-name", no_argument, NULL, 'c'}, + {"format", no_argument, NULL, 'f'}, + {"help", no_argument, NULL, 'h'}, {"keyword-name", no_argument, NULL, 'k'}, {"charmaps", no_argument, NULL, 'm'}, + {"no-unicode", no_argument, NULL, 'n'}, {"system", no_argument, NULL, 's'}, {"user", no_argument, NULL, 'u'}, {"utf", no_argument, NULL, 'U'}, {"verbose", no_argument, NULL, 'v'}, - {"help", no_argument, NULL, 'h'}, + {"version", no_argument, NULL, 'V'}, {0, no_argument, NULL, 0} }; -const char *opts = "achkmsuUv"; +const char *opts = "acfhkmnsuUvV"; int getlocale (LCID lcid, char *name) @@ -772,10 +801,16 @@ main (int argc, char **argv) maps = 1; break; case 's': - lcid = LOCALE_SYSTEM_DEFAULT; + lcid = GetSystemDefaultUILanguage (); break; case 'u': - lcid = LOCALE_USER_DEFAULT; + lcid = GetUserDefaultUILanguage (); + break; + case 'f': + lcid = GetUserDefaultLCID (); + break; + case 'n': + lcid = GetSystemDefaultLCID (); break; case 'U': utf = ".UTF-8"; @@ -784,11 +819,16 @@ main (int argc, char **argv) verbose = 1; break; case 'h': - usage (stdout, 0); - break; + usage (); + return 0; + case 'V': + print_version (); + return 0; default: - usage (stderr, 1); - break; + fprintf (stderr, + "Try `%1$s --help' or `%1$s -h' for more information.\n", + __progname); + return 1; } if (all) print_all_locales (verbose); diff --git a/winsup/utils/utils.sgml b/winsup/utils/utils.sgml index f57f7248e..ef6dfdb65 100644 --- a/winsup/utils/utils.sgml +++ b/winsup/utils/utils.sgml @@ -606,37 +606,64 @@ SIGUSR2 31 user defined signal 2 locale -Usage: locale [-amsuUvh] +Usage: locale [-amvhV] or: locale [-ck] NAME + or: locale [-usfnU] Get locale-specific information. -Options: +System information: -a, --all-locales List all available supported locales - -c, --category-name List information about given category NAME - -k, --keyword-name Print information about given keyword NAME -m, --charmaps List all available character maps - -s, --system Print system default locale - -u, --user Print user's default locale - -U, --utf Attach ".UTF-8" to the result -v, --verbose More verbose output + +Modify output format: + + -c, --category-name List information about given category NAME + -k, --keyword-name Print information about given keyword NAME + +Default locale information: + + -u, --user Print locale of user's default UI language + -s, --system Print locale of system default UI language + -f, --format Print locale of user's regional format settings + (time, numeric & monetary) + -n, --no-unicode Print system default locale for non-Unicode programs + -U, --utf Attach \".UTF-8\" to the result + +Other options: + -h, --help This text + -V, --version Print program version and exit locale without parameters prints information about the current locale environment settings. +The -u, -s, -f, +and -n options can be used to request the various Windows +locale settings. The purpose is to use this command in scripts to set the +POSIX locale variables. + The -u option prints the current user's Windows -default locale to stdout. The -s option prints the -systems default locale instead. With the -U option -locale appends a ".UTF-8". This can be used in scripts -to set the Cygwin locale to the Windows user or system default, for instance: - +UI locale to stdout. In Windows Vista and Windows 7 this setting is called +the "Display Language"; there was no corresponding user setting in Windows XP. +The -s option prints the systems default instead. +The -f option prints the user's setting for time, date, +number and currency. That's equivalent to the setting in the "Formats" or +"Regional Options" tab in the "Region and Language" or "Regional and Language +Options" dialog. With the -U option +locale appends a ".UTF-8". + +Usage example: bash$ export LANG=$(locale -uU) bash$ echo $LANG en_US.UTF-8 +bash$ export LC_TIME=$(locale -fU) +bash$ echo $LC_TIME +de_DE.UTF-8 The -a option is helpful to learn which locales -- cgit v1.2.3