set	prototyped
lib	mbstowcs,wctomb,wcrtomb,wcslen,wcstombs,wcwidth stdlib.h stdio.h wchar.h
lib	towlower,towupper stdlib.h stdio.h wchar.h
typ	mbstate_t stdlib.h stdio.h wchar.h
nxt	wchar

run{
cat <<!
	#ifndef _SFSTDIO_H
	#include <ast_common.h>
	#include <stdio.h>
	#endif
	#if _hdr_wchar && defined(_nxt_wchar)
	#include $_nxt_wchar	/* the native wchar.h */
	#endif
	#if _hdr_wctype
	#include <wctype.h>
	#endif

	#ifndef WEOF
	#define WEOF		(-1)
	#endif

	#undef	fgetwc
	#undef	fgetws
	#undef	fputwc
	#undef	fputws
	#undef	getwc
	#undef	getwchar
	#undef	getws
	#undef	putwc
	#undef	putwchar
	#undef	ungetwc

	#define fgetwc		_ast_fgetwc
	#define fgetws		_ast_fgetws
	#define fputwc		_ast_fputwc
	#define fputws		_ast_fputws
	#define fwide		_ast_fwide
	#define fwprintf	_ast_fwprintf
	#define fwscanf		_ast_fwscanf
	#define getwc		_ast_getwc
	#define getwchar	_ast_getwchar
	#define getws		_ast_getws
	#define putwc		_ast_putwc
	#define putwchar	_ast_putwchar
	#define swprintf	_ast_swprintf
	#define swscanf		_ast_swscanf
	#define ungetwc		_ast_ungetwc
	#define vfwprintf	_ast_vfwprintf
	#define vfwscanf	_ast_vfwscanf
	#define vswprintf	_ast_vswprintf
	#define vswscanf	_ast_vswscanf
	#define vwprintf	_ast_vwprintf
	#define vwscanf		_ast_vwscanf
	#define wprintf		_ast_wprintf
	#define wscanf		_ast_wscanf

	#if !_typ_mbstate_t
	#undef	_typ_mbstate_t
	#define _typ_mbstate_t	1
	typedef char mbstate_t;
	#endif

	#if _BLD_ast && defined(__EXPORT__)
	#define extern		__EXPORT__
	#endif

	#if !_lib_mbstowcs
	extern size_t		mbstowcs(wchar_t*, const char*, size_t);
	#endif
	#if !_lib_wctomb
	extern int		wctomb(char*, wchar_t);
	#endif
	#if !_lib_wcrtomb
	extern size_t		wcrtomb(char*, wchar_t, mbstate_t*);
	#endif
	#if !_lib_wcslen
	extern size_t		wcslen(const wchar_t*);
	#endif
	#if !_lib_wcstombs
	extern size_t		wcstombs(char*, const wchar_t*, size_t);
	#endif

	extern int		fwprintf(FILE*, const wchar_t*, ...);
	extern int		fwscanf(FILE*, const wchar_t*, ...);
	extern wint_t		fgetwc(FILE*);
	extern wchar_t*		fgetws(wchar_t*, int, FILE*);
	extern wint_t		fputwc(wchar_t, FILE*);
	extern int		fputws(const wchar_t*, FILE*);
	extern int		fwide(FILE*, int);
	extern wint_t		getwc(FILE*);
	extern wint_t		getwchar(void);
	extern wchar_t*		getws(wchar_t*);
	extern wint_t		putwc(wchar_t, FILE*);
	extern wint_t		putwchar(wchar_t);
	extern int		swprintf(wchar_t*, size_t, const wchar_t*, ...);
	extern int		swscanf(const wchar_t*, const wchar_t*, ...);
	extern wint_t		ungetwc(wint_t, FILE*);
	extern int		vfwprintf(FILE*, const wchar_t*, va_list);
	extern int		vfwscanf(FILE*, const wchar_t*, va_list);
	extern int		vwprintf(const wchar_t*, va_list);
	extern int		vwscanf(const wchar_t*, va_list);
	extern int		vswprintf(wchar_t*, size_t, const wchar_t*, va_list);
	extern int		vswscanf(const wchar_t*, const wchar_t*, va_list);
	extern int		wprintf(const wchar_t*, ...);
	extern int		wscanf(const wchar_t*, ...);

	#undef	extern
!
}end
