(struct expression, struct parse_args, __gettext_free_exp, __gettextparse):
[kopensolaris-gnu/glibc.git] / intl / gettextP.h
1 /* Header describing internals of libintl library.
2    Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library 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 GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #ifndef _GETTEXTP_H
22 #define _GETTEXTP_H
23
24 #include <stddef.h>             /* Get size_t.  */
25
26 #ifdef _LIBC
27 # include "../iconv/gconv_int.h"
28 #else
29 # if HAVE_ICONV
30 #  include <iconv.h>
31 # endif
32 #endif
33
34 #include "loadinfo.h"
35
36 #include "gettext.h"            /* Get nls_uint32.  */
37
38 /* @@ end of prolog @@ */
39
40 #ifndef PARAMS
41 # if __STDC__
42 #  define PARAMS(args) args
43 # else
44 #  define PARAMS(args) ()
45 # endif
46 #endif
47
48 #ifndef internal_function
49 # define internal_function
50 #endif
51
52 /* Tell the compiler when a conditional or integer expression is
53    almost always true or almost always false.  */
54 #ifndef HAVE_BUILTIN_EXPECT
55 # define __builtin_expect(expr, val) (expr)
56 #endif
57
58 #ifndef W
59 # define W(flag, data) ((flag) ? SWAP (data) : (data))
60 #endif
61
62
63 #ifdef _LIBC
64 # include <byteswap.h>
65 # define SWAP(i) bswap_32 (i)
66 #else
67 static nls_uint32 SWAP PARAMS ((nls_uint32 i));
68
69 static inline nls_uint32
70 SWAP (i)
71      nls_uint32 i;
72 {
73   return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
74 }
75 #endif
76
77
78 /* The representation of an opened message catalog.  */
79 struct loaded_domain
80 {
81   const char *data;
82   int use_mmap;
83   size_t mmap_size;
84   int must_swap;
85   nls_uint32 nstrings;
86   struct string_desc *orig_tab;
87   struct string_desc *trans_tab;
88   nls_uint32 hash_size;
89   nls_uint32 *hash_tab;
90   int codeset_cntr;
91 #ifdef _LIBC
92   __gconv_t conv;
93 #else
94 # if HAVE_ICONV
95   iconv_t conv;
96 # endif
97 #endif
98   char **conv_tab;
99
100   struct expression *plural;
101   unsigned long int nplurals;
102 };
103
104 /* We want to allocate a string at the end of the struct.  But ISO C
105    doesn't allow zero sized arrays.  */
106 #ifdef __GNUC__
107 # define ZERO 0
108 #else
109 # define ZERO 1
110 #endif
111
112 /* A set of settings bound to a message domain.  Used to store settings
113    from bindtextdomain() and bind_textdomain_codeset().  */
114 struct binding
115 {
116   struct binding *next;
117   char *dirname;
118   int codeset_cntr;     /* Incremented each time codeset changes.  */
119   char *codeset;
120   char domainname[ZERO];
121 };
122
123 /* A counter which is incremented each time some previous translations
124    become invalid.
125    This variable is part of the external ABI of the GNU libintl.  */
126 extern int _nl_msg_cat_cntr;
127
128 struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
129                                                  char *__locale,
130                                                  const char *__domainname,
131                                               struct binding *__domainbinding))
132      internal_function;
133 void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
134                               struct binding *__domainbinding))
135      internal_function;
136 void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
137      internal_function;
138 const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
139                                           struct loaded_domain *__domain,
140                                           struct binding *__domainbinding))
141      internal_function;
142 void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
143      internal_function;
144
145 char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
146                             struct binding *domainbinding,
147                             const char *msgid, size_t *lengthp))
148      internal_function;
149
150 #ifdef _LIBC
151 extern char *__gettext PARAMS ((const char *__msgid));
152 extern char *__dgettext PARAMS ((const char *__domainname,
153                                  const char *__msgid));
154 extern char *__dcgettext PARAMS ((const char *__domainname,
155                                   const char *__msgid, int __category));
156 extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
157                                  unsigned long int __n));
158 extern char *__dngettext PARAMS ((const char *__domainname,
159                                   const char *__msgid1, const char *__msgid2,
160                                   unsigned long int n));
161 extern char *__dcngettext PARAMS ((const char *__domainname,
162                                    const char *__msgid1, const char *__msgid2,
163                                    unsigned long int __n, int __category));
164 extern char *__dcigettext PARAMS ((const char *__domainname,
165                                    const char *__msgid1, const char *__msgid2,
166                                    int __plural, unsigned long int __n,
167                                    int __category));
168 extern char *__textdomain PARAMS ((const char *__domainname));
169 extern char *__bindtextdomain PARAMS ((const char *__domainname,
170                                        const char *__dirname));
171 extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
172                                                 const char *__codeset));
173 #else
174 extern char *gettext__ PARAMS ((const char *__msgid));
175 extern char *dgettext__ PARAMS ((const char *__domainname,
176                                  const char *__msgid));
177 extern char *dcgettext__ PARAMS ((const char *__domainname,
178                                   const char *__msgid, int __category));
179 extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
180                                  unsigned long int __n));
181 extern char *dngettext__ PARAMS ((const char *__domainname,
182                                   const char *__msgid1, const char *__msgid2,
183                                   unsigned long int __n));
184 extern char *dcngettext__ PARAMS ((const char *__domainname,
185                                    const char *__msgid1, const char *__msgid2,
186                                    unsigned long int __n, int __category));
187 extern char *dcigettext__ PARAMS ((const char *__domainname,
188                                    const char *__msgid1, const char *__msgid2,
189                                    int __plural, unsigned long int __n,
190                                    int __category));
191 extern char *textdomain__ PARAMS ((const char *__domainname));
192 extern char *bindtextdomain__ PARAMS ((const char *__domainname,
193                                        const char *__dirname));
194 extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
195                                                 const char *__codeset));
196 #endif
197
198 /* @@ begin of epilog @@ */
199
200 #endif /* gettextP.h  */