iswctype.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <wchar.h>
  2. #include <wctype.h>
  3. #include <string.h>
  4. #define WCTYPE_ALNUM 1
  5. #define WCTYPE_ALPHA 2
  6. #define WCTYPE_BLANK 3
  7. #define WCTYPE_CNTRL 4
  8. #define WCTYPE_DIGIT 5
  9. #define WCTYPE_GRAPH 6
  10. #define WCTYPE_LOWER 7
  11. #define WCTYPE_PRINT 8
  12. #define WCTYPE_PUNCT 9
  13. #define WCTYPE_SPACE 10
  14. #define WCTYPE_UPPER 11
  15. #define WCTYPE_XDIGIT 12
  16. int iswctype(wint_t wc, wctype_t type)
  17. {
  18. switch (type) {
  19. case WCTYPE_ALNUM:
  20. return iswalnum(wc);
  21. case WCTYPE_ALPHA:
  22. return iswalpha(wc);
  23. case WCTYPE_BLANK:
  24. return iswblank(wc);
  25. case WCTYPE_CNTRL:
  26. return iswcntrl(wc);
  27. case WCTYPE_DIGIT:
  28. return iswdigit(wc);
  29. case WCTYPE_GRAPH:
  30. return iswgraph(wc);
  31. case WCTYPE_LOWER:
  32. return iswlower(wc);
  33. case WCTYPE_PRINT:
  34. return iswprint(wc);
  35. case WCTYPE_PUNCT:
  36. return iswpunct(wc);
  37. case WCTYPE_SPACE:
  38. return iswspace(wc);
  39. case WCTYPE_UPPER:
  40. return iswupper(wc);
  41. case WCTYPE_XDIGIT:
  42. return iswxdigit(wc);
  43. }
  44. return 0;
  45. }
  46. wctype_t wctype(const char *s)
  47. {
  48. int i;
  49. const char *p;
  50. /* order must match! */
  51. static const char names[] =
  52. "alnum\0" "alpha\0" "blank\0"
  53. "cntrl\0" "digit\0" "graph\0"
  54. "lower\0" "print\0" "punct\0"
  55. "space\0" "upper\0" "xdigit";
  56. for (i=1, p=names; *p; i++, p+=6)
  57. if (*s == *p && !strcmp(s, p))
  58. return i;
  59. return 0;
  60. }