From 933e73facc338fb81f1f72af416ea57fbf439a2f Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 6 Mar 1995 03:00:08 +0000 Subject: Sun Mar 5 19:40:13 1995 Roland McGrath * locale/localeinfo.h: Rewritten for new locale system, using locale data files and with interface. * locale/setlocale.c: Rewritten to use locale data files. * langinfo.h: New file. * locale/langinfo.h: New file. * locale/nl_langinfo.c: New file. * locale/loadlocale.c: New file. * locale/lc-ctype.c: New file. * locale/lc-messages.c: New file. * locale/lc-monetary.c: New file. * locale/lc-numeric.c: New file. * locale/lc-time.c: New file. * locale/categories.def: New file. * locale/Makefile (headers): Remove localeinfo.h. (distribute): New variable; put localeinfo.h here, and categories.def. (routines): Add loadlocale. (categories): New variable. (aux): Use that to get C-category and lc-category. * ctype/ctype.h (_IS*): Use independent bits for all but _ISalnum. * locale/C-ctype.c, locale/C-messages.c: New files. * locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c: Default "C" locale data updated for new locale system. * locale/C-collate.c: File removed. * locale/C-ctype_ct.c: File removed. * locale/C-ctype_mb.c: File removed. * locale/C-response.c: File removed. * locale/localeconv.c: Use _NL_CURRENT macro to access locale data. * stdio/printf_fp.c, stdio/vfprintf.c, stdio/vfscanf.c, stdlib/strtod.c, time/asctime.c, time/strftime.c: Include ../locale/localeinfo.h and use _NL_CURRENT macro to access locale data. * time/localtime.c: Don't include . * time/tzset.c: Don't use locale items for default TZ value or "GMT" string (use "UTC"). * stdio/vfprintf.c [USE_IN_LIBIO] (PAD): Only call the function if WIDTH>0; update DONE. * malloc/malloc.c (morecore): Fix last change to calculate by blocks instead of bytes. --- locale/localeinfo.h | 231 ++++++++++------------------------------------------ 1 file changed, 45 insertions(+), 186 deletions(-) (limited to 'locale/localeinfo.h') diff --git a/locale/localeinfo.h b/locale/localeinfo.h index 5ba5fef..bb4738e 100644 --- a/locale/localeinfo.h +++ b/locale/localeinfo.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* localeinfo.h -- declarations for internal libc locale interfaces +Copyright (C) 1995 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 @@ -13,196 +14,54 @@ Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave, +not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* Locale-specific information. */ +#ifndef _LOCALEINFO_H +#define _LOCALEINFO_H 1 -#ifndef _LOCALEINFO_H +#include +#include +#include -#define _LOCALEINFO_H 1 +/* Magic number at the beginning of a locale data file for CATEGORY. */ +#define LIMAGIC(category) (0x051472CA ^ (category)) -#define __need_size_t -#define __need_wchar_t -#include -#include - - -/* Change these if the `wchar_t' type is changed. */ -#define WCHAR_MAX ((wchar_t) UCHAR_MAX) - - -/* Used by multibyte char functions. */ -typedef struct -{ - char *string; /* Bytes. */ - size_t len; /* # of bytes. */ - long int shift; /* # of mb_char's to shift. */ -} mb_char; - -struct ctype_mbchar_info -{ - size_t mb_max; /* Max MB char length. */ - mb_char *mb_chars; /* MB chars. */ -}; - -struct ctype_ctype_info -{ - unsigned short int *ctype_b; /* Characteristics. */ - short int *ctype_tolower; /* Case mappings. */ - short int *ctype_toupper; /* Case mappings. */ -}; - -struct ctype_info -{ - struct ctype_ctype_info *ctype; - struct ctype_mbchar_info *mbchar; -}; - -extern __const struct ctype_info *_ctype_info; - -/* These are necessary because they are used in a header file. */ -extern __const unsigned short int *__ctype_b; -extern __const short int *__ctype_tolower; -extern __const short int *__ctype_toupper; - - -/* Used by strcoll and strxfrm. */ -typedef struct -{ - unsigned char *values; - size_t nvalues; -} literal_value; - -typedef struct -{ - union +/* Structure describing locale data in core for a category. */ +struct locale_data { - literal_value literal; - /* %%% This may become a regex_t in the future. */ - char *regexp; - } replace, with; - unsigned int regexp:1; -} subst; - -struct collate_info -{ - size_t nsubsts; - subst *substs; - - unsigned char *values; - unsigned char *offsets; -}; - -extern __const struct collate_info *_collate_info; - - -/* Used by strtod, atof. */ -struct numeric_info -{ - char *decimal_point; - char *thousands_sep; - char *grouping; -}; - -extern __const struct numeric_info *_numeric_info; - - -/* Used in the return value of localeconv. */ -struct monetary_info -{ - char *int_curr_symbol; - char *currency_symbol; - char *mon_decimal_point; - char *mon_thousands_sep; - char *mon_grouping; - char *positive_sign; - char *negative_sign; - char int_frac_digits; - char frac_digits; - char p_cs_precedes; - char p_sep_by_space; - char n_cs_precedes; - char n_sep_by_space; - char p_sign_posn; - char n_sign_posn; -}; - -extern __const struct monetary_info *_monetary_info; - - -/* Used by strftime, asctime. */ -struct time_info -{ - char *abbrev_wkday[7]; /* Short weekday names. */ - char *full_wkday[7]; /* Full weekday names. */ - char *abbrev_month[12]; /* Short month names. */ - char *full_month[12]; /* Full month names. */ - char *ampm[2]; /* "AM" and "PM" strings. */ - - char *date_time; /* Appropriate date and time format. */ - char *date; /* Appropriate date format. */ - char *time; /* Appropriate time format. */ - - char *ut0; /* Name for GMT. */ - char *tz; /* Default TZ value. */ -}; - -extern __const struct time_info *_time_info; - -struct response_info -{ - /* Regexp for affirmative answers. */ - char *yesexpr; - - /* Regexp for negative answers. */ - char *noexpr; -}; - -extern __const struct response_info *_response_info; - -/* Locale structure. */ -typedef struct -{ - char *name; - int categories; - - unsigned int allocated:1; - - int subcategories; - size_t num_sublocales; - struct sub_locale *sublocales; - - __ptr_t *info; -} locale; - -typedef struct sub_locale -{ - unsigned int pointer:1; - - int categories; - char *name; - - locale *locale; -} sublocale; - - -/* This is the magic number that localeinfo object files begin with. - In case you're wondering why I chose the value 0x051472CA, it's - because I was born on 05-14-72 in Oakland, CA. */ -#define LIMAGIC 0x051472CA -/* This is the magic number that precedes each category-specific section - of a localeinfo object file. It's the arbitrary magic number above, - but modified by the category so that it's different from the per-file - magic number and unique for each category. */ -#define CATEGORY_MAGIC(x) (LIMAGIC ^ (x)) - -extern __const char *__lidir, *__lidefault; - -extern locale *__find_locale __P ((int categories, __const char *name)); -extern locale *__new_locale __P ((locale *)); -extern locale *__localefile __P ((__const char *file)); -extern void __free_locale __P ((locale *)); + const char *filedata; /* Region mapping the file data. */ + off_t filesize; /* Size of the file (and the region). */ + + unsigned int nstrings; /* Number of strings below. */ + const char *strings[0]; /* Items, usually pointers into `filedata'. */ + }; + + +/* For each category declare the variable for the current locale data. */ +#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \ +extern const struct locale_data *_nl_current_##category; +#include "categories.def" +#undef DEFINE_CATEGORY + +extern const char *const _nl_category_names[LC_ALL]; + +/* Extract the current CATEGORY locale's string for ITEM. */ +#define _NL_CURRENT(category, item) \ + (_nl_current_##category->strings[_NL_ITEM_INDEX (item)]) + +/* This is used in lc-CATEGORY.c to define _nl_current_CATEGORY. */ +#define _NL_CURRENT_DEFINE(category) \ + extern const struct locale_data _nl_C_##category; \ + const struct locale_data *nl_current_##category = &_nl_C_##category + +/* Load the locale data for CATEGORY from the file specified by *NAME. + If *NAME is "", use environment variables as specified by POSIX, + and fill in *NAME with the actual name used. */ +extern struct locale_data *_nl_load_locale (int category, char **name); + +/* Free the locale data read in by a `_nl_load_locale' call. */ +extern void _nl_free_locale (struct locale_data *); -#endif /* localeinfo.h */ +#endif /* localeinfo.h */ -- cgit v1.1