text: /****************************************************************************
   * include/wchar.h
   *
   *   Copyright (C) 2014 Gregory Nutt. All rights reserved.
   *   Author: Gregory Nutt <gnutt@nuttx.org>
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   * 3. Neither the name NuttX nor the names of its contributors may be
   *    used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
   * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   *
   ****************************************************************************/
  
  #ifndef __INCLUDE_WCHAR_H
  #define __INCLUDE_WCHAR_H
  
  /****************************************************************************
   * Included Files
   ****************************************************************************/
  
  /* "Inclusion of the <wchar.h> header may make visible all symbols from the
   *  headers <ctype.h>, <stdio.h>, <stdarg.h>, <stdlib.h>, <string.h>,
   *  <stddef.h> and <time.h>."
   *
   * Reference: Opengroup.org
   */
  
  #include <stdio.h>
  #include <stddef.h>
  
  /****************************************************************************
   * Pre-processor Definitions
   ****************************************************************************/
  /* <wchar.h> defines the following macro names: 
   *
   * WCHAR_MAX
   *   The maximum value representable by an object of type wchar_t.
   *
   * WCHAR_MIN
   *   The minimum value representable by an object of type wchar_t.
   *
   * WEOF
   *   Constant expression of type wint_t that is returned by several WP
   *   functions to indicate end-of-file.
   *
   * NULL
   *   As described in <stddef.h>. 
   *
   * Reference: Opengroup.org
   */
  
  #define WCHAR_MAX 0xffff
  #define WCHAR_MIN 0x0000
  #define WEOF      ((wint_t)-1)
  
  #ifndef NULL
  #  define NULL ((FAR void *)0)
  #endif
  
  /****************************************************************************
   * Type Definitions
   ****************************************************************************/
  /* "The <wchar.h> header defines the following data types through
   *
   * wchar_t
   *   As described in <stddef.h>.
   *
   * wint_t
   *   An integral type capable of storing any valid value of wchar_t, or WEOF.
   */
  
  typedef int wint_t;
  
  /* wctype_t
   *   A scalar type of a data object that can hold values which represent
   *   locale-specific character classification.
   */
  
  typedef int wctype_t;
  
  /* mbstate_t
   *   An object type other than an array type that can hold the conversion
   *   state information necessary to convert between sequences of (possibly
   *   multibyte) characters and wide-characters. If a codeset is being used
   *   such that an mbstate_t needs to preserve more than 2 levels of reserved
   *   state, the results are unspecified.
   */
  
  struct mbstate_s
  {
    int __fill[6];
  };
  
  typedef struct mbstate_s mbstate_t;
  
  /* FILE
   *   As described in <stdio.h>.
   *
   * size_t
   *   As described in <stddef.h>."
   *
   * Reference: Opengroup.org
   */
  
  /* "The tag tm is declared as naming an incomplete structure type, the
   *  contents of which are described in the header <time.h>."
   *
   * Reference: Opengroup.org
   */
  
  struct tm; /* Forward reference (see <time.h>) */
  
  /****************************************************************************
   * Public Data
   ****************************************************************************/
  
  #ifdef __cplusplus
  #define EXTERN extern "C"
  extern "C"
  {
  #else
  #define EXTERN extern
  #endif
  
  /****************************************************************************
   * Public Function Prototypes
   ****************************************************************************/
  /* "The <wchar.h> header declares the following as functions and may also
   *  define them as macros. Function prototypes must be provided for use with
   *  an ISO C compiler."
   *
   * Reference: Opengroup.org
   */
  
  wint_t            btowc(int);
  int               fwprintf(FILE *, FAR const wchar_t *, ...);
  int               fwscanf(FILE *, FAR const wchar_t *, ...);
  int               iswalnum(wint_t);
  int               iswalpha(wint_t);
  int               iswcntrl(wint_t);
  int               iswdigit(wint_t);
  int               iswgraph(wint_t);
  int               iswlower(wint_t);
  int               iswprint(wint_t);
  int               iswpunct(wint_t);
  int               iswspace(wint_t);
  int               iswupper(wint_t);
  int               iswxdigit(wint_t);
  int               iswctype(wint_t, wctype_t);
  wint_t            fgetwc(FILE *);
  FAR wchar_t      *fgetws(wchar_t *, int, FILE *);
  wint_t            fputwc(wchar_t, FILE *);
  int               fputws(FAR const wchar_t *, FILE *);
  int               fwide(FILE *, int);
  wint_t            getwc(FILE *);
  wint_t            getwchar(void);
  int               mbsinit(FAR const mbstate_t *);
  size_t            mbrlen(FAR const char *, size_t, FAR mbstate_t *);
  size_t            mbrtowc(wchar_t *, FAR const char *, size_t,
                        mbstate_t *);
  size_t            mbsnrtowcs(FAR wchar_t *, FAR const char **, size_t,
                        size_t, FAR mbstate_t *);
  size_t            mbsrtowcs(wchar_t *, FAR const char **, size_t,
                        FAR mbstate_t *);
  wint_t            putwc(wchar_t, FILE *);
  wint_t            putwchar(wchar_t);
  int               swprintf(FAR wchar_t *, size_t, FAR const wchar_t *, ...);
  int               swscanf(FAR const wchar_t *, FAR const wchar_t *, ...);
  wint_t            towlower(wint_t);
  wint_t            towupper(wint_t);
  wint_t            ungetwc(wint_t, FILE *);
  int               vfwprintf(FILE *, FAR const wchar_t *, va_list);
  int               vwprintf(FAR const wchar_t *, va_list);
  int               vswprintf(wchar_t *, size_t, FAR const wchar_t *,
                        va_list);
  size_t            wcrtomb(FAR char *, wchar_t, FAR mbstate_t *);
  FAR wchar_t      *wcscat(FAR wchar_t *, FAR const wchar_t *);
  FAR wchar_t      *wcschr(FAR const wchar_t *, wchar_t);
  int               wcscmp(FAR const wchar_t *, FAR const wchar_t *);
  int               wcscoll(FAR const wchar_t *, FAR const wchar_t *);
  FAR wchar_t      *wcscpy(FAR wchar_t *, FAR const wchar_t *);
  size_t            wcscspn(FAR const wchar_t *, FAR const wchar_t *);
  size_t            wcsftime(FAR wchar_t *, size_t, FAR const wchar_t *,
                        FAR const struct tm *);
  size_t            wcslen(FAR const wchar_t *);
  size_t            wcslcpy(FAR wchar_t *, FAR const wchar_t *, size_t);
  size_t            wcslcat(FAR wchar_t *, FAR const wchar_t *, size_t);
  FAR wchar_t      *wcsncat(FAR wchar_t *, FAR const wchar_t *, size_t);
  int               wcsncmp(FAR const wchar_t *, FAR const wchar_t *, size_t);
  FAR wchar_t      *wcsncpy(FAR wchar_t *, FAR const wchar_t *, size_t);
  size_t            wcsnrtombs(FAR char *, FAR const wchar_t **, size_t,
                        size_t, FAR mbstate_t *);
  FAR wchar_t      *wcspbrk(FAR const wchar_t *, FAR const wchar_t *);
  FAR wchar_t      *wcsrchr(FAR const wchar_t *, wchar_t);
  size_t            wcsrtombs(FAR char *, FAR const wchar_t **, size_t,
                        FAR mbstate_t *);
  size_t            wcsspn(FAR const wchar_t *, FAR const wchar_t *);
  FAR wchar_t      *wcsstr(FAR const wchar_t *, FAR const wchar_t *);
  double            wcstod(FAR const wchar_t *, FAR wchar_t **);
  float             wcstof(FAR const wchar_t *, FAR wchar_t **);
  FAR wchar_t      *wcstok(FAR wchar_t *, FAR const wchar_t *, FAR wchar_t **);
  long int          wcstol(FAR const wchar_t *, FAR wchar_t **, int);
  long double       wcstold(FAR const wchar_t *, FAR wchar_t **);
  long long int     wcstoll(FAR const wchar_t *, FAR wchar_t **, int);
  unsigned long int wcstoul(FAR const wchar_t *, FAR wchar_t **, int);
  unsigned long long int wcstoull(FAR const wchar_t *, FAR wchar_t **, int);
  FAR wchar_t      *wcswcs(FAR const wchar_t *, FAR const wchar_t *);
  int               wcswidth(FAR const wchar_t *, size_t);
  size_t            wcsxfrm(wchar_t *, FAR const wchar_t *, size_t);
  int               wctob(wint_t);
  wctype_t          wctype(FAR const char *);
  int               wcwidth(wchar_t);
  FAR wchar_t      *wmemchr(FAR const wchar_t *, wchar_t, size_t);
  int               wmemcmp(FAR const wchar_t *, FAR const wchar_t *, size_t);
  FAR wchar_t      *wmemcpy(FAR wchar_t *, FAR const wchar_t *, size_t);
  FAR wchar_t      *wmemmove(FAR wchar_t *, FAR const wchar_t *, size_t);
  FAR wchar_t      *wmemset(FAR wchar_t *, wchar_t, size_t);
  int               wprintf(FAR const wchar_t *, ...);
  int               wscanf(FAR const wchar_t *, ...);
  
  #undef EXTERN
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* __INCLUDE_WCHAR_H */
  