    // Rowley C Compiler, runtime support.
    //
    // Copyright (c) 2001, 2002 Rowley Associates Limited.
    //
    // This file may be distributed under the terms of the License Agreement
    // provided with this software.
    //
    // THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
    // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

    #ifndef __CTYPE_H
    #define __CTYPE_H

    // Get definition for __CODE
    #include "__crossworks.h"

    #ifdef __cplusplus
    extern "C" {
    #endif

    /* Internal table which classifies characters and EOF. */
    extern __CODE const unsigned char __ctype[256];

    #define __CTYPE_UPPER          0x01    /* upper case letter */
    #define __CTYPE_LOWER          0x02    /* lower case letter */
    #define __CTYPE_DIGIT          0x04    /* digit */
    #define __CTYPE_SPACE          0x08    /* whitespace */
    #define __CTYPE_PUNCT          0x10    /* punctuation character */
    #define __CTYPE_CONTROL        0x20    /* control character */
    #define __CTYPE_BLANK          0x40    /* space char */
    #define __CTYPE_HEX            0x80    /* hexadecimal digit */

    /* Function implementation. */
    int isalpha(int __c);
    int isupper(int __c);
    int islower(int __c);
    int isdigit(int __c);
    int isxdigit(int __c);
    int isspace(int __c);
    int ispunct(int __c);
    int isalnum(int __c);
    int isprint(int __c);
    int isgraph(int __c);
    int iscntrl(int __c);
    int toupper(int __c);
    int tolower(int __c);

    int isblank(int __c);  /* C99 */

    /* Define __CTYPE_MACROS before including this file and you'll get the
       macro implementation of these functions.
    */

    #ifdef __CTYPE_MACROS

    /* Macro implementation.  If you wish to use functions, simply #undef these
       as described in the ISO standard.  We take advantage of the fact that
       an entry in the _ctype array for EOF, which is -1, is identical to
       that for entry 255, i.e. that __ctype[(unsigned char)EOF] == _ctype[255]. */
    #define isalpha(c)     (__ctype[(c)+1] & (__CTYPE_UPPER | __CTYPE_LOWER))
    #define isupper(c)     (__ctype[(c)+1] & __CTYPE_UPPER)
    #define islower(c)     (__ctype[(c)+1] & __CTYPE_LOWER)
    #define isdigit(c)     (__ctype[(c)+1] & __CTYPE_DIGIT)
    #define isxdigit(c)    (__ctype[(c)+1] & __CTYPE_HEX)
    #define isspace(c)     (__ctype[(c)+1] & __CTYPE_SPACE)
    #define ispunct(c)     (__ctype[(c)+1] & __CTYPE_PUNCT)
    #define isalnum(c)     (__ctype[(c)+1] & (__CTYPE_UPPER | __CTYPE_LOWER | __CTYPE_DIGIT))
    #define isprint(c)     (__ctype[(c)+1] & (__CTYPE_BLANK | __CTYPE_PUNCT | __CTYPE_UPPER | __CTYPE_LOWER | __CTYPE_DIGIT))
    #define isgraph(c)     (__ctype[(c)+1] & (__CTYPE_PUNCT | __CTYPE_ALPHA | __CTYPE_DIGIT))
    #define iscntrl(c)     (__ctype[(c)+1] & __CTYPE_CONTROL)

    #endif

    #ifdef __cplusplus
    }
    #endif

    #endif