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