/* <string.h>
 *
 *	Run-time library string manipulation functions, per ANSI.
 */
#ifndef _STRING_H
#define _STRING_H
# ifdef __cplusplus
extern "C" {
# endif
			/* note: not the same as <strings.h> */
			/* n.b.: no !defined(__STDC__) handling */
#ifndef _STDDEF_H
#include <stddef.h>	/* get size_t, NULL */
#endif

# define ___fdecl(_func,_arglist) _func _arglist __asm("decc$" #_func)

size_t	 ___fdecl(strlen, (const char *__str));
char	*___fdecl(strcpy, (char *__dst, const char *__src));
char	*___fdecl(strcat, (char *__dst, const char *__src));
int	 ___fdecl(strcmp, (const char *__lft, const char *__rgt));
char	*___fdecl(strncpy, (char *__dst, const char *__src, size_t __cnt));
char	*___fdecl(strncat, (char *__dst, const char *__src, size_t __cnt));
int	 ___fdecl(strncmp, (const char *__lft, const char *__rgt, size_t __cnt));
char	*___fdecl(strchr, (const char *__str, int __chr));
char	*___fdecl(strrchr, (const char *__str, int __chr));
size_t	 ___fdecl(strspn, (const char *__str, const char *__set));
size_t	 ___fdecl(strcspn, (const char *__str, const char *__set));
char	*___fdecl(strpbrk, (const char *__str, const char *__set));
char	*___fdecl(strstr, (const char *__str, const char *__sub));
char	*___fdecl(strtok, (char *__tkn, const char *__str));

/* defined in gcclib */

char	*strdup (const char *__str);

#define strerror decc$strerror
#ifndef _STRERROR_P
#define _STRERROR_P
#if !defined(__STRICT_ANSI__) && !defined(__HIDE_FORBIDDEN_NAMES)
char	*strerror(int __err, ...);	/* 2nd arg used iff 1st is EVMSERR */
#else
char	*strerror(int);
#endif
#endif

void	*___fdecl (memset, (void *__mem, int __val, size_t __cnt));
void	*___fdecl (memcpy, (void *__dst, const void *__src, size_t __cnt));
void	*___fdecl (memmove, (void *__dst, const void *__src, size_t __cnt));
int	 ___fdecl (memcmp, (const void *__lft, const void *__rgt, size_t __cnt));
void	*___fdecl (memchr, (const void *__mem, int __trg, size_t __cnt));

#undef ___fdecl

# ifdef __cplusplus
}
# endif
#endif	/*_STRING_H*/
