+/* Affected by LC_CTYPE of the current locale. For state-dependent encoding,
+ each function is placed into its initial conversion state at program
+ startup, and can be returned to that state by a call with its character
+ pointer argument s being a null pointer.
+ Changing LC_CTYPE causes the conversion state to become indeterminate.
+*/
+
+/* If s is not a null pointer, returns the number of bytes contained in the
+ multibyte character pointed to by s (if the next n or fewer bytes form a
+ valid multibyte character); -1, if they don't; or 0, if s points to the
+ null character.
+ If s is a null pointer, returns nonzero if multibyte encodings in the
+ current locale are stateful, and zero otherwise.
+*/
+int mblen( const char * s, size_t n );
+
+/* 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 );