www.pudn.com > system.rar > ctype.h


/*****************************************************************************/ 
/* ctype.h    v2.54                                                          */ 
/* Copyright (c) 1993-2004 Texas Instruments Incorporated                    */ 
/*****************************************************************************/ 
 
/************************************************************************/ 
/*                                                                      */ 
/*  CHARACTER TYPING FUNCTIONS AND MACROS                               */ 
/*                                                                      */ 
/*  Note that in this implementation, either macros or functions may    */ 
/*  be used.  Macros are prefixed with an underscore.                   */ 
/*                                                                      */ 
/************************************************************************/ 
#ifndef _CTYPE 
#define _CTYPE 
 
#include  
 
#ifdef __cplusplus 
//---------------------------------------------------------------------------- 
//  IS RECOMMENDED OVER .   IS PROVIDED FOR 
// COMPATIBILITY WITH C AND THIS USAGE IS DEPRECATED IN C++ 
//---------------------------------------------------------------------------- 
extern "C" namespace std 
{ 
#endif /* __cplusplus */ 
 
extern _DATA_ACCESS const unsigned char _ctypes_[]; 
 
/************************************************************************/ 
/*   FUNCTION DECLARATIONS                                              */ 
/************************************************************************/ 
_IDECL int isalnum(int _c); 
_IDECL int isalpha(int _c); 
_IDECL int iscntrl(int _c); 
_IDECL int isdigit(int _c); 
_IDECL int isgraph(int _c); 
_IDECL int islower(int _c); 
_IDECL int isprint(int _c); 
_IDECL int ispunct(int _c); 
_IDECL int isspace(int _c); 
_IDECL int isupper(int _c); 
_IDECL int isxdigit(int _c); 
_IDECL int isascii(int _c); 
 
_IDECL int toupper(int _c); 
_IDECL int tolower(int _c); 
_IDECL int toascii(int _c); 
 
#ifdef __cplusplus 
} /* extern "C" namespace std */ 
 
#ifndef _CPP_STYLE_HEADER 
using std::_ctypes_; 
using std::isalnum; 
using std::isalpha; 
using std::iscntrl; 
using std::isdigit; 
using std::isgraph; 
using std::islower; 
using std::isprint; 
using std::ispunct; 
using std::isspace; 
using std::isupper; 
using std::isxdigit; 
using std::isascii; 
using std::toupper; 
using std::tolower; 
using std::toascii; 
#endif /* ! _CPP_STYLE_HEADER */ 
 
#endif /* __cplusplus */ 
 
/************************************************************************/ 
/*  MACRO DEFINITIONS                                                   */ 
/************************************************************************/ 
#define _U_   0x01 
#define _L_   0x02 
#define _N_   0x04 
#define _S_   0x08 
#define _P_   0x10 
#define _C_   0x20 
#define _H_   0x40 
#define _B_   0x80 
 
#define _isalnum(a)  (_ctypes_[(a)+1] & (_U_ | _L_ | _N_)) 
#define _isalpha(a)  (_ctypes_[(a)+1] & (_U_ | _L_)) 
#define _iscntrl(a)  (_ctypes_[(a)+1] & _C_) 
#define _isdigit(a)  (_ctypes_[(a)+1] & _N_) 
#define _isgraph(a)  (_ctypes_[(a)+1] & (_U_ | _L_ | _N_ | _P_)) 
#define _islower(a)  (_ctypes_[(a)+1] & _L_) 
#define _isprint(a)  (_ctypes_[(a)+1] & (_B_ | _U_ | _L_ | _N_ | _P_)) 
#define _ispunct(a)  (_ctypes_[(a)+1] & _P_) 
#define _isspace(a)  (_ctypes_[(a)+1] & _S_) 
#define _isupper(a)  (_ctypes_[(a)+1] & _U_) 
#define _isxdigit(a) (_ctypes_[(a)+1] & _H_) 
#define _isascii(a)  (((a) & ~0x7F) == 0) 
 
#define _toupper(b)  ((_islower(b)) ? (b) - ('a' - 'A') : (b)) 
#define _tolower(b)  ((_isupper(b)) ? (b) + ('a' - 'A') : (b)) 
#define _toascii(a)  ((a) & 0x7F) 
 
#ifdef _INLINE 
 
#ifdef __cplusplus 
using std::_ctypes_; 
namespace std { 
#endif /* __cplusplus */ 
 
static __inline int isalnum(int c)  { return(_isalnum(c)); } 
static __inline int isalpha(int c)  { return(_isalpha(c)); } 
static __inline int isascii(int c)  { return(_isascii(c)); } 
static __inline int iscntrl(int c)  { return(_iscntrl(c)); } 
static __inline int isdigit(int c)  { return(_isdigit(c)); } 
static __inline int isgraph(int c)  { return(_isgraph(c)); } 
static __inline int islower(int c)  { return(_islower(c)); } 
static __inline int isprint(int c)  { return(_isprint(c)); } 
static __inline int ispunct(int c)  { return(_ispunct(c)); } 
static __inline int isspace(int c)  { return(_isspace(c)); } 
static __inline int isupper(int c)  { return(_isupper(c)); } 
static __inline int isxdigit(int c) { return(_isxdigit(c));} 
static __inline int toascii(int c)  { return(_toascii(c)); } 
 
/****************************************************************************/ 
/*  tolower                                                                 */ 
/****************************************************************************/ 
static __inline int tolower(int ch) 
{ 
   /* 
    This code depends on two assumptions: (1) all of the letters of the 
    alphabet of a given case are contiguous, and (2) the lower and upper 
    case forms of each letter are displaced from each other by the same 
    constant value. 
   */ 
 
   if ( (unsigned int)(ch - 'A') <= (unsigned int)('Z' - 'A')) ch += 'a' - 'A'; 
   return ch; 
} 
 
/****************************************************************************/ 
/*  toupper                                                                 */ 
/****************************************************************************/ 
static __inline int toupper(int ch) 
{ 
   /* 
    This code depends on two assumptions: (1) all of the letters of the 
    alphabet of a given case are contiguous, and (2) the lower and upper 
    case forms of each letter are displaced from each other by the same 
    constant value. 
   */ 
 
   if ( (unsigned int)(ch - 'a') <= (unsigned int)('z' - 'a')) ch -= 'a' - 'A'; 
   return ch; 
} 
 
#ifdef __cplusplus 
} 
#endif /* __cplusplus */ 
 
#endif /* _INLINE */ 
 
#else 
 
#ifdef __cplusplus 
 
#ifndef _CPP_STYLE_HEADER 
using std::_ctypes_; 
using std::isalnum; 
using std::isalpha; 
using std::iscntrl; 
using std::isdigit; 
using std::isgraph; 
using std::islower; 
using std::isprint; 
using std::ispunct; 
using std::isspace; 
using std::isupper; 
using std::isxdigit; 
using std::isascii; 
using std::toupper; 
using std::tolower; 
using std::toascii; 
#endif /* ! _CPP_STYLE_HEADER */ 
 
#endif /* __cplusplus */ 
 
#endif /* ! _CTYPE */