forked from PoliEcho-holding-org/kern
Added most of ctype.h (missing toupper & tolower)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#ifndef _CTYPE_H
|
||||
#define _CTYPE_H
|
||||
|
||||
/* Bitfield values
|
||||
Property | Bit
|
||||
------------|-----
|
||||
Digit | 0
|
||||
Letter | 1
|
||||
Lowercase | 2
|
||||
Punct | 3
|
||||
Space | 4
|
||||
Control | 5
|
||||
Printable | 6
|
||||
Hex digit | 7
|
||||
*/
|
||||
#define _DIGIT_MASK (1<<0)
|
||||
#define _ALPHA_MASK (1<<1)
|
||||
#define _LOWER_MASK (1<<2)
|
||||
#define _PUNCT_MASK (1<<3)
|
||||
#define _SPACE_MASK (1<<4)
|
||||
#define _CNTRL_MASK (1<<5)
|
||||
#define _PRINT_MASK (1<<6)
|
||||
#define _HEXDG_MASK (1<<7)
|
||||
|
||||
// A table for the ASCII character set
|
||||
extern const unsigned char _CTYPE_TABLE[256];
|
||||
|
||||
// Just a macro to make this easier
|
||||
#define _CTYPE_CHECK(_c, _mask) (_CTYPE_TABLE[(unsigned char)(_c)] & (_mask))
|
||||
|
||||
#define isalnum(_c) (isalpha((_c)) || isdigit((_c))
|
||||
#define isalpha(_c) _CTYPE_CHECK((_c), _ALPHA_MASK)
|
||||
#define islower(_c) _CTYPE_CHECK((_c), _LOWER_MASK)
|
||||
#define isupper(_c) (!islower((_c)) && isalpha((_c)))
|
||||
#define isdigit(_c) _CTYPE_CHECK((_c), _DIGIT_MASK)
|
||||
#define iscntrl(_c) _CTYPE_CHECK((_c), _CNTRL_MASK)
|
||||
#define isgraph(_c) (!isblank((_c)))
|
||||
#define isspace(_c) _CTYPE_CHECK((_c), _SPACE_MASK)
|
||||
#define isblank(_c) (iscntrl((_c)) || isspace((_c)))
|
||||
#define isprint(_c) _CTYPE_CHECK((_c), _PRINT_MASK)
|
||||
#define ispunct(_c) _CTYPE_CHECK((_c), _PUNCT_MASK)
|
||||
// Why is this one's name longer :((
|
||||
#define isxdigit(_c) _CTYPE_CHECK((_c), _HEXDG_MASK);
|
||||
|
||||
// TODO:
|
||||
// tolower()
|
||||
// toupper()
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user