2.9
[glibc/nacl-glibc.git] / locale / programs / localedef.h
blobbdff9e6f28735396aa43b33b0729d83aa04a0692
1 /* General definitions for localedef(1).
2 Copyright (C) 1998,1999,2000,2001,2002,2005 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4 Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published
8 by the Free Software Foundation; version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 #ifndef _LOCALEDEF_H
21 #define _LOCALEDEF_H 1
23 /* Get the basic locale definitions. */
24 #include <errno.h>
25 #include <locale.h>
26 #include <stdbool.h>
27 #include <stddef.h>
29 #include "repertoire.h"
30 #include "../locarchive.h"
33 /* We need a bitmask for the locales. */
34 enum
36 CTYPE_LOCALE = 1 << LC_CTYPE,
37 NUMERIC_LOCALE = 1 << LC_NUMERIC,
38 TIME_LOCALE = 1 << LC_TIME,
39 COLLATE_LOCALE = 1 << LC_COLLATE,
40 MONETARY_LOCALE = 1 << LC_MONETARY,
41 MESSAGES_LOCALE = 1 << LC_MESSAGES,
42 PAPER_LOCALE = 1 << LC_PAPER,
43 NAME_LOCALE = 1 << LC_NAME,
44 ADDRESS_LOCALE = 1 << LC_ADDRESS,
45 TELEPHONE_LOCALE = 1 << LC_TELEPHONE,
46 MEASUREMENT_LOCALE = 1 << LC_MEASUREMENT,
47 IDENTIFICATION_LOCALE = 1 << LC_IDENTIFICATION,
48 ALL_LOCALES = (1 << LC_CTYPE
49 | 1 << LC_NUMERIC
50 | 1 << LC_TIME
51 | 1 << LC_COLLATE
52 | 1 << LC_MONETARY
53 | 1 << LC_MESSAGES
54 | 1 << LC_PAPER
55 | 1 << LC_NAME
56 | 1 << LC_ADDRESS
57 | 1 << LC_TELEPHONE
58 | 1 << LC_MEASUREMENT
59 | 1 << LC_IDENTIFICATION)
63 /* Opaque types for the different locales. */
64 struct locale_ctype_t;
65 struct locale_collate_t;
66 struct locale_monetary_t;
67 struct locale_numeric_t;
68 struct locale_time_t;
69 struct locale_messages_t;
70 struct locale_paper_t;
71 struct locale_name_t;
72 struct locale_address_t;
73 struct locale_telephone_t;
74 struct locale_measurement_t;
75 struct locale_identification_t;
78 /* Definitions for the locale. */
79 struct localedef_t
81 struct localedef_t *next;
83 const char *name;
85 int needed;
86 int avail;
88 union
90 void *generic;
91 struct locale_ctype_t *ctype;
92 struct locale_collate_t *collate;
93 struct locale_monetary_t *monetary;
94 struct locale_numeric_t *numeric;
95 struct locale_time_t *time;
96 struct locale_messages_t *messages;
97 struct locale_paper_t *paper;
98 struct locale_name_t *name;
99 struct locale_address_t *address;
100 struct locale_telephone_t *telephone;
101 struct locale_measurement_t *measurement;
102 struct locale_identification_t *identification;
103 } categories[__LC_LAST];
105 size_t len[__LC_LAST];
107 const char *copy_name[__LC_LAST];
109 const char *repertoire_name;
113 /* Global variables of the localedef program. */
114 extern int verbose;
115 extern int be_quiet;
116 extern int oldstyle_tables;
117 extern const char *repertoire_global;
118 extern int max_locarchive_open_retry;
119 extern bool no_archive;
120 extern const char *alias_file;
123 /* Prototypes for a few program-wide used functions. */
124 extern void *xmalloc (size_t __n);
125 extern void *xcalloc (size_t __n, size_t __size);
126 extern void *xrealloc (void *__p, size_t __n);
127 extern char *xstrdup (const char *__str);
130 /* Wrapper to switch LC_CTYPE back to the locale specified in the
131 environment for output. */
132 #define WITH_CUR_LOCALE(stmt) \
133 do { \
134 int saved_errno = errno; \
135 const char *cur_locale_ = setlocale (LC_CTYPE, NULL); \
136 setlocale (LC_CTYPE, ""); \
137 errno = saved_errno; \
138 stmt; \
139 setlocale (LC_CTYPE, cur_locale_); \
140 } while (0)
143 /* Mark given locale as to be read. */
144 extern struct localedef_t *add_to_readlist (int locale, const char *name,
145 const char *repertoire_name,
146 int generate,
147 struct localedef_t *copy_locale);
149 /* Find the information for the locale NAME. */
150 extern struct localedef_t *find_locale (int locale, const char *name,
151 const char *repertoire_name,
152 const struct charmap_t *charmap);
154 /* Load (if necessary) the information for the locale NAME. */
155 extern struct localedef_t *load_locale (int locale, const char *name,
156 const char *repertoire_name,
157 const struct charmap_t *charmap,
158 struct localedef_t *copy_locale);
161 /* Open the locale archive. */
162 extern void open_archive (struct locarhandle *ah, bool readonly);
164 /* Close the locale archive. */
165 extern void close_archive (struct locarhandle *ah);
167 /* Add given locale data to the archive. */
168 extern int add_locale_to_archive (struct locarhandle *ah, const char *name,
169 locale_data_t data, bool replace);
171 /* Add content of named directories to locale archive. */
172 extern int add_locales_to_archive (size_t nlist, char *list[], bool replace);
174 /* Removed named locales from archive. */
175 extern int delete_locales_from_archive (size_t nlist, char *list[]);
177 /* List content of locale archive. */
178 extern void show_archive_content (int verbose);
180 #endif /* localedef.h */