📄 local.h
字号:
#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 0xFFFFtypedef __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_t;extern _CONST iconv_builtin_table_t _iconv_builtin_ccs[];extern _CONST iconv_builtin_table_t _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_module_##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_module_##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_t)); \ } \ \ _CONST struct iconv_ces_desc _iconv_ces_module_##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_t;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_t;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_t;typedef struct { struct iconv_ces from; struct iconv_ces to; ucs_t missing;} unicode_converter_t;/* Converter initialisers */iconv_converter_t *_EXFUN(_iconv_unicode_conv_init, (struct _reent *rptr, _CONST char *to, _CONST char *from));iconv_converter_t *_EXFUN(_iconv_null_conv_init, (struct _reent *rptr, _CONST char *to, _CONST char *from));#endif /* __LOCAL_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -