00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _GETTEXTP_H
00021 #define _GETTEXTP_H
00022
00023 #include <stddef.h>
00024
00025 #ifdef _LIBC
00026 # include "../iconv/gconv_int.h"
00027 #else
00028 # if HAVE_ICONV
00029 # include <iconv.h>
00030 # endif
00031 #endif
00032
00033 #include "loadinfo.h"
00034
00035 #include "gettext.h"
00036
00037
00038
00039 #ifndef PARAMS
00040 # if __STDC__
00041 # define PARAMS(args) args
00042 # else
00043 # define PARAMS(args) ()
00044 # endif
00045 #endif
00046
00047 #ifndef internal_function
00048 # define internal_function
00049 #endif
00050
00051
00052
00053 #ifndef HAVE_BUILTIN_EXPECT
00054 # define __builtin_expect(expr, val) (expr)
00055 #endif
00056
00057 #ifndef W
00058 # define W(flag, data) ((flag) ? SWAP (data) : (data))
00059 #endif
00060
00061
00062 #ifdef _LIBC
00063 # include <byteswap.h>
00064 # define SWAP(i) bswap_32 (i)
00065 #else
00066
00067
00068 static inline nls_uint32 SWAP PARAMS ((unsigned int));
00069 static inline nls_uint32
00070 SWAP (ii)
00071 unsigned int ii;
00072 {
00073 nls_uint32 i = ii;
00074 return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
00075 }
00076 #endif
00077
00078
00079
00080
00081 struct expression
00082 {
00083 int nargs;
00084 enum operator
00085 {
00086
00087 var,
00088 num,
00089
00090 lnot,
00091
00092 mult,
00093 divide,
00094 module,
00095 plus,
00096 minus,
00097 less_than,
00098 greater_than,
00099 less_or_equal,
00100 greater_or_equal,
00101 equal,
00102 not_equal,
00103 land,
00104 lor,
00105
00106 qmop
00107 } operation;
00108 union
00109 {
00110 unsigned long int num;
00111 struct expression *args[3];
00112 } val;
00113 };
00114
00115
00116
00117 struct parse_args
00118 {
00119 const char *cp;
00120 struct expression *res;
00121 };
00122
00123
00124
00125 struct loaded_domain
00126 {
00127 const char *data;
00128 int use_mmap;
00129 size_t mmap_size;
00130 int must_swap;
00131 nls_uint32 nstrings;
00132 struct string_desc *orig_tab;
00133 struct string_desc *trans_tab;
00134 nls_uint32 hash_size;
00135 nls_uint32 *hash_tab;
00136 int codeset_cntr;
00137 #ifdef _LIBC
00138 __gconv_t conv;
00139 #else
00140 # if HAVE_ICONV
00141 iconv_t conv;
00142 # endif
00143 #endif
00144 char **conv_tab;
00145
00146 struct expression *plural;
00147 unsigned long int nplurals;
00148 };
00149
00150
00151
00152
00153
00154
00155
00156 # define ZERO 1
00157
00158
00159
00160
00161 struct binding
00162 {
00163 struct binding *next;
00164 char *dirname;
00165 int codeset_cntr;
00166 char *codeset;
00167 char domainname[ZERO];
00168 };
00169
00170
00171
00172
00173 extern int _nl_msg_cat_cntr;
00174
00175 struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
00176 char *__locale,
00177 const char *__domainname,
00178 struct binding *__domainbinding))
00179 internal_function;
00180 void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
00181 struct binding *__domainbinding))
00182 internal_function;
00183 void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
00184 internal_function;
00185 const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
00186 struct loaded_domain *__domain,
00187 struct binding *__domainbinding))
00188 internal_function;
00189 void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
00190 internal_function;
00191
00192 char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
00193 struct binding *domainbinding,
00194 const char *msgid, size_t *lengthp))
00195 internal_function;
00196
00197
00198
00199 extern const char *locale_charset PARAMS ((void)) internal_function;
00200
00201 #ifdef _LIBC
00202 extern char *__gettext PARAMS ((const char *__msgid));
00203 extern char *__dgettext PARAMS ((const char *__domainname,
00204 const char *__msgid));
00205 extern char *__dcgettext PARAMS ((const char *__domainname,
00206 const char *__msgid, int __category));
00207 extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
00208 unsigned long int __n));
00209 extern char *__dngettext PARAMS ((const char *__domainname,
00210 const char *__msgid1, const char *__msgid2,
00211 unsigned long int n));
00212 extern char *__dcngettext PARAMS ((const char *__domainname,
00213 const char *__msgid1, const char *__msgid2,
00214 unsigned long int __n, int __category));
00215 extern char *__dcigettext PARAMS ((const char *__domainname,
00216 const char *__msgid1, const char *__msgid2,
00217 int __plural, unsigned long int __n,
00218 int __category));
00219 extern char *__textdomain PARAMS ((const char *__domainname));
00220 extern char *__bindtextdomain PARAMS ((const char *__domainname,
00221 const char *__dirname));
00222 extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
00223 const char *__codeset));
00224 #else
00225 extern char *gettext__ PARAMS ((const char *__msgid));
00226 extern char *dgettext__ PARAMS ((const char *__domainname,
00227 const char *__msgid));
00228 extern char *dcgettext__ PARAMS ((const char *__domainname,
00229 const char *__msgid, int __category));
00230 extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
00231 unsigned long int __n));
00232 extern char *dngettext__ PARAMS ((const char *__domainname,
00233 const char *__msgid1, const char *__msgid2,
00234 unsigned long int __n));
00235 extern char *dcngettext__ PARAMS ((const char *__domainname,
00236 const char *__msgid1, const char *__msgid2,
00237 unsigned long int __n, int __category));
00238 extern char *dcigettext__ PARAMS ((const char *__domainname,
00239 const char *__msgid1, const char *__msgid2,
00240 int __plural, unsigned long int __n,
00241 int __category));
00242 extern char *textdomain__ PARAMS ((const char *__domainname));
00243 extern char *bindtextdomain__ PARAMS ((const char *__domainname,
00244 const char *__dirname));
00245 extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
00246 const char *__codeset));
00247 #endif
00248
00249 #ifdef _LIBC
00250 extern void __gettext_free_exp PARAMS ((struct expression *exp))
00251 internal_function;
00252 extern int __gettextparse PARAMS ((void *arg));
00253 #else
00254 extern void gettext_free_exp__ PARAMS ((struct expression *exp))
00255 internal_function;
00256 extern int gettextparse__ PARAMS ((void *arg));
00257 #endif
00258
00259
00260
00261 #endif