1 /*        $NetBSD: conv.h,v 1.4 2018/08/01 02:48:47 rin Exp $         */
2 
3 /*
4  * We ensure that every wide char occupies at least one display width.
5  * See vs_line.c for more details.
6  */
7 #define WIDE_COL(sp, ch)                                                        \
8           (CHAR_WIDTH(sp, ch) > 0 ? CHAR_WIDTH(sp, ch) : 1)
9 
10 #define KEY_COL(sp, ch)                                                                   \
11           (INTISWIDE(ch) ? (size_t)WIDE_COL(sp, ch) : KEY_LEN(sp, ch))
12 
13 struct _conv_win {
14     void    *bp1;
15     size_t   blen1;
16 };
17 
18 typedef int (*char2wchar_t)
19     (SCR *, const char *, ssize_t, struct _conv_win *, size_t *, const CHAR_T **);
20 typedef int (*wchar2char_t)
21     (SCR *, const CHAR_T *, ssize_t, struct _conv_win *, size_t *, const char **);
22 
23 struct _conv {
24           char2wchar_t        sys2int;
25           wchar2char_t        int2sys;
26           char2wchar_t        file2int;
27           wchar2char_t        int2file;
28           char2wchar_t        input2int;
29           wchar2char_t        int2disp;
30 };
31 void conv_init __P((SCR *, SCR *));
32 int conv_enc __P((SCR *, int, const char *));
33