176633Stshiozak/*-
276633Stshiozak * Copyright (c)1999 Citrus Project,
376633Stshiozak * All rights reserved.
476633Stshiozak *
576633Stshiozak * Redistribution and use in source and binary forms, with or without
676633Stshiozak * modification, are permitted provided that the following conditions
776633Stshiozak * are met:
876633Stshiozak * 1. Redistributions of source code must retain the above copyright
976633Stshiozak *    notice, this list of conditions and the following disclaimer.
1076633Stshiozak * 2. Redistributions in binary form must reproduce the above copyright
1176633Stshiozak *    notice, this list of conditions and the following disclaimer in the
1276633Stshiozak *    documentation and/or other materials provided with the distribution.
1376633Stshiozak *
1476633Stshiozak * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1576633Stshiozak * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1676633Stshiozak * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1776633Stshiozak * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1876633Stshiozak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1976633Stshiozak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2076633Stshiozak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2176633Stshiozak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2276633Stshiozak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2376633Stshiozak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2476633Stshiozak * SUCH DAMAGE.
2576633Stshiozak *
2676633Stshiozak * $FreeBSD$
2776633Stshiozak */
2876633Stshiozak
2976633Stshiozak/*-
3076633Stshiozak * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
3176633Stshiozak * All rights reserved.
3276633Stshiozak *
3376633Stshiozak * This code is derived from software contributed to The NetBSD Foundation
3476633Stshiozak * by Julian Coleman.
3576633Stshiozak *
3676633Stshiozak * Redistribution and use in source and binary forms, with or without
3776633Stshiozak * modification, are permitted provided that the following conditions
3876633Stshiozak * are met:
3976633Stshiozak * 1. Redistributions of source code must retain the above copyright
4076633Stshiozak *    notice, this list of conditions and the following disclaimer.
4176633Stshiozak * 2. Redistributions in binary form must reproduce the above copyright
4276633Stshiozak *    notice, this list of conditions and the following disclaimer in the
4376633Stshiozak *    documentation and/or other materials provided with the distribution.
4476633Stshiozak *
4576633Stshiozak * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
4676633Stshiozak * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
4776633Stshiozak * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
4876633Stshiozak * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
4976633Stshiozak * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
5076633Stshiozak * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
5176633Stshiozak * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
5276633Stshiozak * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5376633Stshiozak * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
5476633Stshiozak * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
5576633Stshiozak * POSSIBILITY OF SUCH DAMAGE.
5679555Sobrien *
5779555Sobrien *	$NetBSD: wchar.h,v 1.8 2000/12/22 05:31:42 itojun Exp $
5876633Stshiozak */
5976633Stshiozak
6076633Stshiozak#ifndef _WCHAR_H_
6176633Stshiozak#define _WCHAR_H_
6276633Stshiozak
6376633Stshiozak#include <sys/cdefs.h>
64123257Smarcel#include <sys/_null.h>
65102227Smike#include <sys/_types.h>
66114185Skan#include <machine/_limits.h>
67133564Stjr#include <_ctype.h>
68101776Stjr
69102227Smike#ifndef _MBSTATE_T_DECLARED
70102227Smiketypedef	__mbstate_t	mbstate_t;
71102227Smike#define	_MBSTATE_T_DECLARED
72101409Stjr#endif
73101409Stjr
74102227Smike#ifndef _SIZE_T_DECLARED
75102227Smiketypedef	__size_t	size_t;
76102227Smike#define	_SIZE_T_DECLARED
77101409Stjr#endif
78101409Stjr
79302008Sed#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
80302008Sed#ifndef _VA_LIST_DECLARED
81302008Sedtypedef	__va_list	va_list;
82302008Sed#define	_VA_LIST_DECLARED
83302008Sed#endif
84302008Sed#endif
85302008Sed
8699640Sobrien#ifndef	__cplusplus
87102227Smike#ifndef _WCHAR_T_DECLARED
88264496Stijltypedef	___wchar_t	wchar_t;
89102227Smike#define	_WCHAR_T_DECLARED
9076633Stshiozak#endif
9199640Sobrien#endif
9276633Stshiozak
93102227Smike#ifndef _WINT_T_DECLARED
94102227Smiketypedef	__wint_t	wint_t;
95102227Smike#define	_WINT_T_DECLARED
9676633Stshiozak#endif
9776633Stshiozak
98237517Sandrew#define	WCHAR_MIN	__WCHAR_MIN
99237517Sandrew#define	WCHAR_MAX	__WCHAR_MAX
100114185Skan
10176633Stshiozak#ifndef WEOF
10276633Stshiozak#define	WEOF 	((wint_t)-1)
10376633Stshiozak#endif
10476633Stshiozak
105227487Stheraven#ifndef _STDFILE_DECLARED
106227487Stheraven#define _STDFILE_DECLARED
107227487Stheraventypedef struct __sFILE FILE;
108227487Stheraven#endif
109103218Stjrstruct tm;
110103177Stjr
11176633Stshiozak__BEGIN_DECLS
112101411Stjrwint_t	btowc(int);
113227487Stheravenwint_t	fgetwc(FILE *);
114101776Stjrwchar_t	*
115227487Stheraven	fgetws(wchar_t * __restrict, int, FILE * __restrict);
116227487Stheravenwint_t	fputwc(wchar_t, FILE *);
117227487Stheravenint	fputws(const wchar_t * __restrict, FILE * __restrict);
118227487Stheravenint	fwide(FILE *, int);
119227487Stheravenint	fwprintf(FILE * __restrict, const wchar_t * __restrict, ...);
120227487Stheravenint	fwscanf(FILE * __restrict, const wchar_t * __restrict, ...);
121227487Stheravenwint_t	getwc(FILE *);
122101776Stjrwint_t	getwchar(void);
12393032Simpsize_t	mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
12493032Simpsize_t	mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
12593032Simp	    mbstate_t * __restrict);
12693032Simpint	mbsinit(const mbstate_t *);
12793032Simpsize_t	mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
12893032Simp	    mbstate_t * __restrict);
129227487Stheravenwint_t	putwc(wchar_t, FILE *);
130101776Stjrwint_t	putwchar(wchar_t);
131103739Stjrint	swprintf(wchar_t * __restrict, size_t n, const wchar_t * __restrict,
132103739Stjr	    ...);
133103856Stjrint	swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...);
134227487Stheravenwint_t	ungetwc(wint_t, FILE *);
135227487Stheravenint	vfwprintf(FILE * __restrict, const wchar_t * __restrict,
136103739Stjr	    __va_list);
137103739Stjrint	vswprintf(wchar_t * __restrict, size_t n, const wchar_t * __restrict,
138103739Stjr	    __va_list);
139103739Stjrint	vwprintf(const wchar_t * __restrict, __va_list);
14093032Simpsize_t	wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
14193032Simpwchar_t	*wcscat(wchar_t * __restrict, const wchar_t * __restrict);
142132565Stjrwchar_t	*wcschr(const wchar_t *, wchar_t) __pure;
143132565Stjrint	wcscmp(const wchar_t *, const wchar_t *) __pure;
144104443Stjrint	wcscoll(const wchar_t *, const wchar_t *);
14593032Simpwchar_t	*wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
146132565Stjrsize_t	wcscspn(const wchar_t *, const wchar_t *) __pure;
147103218Stjrsize_t	wcsftime(wchar_t * __restrict, size_t, const wchar_t * __restrict,
148103218Stjr	    const struct tm * __restrict);
149132565Stjrsize_t	wcslen(const wchar_t *) __pure;
15093032Simpwchar_t	*wcsncat(wchar_t * __restrict, const wchar_t * __restrict,
15193032Simp	    size_t);
152132565Stjrint	wcsncmp(const wchar_t *, const wchar_t *, size_t) __pure;
15393032Simpwchar_t	*wcsncpy(wchar_t * __restrict , const wchar_t * __restrict, size_t);
154132565Stjrwchar_t	*wcspbrk(const wchar_t *, const wchar_t *) __pure;
155132565Stjrwchar_t	*wcsrchr(const wchar_t *, wchar_t) __pure;
15693032Simpsize_t	wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
15793032Simp	    mbstate_t * __restrict);
158132565Stjrsize_t	wcsspn(const wchar_t *, const wchar_t *) __pure;
159132565Stjrwchar_t	*wcsstr(const wchar_t * __restrict, const wchar_t * __restrict)
160132565Stjr	    __pure;
161104443Stjrsize_t	wcsxfrm(wchar_t * __restrict, const wchar_t * __restrict, size_t);
162102142Sacheint	wctob(wint_t);
163103339Stjrdouble	wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
164103067Stjrwchar_t	*wcstok(wchar_t * __restrict, const wchar_t * __restrict,
165103067Stjr	    wchar_t ** __restrict);
166103097Stjrlong	 wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int);
167103097Stjrunsigned long
168103097Stjr	 wcstoul(const wchar_t * __restrict, wchar_t ** __restrict, int);
169132565Stjrwchar_t	*wmemchr(const wchar_t *, wchar_t, size_t) __pure;
170132565Stjrint	wmemcmp(const wchar_t *, const wchar_t *, size_t) __pure;
171101411Stjrwchar_t	*wmemcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t);
172101411Stjrwchar_t	*wmemmove(wchar_t *, const wchar_t *, size_t);
173101411Stjrwchar_t	*wmemset(wchar_t *, wchar_t, size_t);
174103739Stjrint	wprintf(const wchar_t * __restrict, ...);
175103856Stjrint	wscanf(const wchar_t * __restrict, ...);
176102198Stjr
177129774Stjr#ifndef _STDSTREAM_DECLARED
178227487Stheravenextern FILE *__stdinp;
179227487Stheravenextern FILE *__stdoutp;
180227487Stheravenextern FILE *__stderrp;
181129774Stjr#define	_STDSTREAM_DECLARED
182129774Stjr#endif
183129774Stjr
184129774Stjr#define	getwc(fp)	fgetwc(fp)
185129774Stjr#define	getwchar()	fgetwc(__stdinp)
186130185Stjr#define	putwc(wc, fp)	fputwc(wc, fp)
187129774Stjr#define	putwchar(wc)	fputwc(wc, __stdoutp)
188129774Stjr
189106035Stjr#if __ISO_C_VISIBLE >= 1999
190227487Stheravenint	vfwscanf(FILE * __restrict, const wchar_t * __restrict,
191106035Stjr	    __va_list);
192106035Stjrint	vswscanf(const wchar_t * __restrict, const wchar_t * __restrict,
193106035Stjr	    __va_list);
194106035Stjrint	vwscanf(const wchar_t * __restrict, __va_list);
195112177Stjrfloat	wcstof(const wchar_t * __restrict, wchar_t ** __restrict);
196112177Stjrlong double
197112177Stjr	wcstold(const wchar_t * __restrict, wchar_t ** __restrict);
198106035Stjr#ifdef __LONG_LONG_SUPPORTED
199106035Stjr/* LONGLONG */
200106035Stjrlong long
201106035Stjr	wcstoll(const wchar_t * __restrict, wchar_t ** __restrict, int);
202106035Stjr/* LONGLONG */
203106035Stjrunsigned long long
204106035Stjr	 wcstoull(const wchar_t * __restrict, wchar_t ** __restrict, int);
205106035Stjr#endif
206106035Stjr#endif	/* __ISO_C_VISIBLE >= 1999 */
207106035Stjr
208102198Stjr#if __XSI_VISIBLE
209102198Stjrint	wcswidth(const wchar_t *, size_t);
210102198Stjrint	wcwidth(wchar_t);
211133564Stjr#define	wcwidth(_c)	__wcwidth(_c)
212102198Stjr#endif
213103737Stjr
214189136Sdas#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE
215132497Stjrsize_t	mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
216132497Stjr	    size_t, mbstate_t * __restrict);
217247411SjhbFILE	*open_wmemstream(wchar_t **, size_t *);
218189365Sdaswchar_t	*wcpcpy(wchar_t * __restrict, const wchar_t * __restrict);
219189365Sdaswchar_t	*wcpncpy(wchar_t * __restrict, const wchar_t * __restrict, size_t);
220187961Sdaswchar_t	*wcsdup(const wchar_t *) __malloc_like;
221189136Sdasint	wcscasecmp(const wchar_t *, const wchar_t *);
222189136Sdasint	wcsncasecmp(const wchar_t *, const wchar_t *, size_t n);
223189136Sdassize_t	wcsnlen(const wchar_t *, size_t) __pure;
224132497Stjrsize_t	wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
225132497Stjr	    size_t, mbstate_t * __restrict);
226189136Sdas#endif
227189136Sdas
228189136Sdas#if __BSD_VISIBLE
229227487Stheravenwchar_t	*fgetwln(FILE * __restrict, size_t * __restrict);
230103737Stjrsize_t	wcslcat(wchar_t *, const wchar_t *, size_t);
231103737Stjrsize_t	wcslcpy(wchar_t *, const wchar_t *, size_t);
232103737Stjr#endif
233232498Stheraven
234233600Stheraven#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
235232498Stheraven#include <xlocale/_wchar.h>
236232498Stheraven#endif
23776633Stshiozak__END_DECLS
23876633Stshiozak
23976633Stshiozak#endif /* !_WCHAR_H_ */
240