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



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