From b8a1c347098ba746c5b2ba6201790f6cfc7eba44 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Oct 2011 15:13:28 +0200 Subject: More faking of MBS support, mainly for VMS. --- ChangeLog | 2 ++ dfa.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 887ac716..2393ac3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * Makefile.am (distcleancheck_listfiles): Added, per advice from Stefano Lattarini . + * dfa.c: Additional faking of mbsupport for systems without it; + mainly VMS. 2011-10-21 Stefano Lattarini diff --git a/dfa.c b/dfa.c index a909f68f..96bba214 100644 --- a/dfa.c +++ b/dfa.c @@ -73,8 +73,13 @@ #define wint_t int #define mbstate_t int #define WEOF EOF -#define towupper toupper -#define towlower tolower +#define towupper toupper +#define towlower tolower +#define btowc(x) (x) +#define iswalnum isalnum +#define iswalpha isalpha +#define iswupper isupper +#define wcscoll strcmp #endif /* ! MBS_SUPPORT */ #endif /* GAWK */ @@ -88,7 +93,63 @@ is_blank (int c) { return (c == ' ' || c == '\t'); } -#endif + +#if ! MBS_SUPPORT +static const char *classes[] = { + "", + "alnum", + "alpha", + "blank", + "cntrl", + "digit", + "graph", + "lower", + "print", + "punct", + "space", + "upper", + "xdigit", + NULL +}; + +static 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; +} + +static 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; + } +} + +static +#endif /* ! MBS_SUPPORT */ +#endif /* GAWK */ /* HPUX, define those as macros in sys/param.h */ #ifdef setbit -- cgit v1.2.3