#include #include #include #define WCTYPE_ALNUM 1 #define WCTYPE_ALPHA 2 #define WCTYPE_BLANK 3 #define WCTYPE_CNTRL 4 #define WCTYPE_DIGIT 5 #define WCTYPE_GRAPH 6 #define WCTYPE_LOWER 7 #define WCTYPE_PRINT 8 #define WCTYPE_PUNCT 9 #define WCTYPE_SPACE 10 #define WCTYPE_UPPER 11 #define WCTYPE_XDIGIT 12 int iswctype(wint_t wc, wctype_t type) { switch (type) { case WCTYPE_ALNUM: return iswalnum(wc); case WCTYPE_ALPHA: return iswalpha(wc); case WCTYPE_BLANK: return iswblank(wc); case WCTYPE_CNTRL: return iswcntrl(wc); case WCTYPE_DIGIT: return iswdigit(wc); case WCTYPE_GRAPH: return iswgraph(wc); case WCTYPE_LOWER: return iswlower(wc); case WCTYPE_PRINT: return iswprint(wc); case WCTYPE_PUNCT: return iswpunct(wc); case WCTYPE_SPACE: return iswspace(wc); case WCTYPE_UPPER: return iswupper(wc); case WCTYPE_XDIGIT: return iswxdigit(wc); } return 0; } wctype_t wctype(const char *s) { int i; const char *p; /* order must match! */ static const char names[] = "alnum\0" "alpha\0" "blank\0" "cntrl\0" "digit\0" "graph\0" "lower\0" "print\0" "punct\0" "space\0" "upper\0" "xdigit"; for (i=1, p=names; *p; i++, p+=6) if (*s == *p && !strcmp(s, p)) return i; return 0; }