1234353Sdim/* 2224133Sdim * Copyright 2008-2012 Haiku, Inc. All Rights Reserved. 3224133Sdim * Distributed under the terms of the MIT License. 4224133Sdim */ 5224133Sdim#ifndef _WCHAR_H 6224133Sdim#define _WCHAR_H 7224133Sdim 8224133Sdim 9224133Sdim#include <limits.h> 10224133Sdim#include <locale_t.h> 11224133Sdim#include <stddef.h> 12224133Sdim#include <stdio.h> 13224133Sdim#include <time.h> 14224133Sdim 15276479Sdim 16224133Sdim/* stddef.h is not supposed to define wint_t, but gcc 2.95.3's one does. 17262613Sdim * In all other cases we will do that. */ 18226633Sdim#ifndef _WINT_T 19224133Sdim#define _WINT_T 20224133Sdim 21224133Sdim#ifndef __WINT_TYPE__ 22234353Sdim#define __WINT_TYPE__ unsigned int 23226633Sdim#endif 24224133Sdim 25276479Sdimtypedef __WINT_TYPE__ wint_t; 26276479Sdim 27224133Sdim#endif /* _WINT_T */ 28224133Sdim 29224133Sdimtypedef int wctype_t; 30224133Sdim 31224133Sdimtypedef struct { 32224133Sdim void* converter; 33224133Sdim char charset[64]; 34224133Sdim unsigned int count; 35224133Sdim char data[1024 + 8]; /* 1024 bytes for data, 8 for alignment space */ 36262613Sdim} mbstate_t; 37288943Sdim 38262613Sdim 39262613Sdim#define WEOF ((wint_t)(-1)) 40276479Sdim 41262613Sdim#define WCHAR_MIN 0x00000000UL 42262613Sdim#define WCHAR_MAX 0x7FFFFFFFUL 43262613Sdim 44262613Sdim/* 45262613Sdim * Haiku is always using UTF32 in wchars, other encodings can be handled 46288943Sdim * by converting to/from wchar by means of mbrtowc() or wcrtomb(). 47262613Sdim */ 48262613Sdim 49276479Sdim 50262613Sdim#ifdef __cplusplus 51262613Sdimextern "C" { 52262613Sdim#endif 53262613Sdim 54224133Sdimextern wint_t btowc(int); 55224133Sdim 56224133Sdimextern wint_t fgetwc(FILE *stream); 57224133Sdimextern wchar_t *fgetws(wchar_t *dest, int destLength, FILE *stream); 58224133Sdimextern wint_t fputwc(wchar_t wc, FILE *stream); 59224133Sdimextern int fputws(const wchar_t *wcs, FILE *stream); 60288943Sdimextern int fwide(FILE *stream, int mode); 61226633Sdimextern int fwprintf(FILE *stream, const wchar_t *format, ...); 62262613Sdimextern int fwscanf(FILE *stream, const wchar_t *format, ...); 63226633Sdimextern wint_t getwc(FILE *stream); 64224133Sdimextern wint_t getwchar(void); 65224133Sdim 66288943Sdimextern size_t mbrlen(const char *s, size_t n, mbstate_t *mbState); 67288943Sdimextern size_t mbrtowc(wchar_t *dest, const char *src, size_t srcLength, 68276479Sdim mbstate_t *mbState); 69288943Sdimextern int mbsinit(const mbstate_t *mbState); 70288943Sdimextern size_t mbsnrtowcs(wchar_t *dest, const char **src, size_t srcLength, 71224133Sdim size_t destLength, mbstate_t *mbState); 72224133Sdimextern size_t mbsrtowcs(wchar_t *dest, const char **src, size_t destLength, 73251662Sdim mbstate_t *mbState); 74251662Sdim 75251662Sdimextern wint_t putwc(wchar_t wc, FILE *stream); 76251662Sdimextern wint_t putwchar(wchar_t wc); 77251662Sdim 78251662Sdimextern int swprintf(wchar_t *dest, size_t destLength, 79251662Sdim const wchar_t *format, ...); 80251662Sdimextern int swscanf(const wchar_t *wcs, const wchar_t *format, ...); 81251662Sdim 82251662Sdimextern wint_t ungetwc(wint_t wc, FILE *stream); 83251662Sdim 84288943Sdimextern int vfwprintf(FILE *stream, const wchar_t *format, va_list arg); 85288943Sdimextern int vfwscanf(FILE *stream, const wchar_t *format, va_list arg); 86234353Sdimextern int vswprintf(wchar_t *dest, size_t destLength, 87234353Sdim const wchar_t *format, va_list arg); 88226633Sdimextern int vswscanf(const wchar_t *wcs, const wchar_t *format, 89251662Sdim va_list arg); 90262613Sdimextern int vwprintf(const wchar_t *format, va_list arg); 91262613Sdimextern int vwscanf(const wchar_t *format, va_list arg); 92262613Sdim 93262613Sdimextern wchar_t *wcpcpy(wchar_t *dest, const wchar_t *src); 94262613Sdimextern wchar_t *wcpncpy(wchar_t *dest, const wchar_t *src, size_t srcLength); 95262613Sdimextern size_t wcrtomb(char *dest, wchar_t wc, mbstate_t *mbState); 96262613Sdimextern int wcscasecmp(const wchar_t *wcs1, const wchar_t *wcs2); 97251662Sdimextern int wcscasecmp_l(const wchar_t *wcs1, const wchar_t *wcs2, locale_t locale); 98288943Sdimextern wchar_t *wcscat(wchar_t *dest, const wchar_t *src); 99226633Sdimextern wchar_t *wcschr(const wchar_t *wcs, wchar_t wc); 100224133Sdim#ifdef _GNU_SOURCE 101224133Sdimextern wchar_t *wcschrnul(const wchar_t *wcs, wchar_t wc); 102288943Sdim#endif 103288943Sdimextern int wcscmp(const wchar_t *wcs1, const wchar_t *wcs2); 104251662Sdimextern int wcscoll(const wchar_t *wcs1, const wchar_t *wcs2); 105251662Sdimextern int wcscoll_l(const wchar_t *wcs1, const wchar_t *wcs2, locale_t locale); 106251662Sdimextern wchar_t *wcscpy(wchar_t *dest, const wchar_t *src); 107251662Sdimextern size_t wcscspn(const wchar_t *wcs, const wchar_t *reject); 108262613Sdimextern wchar_t *wcsdup(const wchar_t *wcs); 109262613Sdimextern size_t wcsftime(wchar_t *dest, size_t destLength, 110262613Sdim const wchar_t *format, const struct tm *timeptr); 111262613Sdimextern size_t wcslcat(wchar_t *dest, const wchar_t *src, size_t maxLength); 112262613Sdimextern size_t wcslcpy(wchar_t *dest, const wchar_t *src, size_t maxLength); 113262613Sdimextern size_t wcslen(const wchar_t *wcs); 114262613Sdimextern int wcsncasecmp(const wchar_t *wcs1, const wchar_t *wcs2, 115262613Sdim size_t maxLength); 116262613Sdimextern int wcsncasecmp_l(const wchar_t *wcs1, const wchar_t *wcs2, 117262613Sdim size_t maxLength, locale_t locale); 118262613Sdimextern wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t srcLength); 119251662Sdimextern int wcsncmp(const wchar_t *wcs1, const wchar_t *wcs2, 120288943Sdim size_t length); 121251662Sdimextern wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t srcLength); 122251662Sdimextern size_t wcsnlen(const wchar_t *wcs, size_t maxLength); 123262613Sdimextern size_t wcsnrtombs(char *dest, const wchar_t **src, size_t srcLength, 124288943Sdim size_t destLength, mbstate_t *mbState); 125288943Sdimextern wchar_t *wcspbrk(const wchar_t *wcs, const wchar_t *accept); 126288943Sdimextern wchar_t *wcsrchr(const wchar_t *wcs, wchar_t wc); 127262613Sdimextern size_t wcsrtombs(char *dest, const wchar_t **src, size_t destLength, 128262613Sdim mbstate_t *mbState); 129288943Sdimextern size_t wcsspn(const wchar_t *wcs, const wchar_t *accept); 130288943Sdimextern wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle); 131288943Sdimextern double wcstod(const wchar_t *wcs, wchar_t **endPtr); 132288943Sdimextern float wcstof(const wchar_t *wcs, wchar_t **endPtr); 133288943Sdimextern wchar_t *wcstok(wchar_t *wcs1, const wchar_t *wcs2, wchar_t **ptr); 134262613Sdimextern long wcstol(const wchar_t *wcs, wchar_t **endPtr, int base); 135262613Sdimextern long double wcstold(const wchar_t *wcs, wchar_t **endPtr); 136288943Sdimextern long long wcstoll(const wchar_t *wcs, wchar_t **endPtr, int base); 137288943Sdimextern unsigned long wcstoul(const wchar_t *wcs, wchar_t **endPtr, 138288943Sdim int base); 139288943Sdimextern unsigned long long wcstoull(const wchar_t *wcs, wchar_t **endPtr, 140288943Sdim int base); 141288943Sdimextern wchar_t *wcswcs(const wchar_t *haystack, const wchar_t *needle); 142262613Sdimextern int wcswidth(const wchar_t *wcs, size_t length); 143262613Sdimextern size_t wcsxfrm(wchar_t *dest, const wchar_t *src, size_t destLength); 144226633Sdimextern size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src, size_t destLength, 145226633Sdim locale_t locale); 146262613Sdimextern int wctob(wint_t wc); 147262613Sdimextern int wcwidth(wchar_t wc); 148288943Sdimextern wchar_t *wmemchr(const wchar_t *wcs, wchar_t wc, size_t n); 149226633Sdimextern int wmemcmp(const wchar_t *wcs1, const wchar_t *wcs2, size_t n); 150288943Sdimextern wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t n); 151288943Sdimextern wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t n); 152288943Sdim#ifdef _GNU_SOURCE 153226633Sdimextern wchar_t *wmempcpy(wchar_t *dest, const wchar_t *src, size_t n); 154288943Sdim#endif 155288943Sdimextern wchar_t *wmemset(wchar_t *dest, wchar_t wc, size_t n); 156226633Sdim 157288943Sdimextern int wprintf(const wchar_t *format, ...); 158288943Sdimextern int wscanf(const wchar_t *format, ...); 159226633Sdim 160288943Sdim#ifdef __cplusplus 161288943Sdim} 162262613Sdim#endif 163288943Sdim 164288943Sdim#endif /* _WCHAR_H */ 165262613Sdim