diff options
Diffstat (limited to 'missing_d')
-rw-r--r-- | missing_d/ChangeLog | 8 | ||||
-rw-r--r-- | missing_d/wcmisc.c | 100 |
2 files changed, 108 insertions, 0 deletions
diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog index 8aaeb418..4a06aa60 100644 --- a/missing_d/ChangeLog +++ b/missing_d/ChangeLog @@ -1,3 +1,11 @@ +2011-11-02 Pat Rankin <r.pat.rankin@gmail.com> + + * wcmisc.c: Make code be conditional upon corresponding !HAVE_WCxxx. + +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..d2b7aa08 --- /dev/null +++ b/missing_d/wcmisc.c @@ -0,0 +1,100 @@ +/* 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 */ + +#if !defined(HAVE_WCTYPE) || !defined(HAVE_ISWCTYPE) +static const char *classes[] = { + "<dummy>", + "alnum", + "alpha", + "blank", + "cntrl", + "digit", + "graph", + "lower", + "print", + "punct", + "space", + "upper", + "xdigit", + NULL +}; +#endif + +#ifndef HAVE_ISWCTYPE +static int is_blank (int c) +{ + return (c == ' ' || c == '\t'); +} +#endif + +#ifndef HAVE_WCTYPE +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; +} +#endif + +#ifndef HAVE_ISWCTYPE +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; + } +} +#endif + +#ifndef HAVE_WCSCOLL +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]); +} +#endif + +/*wcmisc.c*/ |