Initial revision
[kopensolaris-gnu/glibc.git] / locale / localeinfo.h
1 /* Copyright (C) 1991 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB.  If
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA.  */
18
19 /* Locale-specific information.  */
20
21 #ifndef _LOCALEINFO_H
22
23 #define _LOCALEINFO_H   1
24
25 #define __need_size_t
26 #define __need_wchar_t
27 #include <stddef.h>
28 #include <limits.h>
29
30
31 /* Change these if the `wchar_t' type is changed.  */
32 #define WCHAR_MAX       ((wchar_t) UCHAR_MAX)
33
34
35 /* Used by multibyte char functions.  */
36 typedef struct
37   {
38     char *string;       /* Bytes.  */
39     size_t len;         /* # of bytes.  */
40     long int shift;     /* # of mb_char's to shift.  */
41   } mb_char;
42
43 struct ctype_mbchar_info
44   {
45     size_t mb_max;              /* Max MB char length.  */
46     mb_char *mb_chars;          /* MB chars.  */
47   };
48
49 struct ctype_ctype_info
50   {
51     unsigned char *ctype_b;             /* Characteristics.  */
52     unsigned char *ctype_tolower;       /* Case mappings.  */
53     unsigned char *ctype_toupper;       /* Case mappings.  */
54   };
55
56 struct ctype_info
57   {
58     struct ctype_ctype_info *ctype;
59     struct ctype_mbchar_info *mbchar;
60   };
61
62 extern CONST struct ctype_info *_ctype_info;
63
64 /* These are necessary because they are used in a header file.  */
65 extern CONST unsigned char *__ctype_b;
66 extern CONST unsigned char *__ctype_tolower;
67 extern CONST unsigned char *__ctype_toupper;
68
69
70 /* Used by strcoll and strxfrm.  */
71 typedef struct
72   {
73     unsigned char *values;
74     size_t nvalues;
75   } literal_value;
76
77 typedef struct
78   {
79     union
80       {
81         literal_value literal;
82         /* %%% This may become a regex_t in the future.  */
83         char *regexp;
84       } replace, with;
85     unsigned int regexp:1;
86   } subst;
87
88 struct collate_info
89   {
90     size_t nsubsts;
91     subst *substs;
92
93     unsigned char *values;
94     unsigned char *offsets;
95   };
96
97 extern CONST struct collate_info *_collate_info;
98
99
100 /* Used by strtod, atof.  */
101 struct numeric_info
102   {
103     char *decimal_point;
104     char *thousands_sep;
105     char *grouping;
106   };
107
108 extern CONST struct numeric_info *_numeric_info;
109
110
111 /* Used in the return value of localeconv.  */
112 struct monetary_info
113   {
114     char *int_curr_symbol;
115     char *currency_symbol;
116     char *mon_decimal_point;
117     char *mon_thousands_sep;
118     char *mon_grouping;
119     char *positive_sign;
120     char *negative_sign;
121     char int_frac_digits;
122     char frac_digits;
123     char p_cs_precedes;
124     char p_sep_by_space;
125     char n_cs_precedes;
126     char n_sep_by_space;
127     char p_sign_posn;
128     char n_sign_posn;
129   };
130
131 extern CONST struct monetary_info *_monetary_info;
132
133
134 /* Used by strftime, asctime.  */
135 struct time_info
136   {
137     char *abbrev_wkday[7];      /* Short weekday names.  */
138     char *full_wkday[7];        /* Full weekday names.  */
139     char *abbrev_month[12];     /* Short month names.  */
140     char *full_month[12];       /* Full month names.  */
141     char *ampm[2];              /* "AM" and "PM" strings.  */
142
143     char *date_time;            /* Appropriate date and time format.  */
144     char *date;                 /* Appropriate date format.  */
145     char *time;                 /* Appropriate time format.  */
146
147     char *ut0;                  /* Name for GMT.  */
148     char *tz;                   /* Default TZ value.  */
149   };
150
151 extern CONST struct time_info *_time_info;
152
153 struct response_info
154   {
155     /* Regexp for affirmative answers.  */
156     char *yesexpr;
157
158     /* Regexp for negative answers.  */
159     char *noexpr;
160   };
161
162 extern CONST struct response_info *_response_info;
163
164 /* Locale structure.  */
165 typedef struct
166   {
167     char *name;
168     int categories;
169
170     unsigned int allocated:1;
171
172     int subcategories;
173     size_t num_sublocales;
174     struct sub_locale *sublocales;
175
176     PTR *info;
177   } locale;
178
179 typedef struct sub_locale
180   {
181     unsigned int pointer:1;
182
183     int categories;
184     char *name;
185
186     locale *locale;
187   } sublocale;
188
189
190 /* This is the magic number that localeinfo object files begin with.
191    In case you're wondering why I chose the value 0x051472CA, it's
192    because I was born on 05-14-72 in Oakland, CA.  */
193 #define LIMAGIC         0x051472CA
194 /* This is the magic number that precedes each category-specific section
195    of a localeinfo object file.  It's the arbitrary magic number above,
196    but modified by the category so that it's different from the per-file
197    magic number and unique for each category.  */
198 #define CATEGORY_MAGIC(x)       (LIMAGIC ^ (x))
199
200 extern CONST char *__lidir, *__lidefault;
201
202 extern locale *EXFUN(__find_locale, (int categories, CONST char *name));
203 extern locale *EXFUN(__new_locale, (locale *));
204 extern locale *EXFUN(__localefile, (CONST char *file));
205 extern void EXFUN(__free_locale, (locale *));
206
207
208 #endif  /* localeinfo.h  */