From 406189e88890a240c50cfd9f33613c4d4fb6d2bf Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 1 Nov 2011 22:56:51 +0200 Subject: Move non-MBS support glop out of dfa.c. --- missing_d/wcmisc.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 missing_d/wcmisc.c (limited to 'missing_d/wcmisc.c') 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[] = { + "", + "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]); +} -- cgit v1.2.3 From cceacad1d367b3019a5648521d4b4c0e201297f5 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 14 Nov 2011 21:43:44 +0200 Subject: More changes for non-MBS case. --- missing_d/wcmisc.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'missing_d/wcmisc.c') diff --git a/missing_d/wcmisc.c b/missing_d/wcmisc.c index e53730ea..d2b7aa08 100644 --- a/missing_d/wcmisc.c +++ b/missing_d/wcmisc.c @@ -16,8 +16,9 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA */ +#if !defined(HAVE_WCTYPE) || !defined(HAVE_ISWCTYPE) static const char *classes[] = { - "", + "", "alnum", "alpha", "blank", @@ -32,12 +33,16 @@ static const char *classes[] = { "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; @@ -48,7 +53,9 @@ wctype_t wctype(const char *name) return 0; } +#endif +#ifndef HAVE_ISWCTYPE int iswctype(wint_t wc, wctype_t desc) { int j = sizeof(classes) / sizeof(classes[0]); @@ -72,7 +79,9 @@ int iswctype(wint_t wc, wctype_t desc) default: return 0; } } +#endif +#ifndef HAVE_WCSCOLL int wcscoll(const wchar_t *ws1, const wchar_t *ws2) { size_t i; @@ -86,3 +95,6 @@ int wcscoll(const wchar_t *ws1, const wchar_t *ws2) return (ws1[i] - ws2[i]); } +#endif + +/*wcmisc.c*/ -- cgit v1.2.3