/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/ctype.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */

#ifndef FIXINC_WRAP_CTYPE_H_AIX_EXTERNC
#define FIXINC_WRAP_CTYPE_H_AIX_EXTERNC 1

#ifdef __cplusplus
extern "C" {
#endif


#if defined( AIX_EXTERNC_CHECK )
extern int __n_pthreads;

#endif  /* AIX_EXTERNC_CHECK */


#if defined( HPUX10_CTYPE_DECLARATIONS1_CHECK )
#ifdef _PROTOTYPES
extern int __tolower(int);
extern int __toupper(int);
#else /* NOT _PROTOTYPES */
extern int __tolower();
extern int __toupper();
#endif /* _PROTOTYPES */

#  define _toupper(__c)         __toupper(__c)


#endif  /* HPUX10_CTYPE_DECLARATIONS1_CHECK */


#if defined( HPUX10_CTYPE_DECLARATIONS2_CHECK )
#  if defined(_SB_CTYPE_MACROS) && !defined(__lint)

#ifdef _PROTOTYPES
     extern int _isalnum(int);
     extern int _isalpha(int);
     extern int _iscntrl(int);
     extern int _isdigit(int);
     extern int _isgraph(int);
     extern int _islower(int);
     extern int _isprint(int);
     extern int _ispunct(int);
     extern int _isspace(int);
     extern int _isupper(int);
     extern int _isxdigit(int);
#  else /* not _PROTOTYPES */
     extern int _isalnum();
     extern int _isalpha();
     extern int _iscntrl();
     extern int _isdigit();
     extern int _isgraph();
     extern int _islower();
     extern int _isprint();
     extern int _ispunct();
     extern int _isspace();
     extern int _isupper();
     extern int _isxdigit();
#endif /* _PROTOTYPES */

     extern unsigned int *__SB_masks;

#endif  /* HPUX10_CTYPE_DECLARATIONS2_CHECK */


#if defined( HPUX_CTYPE_MACROS_CHECK )
: __SB_masks ? (int)__SB_masks[__alnum] & _ISCNTRL
# define isalpha(__c) (__SB_masks ? (int)__SB_masks[__c] & _IS

#endif  /* HPUX_CTYPE_MACROS_CHECK */
#ifdef __cplusplus
}
#endif

#endif  /* FIXINC_WRAP_CTYPE_H_AIX_EXTERNC */
