diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2011-11-01 22:56:51 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2011-11-01 22:56:51 +0200 |
commit | 406189e88890a240c50cfd9f33613c4d4fb6d2bf (patch) | |
tree | f3828d15871d9c1a2b2401445fedae7435bd5716 /missing_d | |
parent | 9926f88fdfe6e489194fb1fe0e5e75774ace04ce (diff) | |
download | gawk-406189e88890a240c50cfd9f33613c4d4fb6d2bf.tar.gz |
Move non-MBS support glop out of dfa.c.
Diffstat (limited to 'missing_d')
-rw-r--r-- | missing_d/ChangeLog | 4 | ||||
-rw-r--r-- | missing_d/wcmisc.c | 88 |
2 files changed, 92 insertions, 0 deletions
diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog index 8aaeb418..45cc1acc 100644 --- a/missing_d/ChangeLog +++ b/missing_d/ChangeLog @@ -1,3 +1,7 @@ +2011-11-01 Arnold D. Robbins <arnold@skeeve.com> + + * wcmisc.c: New file. + 2011-06-23 Arnold D. Robbins <arnold@skeeve.com> * ChangeLog.0: Rotated ChangeLog into this file. diff --git a/missing_d/wcmisc.c b/missing_d/wcmisc.c new file mode 100644 index 00000000..e53730ea --- /dev/null +++ b/missing_d/wcmisc.c @@ -0,0 +1,88 @@ +/* wcmisc.c - replace wcXXXX routines + Copyright (C) 2011 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA */ + +static const char *classes[] = { + "<dummy>", + "alnum", + "alpha", + "blank", + "cntrl", + "digit", + "graph", + "lower", + "print", + "punct", + "space", + "upper", + "xdigit", + NULL +}; + +static int is_blank (int c) +{ + return (c == ' ' || c == '\t'); +} + +wctype_t wctype(const char *name) +{ + int i; + + for (i = 1; classes[i] != NULL; i++) + if (strcmp(name, classes[i]) == 0) + return i; + + return 0; +} + +int iswctype(wint_t wc, wctype_t desc) +{ + int j = sizeof(classes) / sizeof(classes[0]); + + if (desc >= j || desc == 0) + return 0; + + switch (desc) { + case 1: return isalnum(wc); + case 2: return isalpha(wc); + case 3: return is_blank(wc); + case 4: return iscntrl(wc); + case 5: return isdigit(wc); + case 6: return isgraph(wc); + case 7: return islower(wc); + case 8: return isprint(wc); + case 9: return ispunct(wc); + case 10: return isspace(wc); + case 11: return isupper(wc); + case 12: return isxdigit(wc); + default: return 0; + } +} + +int wcscoll(const wchar_t *ws1, const wchar_t *ws2) +{ + size_t i; + + for (i = 0; ws1[i] != 0 && ws2[i] != 0; i++) { + if (ws1[i] < ws2[i]) + return -1; + else if (ws1[i] > ws2[i]) + return 1; + } + + return (ws1[i] - ws2[i]); +} |