diff options
author | Manuel Novoa III <mjn3@codepoet.org> | 2002-05-06 07:37:32 +0000 |
---|---|---|
committer | Manuel Novoa III <mjn3@codepoet.org> | 2002-05-06 07:37:32 +0000 |
commit | d07fdf8b9ece2c4339b325921add50792077bf97 (patch) | |
tree | b0886656bdd854728f2d1c05597368c4739ecc1b /include/locale.h | |
parent | 7f09a14cabbec158d683542e53f53ccfe75031fa (diff) |
New locale support (in development). Supports LC_CTYPE, LC_NUMERIC,
LC_TIME, LC_MONETARY, and LC_MESSAGES for the SUSv3 items. Also,
nl_langinfo() when real locale support is enabled.
New implementation of ctype.h.
New implementation of wctype.h.
New implementation of most of the string functions (smaller).
New implementation of the wcs/wmem functions. These are untested, but
they're also just preprocessor-modified versions ot the corresponding
str/mem functions.
Tweaked qsort and new bsearch.
Stuff still pending:
stdlib.h and wchar.h mb<->wc functions. I actually have working
versions of the stdlib ones, but the reentrant versions from
wchar.h require some reworking.
Basic replacement and translit support for wc->mb conversions.
(groundwork laid).
Simple-minded collate support such as was provided by the previous
locale implementation. (mostly done -- 8-bit codesets only)
Shared mmaping of the locale data and strerror message text.
Diffstat (limited to 'include/locale.h')
-rw-r--r-- | include/locale.h | 120 |
1 files changed, 100 insertions, 20 deletions
diff --git a/include/locale.h b/include/locale.h index b3736dd11..1101bb15a 100644 --- a/include/locale.h +++ b/include/locale.h @@ -1,30 +1,51 @@ -/* locale.h - * Support international type specific characters. +/* Copyright (C) 1991,92,1995-1999,2000,2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* + * ISO C99 Standard: 7.11 Localization <locale.h> */ -#ifndef _LOCALE_H -#define _LOCALE_H 1 + +#ifndef _LOCALE_H +#define _LOCALE_H 1 #include <features.h> -__BEGIN_DECLS +#define __need_NULL +#include <stddef.h> +#include <bits/uClibc_locale.h> -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else -#define NULL ((void *) 0) -#endif -#endif +__BEGIN_DECLS /* These are the possibilities for the first argument to setlocale. - The code assumes that LC_ALL is the highest value, and zero the lowest. */ -#define LC_CTYPE 0 -#define LC_NUMERIC 1 -#define LC_TIME 2 -#define LC_COLLATE 3 -#define LC_MONETARY 4 -#define LC_MESSAGES 5 -#define LC_ALL 6 + The code assumes that the lowest LC_* symbol has the value zero. */ +#define LC_CTYPE __LC_CTYPE +#define LC_NUMERIC __LC_NUMERIC +#define LC_TIME __LC_TIME +#define LC_COLLATE __LC_COLLATE +#define LC_MONETARY __LC_MONETARY +#define LC_MESSAGES __LC_MESSAGES +/* #define LC_PAPER __LC_PAPER */ +/* #define LC_NAME __LC_NAME */ +/* #define LC_ADDRESS __LC_ADDRESS */ +/* #define LC_TELEPHONE __LC_TELEPHONE */ +/* #define LC_MEASUREMENT __LC_MEASUREMENT */ +/* #define LC_IDENTIFICATION __LC_IDENTIFICATION */ +#define LC_ALL __LC_ALL /* Structure giving information about numeric and monetary notation. */ @@ -70,6 +91,31 @@ struct lconv 4 The sign string immediately follows the currency_symbol. */ char p_sign_posn; char n_sign_posn; +#ifdef __USE_ISOC99 + /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds. */ + char int_p_cs_precedes; + /* 1 iff a space separates int_curr_symbol from a positive value. */ + char int_p_sep_by_space; + /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds. */ + char int_n_cs_precedes; + /* 1 iff a space separates int_curr_symbol from a negative value. */ + char int_n_sep_by_space; + /* Positive and negative sign positions: + 0 Parentheses surround the quantity and int_curr_symbol. + 1 The sign string precedes the quantity and int_curr_symbol. + 2 The sign string follows the quantity and int_curr_symbol. + 3 The sign string immediately precedes the int_curr_symbol. + 4 The sign string immediately follows the int_curr_symbol. */ + char int_p_sign_posn; + char int_n_sign_posn; +#else + char __int_p_cs_precedes; + char __int_p_sep_by_space; + char __int_n_cs_precedes; + char __int_n_sep_by_space; + char __int_p_sign_posn; + char __int_n_sign_posn; +#endif }; @@ -79,6 +125,40 @@ extern char *setlocale (int __category, __const char *__locale) __THROW; /* Return the numeric/monetary information for the current locale. */ extern struct lconv *localeconv (void) __THROW; +#if 0 +/* #ifdef __USE_GNU */ +/* The concept of one static locale per category is not very well + thought out. Many applications will need to process its data using + information from several different locales. Another application is + the implementation of the internationalization handling in the + upcoming ISO C++ standard library. To support this another set of + the functions using locale data exist which have an additional + argument. + + Attention: all these functions are *not* standardized in any form. + This is a proof-of-concept implementation. */ + +/* Get locale datatype definition. */ +# include <xlocale.h> + +/* Return a reference to a data structure representing a set of locale + datasets. Unlike for the CATEGORY parameter for `setlocale' the + CATEGORY_MASK parameter here uses a single bit for each category. + I.e., 1 << LC_CTYPE means to load data for this category. If + BASE is non-null the appropriate category information in the BASE + record is replaced. */ +extern __locale_t __newlocale (int __category_mask, __const char *__locale, + __locale_t __base) __THROW; + +/* Return a duplicate of the set of locale in DATASET. All usage + counters are increased if necessary. */ +extern __locale_t __duplocale (__locale_t __dataset) __THROW; + +/* Free the data associated with a locale dataset previously returned + by a call to `setlocale_r'. */ +extern void __freelocale (__locale_t __dataset) __THROW; +#endif + __END_DECLS #endif /* locale.h */ |