summaryrefslogtreecommitdiff
path: root/src/lib/libast/features/wchar
blob: ac51f0fbc56318aac5e91c598c688ace67f5d35a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
set	prototyped
iff
set	stdio ast_common.h
set	include .

cat{
	#ifndef _AST_WCHAR_H
	#define _AST_WCHAR_H	1
}end

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

cat{
	#ifndef _SFSTDIO_H
	#include <ast_common.h>
	#include <stdio.h>
	#endif
}end

if	tst note{ <wchar.h> requires native <stdio.h> }end nocompile{
		/*<NOSTDIO>*/
		#define _STDIO_INCLUDED 1
		#define FILE		void
		#include <wchar.h>
		int tst;
	}end
	if	tst note{ <stdio.h> defines __va_list for <wchar.h> }end compile{
			/*<NOSTDIO>*/
			#define _STDIO_INCLUDED 1
			#define FILE		void
			#include <stdarg.h>
			#define __va_list	va_list
			#include <wchar.h>
			int tst;
		}end && {
			#define __va_list va_list
		}
	endif
endif

if	hdr - wctype wchar.h
	if	! npt - iswalpha wchar.h {
			#include <wctype.h> /* <wchar.h> includes <wctype.h> */
		}
	endif
endif

run{
cat <<!
	#if _hdr_wchar && defined(_nxt_wchar)
	#include ${_nxt_wchar-_nxt_wchar}	/* the native wchar.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

	#else

	/* on some systems <wchar.h> is included multiple times with multiple effects */

	#if _hdr_wchar && defined(_nxt_wchar)
	#include ${_nxt_wchar-_nxt_wchar}	/* the native wchar.h */
	#endif

	#endif
!
}end