1 1.4 junyoung /* $NetBSD: citrus_stdenc_local.h,v 1.4 2008/02/09 14:56:20 junyoung Exp $ */ 2 1.1 tshiozak 3 1.1 tshiozak /*- 4 1.1 tshiozak * Copyright (c)2003 Citrus Project, 5 1.1 tshiozak * All rights reserved. 6 1.1 tshiozak * 7 1.1 tshiozak * Redistribution and use in source and binary forms, with or without 8 1.1 tshiozak * modification, are permitted provided that the following conditions 9 1.1 tshiozak * are met: 10 1.1 tshiozak * 1. Redistributions of source code must retain the above copyright 11 1.1 tshiozak * notice, this list of conditions and the following disclaimer. 12 1.1 tshiozak * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 tshiozak * notice, this list of conditions and the following disclaimer in the 14 1.1 tshiozak * documentation and/or other materials provided with the distribution. 15 1.1 tshiozak * 16 1.1 tshiozak * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 1.1 tshiozak * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 1.1 tshiozak * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 1.1 tshiozak * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 1.1 tshiozak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 1.1 tshiozak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 1.1 tshiozak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 tshiozak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 1.1 tshiozak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 1.1 tshiozak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 1.1 tshiozak * SUCH DAMAGE. 27 1.1 tshiozak * 28 1.1 tshiozak */ 29 1.1 tshiozak 30 1.1 tshiozak #ifndef _CITRUS_STDENC_LOCAL_H_ 31 1.1 tshiozak #define _CITRUS_STDENC_LOCAL_H_ 32 1.1 tshiozak 33 1.1 tshiozak #define _CITRUS_STDENC_GETOPS_FUNC_BASE(n) \ 34 1.4 junyoung int n(struct _citrus_stdenc_ops *, size_t, uint32_t) 35 1.1 tshiozak #define _CITRUS_STDENC_GETOPS_FUNC(_e_) \ 36 1.1 tshiozak _CITRUS_STDENC_GETOPS_FUNC_BASE(_citrus_##_e_##_stdenc_getops) 37 1.1 tshiozak typedef _CITRUS_STDENC_GETOPS_FUNC_BASE((*_citrus_stdenc_getops_t)); 38 1.1 tshiozak 39 1.1 tshiozak 40 1.1 tshiozak #define _CITRUS_STDENC_DECLS(_e_) \ 41 1.1 tshiozak static int _citrus_##_e_##_stdenc_init \ 42 1.1 tshiozak (struct _citrus_stdenc * __restrict, const void * __restrict, \ 43 1.1 tshiozak size_t, struct _citrus_stdenc_traits * __restrict); \ 44 1.1 tshiozak static void _citrus_##_e_##_stdenc_uninit(struct _citrus_stdenc *); \ 45 1.1 tshiozak static int _citrus_##_e_##_stdenc_init_state \ 46 1.1 tshiozak (struct _citrus_stdenc * __restrict, void * __restrict); \ 47 1.1 tshiozak static int _citrus_##_e_##_stdenc_mbtocs \ 48 1.1 tshiozak (struct _citrus_stdenc * __restrict, \ 49 1.1 tshiozak _citrus_csid_t * __restrict, _citrus_index_t * __restrict, \ 50 1.1 tshiozak const char ** __restrict, size_t, \ 51 1.1 tshiozak void * __restrict, size_t * __restrict); \ 52 1.1 tshiozak static int _citrus_##_e_##_stdenc_cstomb \ 53 1.1 tshiozak (struct _citrus_stdenc * __restrict, char * __restrict, \ 54 1.1 tshiozak size_t, _citrus_csid_t, _citrus_index_t, \ 55 1.1 tshiozak void * __restrict, size_t * __restrict); \ 56 1.1 tshiozak static int _citrus_##_e_##_stdenc_mbtowc \ 57 1.1 tshiozak (struct _citrus_stdenc * __restrict, \ 58 1.1 tshiozak _citrus_wc_t * __restrict, \ 59 1.1 tshiozak const char ** __restrict, size_t, \ 60 1.1 tshiozak void * __restrict, size_t * __restrict); \ 61 1.1 tshiozak static int _citrus_##_e_##_stdenc_wctomb \ 62 1.1 tshiozak (struct _citrus_stdenc * __restrict, char * __restrict, size_t, \ 63 1.2 tshiozak _citrus_wc_t, void * __restrict, size_t * __restrict); \ 64 1.2 tshiozak static int _citrus_##_e_##_stdenc_put_state_reset \ 65 1.2 tshiozak (struct _citrus_stdenc * __restrict, char * __restrict, size_t, \ 66 1.3 tshiozak void * __restrict, size_t * __restrict); \ 67 1.3 tshiozak static int _citrus_##_e_##_stdenc_get_state_desc \ 68 1.3 tshiozak (struct _citrus_stdenc * __restrict, void * __restrict, int, \ 69 1.3 tshiozak struct _citrus_stdenc_state_desc * __restrict) 70 1.1 tshiozak 71 1.1 tshiozak #define _CITRUS_STDENC_DEF_OPS(_e_) \ 72 1.1 tshiozak struct _citrus_stdenc_ops _citrus_##_e_##_stdenc_ops = { \ 73 1.1 tshiozak /* eo_abi_version */ _CITRUS_STDENC_ABI_VERSION, \ 74 1.1 tshiozak /* eo_init */ &_citrus_##_e_##_stdenc_init, \ 75 1.1 tshiozak /* eo_uninit */ &_citrus_##_e_##_stdenc_uninit, \ 76 1.1 tshiozak /* eo_init_state */ &_citrus_##_e_##_stdenc_init_state, \ 77 1.1 tshiozak /* eo_mbtocs */ &_citrus_##_e_##_stdenc_mbtocs, \ 78 1.1 tshiozak /* eo_cstomb */ &_citrus_##_e_##_stdenc_cstomb, \ 79 1.1 tshiozak /* eo_mbtowc */ &_citrus_##_e_##_stdenc_mbtowc, \ 80 1.1 tshiozak /* eo_wctomb */ &_citrus_##_e_##_stdenc_wctomb, \ 81 1.3 tshiozak /* eo_put_state_reset */&_citrus_##_e_##_stdenc_put_state_reset,\ 82 1.3 tshiozak /* eo_get_state_desc */ &_citrus_##_e_##_stdenc_get_state_desc \ 83 1.1 tshiozak } 84 1.1 tshiozak 85 1.1 tshiozak typedef int (*_citrus_stdenc_init_t) 86 1.1 tshiozak (struct _citrus_stdenc * __reatrict, const void * __restrict , size_t, 87 1.1 tshiozak struct _citrus_stdenc_traits * __restrict); 88 1.1 tshiozak typedef void (*_citrus_stdenc_uninit_t)(struct _citrus_stdenc * __restrict); 89 1.1 tshiozak typedef int (*_citrus_stdenc_init_state_t) 90 1.1 tshiozak (struct _citrus_stdenc * __restrict, void * __restrict); 91 1.1 tshiozak typedef int (*_citrus_stdenc_mbtocs_t) 92 1.1 tshiozak (struct _citrus_stdenc * __restrict, 93 1.1 tshiozak _citrus_csid_t * __restrict, _citrus_index_t * __restrict, 94 1.1 tshiozak const char ** __restrict, size_t, 95 1.1 tshiozak void * __restrict, size_t * __restrict); 96 1.1 tshiozak typedef int (*_citrus_stdenc_cstomb_t) 97 1.1 tshiozak (struct _citrus_stdenc *__restrict, char * __restrict, size_t, 98 1.1 tshiozak _citrus_csid_t, _citrus_index_t, void * __restrict, 99 1.1 tshiozak size_t * __restrict); 100 1.1 tshiozak typedef int (*_citrus_stdenc_mbtowc_t) 101 1.1 tshiozak (struct _citrus_stdenc * __restrict, 102 1.1 tshiozak _citrus_wc_t * __restrict, 103 1.1 tshiozak const char ** __restrict, size_t, 104 1.1 tshiozak void * __restrict, size_t * __restrict); 105 1.1 tshiozak typedef int (*_citrus_stdenc_wctomb_t) 106 1.1 tshiozak (struct _citrus_stdenc *__restrict, char * __restrict, size_t, 107 1.1 tshiozak _citrus_wc_t, void * __restrict, size_t * __restrict); 108 1.2 tshiozak typedef int (*_citrus_stdenc_put_state_reset_t) 109 1.2 tshiozak (struct _citrus_stdenc *__restrict, char * __restrict, size_t, 110 1.2 tshiozak void * __restrict, size_t * __restrict); 111 1.3 tshiozak typedef int (*_citrus_stdenc_get_state_desc_t) 112 1.3 tshiozak (struct _citrus_stdenc * __restrict, void * __restrict, int, 113 1.3 tshiozak struct _citrus_stdenc_state_desc * __restrict); 114 1.1 tshiozak /* 115 1.1 tshiozak * ABI version change log 116 1.1 tshiozak * 0x00000001 117 1.1 tshiozak * initial version 118 1.1 tshiozak */ 119 1.3 tshiozak #define _CITRUS_STDENC_ABI_VERSION 0x00000002 120 1.1 tshiozak struct _citrus_stdenc_ops { 121 1.4 junyoung uint32_t eo_abi_version; 122 1.1 tshiozak /* version 0x00000001 */ 123 1.1 tshiozak _citrus_stdenc_init_t eo_init; 124 1.1 tshiozak _citrus_stdenc_uninit_t eo_uninit; 125 1.1 tshiozak _citrus_stdenc_init_state_t eo_init_state; 126 1.1 tshiozak _citrus_stdenc_mbtocs_t eo_mbtocs; 127 1.1 tshiozak _citrus_stdenc_cstomb_t eo_cstomb; 128 1.1 tshiozak _citrus_stdenc_mbtowc_t eo_mbtowc; 129 1.1 tshiozak _citrus_stdenc_wctomb_t eo_wctomb; 130 1.2 tshiozak _citrus_stdenc_put_state_reset_t eo_put_state_reset; 131 1.3 tshiozak /* version 0x00000002 */ 132 1.3 tshiozak _citrus_stdenc_get_state_desc_t eo_get_state_desc; 133 1.1 tshiozak }; 134 1.1 tshiozak 135 1.1 tshiozak struct _citrus_stdenc_traits { 136 1.1 tshiozak /* version 0x00000001 */ 137 1.1 tshiozak size_t et_state_size; 138 1.1 tshiozak size_t et_mb_cur_max; 139 1.1 tshiozak }; 140 1.1 tshiozak 141 1.1 tshiozak struct _citrus_stdenc { 142 1.1 tshiozak /* public */ 143 1.1 tshiozak /* version 0x00000001 */ 144 1.1 tshiozak struct _citrus_stdenc_ops *ce_ops; 145 1.1 tshiozak void *ce_closure; 146 1.1 tshiozak /* private */ 147 1.1 tshiozak _citrus_module_t ce_module; 148 1.1 tshiozak struct _citrus_stdenc_traits *ce_traits; 149 1.1 tshiozak }; 150 1.1 tshiozak 151 1.1 tshiozak #define _CITRUS_DEFAULT_STDENC_NAME "NONE" 152 1.1 tshiozak 153 1.1 tshiozak #endif 154