* 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.
This commit is contained in:
Corinna Vinschen 2011-10-10 09:50:43 +00:00
parent f818494c63
commit 9198ac4dc6
3 changed files with 123 additions and 40 deletions

View File

@ -1,3 +1,19 @@
2011-10-10 Andy Koppe <andy.koppe@gmail.com>
Corinna Vinschen <corinna@vinschen.de>
* 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 <corinna@vinschen.de>
* cygcheck.cc (check_keys): Use UNICODE Win32 functions.

View File

@ -32,6 +32,7 @@
#include <langinfo.h>
#include <limits.h>
#include <sys/cygwin.h>
#include <cygwin/version.h>
#define WINVER 0x0601
#include <windows.h>
@ -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);

View File

@ -606,37 +606,64 @@ SIGUSR2 31 user defined signal 2
<sect2 id="locale"><title>locale</title>
<screen>
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
-m, --charmaps List all available character maps
-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
-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
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 &amp; 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
</screen>
<para><command>locale</command> without parameters prints information about
the current locale environment settings.</para>
<para>The <literal>-u</literal>, <literal>-s</literal>, <literal>-f</literal>,
and <literal>-n</literal> 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.</para>
<para>The <literal>-u</literal> option prints the current user's Windows
default locale to stdout. The <literal>-s</literal> option prints the
systems default locale instead. With the <literal>-U</literal> option
<command>locale</command> appends a ".UTF-8". This can be used in scripts
to set the Cygwin locale to the Windows user or system default, for instance:
</para>
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 <literal>-s</literal> option prints the systems default instead.
The <literal>-f</literal> 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 <literal>-U</literal> option
<command>locale</command> appends a ".UTF-8".</para>
<para>Usage example:</para>
<screen>
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
</screen>
<para>The <literal>-a</literal> option is helpful to learn which locales