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