summaryrefslogtreecommitdiff
path: root/missing_d
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2011-11-01 22:56:51 +0200
committerArnold D. Robbins <arnold@skeeve.com>2011-11-01 22:56:51 +0200
commit406189e88890a240c50cfd9f33613c4d4fb6d2bf (patch)
treef3828d15871d9c1a2b2401445fedae7435bd5716 /missing_d
parent9926f88fdfe6e489194fb1fe0e5e75774ace04ce (diff)
downloadgawk-406189e88890a240c50cfd9f33613c4d4fb6d2bf.tar.gz
Move non-MBS support glop out of dfa.c.
Diffstat (limited to 'missing_d')
-rw-r--r--missing_d/ChangeLog4
-rw-r--r--missing_d/wcmisc.c88
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]);
+}