/***************************************************************************
 * FILE: string.h/cstring (String functions)
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2025 The Open Watcom Contributors. All Rights Reserved.
 * Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 *
 * Description: This header is part of the C/C++ standard library. It
 *              declares functions for manipulating null terminated arrays
 *              of characters.
 ***************************************************************************/
#ifndef _CSTRING_INCLUDED
#define _CSTRING_INCLUDED

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#ifndef __cplusplus
 #error This header file requires C++
#endif

#ifndef __COMDEF_H_INCLUDED
 #include <_comdef.h>
#endif

extern "C" {

#ifndef _STDWINT_T_DEFINED
#define _STDWINT_T_DEFINED
 namespace std {
   typedef wchar_t wint_t;
 }
 typedef std::wint_t __w_wint_t;
#endif

#ifndef _STDSIZE_T_DEFINED
#define _STDSIZE_T_DEFINED
 namespace std {
   typedef unsigned size_t;
 }
 typedef std::size_t __w_size_t;
#endif

#ifndef NULL
  #define NULL 0
#endif

#ifndef _NLSCMPERROR
 /* For MS compatibility, equal to INT_MAX */
 #define _NLSCMPERROR ((int)((unsigned int)~0 >> 1))
#endif

namespace std {

_WCIRTLINK extern void      *memchr( const void *__s, int __c, size_t __n );
_WCIRTLINK extern int       memcmp( const void *__s1, const void *__s2, size_t __n );
_WCIRTLINK extern void      *memcpy( void *__s1, const void *__s2, size_t __n );
_WCRTLINK  extern void      *memmove( void *__s1, const void *__s2, size_t __n );
_WCRTLINK  extern void      *memset( void *__s, int __c, size_t __n );
_WCIRTLINK extern char      *strcat( char *__s1, const char *__s2 );
_WCIRTLINK extern char      *strchr( const char *__s, int __c );
_WCRTLINK  extern int       strcmp( const char *__s1, const char *__s2 );
_WCRTLINK  extern int       strcoll( const char *__s1, const char *__s2 );
_WCIRTLINK extern char      *strcpy( char *__s1, const char *__s2 );
_WCRTLINK  extern size_t    strcspn( const char *__s1, const char *__s2 );
_WCIRTLINK extern size_t    strlen( const char *__s );
_WCRTLINK  extern char      *strncat( char *__s1, const char *__s2, size_t __n );
_WCRTLINK  extern int       strncmp( const char *__s1, const char *__s2, size_t __n );
_WCRTLINK  extern char      *strncpy( char *__s1, const char *__s2, size_t __n );
_WCRTLINK  extern char      *strpbrk( const char *__s1, const char *__s2 );
_WCRTLINK  extern char      *strrchr( const char *__s, int __c );
_WCRTLINK  extern size_t    strspn( const char *__s1, const char *__s2 );
_WCRTLINK  extern char      *strstr( const char *__s1, const char *__s2 );
_WCRTLINK  extern char      *strtok( char *__s1, const char *__s2 );
_WCRTLINK  extern size_t    strxfrm( char *__s1, const char *__s2, size_t __n );

_WCRTLINK extern char       *strerror( int __errnum );

} // namespace std

#if !defined( _NO_EXT_KEYS ) /* extensions enabled */

/* MS extension functions */

_WCRTLINK extern int        strcmpi( const char *__s1, const char *__s2 );
_WCRTLINK extern char       *strnset( char *__string, int __c, __w_size_t __len );
_WCRTLINK extern int        strnicmp( const char *__s1, const char *__s2, __w_size_t __n );
_WCRTLINK extern char       *strlwr( char *__string );
_WCRTLINK extern char       *strupr( char *__string );
_WCRTLINK extern int        stricmp( const char *__s1, const char *__s2 );
_WCRTLINK extern char       *strrev( char *__string );
_WCRTLINK extern char       *strset( char *__string, int __c );
_WCRTLINK extern int        memicmp( const void *__s1, const void *__s2, __w_size_t __n );
_WCRTLINK extern int        _stricoll( const char *__s1, const char *__s2 );
_WCRTLINK extern int        _strncoll( const char *__s1, const char *__s2, __w_size_t __n );
_WCRTLINK extern int        _strnicoll( const char *__s1, const char *__s2, __w_size_t __n );
_WCRTLINK extern char       *_strnset( char *__string, int __c, __w_size_t __len );
_WCRTLINK extern int        _strnicmp( const char *__s1, const char *__s2, __w_size_t __n );
_WCRTLINK extern char       *_strlwr( char *__string );
_WCRTLINK extern char       *_strupr( char *__string );
_WCRTLINK extern int        _stricmp( const char *__s1, const char *__s2 );
_WCRTLINK extern char       *_strrev( char *__string );
_WCRTLINK extern char       *_strset( char *__string, int __c );
_WCRTLINK extern char       *_strerror( const char *__s );
_WCRTLINK extern char       *_strdup( const char *__string );
_WCRTLINK extern int        _memicmp( const void *__s1, const void *__s2, __w_size_t __n );
_WCRTLINK extern void       *_memccpy( void *__s1, const void *__s2, int __c, __w_size_t __n );

/* POSIX extension functions */

_WCRTLINK extern char       *strdup( const char *__string );
_WCRTLINK extern void       *memccpy( void *__s1, const void *__s2, int __c, __w_size_t __n );

/* WATCOM's Additional Functions (non-ISO, non-POSIX) */

_WCRTLINK  extern char      *strspnp( const char *__s1, const char *__s2 );
_WCRTLINK  extern char      *strtok_r( char *__s1, const char *__s2, char **__p1 );

/* Far version of functions */

_WCRTLINK extern void _WCFAR *_fmemccpy( void _WCFAR *__s1, const void _WCFAR *__s2, int __c, __w_size_t __n );
_WCIRTLINK extern void _WCFAR *_fmemchr( const void _WCFAR *__s, int __c, __w_size_t __n );
_WCIRTLINK extern int _fmemcmp( const void _WCFAR *__s1, const void _WCFAR *__s2, __w_size_t __n );
_WCIRTLINK extern void _WCFAR *_fmemcpy( void _WCFAR *__s1, const void _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern int _fmemicmp( const void _WCFAR *__s1, const void _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern void _WCFAR *_fmemmove( void _WCFAR *__s1, const void _WCFAR *__s2, __w_size_t __n );
_WCIRTLINK extern void _WCFAR *_fmemset( void _WCFAR *__s, int __c, __w_size_t __n );
_WCIRTLINK extern char _WCFAR *_fstrcat( char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrchr( const char _WCFAR *__s, int __c );
_WCIRTLINK extern int _fstrcmp( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCIRTLINK extern char _WCFAR *_fstrcpy( char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern __w_size_t _fstrcspn( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrdup( const char _WCFAR *__string );
_WCRTLINK extern int _fstricmp( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCIRTLINK extern __w_size_t _fstrlen( const char _WCFAR *__s );
_WCRTLINK extern char _WCFAR *_fstrlwr( char _WCFAR *__string );
_WCRTLINK extern char _WCFAR *_fstrncat( char _WCFAR *__s1, const char _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern int _fstrncmp( const char _WCFAR *__s1, const char _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern char _WCFAR *_fstrncpy( char _WCFAR *__s1, const char _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern int _fstrnicmp( const char _WCFAR *__s1, const char _WCFAR *__s2, __w_size_t __n );
_WCRTLINK extern char _WCFAR *_fstrnset( char _WCFAR *__string, int __c, __w_size_t __len );
_WCRTLINK extern char _WCFAR *_fstrpbrk( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrrchr( const char _WCFAR *__s, int __c );
_WCRTLINK extern char _WCFAR *_fstrrev( char _WCFAR *__string );
_WCRTLINK extern char _WCFAR *_fstrset( char _WCFAR *__string, int __c );
_WCRTLINK extern __w_size_t _fstrspn( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrstr( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrtok( char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrupr( char _WCFAR *__string );
_WCRTLINK extern char _WCFAR *_fstrspnp( const char _WCFAR *__s1, const char _WCFAR *__s2 );
_WCRTLINK extern char _WCFAR *_fstrtok_r( char _WCFAR *__str, const char _WCFAR *__charset, char _WCFAR **__ptr );

_WCIRTLINK extern void      movedata( unsigned __srcseg, unsigned __srcoff, unsigned __tgtseg, unsigned __tgtoff, unsigned __len );

/* BSD 'safe' string copy functions */

_WCRTLINK extern __w_size_t strlcat( char *__s1, const char *__s2, __w_size_t __n );
_WCRTLINK extern __w_size_t strlcpy( char *__s1, const char *__s2, __w_size_t __n );

/* Wide character handling functions */

// C99 functions not officially in string.h
namespace std {

_WCRTLINK extern wchar_t    *wcscat( wchar_t *, const wchar_t * );
_WCRTLINK extern wchar_t    *wcschr( const wchar_t *, wint_t );
_WCRTLINK extern int        wcscmp( const wchar_t *, const wchar_t * );
_WCRTLINK extern int        wcscoll( const wchar_t *__s1, const wchar_t *__s2 );
_WCRTLINK extern wchar_t    *wcscpy( wchar_t *, const wchar_t * );
_WCRTLINK extern size_t     wcscspn( const wchar_t *, const wchar_t * );
_WCRTLINK extern size_t     wcslen( const wchar_t * );
_WCRTLINK extern wchar_t    *wcsncat( wchar_t *, const wchar_t *, size_t );
_WCRTLINK extern int        wcsncmp( const wchar_t *, const wchar_t *, size_t );
_WCRTLINK extern wchar_t    *wcsncpy( wchar_t *, const wchar_t *, size_t );
_WCRTLINK extern wchar_t    *wcspbrk( const wchar_t *, const wchar_t * );
_WCRTLINK extern wchar_t    *wcsrchr( const wchar_t *, wint_t );
_WCRTLINK extern size_t     wcsspn( const wchar_t *, const wchar_t * );
_WCRTLINK extern wchar_t    *wcsstr( const wchar_t *, const wchar_t * );
_WCRTLINK extern wchar_t    *wcstok( wchar_t *, const wchar_t *, wchar_t ** );
_WCRTLINK extern size_t     wcsxfrm( wchar_t *__s1, const wchar_t *__s2, size_t __n );

} // namespace std

/* POSIX extension functions */

_WCRTLINK extern wchar_t    *wcsdup( const wchar_t * );

#endif /* extensions enabled */

#ifdef  __INLINE_FUNCTIONS__

#if !defined( _NO_EXT_KEYS ) /* extensions enabled */
 #pragma intrinsic(movedata,_fmemchr,_fmemcmp,_fmemcpy,_fmemset)
 #pragma intrinsic(_fstrcat,_fstrcmp,_fstrcpy,_fstrlen)
#endif /* extensions enabled */

namespace std {

 #pragma intrinsic(memchr,memcmp,memcpy,strcat,strcpy,strlen,strchr)

} // namespace std

#endif  /* __INLINE_FUNCTIONS__ */

} /* extern "C" */

#endif
