Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/iconv/lib/local.h')
-rw-r--r--newlib/libc/iconv/lib/local.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/newlib/libc/iconv/lib/local.h b/newlib/libc/iconv/lib/local.h
new file mode 100644
index 000000000..006976511
--- /dev/null
+++ b/newlib/libc/iconv/lib/local.h
@@ -0,0 +1,275 @@
+#ifndef __LOCAL_H__
+#define __LOCAL_H__
+
+#include <_ansi.h>
+#include <reent.h>
+#include <wchar.h>
+#include <sys/types.h>
+
+#ifndef NLS_ENVVAR_NAME
+# define NLS_ENVVAR_NAME "NLSPATH"
+#endif
+#ifndef NLS_DEFAULT_NLSPATH
+# define NLS_DEFAULT_NLSPATH "/usr/locale/"
+#endif
+
+/* void* type for K&R compilers compatability */
+#define _VOID_PTR _PTR
+
+/* Charset aliases file */
+#define ICONV_ALIASES_FNAME "charset.aliases"
+/* iconv CCS data path */
+#define ICONV_DATA_PATH NLS_DEFAULT_NLSPATH"iconv_data/"
+/* iconv data files extention */
+#define ICONV_DATA_EXT ".cct"
+
+/* Unicode character data types and constants. */
+#define UCS_CHAR_ZERO_WIDTH_NBSP 0xFEFF
+#define UCS_CHAR_INVALID 0xFFFE
+#define UCS_CHAR_NONE 0xFFFF
+
+typedef __uint16_t ucs2_t; /* Unicode character [D5] */
+typedef __uint32_t ucs4_t; /* Unicode scalar character [D28] */
+#define ucs_t ucs4_t
+
+#define iconv_char32bit(ch) ((ch) & 0xFFFF0000)
+
+/* CCS file descriptor */
+typedef struct
+{
+ void *mem;
+ size_t len;
+} _iconv_fd_t;
+
+char *
+_EXFUN(_iconv_resolve_cs_name, (struct _reent *, _CONST char *, _CONST char *));
+
+char *
+_EXFUN(_iconv_resolve_alias, (struct _reent *, _CONST char *, _CONST char *,
+ int, _CONST char *));
+
+int
+_EXFUN(_iconv_load_file, (struct _reent *, _CONST char *, _iconv_fd_t *));
+
+int
+_EXFUN(_iconv_unload_file, (struct _reent *, _iconv_fd_t *));
+
+/* Builtin CCS and CES data. */
+typedef struct {
+ _CONST char *key;
+ _CONST _VOID_PTR value;
+} iconv_builtin_table;
+
+extern _CONST iconv_builtin_table iconv_builtin_ccs[];
+extern _CONST iconv_builtin_table iconv_builtin_ces[];
+extern _CONST char iconv_builtin_aliases[];
+
+/* Table-driven coded character set (CCS) definitions. */
+struct iconv_ccs;
+
+/* Basic CCS functions */
+typedef ucs2_t
+_EXFUN(iconv_ccs_convert_t, (_CONST _VOID_PTR table, ucs2_t ch));
+
+typedef int
+_EXFUN(iconv_ccs_close_t, (struct _reent *rptr, struct iconv_ccs *desc));
+
+/* CCS structure */
+struct iconv_ccs {
+ _CONST _VOID_PTR from_ucs; /* FROM table pointer */
+ _CONST _VOID_PTR to_ucs; /* TO table pointer */
+ iconv_ccs_convert_t *convert_from_ucs; /* converter */
+ iconv_ccs_convert_t *convert_to_ucs; /* functions */
+ iconv_ccs_close_t *close; /* close function */
+ _VOID_PTR extra; /* optional extra data */
+ unsigned int nbits; /* number of bits */
+};
+
+/* CCS initialisation function */
+int
+_EXFUN(iconv_ccs_init, (struct _reent *rptr, struct iconv_ccs *ccs,
+ _CONST char *name));
+
+/* CCS conversion macros */
+#define ICONV_CCS_CONVERT_FROM_UCS(ccs, ch) \
+ ((ccs)->convert_from_ucs((ccs)->from_ucs, (ch)))
+#define ICONV_CCS_CONVERT_TO_UCS(ccs, ch) \
+ ((ccs)->convert_to_ucs((ccs)->to_ucs, (ch)))
+#define ICONV_CCS_NBITS
+
+/* Module-driven character encoding scheme (CES) definitions */
+struct iconv_ces;
+
+/* Basic CES function types */
+typedef int
+_EXFUN(iconv_ces_init_t, (struct _reent *, _VOID_PTR *, /* void** */
+ _CONST char *, _CONST _VOID_PTR));
+
+typedef int
+_EXFUN(iconv_ces_close_t, (struct _reent *, _VOID_PTR));
+
+typedef _VOID
+_EXFUN(iconv_ces_reset_t, (_VOID_PTR));
+
+typedef ssize_t
+_EXFUN(iconv_ces_convert_from_ucs_t, (struct iconv_ces *data, ucs_t in,
+ unsigned char **outbuf,
+ size_t *outbytesleft));
+
+typedef ucs_t
+_EXFUN(iconv_ces_convert_to_ucs_t, (struct iconv_ces *data,
+ _CONST unsigned char **inbuf,
+ size_t *inbytesleft));
+
+/* CES descriptor structure - CES class data */
+struct iconv_ces_desc {
+ iconv_ces_init_t *init;
+ iconv_ces_close_t *close; /* class-specific close function */
+ iconv_ces_reset_t *reset;
+ iconv_ces_convert_from_ucs_t *convert_from_ucs;
+ iconv_ces_convert_to_ucs_t *convert_to_ucs;
+ _CONST _VOID_PTR data; /* optional specific CES class data */
+};
+
+/* explicit CES class for table (CCS) driven charsets */
+extern _CONST struct iconv_ces_desc iconv_ces_table_driven;
+
+/* CES structure - CES instance data */
+struct iconv_ces {
+ _CONST struct iconv_ces_desc *desc; /* descriptor/class pointer */
+ iconv_ces_close_t *close; /* instance-specific close function */
+ _VOID_PTR data; /* optional extra data */
+ _VOID_PTR handle; /* optional handle */
+};
+
+/* Basic CES functions and macros */
+extern int
+_EXFUN(iconv_ces_init, (struct _reent *rptr, struct iconv_ces *ces,
+ _CONST char *name));
+
+#define ICONV_CES_CLOSE(rptr, ces) ((ces)->close(rptr, ces))
+#define ICONV_CES_RESET(ces) ((ces)->desc->reset((ces)->data))
+#define ICONV_CES_CONVERT_FROM_UCS(cesd, in, outbuf, outbytes) \
+ ((cesd)->desc->convert_from_ucs((cesd), (in), (outbuf), (outbytes)))
+#define ICONV_CES_CONVERT_TO_UCS(cesd, inbuf, inbytes) \
+ ((cesd)->desc->convert_to_ucs((cesd), (inbuf), (inbytes)))
+
+/* Virtual CES initialisation function type */
+typedef int
+_EXFUN(iconv_ces_init_int_t, (struct _reent *rptr, _VOID_PTR* /* void ** */,
+ _CONST _VOID_PTR, size_t));
+
+/* CES subclass macros (for EUC and ISO-2022) */
+#define ICONV_CES_DRIVER_DECL(name) \
+ iconv_ces_init_int_t iconv_##name##_init; \
+ iconv_ces_close_t iconv_##name##_close; \
+ iconv_ces_reset_t iconv_##name##_reset; \
+ iconv_ces_convert_from_ucs_t iconv_##name##_convert_from_ucs; \
+ iconv_ces_convert_to_ucs_t iconv_##name##_convert_to_ucs; \
+
+/* CES functions and macros for stateless encodings */
+iconv_ces_init_t iconv_ces_init_null;
+iconv_ces_close_t iconv_ces_close_null;
+iconv_ces_reset_t iconv_ces_reset_null;
+
+#define ICONV_CES_STATELESS_MODULE_DECL(name) \
+ _CONST struct iconv_ces_desc iconv_ces_##name = { \
+ iconv_ces_init_null, \
+ iconv_ces_close_null, \
+ iconv_ces_reset_null, \
+ convert_from_ucs, \
+ convert_to_ucs, \
+ NULL \
+ }
+
+/* CES functions and macros for stateful (integer state) encodings */
+iconv_ces_init_t iconv_ces_init_state;
+iconv_ces_close_t iconv_ces_close_state;
+iconv_ces_reset_t iconv_ces_reset_state;
+
+#define ICONV_CES_STATEFUL_MODULE_DECL(name) \
+ _CONST struct iconv_ces_desc iconv_ces_##name = { \
+ iconv_ces_init_state, \
+ iconv_ces_close_state, \
+ iconv_ces_reset_state, \
+ convert_from_ucs, \
+ convert_to_ucs, \
+ NULL \
+ }
+
+/* CES functions and macros for other encodings */
+#define ICONV_CES_MODULE_DECL(type, name) \
+ static int \
+ module_init(struct _reent *rptr, _VOID_PTR *data, /* void ** */ \
+ _CONST char *cs_name, _CONST _VOID_PTR desc_data) \
+ { \
+ return iconv_##type##_init(rptr, data, desc_data, \
+ sizeof(ccsattr) / \
+ sizeof(iconv_ces_##type##_ccs)); \
+ } \
+ \
+ _CONST struct iconv_ces_desc iconv_ces_##name = { \
+ module_init, \
+ iconv_##type##_close, \
+ iconv_##type##_reset, \
+ iconv_##type##_convert_from_ucs, \
+ iconv_##type##_convert_to_ucs, \
+ &ccsattr \
+ }
+
+/* EUC character encoding schemes and functions */
+typedef struct {
+ _CONST char *name;
+ _CONST char *prefix;
+ size_t prefixlen;
+} iconv_ces_euc_ccs;
+
+ICONV_CES_DRIVER_DECL(euc);
+#define iconv_euc_reset iconv_ces_reset_null
+
+/* ISO-2022 character encoding schemes and functions. */
+enum {ICONV_SHIFT_SI = 0, ICONV_SHIFT_SO, ICONV_SHIFT_SS2, ICONV_SHIFT_SS3};
+
+typedef struct {
+ _CONST char *name;
+ _CONST char *designator;
+ size_t designatorlen;
+ int shift;
+} iconv_ces_iso2022_ccs;
+
+ICONV_CES_DRIVER_DECL(iso2022);
+
+
+/* Converter structure and functions. */
+typedef size_t
+_EXFUN(iconv_conv_t, (struct _reent *, _VOID_PTR, _CONST unsigned char **,
+ size_t *, unsigned char **, size_t *));
+
+typedef int
+_EXFUN(iconv_close_t, (struct _reent *rptr, _VOID_PTR));
+
+/* Generic converter structure. */
+typedef struct {
+ iconv_conv_t *convert;
+ iconv_close_t *close;
+}iconv_converter;
+
+
+typedef struct {
+ struct iconv_ces from;
+ struct iconv_ces to;
+ ucs_t missing;
+} unicode_converter;
+
+
+/* Converter initialisers */
+iconv_converter *
+_EXFUN(iconv_unicode_conv_init, (struct _reent *rptr, _CONST char *to,
+ _CONST char *from));
+
+iconv_converter *
+_EXFUN(iconv_null_conv_init, (struct _reent *rptr, _CONST char *to,
+ _CONST char *from));
+
+#endif /* __LOCAL_H__ */
+