* sysdeps/i386/tls.h (THREAD_GSCOPE_RESET_FLAG): Use explicit
[glibc.git] / locale / programs / localedef.h
blobf8cc4ca9c1f0d9050ca76b7f671308cae4561d35
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 version 2 as
8 published by the Free Software Foundation.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software Foundation,
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19 #ifndef _LOCALEDEF_H
20 #define _LOCALEDEF_H 1
22 /* Get the basic locale definitions. */
23 #include <errno.h>
24 #include <locale.h>
25 #include <stdbool.h>
26 #include <stddef.h>
28 #include "repertoire.h"
29 #include "../locarchive.h"
32 /* We need a bitmask for the locales. */
33 enum
35 CTYPE_LOCALE = 1 << LC_CTYPE,
36 NUMERIC_LOCALE = 1 << LC_NUMERIC,
37 TIME_LOCALE = 1 << LC_TIME,
38 COLLATE_LOCALE = 1 << LC_COLLATE,
39 MONETARY_LOCALE = 1 << LC_MONETARY,
40 MESSAGES_LOCALE = 1 << LC_MESSAGES,
41 PAPER_LOCALE = 1 << LC_PAPER,
42 NAME_LOCALE = 1 << LC_NAME,
43 ADDRESS_LOCALE = 1 << LC_ADDRESS,
44 TELEPHONE_LOCALE = 1 << LC_TELEPHONE,
45 MEASUREMENT_LOCALE = 1 << LC_MEASUREMENT,
46 IDENTIFICATION_LOCALE = 1 << LC_IDENTIFICATION,
47 ALL_LOCALES = (1 << LC_CTYPE
48 | 1 << LC_NUMERIC
49 | 1 << LC_TIME
50 | 1 << LC_COLLATE
51 | 1 << LC_MONETARY
52 | 1 << LC_MESSAGES
53 | 1 << LC_PAPER
54 | 1 << LC_NAME
55 | 1 << LC_ADDRESS
56 | 1 << LC_TELEPHONE
57 | 1 << LC_MEASUREMENT
58 | 1 << LC_IDENTIFICATION)
62 /* Opaque types for the different locales. */
63 struct locale_ctype_t;
64 struct locale_collate_t;
65 struct locale_monetary_t;
66 struct locale_numeric_t;
67 struct locale_time_t;
68 struct locale_messages_t;
69 struct locale_paper_t;
70 struct locale_name_t;
71 struct locale_address_t;
72 struct locale_telephone_t;
73 struct locale_measurement_t;
74 struct locale_identification_t;
77 /* Definitions for the locale. */
78 struct localedef_t
80 struct localedef_t *next;
82 const char *name;
84 int needed;
85 int avail;
87 union
89 void *generic;
90 struct locale_ctype_t *ctype;
91 struct locale_collate_t *collate;
92 struct locale_monetary_t *monetary;
93 struct locale_numeric_t *numeric;
94 struct locale_time_t *time;
95 struct locale_messages_t *messages;
96 struct locale_paper_t *paper;
97 struct locale_name_t *name;
98 struct locale_address_t *address;
99 struct locale_telephone_t *telephone;
100 struct locale_measurement_t *measurement;
101 struct locale_identification_t *identification;
102 } categories[__LC_LAST];
104 size_t len[__LC_LAST];
106 const char *copy_name[__LC_LAST];
108 const char *repertoire_name;
112 /* Global variables of the localedef program. */
113 extern int verbose;
114 extern int be_quiet;
115 extern int oldstyle_tables;
116 extern const char *repertoire_global;
117 extern int max_locarchive_open_retry;
118 extern bool no_archive;
119 extern const char *alias_file;
122 /* Prototypes for a few program-wide used functions. */
123 extern void *xmalloc (size_t __n);
124 extern void *xcalloc (size_t __n, size_t __size);
125 extern void *xrealloc (void *__p, size_t __n);
126 extern char *xstrdup (const char *__str);
129 /* Wrapper to switch LC_CTYPE back to the locale specified in the
130 environment for output. */
131 #define WITH_CUR_LOCALE(stmt) \
132 do { \
133 int saved_errno = errno; \
134 const char *cur_locale_ = setlocale (LC_CTYPE, NULL); \
135 setlocale (LC_CTYPE, ""); \
136 errno = saved_errno; \
137 stmt; \
138 setlocale (LC_CTYPE, cur_locale_); \
139 } while (0)
142 /* Mark given locale as to be read. */
143 extern struct localedef_t *add_to_readlist (int locale, const char *name,
144 const char *repertoire_name,
145 int generate,
146 struct localedef_t *copy_locale);
148 /* Find the information for the locale NAME. */
149 extern struct localedef_t *find_locale (int locale, const char *name,
150 const char *repertoire_name,
151 const struct charmap_t *charmap);
153 /* Load (if necessary) the information for the locale NAME. */
154 extern struct localedef_t *load_locale (int locale, const char *name,
155 const char *repertoire_name,
156 const struct charmap_t *charmap,
157 struct localedef_t *copy_locale);
160 /* Open the locale archive. */
161 extern void open_archive (struct locarhandle *ah, bool readonly);
163 /* Close the locale archive. */
164 extern void close_archive (struct locarhandle *ah);
166 /* Add given locale data to the archive. */
167 extern int add_locale_to_archive (struct locarhandle *ah, const char *name,
168 locale_data_t data, bool replace);
170 /* Add content of named directories to locale archive. */
171 extern int add_locales_to_archive (size_t nlist, char *list[], bool replace);
173 /* Removed named locales from archive. */
174 extern int delete_locales_from_archive (size_t nlist, char *list[]);
176 /* List content of locale archive. */
177 extern void show_archive_content (int verbose);
179 #endif /* localedef.h */