1set	prototyped
2hdr	iconv
3lib	iconv_open,iconv_close,iconv iconv.h -liconv
4nxt	iconv
5
6tst	output{
7	#if !_lib_iconv_open
8	#define _undef_hdr_iconv	1
9	#undef	_hdr_iconv
10	#endif
11	#if !_hdr_iconv
12	#define _undef_lib_iconv_open	1
13	#undef	_lib_iconv_open
14	#endif
15	#if _hdr_iconv
16	#include <sys/types.h>
17	#include <iconv.h>
18	#endif
19
20	int
21	main()
22	{
23		char*	lib;
24
25		printf("#include <ast_common.h>\n");
26		printf("#include <ccode.h>\n");
27	#if _undef_hdr_iconv
28		printf("#undef	_hdr_iconv\n");
29	#endif
30	#if _undef_lib_iconv_open
31		printf("#undef	_lib_iconv_open\n");
32	#endif
33	#if _hdr_iconv && defined(_nxt_iconv_str)
34		printf("#include <%s>	/* the native iconv.h */\n", _nxt_iconv_str);
35	#endif
36		printf("\n");
37		printf("#define ICONV_VERSION		20121001L\n");
38		printf("\n");
39		printf("#define ICONV_FATAL		0x02\n");
40		printf("#define ICONV_OMIT		0x04\n");
41		printf("\n");
42	#if _lib_iconv_open
43		lib = "_ast_";
44		printf("#ifndef _ICONV_LIST_PRIVATE_\n");
45		printf("#undef	iconv_t\n");
46		printf("#define	iconv_t		%siconv_t\n", lib);
47		printf("#undef	iconv_f\n");
48		printf("#define	iconv_f		%siconv_f\n", lib);
49		printf("#undef	iconv_list_t\n");
50		printf("#define	iconv_list_t	%siconv_list_t\n", lib);
51		printf("#undef	iconv_open\n");
52		printf("#define iconv_open	%siconv_open\n", lib);
53		printf("#undef	iconv\n");
54		printf("#define	iconv		%siconv\n", lib);
55		printf("#undef	iconv_close\n");
56		printf("#define iconv_close	%siconv_close\n", lib);
57		printf("#undef	iconv_list\n");
58		printf("#define iconv_list	%siconv_list\n", lib);
59		printf("#undef	iconv_move\n");
60		printf("#define iconv_move	%siconv_move\n", lib);
61		printf("#undef	iconv_name\n");
62		printf("#define iconv_name	%siconv_name\n", lib);
63		printf("#undef	iconv_write\n");
64		printf("#define iconv_write	%siconv_write\n", lib);
65		printf("#endif\n");
66	#else
67		lib = "";
68	#endif
69		printf("\n");
70		printf("typedef int (*Iconv_error_f)(void*, void*, int, ...);\n");
71		printf("typedef int (*Iconv_checksig_f)(void*);\n");
72		printf("\n");
73		printf("typedef struct Iconv_disc_s\n");
74		printf("{\n");
75		printf("	uint32_t		version;\n");
76		printf("	Iconv_error_f		errorf;\n");
77		printf("	size_t			errors;\n");
78		printf("	uint32_t		flags;\n");
79		printf("	int			fill;\n");
80		printf("	void*			handle;\n");
81		printf("	Iconv_checksig_f	checksig;\n");
82		printf("} Iconv_disc_t;\n");
83		printf("\n");
84		printf("typedef Ccmap_t %siconv_list_t;\n", lib);
85		printf("typedef void* %siconv_t;\n", lib);
86		printf("typedef size_t (*%siconv_f)(%siconv_t, char**, size_t*, char**, size_t*);\n", lib, lib);
87		printf("\n");
88		printf("#define iconv_init(d,e)		(memset(d,0,sizeof(*(d))),(d)->version=ICONV_VERSION,(d)->errorf=(Iconv_error_f)(e),(d)->fill=(-1))\n");
89		printf("\n");
90		printf("#if _BLD_ast && defined(__EXPORT__)\n");
91		printf("#define extern		__EXPORT__\n");
92		printf("#endif\n");
93		printf("\n");
94		printf("extern %siconv_t	%siconv_open(const char*, const char*);\n", lib, lib);
95		printf("extern size_t		%siconv(%siconv_t, char**, size_t*, char**, size_t*);\n", lib, lib);
96		printf("extern int		%siconv_close(%siconv_t);\n", lib, lib);
97		printf("extern %siconv_list_t*	%siconv_list(%siconv_list_t*);\n", lib, lib, lib);
98		printf("extern int		%siconv_name(const char*, char*, size_t);\n", lib);
99		printf("#if _SFIO_H\n");
100		printf("extern ssize_t		%siconv_move(%siconv_t, Sfio_t*, Sfio_t*, size_t, Iconv_disc_t*);\n", lib, lib);
101		printf("extern ssize_t		%siconv_write(%siconv_t, Sfio_t*, char**, size_t*, Iconv_disc_t*);\n", lib, lib);
102		printf("#else\n");
103		printf("#if _SFSTDIO_H\n");
104		printf("extern ssize_t		%siconv_move(%siconv_t, FILE*, FILE*, size_t, Iconv_disc_t*);\n", lib, lib);
105		printf("extern ssize_t		%siconv_write(%siconv_t, FILE*, char**, size_t*, Iconv_disc_t*);\n", lib, lib);
106		printf("#endif\n");
107		printf("#endif\n");
108		printf("\n");
109		printf("#undef	extern\n");
110		printf("\n");
111		return 0;
112	}
113}end
114