#ifndef _MSL_CWCHAR
#define _MSL_CWCHAR

#include <ansi_params.h>

#if !_MSL_USING_MW_C_HEADERS
    #include <wchar.h>

    #if _MSL_PUT_THIRD_PARTY_C_IN_STD
        #include <msl_cpp_std_wchar.h>
    #endif
#else

#if _MSL_WIDE_CHAR

#include <msl_secure.h>
#include <msl_rsize_t.h>
#include <wchar_io.h>
#include <eof.h>
#include <weof.h>
#include <wstdio.h>
#include <wscanf.h>
#include <wcstold.h>
#include <wtime.h>
#include <wcstoul.h>
#include <wstring.h>
#include <wprintf.h>
#include <wmem.h>

#if _MSL_NEEDS_EXTRAS
    #include <extras_wchar.h>
#endif

#ifndef RC_INVOKED

_MSL_BEGIN_NAMESPACE_STD
    _MSL_BEGIN_EXTERN_C

    #ifdef __cplusplus
_MSL_END_EXTERN_C
inline int _MSL_CDECL wctob (wint_t c) _MSL_CANT_THROW {
    return ((c & 0xFF00) ? (int)EOF : (int)c);
}
inline wint_t _MSL_CDECL btowc (int c) _MSL_CANT_THROW   {
    return ((c & 0x8000) ? (wint_t)WEOF : (wint_t)c);
}
_MSL_BEGIN_EXTERN_C
    #else
_MSL_IMP_EXP_C int _MSL_CDECL wctob(wint_t);
_MSL_IMP_EXP_C wint_t _MSL_CDECL btowc(int);
    #endif

_MSL_IMP_EXP_C size_t _MSL_CDECL mbrlen(const char * _MSL_RESTRICT, size_t, mbstate_t * _MSL_RESTRICT) _MSL_CANT_THROW;
_MSL_IMP_EXP_C int _MSL_CDECL mbsinit(const mbstate_t *) _MSL_CANT_THROW;

    #if _MSL_WIDE_CHAR
_MSL_IMP_EXP_C size_t _MSL_CDECL mbrtowc(wchar_t * _MSL_RESTRICT, const char * _MSL_RESTRICT, size_t, mbstate_t * _MSL_RESTRICT) _MSL_CANT_THROW;
_MSL_IMP_EXP_C size_t _MSL_CDECL wcrtomb(char * _MSL_RESTRICT, wchar_t, mbstate_t * _MSL_RESTRICT) _MSL_CANT_THROW;
_MSL_IMP_EXP_C size_t _MSL_CDECL mbsrtowcs(wchar_t * _MSL_RESTRICT, const char * * _MSL_RESTRICT, size_t, mbstate_t * _MSL_RESTRICT) _MSL_CANT_THROW;
_MSL_IMP_EXP_C size_t _MSL_CDECL wcsrtombs(char * _MSL_RESTRICT, const wchar_t * * _MSL_RESTRICT, size_t, mbstate_t * _MSL_RESTRICT) _MSL_CANT_THROW;
    #endif

_MSL_END_EXTERN_C
    _MSL_END_NAMESPACE_STD

#endif

#endif

#endif

#endif
