/**************************************************************************
*   Copyright 2000 Compaq Computer Corporation
*
*   COMPAQ Registered in U.S. Patent and Trademark Office.
*
*   Confidential computer software. Valid license from Compaq or authorized
*   sublicensor required for possession, use or copying. Consistent with
*   FAR 12.211 and 12.212, Commercial Computer Software, Computer Software
*   Documentation, and Technical Data for Commercial Items are licensed to
*   the U.S. Government under vendor's standard commercial license.
**************************************************************************/

#if !defined(_WCHAR_H_) && !defined(_WCHAR_H)
#if defined(__linux__)
#define _WCHAR_H
#else
#define _WCHAR_H_
#endif  /* __linux__  */

namespace std {

#if defined(__linux__)
#define NULL    0
#define WCHAR_MAX (0x7fffffff)
#else
#define NULL    0L
#define WCHAR_MAX	((wchar_t)~0)
#endif  /*  __linux__  */

#define WCHAR_MIN	0

typedef unsigned int wint_t;         /* Wide character */

typedef unsigned long   size_t;

#define WEOF	(wint_t)(-1)
} /* std */

#ifndef _MBSTATE_T
#define _MBSTATE_T
#if defined(__linux__) && defined(__DECCXX_LIBCXX_RH70)
typedef struct
{
  int __count;
  union
  {
    std::wint_t __wch;
    char __wchb[4];
  } __value;		/* Value so far.  */
} __mbstate_t;
#else
namespace std {

#if defined(__linux__)
typedef struct
{
  int count;
  wint_t value;
} mbstate_t;
#else
typedef struct {
    void	*__hdr;		/* pointer to _LC_object_t */
    void	*__attrobj;	/* pointer to attribute object */
    void	*__state;	/* currently unused state flag */
} mbstate_t;
#endif   /*  __linux__ */
} /* std */
#endif /* defined(__linux__) && defined(__DECCXX_LIBCXX_RH70) */
#endif   /*  _MBSTATE_T  */

namespace std {

#if defined(__linux__) && defined(__DECCXX_LIBCXX_RH70)
typedef __mbstate_t mbstate_t;
#endif /* defined(__linux__) && defined(__DECCXX_LIBCXX_RH70) */


extern "C" {

extern const wchar_t	*wmemchr (const wchar_t *, wchar_t, size_t);
extern int	wmemcmp (const wchar_t *, const wchar_t *, size_t);
extern wchar_t	*wmemcpy (wchar_t *, const wchar_t *, size_t);
extern wchar_t	*wmemmove (wchar_t *, const wchar_t *, size_t);
extern wchar_t	*wmemset (wchar_t *, wchar_t, size_t);
extern const wchar_t  *wcsstr (const wchar_t *, const wchar_t *);
extern int	wscanf (const wchar_t *, ...);
extern int	swscanf (const wchar_t *, const wchar_t *, ...);
#if defined(_CSTDIO_) || defined(_STDIO_H_)
#define __WCHAR_CNAME1__
extern int	fwscanf (FILE *, const wchar_t *, ...);
extern int	fwprintf (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 wint_t	getwc (FILE *);
extern wint_t	putwc (wchar_t, FILE *);
extern int      fwide (FILE *, int);
extern wint_t	ungetwc (wint_t, FILE *);
#if defined(_CSTDARG_) || defined(_STDARG_H)
#define __WCHAR_CNAME2__
extern int	vfwprintf (FILE *, const wchar_t *, va_list);
#endif  /* _CSTDARG_ || _STDARG_H */
#endif  /* _CSTDIO_ || _STDIO_H */
#if defined(_CSTDARG_) || defined(_STDARG_H)
#define __WCHAR_CNAME3__
extern int	vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
extern int	vwprintf (const wchar_t *, va_list);
#endif  /* _CSTDARG_ || _STDARG_H */
extern int	wprintf (const wchar_t *, ...);
extern int	swprintf (wchar_t *, size_t, const wchar_t *, ...);
extern wint_t	btowc (int);
extern int	wctob (wint_t);
extern int	mbsinit (const mbstate_t *);
extern size_t	mbrlen (const char *, size_t, mbstate_t *);
extern size_t	mbrtowc (wchar_t *, const char *, size_t, mbstate_t *);
extern size_t	wcrtomb (char *, wchar_t, mbstate_t *);
extern size_t	mbsrtowcs (wchar_t *, const char **, size_t, mbstate_t *);
extern size_t	wcsrtombs (char *, const wchar_t **, size_t, mbstate_t *);
extern wint_t	getwchar (void);
extern wint_t	putwchar (wchar_t);
extern double	wcstod (const wchar_t *, wchar_t **);
extern long int	wcstol (const wchar_t *, wchar_t **, int);
extern unsigned long int wcstoul (const wchar_t *, wchar_t **, int);
extern wchar_t	*wcscat (wchar_t *, const wchar_t *);
extern const wchar_t	*wcschr (const wchar_t *, wchar_t);
extern int	wcscmp (const wchar_t *, const wchar_t *);
extern int	wcscoll (const wchar_t *, const wchar_t *);
extern wchar_t	*wcscpy (wchar_t *, const wchar_t *);
extern size_t	wcscspn (const wchar_t *, const wchar_t *);
extern size_t	wcslen (const wchar_t *);
extern wchar_t	*wcsncat (wchar_t *, const wchar_t *, size_t);
extern int	wcsncmp (const wchar_t *, const wchar_t *, size_t);
extern wchar_t	*wcsncpy (wchar_t *, const wchar_t *, size_t);
extern const wchar_t	*wcspbrk (const wchar_t *, const wchar_t *);
extern const wchar_t	*wcsrchr (const wchar_t *, wchar_t);
extern size_t	wcsspn (const wchar_t *, const wchar_t *);
#if defined(__CNAME_UNSUPPORTED)
extern wchar_t	*wcstok (wchar_t *, const wchar_t *, wchar_t **);
#if defined(_CTIME_) || defined(_TIME_H_)
#define __WCHAR_CNAME4__
extern size_t	wcsftime (wchar_t *, size_t, const wchar_t *, const struct tm *);
#endif  /* _CTIME_ || _TIME_H_ */
#endif  /* defined(__CNAME_UNSUPPORTED) */
extern size_t	wcsxfrm (wchar_t *, const wchar_t *, size_t);

}  /* extern "C" */

/*  Get overloaded function signatures */
#include <wchar_ovrld_impl>

}  /* namespace std */

#endif /* _WCHAR_H_ */
