/*
        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
*/

#ifndef _STRING_H
#define _STRING_H

#ifndef NULL
#define NULL	0
#endif

#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned long   size_t ;
#endif

void* memchr(const void* buf, int c, size_t count);			// char *memchr( /* char *, int, int */ ) ;
/*{{ビルトイン関数に対して、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形式の関数宣言を行うと、宣言が正しくても警告が表示されてしまう不具合の回避*/
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 * */ ) ;

/* * 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);

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

#endif
