Add prototypes for new builtins.
[kopensolaris-gnu/glibc.git] / iconv / gconv.h
1 /* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9
10    The GNU C Library 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 GNU
13    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public
16    License along with the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.  */
19
20 #ifndef _GCONV_H
21 #define _GCONV_H        1
22
23 #include <features.h>
24 #include <sys/types.h>
25 #include <regex.h>
26
27 __BEGIN_DECLS
28
29 /* ISO 10646 value used to signal invalid value.  */
30 #define UNKNOWN_10646_CHAR      ((wchar_t) 0xfffd)
31
32 /* Error codes for gconv functions.  */
33 enum
34 {
35   GCONV_OK = 0,
36   GCONV_NOCONV,
37   GCONV_NODB,
38   GCONV_NOMEM,
39
40   GCONV_EMPTY_INPUT,
41   GCONV_FULL_OUTPUT,
42   GCONV_ILLEGAL_INPUT,
43   GCONV_INCOMPLETE_INPUT,
44
45   GCONV_ILLEGAL_DESCRIPTOR,
46   GCONV_INTERNAL_ERROR
47 };
48
49
50 /* Structure for alias definition.  Simply to strings.  */
51 struct gconv_alias
52 {
53   __const char *fromname;
54   __const char *toname;
55 };
56
57
58 /* Default size of intermediate buffers.  */
59 #define GCONV_DEFAULT_BUFSIZE   8160
60
61
62 /* Forward declarations.  */
63 struct gconv_step;
64 struct gconv_step_data;
65
66
67 /* Type of a conversion function.  */
68 typedef int (*gconv_fct) __P ((struct gconv_step *,
69                                struct gconv_step_data *,
70                                __const char *, size_t *, size_t *, int));
71
72 /* Constructor and destructor for local data for conversion step.  */
73 typedef int (*gconv_init_fct) __P ((struct gconv_step *,
74                                     struct gconv_step_data *));
75 typedef void (*gconv_end_fct) __P ((struct gconv_step_data *));
76
77
78 /* Description of a conversion step.  */
79 struct gconv_step
80 {
81   void *shlib_handle;
82
83   __const char *from_name;
84   __const char *to_name;
85
86   gconv_fct fct;
87   gconv_init_fct init_fct;
88   gconv_end_fct end_fct;
89 };
90
91 /* Additional data for steps in use of conversion descriptor.  This is
92    allocated by the `init' function.  */
93 struct gconv_step_data
94 {
95   char *outbuf;         /* Output buffer for this step.  */
96   size_t outbufavail;   /* Bytes already available in output buffer.  */
97   size_t outbufsize;    /* Size of output buffer.  */
98
99   int is_last;
100
101   void *data;           /* Pointer to step-local data.  */
102 };
103
104 /* Combine conversion step description with data.  */
105 typedef struct gconv_info
106 {
107   size_t nsteps;
108   struct gconv_step *steps;
109   struct gconv_step_data *data;
110 } *gconv_t;
111
112
113 /* Description for an available conversion module.  */
114 struct gconv_module
115 {
116   __const char *from_pattern;
117   __const char *from_constpfx;
118   size_t from_constpfx_len;
119   __const regex_t *from_regex;
120
121   __const char *to_string;
122
123   int cost;
124
125   __const char *module_name;
126 };
127
128
129 /* Global variables.  */
130
131 /* Database of alias names.  */
132 extern void *__gconv_alias_db;
133
134 /* Array with available modules.  */
135 extern size_t __gconv_nmodules;
136 extern struct gconv_module **__gconv_modules_db;
137
138
139 /* Return in *HANDLE decriptor for transformation from FROMSET to TOSET.  */
140 extern int __gconv_open __P ((__const char *__toset, __const char *__fromset,
141                               gconv_t *__handle));
142
143 /* Free resources associated with transformation descriptor CD.  */
144 extern int __gconv_close __P ((gconv_t cd));
145
146 /* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF
147    according to rules described by CD and place up to *OUTBYTESLEFT
148    bytes in buffer starting at *OUTBUF.  Return number of written
149    characters in *CONVERTED if this pointer is not null.  */
150 extern int __gconv __P ((gconv_t __cd,
151                          __const char **__inbuf, size_t *__inbytesleft,
152                          char **__outbuf, size_t *__outbytesleft,
153                          size_t *__converted));
154
155 /* Return in *HANDLE a pointer to an array with *NSTEPS elements describing
156    the single steps necessary for transformation from FROMSET to TOSET.  */
157 extern int __gconv_find_transform __P ((__const char *__toset,
158                                         __const char *__fromset,
159                                         struct gconv_step **__handle,
160                                         size_t *__nsteps));
161
162 /* Read all the configuration data and cache it.  */
163 extern void __gconv_read_conf __P ((void));
164
165 /* Comparison function to search alias.  */
166 extern int __gconv_alias_compare __P ((__const void *__p1,
167                                        __const void *__p2));
168
169 /* Clear reference to transformation step implementations which might
170    cause the code to be unloaded.  */
171 extern int __gconv_close_transform __P ((struct gconv_step *__steps,
172                                          size_t __nsteps));
173
174
175 /* Find in the shared object associated with HANDLE for a function with
176    name NAME.  Return function pointer or NULL.  */
177 extern void *__gconv_find_func __P ((void *__handle, __const char *__name));
178
179 /* Load shared object named by NAME.  If already loaded increment reference
180    count.  */
181 extern void *__gconv_find_shlib __P ((__const char *__name));
182
183 /* Release shared object.  If no further reference is available unload
184    the object.  */
185 extern int __gconv_release_shlib __P ((void *__handle));
186
187 /* Fill STEP with information about builtin module with NAME.  */
188 extern void __gconv_get_builtin_trans __P ((__const char *__name,
189                                             struct gconv_step *__step));
190
191
192
193 /* Builtin transformations.  */
194 #ifdef _LIBC
195 # define __BUILTIN_TRANS(Name) \
196   extern int Name __P ((struct gconv_step *__step,                            \
197                         struct gconv_step_data *__data, __const char *__inbuf,\
198                         size_t *__inlen, size_t *__written, int __do_flush))
199
200 __BUILTIN_TRANS (__gconv_transform_dummy);
201 __BUILTIN_TRANS (__gconv_transform_ucs4_utf8);
202 __BUILTIN_TRANS (__gconv_transform_utf8_ucs4);
203 __BUILTIN_TRANS (__gconv_transform_ucs2_ucs4);
204 __BUILTIN_TRANS (__gconv_transform_ucs4_ucs2);
205 # undef __BUITLIN_TRANS
206
207 extern int __gconv_transform_init_rstate __P ((struct gconv_step *__step,
208                                               struct gconv_step_data *__data));
209 extern void __gconv_transform_end_rstate __P ((struct gconv_step_data *__data));
210
211 #endif
212
213 __END_DECLS
214
215 #endif /* gconv.h */