#ifndef _CTYPE_H
#define _CTYPE_H

/** @file
 *
 * Character types
 *
 */

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );

/**
 * Check if character is ASCII
 *
 * @v character		Character
 * @ret is_ascii	Character is an ASCII character
 */
static inline int isascii ( int character ) {

	return ( character <= '\x7f' );
}

/**
 * Check if character is a decimal digit
 *
 * @v character		ASCII character
 * @ret is_digit	Character is a decimal digit
 */
static inline int isdigit ( int character ) {

	return ( ( character >= '0' ) && ( character <= '9' ) );
}

/**
 * Check if character is a hexadecimal digit
 *
 * @v character		ASCII character
 * @ret is_xdigit	Character is a hexadecimal digit
 */
static inline int isxdigit ( int character ) {

	return ( ( ( character >= '0' ) && ( character <= '9' ) ) ||
		 ( ( character >= 'A' ) && ( character <= 'F' ) ) ||
		 ( ( character >= 'a' ) && ( character <= 'f' ) ) );
}

/**
 * Check if character is an upper-case letter
 *
 * @v character		ASCII character
 * @ret is_upper	Character is an upper-case letter
 */
static inline int isupper ( int character ) {

	return ( ( character >= 'A' ) && ( character <= 'Z' ) );
}

/**
 * Check if character is a lower-case letter
 *
 * @v character		ASCII character
 * @ret is_lower	Character is a lower-case letter
 */
static inline int islower ( int character ) {

	return ( ( character >= 'a' ) && ( character <= 'z' ) );
}

/**
 * Check if character is alphabetic
 *
 * @v character		ASCII character
 * @ret is_alpha	Character is alphabetic
 */
static inline int isalpha ( int character ) {

	return ( isupper ( character ) || islower ( character ) );
}

/**
 * Check if character is alphanumeric
 *
 * @v character		ASCII character
 * @ret is_alnum	Character is alphanumeric
 */
static inline int isalnum ( int character ) {

	return ( isalpha ( character ) || isdigit ( character ) );
}

/**
 * Check if character is printable
 *
 * @v character		ASCII character
 * @ret is_print	Character is printable
 */
static inline int isprint ( int character ) {

	return ( ( character >= ' ' ) && ( character <= '~' ) );
}

/**
 * Convert character to lower case
 *
 * @v character		Character
 * @v character		Lower-case character
 */
static inline int tolower ( int character ) {

	return ( isupper ( character ) ?
		 ( character - 'A' + 'a' ) : character );
}

/**
 * Convert character to upper case
 *
 * @v character		Character
 * @v character		Upper-case character
 */
static inline int toupper ( int character ) {

	return ( islower ( character ) ?
		 ( character - 'a' + 'A' ) : character );
}

extern int isspace ( int character );

#endif /* _CTYPE_H */
