/* "$Id: string.h.in 4115 2005-03-14 04:48:51Z spitzak $"
 *
 * Copyright 1998-2005 by Bill Spitzak and others.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * Please report all bugs and problems to "fltk-bugs@fltk.org".
 */

/* This file was produced by the fltk configure script, and is thus
   platform-specific. You may be able to use the unmodified string.h
   included in the fltk source instead, it has different #if statements
   to make it portable to the most popular platforms.
*/

#ifndef fltk_string_h
#define fltk_string_h

#undef HAVE_STRING_H
#undef HAVE_STRINGS_H

#undef HAVE_VSNPRINTF
#undef HAVE_SNPRINTF
#undef HAVE_STRCASECMP
#undef HAVE_STRLCAT
#undef HAVE_STRLCPY
#undef HAVE_STRNCASECMP

#include "FL_API.h"

#ifdef HAVE_STRING_H
# include <string.h>
#elif defined(HAVE_STRINGS_H)
# include <strings.h>
#endif

#if 1 /* for va_list */
# include <stdarg.h>
#endif

#if 1 /* for sprintf, vsprintf, snprintf and vsnprintf */
# include <stdio.h>
#endif

#if 0
# include <stdlib.h>
#endif

#if 0
# include <ctype.h>
/* Unixware defines these macros in above header for the obsolete BSD
   functions, get rid of them as it prevents you making a variable
   named "index"! */
# ifdef index
#  undef index
# endif
# ifdef rindex
#  undef rindex
# endif
#endif

#if 0 /*defined(__MWERKS__)*/
/* MetroWerks' CodeWarrior put some functions in <extras.h> but that
   file does not play well with others, so we don't include it. */
# include <extras.h>
#endif

/* Windows has equivalent functions, but being Microsoft they added
   gratuitoius changes to the names to stop code from being portable: */
#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
# define strcasecmp(s,t)	stricmp(s, t)
# define strncasecmp(s,t,n)	strnicmp(s, t, n)
# define vsnprintf		_vsnprintf
# define snprintf		_snprintf
#endif

/*! \addtogroup utilities
  \{ */

#ifdef __cplusplus
extern "C" {
#endif

FL_API extern const char* newstring(const char *);

#if defined(DOXYGEN) || !defined(HAVE_STRCASECMP)
FL_API extern int strcasecmp(const char *, const char *);
#endif

#if defined(DOXYGEN) || !defined(HAVE_STRNCASECMP)
FL_API extern int strncasecmp(const char *, const char *, size_t);
#endif

#if defined(DOXYGEN) || !defined(HAVE_SNPRINTF)
FL_API extern int snprintf(char *, size_t, const char *, ...);
#endif

#if defined(DOXYGEN) || !defined(HAVE_VSNPRINTF)
FL_API extern int vsnprintf(char *, size_t, const char *, va_list ap);
#endif

#if defined(DOXYGEN) || !defined(HAVE_STRLCAT)
FL_API extern size_t strlcat(char *, const char *, size_t);
#endif

#if defined(DOXYGEN) || !defined(HAVE_STRLCPY)
FL_API extern size_t strlcpy(char *, const char *, size_t);
#endif

#ifdef __cplusplus
}
#endif

/*! \} */

#endif

/*
 * End of "$Id: string.h.in 4115 2005-03-14 04:48:51Z spitzak $".
 */
