/*
        Copyright (C), 1993 SEIKO EPSON Corp.
                ALL RIGHTS RESERVED
 
        file name : string.h
 
 
        revision history
                1st release     1993/10/1       mizutani
                modify to work on native environment
                                1993/12/17      shinozuka
              * /usr/PIECE/include にあるファイルよりも、このファイルが優先されるよう、
                clip.mkにて、インクルードパスを設定してあります。
              * コンパイル時に引数型を検査するため、関数宣言をK&R→ANSIに変更しました。
                変更においては、『MSDN ライブラリ Visual Studio 6.0』を参考にしました。
              * 多くの関数宣言において、変更前の戻り値と引数型コメントが誤っています。
                戻り値と引数型を変更しても、バイナリは変更不要ですので、修正しました。
                                2006/02/22      Naoyuki Sawa
              * strsep()の宣言を追加しました。実装は、clippce.cにあります。
                clippce.cの、実装部のコメントを参照してください。
                                2013/03/27      Naoyuki Sawa
              * strverscmp()の宣言を追加しました。実装は、clipdire.cにあります。
                clipdire.cの、実装部のコメントを参照してください。
                                2014/08/11      Naoyuki Sawa
              * strcasestr()の宣言を追加しました。実装は、clippce.cにあります。
                clippce.cの、実装部のコメントを参照してください。
                                2014/10/12      Naoyuki Sawa
              * strlcpy(),strlcat()の宣言を追加しました。実装は、clippce.cにあります。
                clippce.cの、実装部のコメントを参照してください。
                                2014/10/31      Naoyuki Sawa
              * strdup(),strcasecmp(),strncasecmp()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
                strcasecmp(),strncasecmp()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。
                                2015/01/07      Naoyuki Sawa
              * strnlen(),strndup()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
                                2015/01/07      Naoyuki Sawa
              * strupr(),strlwr()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
                                2015/01/07      Naoyuki Sawa
              * ffs()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
                ffs()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。
                                2015/01/07      Naoyuki Sawa
              * memcmp(),memcpy()のANSI形式の関数宣言を有効にしました。
                                2015/01/08      Naoyuki Sawa
              * size_tの定義をunsigned型に統一しました。
                NULLの定義を(void*)型に統一しました。
                                2015/01/20      Naoyuki Sawa
              * memccpy(),mempcpy(),stpncpy(),stpcpy()の宣言を追加しました。実装は、cliplibc.cにあります。
                cliplibc.cの、実装部のコメントを参照してください。
                                2015/04/29      Naoyuki Sawa
              * 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
                                2015/11/18      Naoyuki Sawa
              * strchrnul()の宣言を追加しました。実装は、cliplibc.cにあります。
                                2015/11/21      Naoyuki Sawa
              * strtok_r()の宣言を追加しました。実装は、cliplibc.cにあります。
                                2015/11/23      Naoyuki Sawa
              * rawmemchr()の宣言を追加しました。実装は、cliplibc.cにあります。
                                2016/02/13      Naoyuki Sawa
              * strdupa(),strndupa()のマクロ定義を追加しました。ヘルパ関数__strndupa_helper()の実装は、cliplibc.cにあります。
                                2016/04/29      Naoyuki Sawa
              * mbsspn(),mbscspn()の宣言を追加しました。実装は、cliplibc.cに有ります。
                                2016/05/01      Naoyuki Sawa
              * mbsnextc(),mbsinc(),mbsninc()の宣言を追加しました。実装は、cliplibc.cに有ります。
                                2016/05/11      Naoyuki Sawa
              * mbsdec()の宣言を追加しました。実装は、cliplibc.cに有ります。
                                2016/05/19      Naoyuki Sawa
              * mbschr(),mbsstr(),mbspbrk()の宣言を追加しました。実装は、cliplibc.cに有ります。
                                2016/05/20      Naoyuki Sawa
              * strnextc(),strinc(),strninc(),strdec()の宣言を追加しました。実装は、cliplibc.cに有ります。
                mbsupr(),mbslwr()の宣言を追加しました。実装は、cliplibc.cに有ります。
                                2016/06/14      Naoyuki Sawa
              * mbstok(),mbstok_r()の宣言を追加しました。実装は、cliplibc.cにあります。
                                2016/06/26      Naoyuki Sawa
              * mbslen(),mbsnlen()の宣言を追加しました。実装は、cliplibc.cにあります。
                                2016/12/29      Naoyuki Sawa
*/

#ifndef _STRING_H
#define _STRING_H

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

#ifndef NULL
//{{2015/01/20変更:NULLの定義を(void*)型に統一しました。
//#define NULL	0
//↓2015/01/20変更:NULLの定義を(void*)型に統一しました。
// * Tue Jan 20 23:26:57 JST 2015 Naoyuki Sawa
// - P/ECE開発環境の標準インクルードファイルのうち、string.hだけNULLの定義が違っています。
//   C言語のNULLは(void*)型が正しい(POSIX.1-2008)ので、(void*)型に統一することにしました。
#define NULL ((void*)0)
//}}2015/01/20変更:NULLの定義を(void*)型に統一しました。
#endif

#ifndef _SIZE_T
#define _SIZE_T
//{{2015/01/20変更:size_tの定義をunsigned型に統一しました。
//typedef unsigned long   size_t ;
//↓2015/01/20変更:size_tの定義をunsigned型に統一しました。
// * Tue Jan 20 23:26:57 JST 2015 Naoyuki Sawa
// - P/ECE開発環境ではsize_tはunsigned。unsigned longではない。
//   例1:○
//   │typedef unsigned size_t;
//   │extern void* memcpy(void*,const void*,size_t); ← 警告無くコンパイル出来る
//   例2:×
//   │typedef unsigned long size_t;
//   │extern void* memcpy(void*,const void*,size_t); ← warning:conflicting types for built-in function `memcpy'
//   P/ECE開発環境の標準インクルードファイルも間違っているので要注意です。
//   stddef.hでの定義は正しいけれど、stdio.h,stdlib.h,string.h,time.hでの定義は間違っています。
//   たまたまstddef.hを最初にインクルードすると大丈夫なのでした。
// - どのヘッダファイルを最初にインクルードしても大丈夫なように、定義を統一することにしました。
//   自作のP/ECEプログラムならば、stddef.hを最初にインクルードするようにできるのですが、
//   オープンソースのライブラリを変更無くコンパイルしたい時に、stddef.h以外が最初になっている場合があるからです。
//   具体的には、/clip/liblua/をコンパイルするときに警告が出て、この問題に気付きました。
typedef unsigned size_t;
//}}2015/01/20変更:size_tの定義をunsigned型に統一しました。
#endif

void* memchr(const void* buf, int c, size_t count);			// char *memchr( /* char *, int, int */ ) ;
//{{2015/01/08変更:memcmp()とmemcpy()のANSI形式の関数宣言を有効にしました。
///*{{ビルトイン関数に対して、ANSI形式の関数宣言を行うと、宣言が正しくても警告が表示されてしまう不具合の回避*/
////int memcmp(const void* buf1, const void* buf2, size_t count);		// int memcmp( /* char *, char *, int */ ) ;
////void* memcpy(void* dest, const void* src, size_t count);		// char *memcpy( /* char *, char *, int */ ) ;
////↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//// - 本当は、上述のように宣言するのが正しいのですが、実際に、上述の宣言を行うと、GCCが以下のような警告を発します。
////	warning: conflicting types for built-in function `memcmp'
////	warning: conflicting types for built-in function `memcpy'
////   GCCの(一部の？)ビルトイン関数をヘッダファイルで宣言すると、正しい宣言であっても、警告となってしまうようです。
////   仕方が無いので、これらのビルトイン関数の宣言を、コメントアウトしました。
//// - ビルトイン関数の宣言が無くても、GCC本体の機能により、誤った使用法に対して、コンパイル時に警告が発せられます。
////   従って、これらのビルトイン関数の宣言をコメントアウトしたことによる、実害はありません。
///*}}ビルトイン関数に対して、ANSI形式の関数宣言を行うと、宣言が正しくても警告が表示されてしまう不具合の回避*/
//↓2015/01/08変更:memcmp()とmemcpy()のANSI形式の関数宣言を有効にしました。
// * Thu Jan 08 21:27:35 JST 2015 Naoyuki Sawa
// - memcmp(),memcpy()のANSI形式の関数宣言を有効にしました。
//   以前は、memcmp(),memcpy()のANSI形式の関数宣言を有効にすると警告が出ると思っていたのですが、問題無い事が判ったからです。
// - 色々試したところ、上記の警告が出るのは、「pcc33 -g」オプションを指定した場合だけであることが判りました。
//   「pcc33 -g」オプションを指定しなければ、上記の警告は出ません。
//   P/ECE開発環境で「pcc33 -g」オプションを指定しても無意味なので、もう「pcc33 -g」オプションを使用することは無いはずです。
//   従って、memcmp(),memcpy()のANSI形式の関数宣言を有効にしても問題ないと判断し、有効にすることにしました。
// - memcmp(),memcpy()の関数宣言を行わないと、以下の警告が出る事がありました。
//	void* p1=memcpy;//warning: built-in function `memcpy' used without declaration
//	void* p2=memcmp;//warning: built-in function `memcmp' used without declaration
//   今回、memcmp(),memcpy()の関数宣言を行ったので、この警告が出る事も無くなりました。
int memcmp(const void* buf1, const void* buf2, size_t count);		// int memcmp( /* char *, char *, int */ ) ;
void* memcpy(void* dest, const void* src, size_t count);		// char *memcpy( /* char *, char *, int */ ) ;
//}}2015/01/08変更:memcmp()とmemcpy()のANSI形式の関数宣言を有効にしました。
void* memmove(void* dest, const void* src, size_t count);		// char *memmove( /* char *, char *, int */ ) ;
void* memset(void* dest, int c, size_t count);				// char *memset( /* char *, int, int */ ) ;
char* strcat(char* string1, const char* string2);			// char *strcat( /* char *, const char * */ ) ;
char* strchr(const char* string, int c);				// char *strchr( /* const char *, int */ ) ;
int strcmp(const char* string1, const char* string2);			// int strcmp( /* const char *, const char * */ ) ;
char* strcpy(char* string1, const char* string2);			// char *strcpy( /* char *, char * */ ) ;
size_t strcspn(const char* string1, const char* string2);		// size_t strcspn( /* const char *, const char * */ ) ;
char* strerror(int errnum);						// char *strerror( /* int */ ) ;
size_t strlen(const char* string);					// size_t strlen( /* const char * */ ) ;
char* strncat(char* string1, const char* string2, size_t count);	// char *strncat( /* char *, const char *, size_t */ ) ;
int strncmp(const char* string1, const char* string2, size_t count);	// int strncmp( /* const char *, const char *, size_t */ ) ;
char* strncpy(char* string1, const char* string2, size_t count);	// char *strncpy( /* char *, const char *, size_t */ ) ;
char* strpbrk(const char* string1, const char* string2);		// char *strpbrk( /* const char *, const char * */ ) ;
char* strrchr(const char* string, int c);				// char *strrchr( /* const char *, int */ ) ;
size_t strspn(const char* string1, const char* string2);		// size_t strspn( /* const char *, const char * */ ) ;
char* strstr(const char* string1, const char* string2);			// char *strstr( /* const char *, const char * */ ) ;
char* strtok(char* string1, const char* string2);			// char *strtok( /* char *, const char * */ ) ;

/* * Mon Nov 23 21:30:44 JST 2015 Naoyuki Sawa
 * - strtok_r()の宣言を追加しました。実装は、cliplibc.cにあります。
 *   cliplibc.cの、実装部のコメントを参照してください。
 */
char* strtok_r(char* s1, const char* s2, char** saveptr);

/* * Sat Nov 21 21:27:06 JST 2015 Naoyuki Sawa
 * - strchrnul()の宣言を追加しました。実装は、cliplibc.cにあります。
 *   □「Linux Programmer's Manual - STRCHR」(http://linuxjm.osdn.jp/html/LDP_man-pages/man3/strchr.3.html)より引用:
 *   │strchrnul()関数はstrchr()と同様だが、cがs中に見つからなかった場合に、返り値としてNULLでなく、sの末尾のヌルバイトへのポインターを返す点が異なる。
 *   │strchrnul()関数は一致した文字へのポインターを返す。文字が見つからない場合は、sの末尾のヌルバイトへのポインター(つまりs+strlen(s))を返す。
 *   │strchrnul() は GNU 拡張である。
 */
char* strchrnul(const char* s, int c);

/* * Sun Jun 26 15:24:18 JST 2016 Naoyuki Sawa
 * - mbstok(),mbstok_r()の宣言を追加しました。実装は、cliplibc.cにあります。
 */
char* mbstok(char* s1, const char* s2);
char* mbstok_r(char* s1, const char* s2, char** saveptr);

/* * Sat Feb 13 21:29:21 JST 2016 Naoyuki Sawa
 *  - rawmemchr()の宣言を追加しました。実装は、cliplibc.cにあります。
 *    cliplibc.cの、実装部のコメントを参照してください。
 */
void* rawmemchr(const void* s, int c);

/* * Wed Mar 27 22:30:15 JST 2013 Naoyuki Sawa
 * - strsep()の宣言を追加しました。実装は、clippce.cにあります。
 *   clippce.cの、実装部のコメントを参照してください。
 */
char* strsep(char** stringp, const char* delim);

/* * Mon Aug 11 19:48:16 JST 2014 Naoyuki Sawa
 * - strverscmp()の宣言を追加しました。実装は、clipdire.cにあります。
 *   clipdire.cの、実装部のコメントを参照してください。
 */
int strverscmp(const char* s1, const char* s2);

/* Sun Oct 12 18:49:43 JST 2014 Naoyuki Sawa
 * - strcasestr()の宣言を追加しました。実装は、clippce.cにあります。
 *   clippce.cの、実装部のコメントを参照してください。
 */
char* strcasestr(const char* s1, const char* s2);

/* Fri Oct 31 00:45:36 JST 2014 Naoyuki Sawa
 * - strlcpy(),strlcat()の宣言を追加しました。実装は、clippce.cにあります。
 *   clippce.cの、実装部のコメントを参照してください。
 */
size_t strlcpy(char* dst, const char* src, size_t size);
size_t strlcat(char* dst, const char* src, size_t size);

/* * Mon Jan 03 23:06:46 JST 2011 Naoyuki Sawa
 * - locale.hの追加に伴い、strcoll()を追加しました。「Lua 5.1.4」をコンパイルするために必要です。
 *   現在は"C"ロケールしかサポートしていないため、strcoll()はstrcmp()と同じなので、マクロで定義することにしました。
 */
#define strcoll strcmp

//{{2015/01/07追加:strdup(),strcasecmp(),strncasecmp()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。strcasecmp(),strncasecmp()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。
/* 以下の関数はANSI規格ではなく、BSDまたはSYSV互換の関数のようです。
 * P/ECEのCライブラリには含まれていませんが、便利なので実装しておきます。 */
char* strdup(const char* string);
int strcasecmp(const char* s1, const char* s2);
int strncasecmp(const char* s1, const char* s2, size_t n);
//}}2015/01/07追加:strdup(),strcasecmp(),strncasecmp()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。strcasecmp(),strncasecmp()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。

//{{2015/01/07追加:strnlen(),strndup()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
/* strnlen()とstrndup()は、POSIX.1-2008準拠です。 */
size_t strnlen(const char* string, size_t n);
char* strndup(const char* string, size_t n);
//}}2015/01/07追加:strnlen(),strndup()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。

//{{2016/12/29追加:mbslen(),mbsnlen()の宣言を追加しました。実装は、cliplibc.cにあります。
size_t mbslen(const char* string);
size_t mbsnlen(const char* string, size_t n);
//}}2016/12/29追加:mbslen(),mbsnlen()の宣言を追加しました。実装は、cliplibc.cにあります。

//{{2015/01/07追加:strupr(),strlwr()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。
/* strupr()とstrlwr()は、標準関数かどうかよくわからず、VC++特有なのかも知れません。
 * Web上の資料から推測すると、Unix環境のライブラリには含まれていない(?)ようです。
 * P/ECE開発環境のEPSONライブラリにも、strupr()とstrlwr()は、含まれていません。
 * 便利なので、定義しておくことにしました。 */
char* strupr(char* string);
char* strlwr(char* string);
//}}2015/01/07追加:strupr(),strlwr()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。

//{{2016/06/14追加:mbsupr(),mbslwr()の宣言を追加しました。実装は、cliplibc.cにあります。
char* mbsupr(char* string);
char* mbslwr(char* string);
//}}2016/06/14追加:mbsupr(),mbslwr()の宣言を追加しました。実装は、cliplibc.cにあります。

/* * Wed Apr 29 14:30:43 JST 2015 Naoyuki Sawa
 *  - memccpy(),mempcpy(),stpncpy(),stpcpy()の宣言を追加しました。実装は、cliplibc.cにあります。
 *    cliplibc.cの、実装部のコメントを参照してください。
 */
void* memccpy(void* dest, const void* src, int c, size_t n);
void* mempcpy(void* dest, const void* src, size_t n);
char* stpncpy(char* dest, const char* src, size_t n);
char* stpcpy(char* dest, const char* src);

//{{2015/01/07追加:ffs()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。ffs()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。
/* ワードの中で最初にセットされている最下位ビットの位置を返します。(Find first set)
 * 本関数は、ffs(): 4.3BSD, POSIX.1-2001. 準拠です。 */
int ffs(int i);
//}}2015/01/07追加:ffs()の宣言をclippce.h⇒include/string.hへ，実装をclippce.c⇒cliplibc.cへ移動しました。ffs()は本当はstrings.hで宣言すべきなのですが、P/ECEにはstrings.hが無いのでinclude/string.hで宣言することにしました。

//{{2016/04/29追加:strdupa(),strndupa()のマクロ定義を追加しました。ヘルパ関数__strndupa_helper()の実装は、cliplibc.cにあります。
// * Fri Apr 29 21:34:57 JST 2016 Naoyuki Sawa
// - strdupa(),strndupa()のマクロ定義を追加しました。ヘルパ関数__strndupa_helper()の実装は、cliplibc.cにあります。
//   □「Linux Programmer's Manual - STRDUP」(http://linuxjm.osdn.jp/html/LDP_man-pages/man3/strdup.3.html)より引用:
//   │strdup()関数は、文字列sの複製である新しい文字列へのポインターを返す。
//   │新しい文字列のためのメモリーはmalloc()で得ている。そして、free()で解放することができる。
//   │strndup()関数は同様であるが、最大でnバイトを複製する。
//   │sがnよりも長い場合、nバイトだけが複製され、終端のヌルバイト('\0'))が追加される。
//   │strdupa()とstrndupa()も同様だが、バッファーの確保にalloca()を使用する点が異なる。
//   │これらが使用できるのはGNU GCCツール群を使う場合だけであり、alloca()で説明されているのと同じ制限がある。
//   │strdupa(),strndupa()はGNU拡張である。
// - 上記の資料では、strdupa(),strndupa()は〜
//   │char* strdupa(const char* s);
//   │char* strndupa(const char* s, size_t n);
//   〜上記のように関数として説明されていますが、当実装ではマクロで実装しました。
//   alloca()を利用するので、マクロで実装するしかないと思います。
//   glibcでも、strdupa(),strndupa()は関数ではなく、マクロで実装されています。
// - マクロだけで実装せずにヘルパ関数を利用した理由は、非GCC用のstrndupa()がマクロだけでは定義出来なかったからです。(一つの式で書けない)
//   GCCならば式の中で文が使えるので、GCC用はマクロだけで実装する事も可能ではあったのですが、GCC用と非GCC用をなるべく同じにしたいので、GCC用もヘルパ関数を利用する事にしました。
// - 非GCC用のstrdupa(),strndupa()は、引数が二回評価される事に注意して下さい。
//   非GCC環境では、strdupa(),strndupa()の引数には、副作用のある式を指定しない方が安全です。
//   GCC用のstrdupa(),strndupa()は、上記の問題は有りません。
//   GCC環境では、strdupa(),strndupa()の引数にも、副作用のある式を指定しても問題有りません。
#define strdupa(s)	strndupa(s, -1)
#ifdef  __GNUC__
#define strndupa(s, n)	({					\
	const char* __s__ = (s);				\
	size_t      __n__ = (n);				\
	__strndupa_helper(__s__, __n__,				\
	   alloca(strnlen(__s__, __n__) + 1/*'\0'*/)); })
#else //__GNUC__
#define strndupa(s, n)						\
	__strndupa_helper( (s) ,  (n) ,				\
	   alloca(strnlen( (s) ,  (n) ) + 1/*'\0'*/))
#endif//__GNUC__
char* __strndupa_helper(const char* s, size_t n, void* p);	//ヘルパ関数
//}}2016/04/29追加:strdupa(),strndupa()のマクロ定義を追加しました。ヘルパ関数__strndupa_helper()の実装は、cliplibc.cにあります。

//{{2016/05/01追加:mbsspn(),mbscspn()の宣言を追加しました。実装は、cliplibc.cに有ります。
// * Sun May 01 23:11:51 JST 2016 Naoyuki Sawa
// - mbsspn(),mbscspn()の宣言を追加しました。実装は、cliplibc.cに有ります。
//   cliplibc.cの、実装部のコメントを参照して下さい。
size_t  mbsspn(const char* s1, const char* s2);
size_t mbscspn(const char* s1, const char* s2);
//}}2016/05/01追加:mbsspn(),mbscspn()の宣言を追加しました。実装は、cliplibc.cに有ります。

//{{2016/05/11追加:mbsnextc(),mbsinc(),mbsninc()の宣言を追加しました。実装は、cliplibc.cに有ります。
// * Wed May 11 21:35:57 JST 2016 Naoyuki Sawa
// - mbsnextc(),mbsinc(),mbsninc()の宣言を追加しました。実装は、cliplibc.cに有ります。
//   cliplibc.cの、実装部のコメントを参照して下さい。
int mbsnextc(const char* s);
char* mbsinc(const char* s);
char* mbsninc(const char* s, size_t count);
//}}2016/05/11追加:mbsnextc(),mbsinc(),mbsninc()の宣言を追加しました。実装は、cliplibc.cに有ります。
//{{2016/05/19追加:mbsdec()の宣言を追加しました。実装は、cliplibc.cに有ります。
char* mbsdec(const char* start, const char* current);
//}}2016/05/19追加:mbsdec()の宣言を追加しました。実装は、cliplibc.cに有ります。

//{{2016/05/20追加:mbschr(),mbsstr(),mbspbrk()の宣言を追加しました。実装は、cliplibc.cに有ります。
char* mbschr(const char* s, int c);
char* mbsstr(const char* s1, const char* s2);
char* mbspbrk(const char* s, const char* accept);
//}}2016/05/20追加:mbschr(),mbsstr(),mbspbrk()の宣言を追加しました。実装は、cliplibc.cに有ります。

//{{2016/06/14追加:strnextc(),strinc(),strninc(),strdec()の宣言を追加しました。実装は、cliplibc.cに有ります。
int strnextc(const char* s);
char* strinc(const char* s);
char* strninc(const char* s, size_t count);
char* strdec(const char* start, const char* current);
//}}2016/06/14追加:strnextc(),strinc(),strninc(),strdec()の宣言を追加しました。実装は、cliplibc.cに有ります。

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif
