1254225Speter/*- 2254225Speter * Copyright (c) 1992, 1993, 1994 3254225Speter * The Regents of the University of California. All rights reserved. 4254225Speter * Copyright (c) 1992, 1993, 1994, 1995, 1996 5254225Speter * Keith Bostic. All rights reserved. 6254225Speter * Copyright (c) 2011, 2012 7254225Speter * Zhihao Yuan. All rights reserved. 8254225Speter * 9254225Speter * See the LICENSE file for redistribution information. 10254225Speter * 11254225Speter * $Id: conv.h,v 2.32 2013/03/11 01:20:53 zy Exp $ 12254225Speter */ 13254225Speter 14254225Speter#ifdef USE_ICONV 15254225Speter#include <iconv.h> 16254225Speter#ifdef ICONV_TRADITIONAL 17254225Spetertypedef char ** iconv_src_t; 18254225Speter#else 19254225Spetertypedef char const ** iconv_src_t; 20254225Speter#endif 21254225Speter#else 22254225Spetertypedef int iconv_t; 23254225Speter#endif 24254225Speter 25254225Speter/* 26254225Speter * XXX 27254225Speter * We can not use MB_CUR_MAX here, since UTF-8 may report it as 6, but 28254225Speter * a sequence longer than 4 is deprecated by RFC 3629. 29254225Speter */ 30254225Speter#define KEY_NEEDSWIDE(sp, ch) \ 31254225Speter (INTISWIDE(ch) && KEY_LEN(sp, ch) <= 4) 32254225Speter#define KEY_COL(sp, ch) \ 33254225Speter (KEY_NEEDSWIDE(sp, ch) ? CHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch)) 34254225Speter 35254225Speterenum { IC_FE_CHAR2INT, IC_FE_INT2CHAR, IC_IE_CHAR2INT, IC_IE_TO_UTF16 }; 36254225Speter 37254225Speterstruct _conv_win { 38254225Speter union { 39254225Speter char *c; 40254225Speter CHAR_T *wc; 41254225Speter } bp1; 42254225Speter size_t blen1; 43254225Speter}; 44254225Speter 45254225Spetertypedef int (*char2wchar_t) 46254225Speter (SCR *, const char *, ssize_t, struct _conv_win *, size_t *, CHAR_T **); 47254225Spetertypedef int (*wchar2char_t) 48254225Speter (SCR *, const CHAR_T *, ssize_t, struct _conv_win *, size_t *, char **); 49254225Speter 50254225Speterstruct _conv { 51254225Speter char2wchar_t sys2int; 52254225Speter wchar2char_t int2sys; 53254225Speter char2wchar_t file2int; 54254225Speter wchar2char_t int2file; 55254225Speter char2wchar_t input2int; 56254225Speter iconv_t id[IC_IE_TO_UTF16 + 1]; 57254225Speter}; 58