+/* If s is not a null pointer, and the next n bytes (maximum) form a valid
+ multibyte character sequence (possibly including shift sequences), the
+ corresponding wide character is stored in pwc (unless that is a null
+ pointer). If the wide character is the null character, the function is
+ left in the initial conversion state.
+ Returns the number of bytes in the consumed multibyte character sequence;
+ or 0, if the resulting wide character is the null character. If the next
+ n bytes do not form a valid sequence, returns -1.
+ In no case will the returned value be greater than n or MB_CUR_MAX.
+ If s is a null pointer, returns nonzero if multibyte encodings in the
+ current locale are stateful, and zero otherwise.
+*/
+int mbtowc( wchar_t * _PDCLIB_restrict pwc, const char * _PDCLIB_restrict s, size_t n );
+
+/* Converts the wide character wc into the corresponding multibyte character
+ sequence (including shift sequences). If s is not a null pointer, the
+ multibyte sequence (at most MB_CUR_MAX characters) is stored at that
+ location. If wc is a null character, a null byte is stored, preceded by
+ any shift sequence needed to restore the initial shift state, and the
+ function is left in the initial conversion state.
+ Returns the number of bytes in the generated multibyte character sequence.
+ If wc does not correspond to a valid multibyte character, returns -1.
+ In no case will the returned value be greater than MB_CUR_MAX.
+ If s is a null pointer, returns nonzero if multibyte encodings in the
+ current locale are stateful, and zero otherwise.
+*/
+int wctomb( char * s, wchar_t wc );
+
+/* Convert a sequence of multibyte characters beginning in the initial shift
+ state from the array pointed to by s into the corresponding wide character
+ sequence, storing no more than n wide characters into pwcs. A null
+ character is converted into a null wide character, and marks the end of
+ the multibyte character sequence.
+ If copying takes place between objects that overlap, behaviour is
+ undefined.
+ Returns (size_t)-1 if an invalid multibyte sequence is encountered.
+ Otherwise, returns the number of array elements modified, not including
+ a terminating null wide character, if any. (Target string will not be
+ null terminated if the return value equals n.)
+*/
+size_t mbstowcs( wchar_t * _PDCLIB_restrict pwcs, const char * _PDCLIB_restrict s, size_t n );
+
+/* Convert a sequence of wide characters from the array pointed to by pwcs
+ into a sequence of corresponding multibyte characters, beginning in the
+ initial shift state, storing them in the array pointed to by s, stopping
+ if the next multibyte character would exceed the limit of n total bytes
+ or a null character is stored.
+ If copying takes place between objects that overlap, behaviour is
+ undefined.
+ Returns (size_t)-1 if a wide character is encountered that does not
+ correspond to a valid multibyte character. Otherwise, returns the number
+ of array elements modified, not including a terminating null character,
+ if any. (Target string will not be null terminated if the return value
+ equals n.)
+*/
+size_t wcstombs( char * _PDCLIB_restrict s, const wchar_t * _PDCLIB_restrict pwcs, size_t n );
+
+#ifdef __cplusplus
+}
+#endif