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