From 43f4dca2ead9fb8f65778c2772228dff554e1c75 Mon Sep 17 00:00:00 2001 From: Eduardo Chappa Date: Sun, 18 Apr 2021 09:54:53 -0600 Subject: * Addition of testing for wctomb(), which will be used in systems that do not have wcrtomb(). Work in collaboration with professor Martin Trusler. --- configure | 1 + configure.ac | 1 + include/config.h.in | 3 +++ pith/charconv/utf8.c | 10 +++++++++- pith/pine.hlp | 7 +++++++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/configure b/configure index de7219f..4acb272 100755 --- a/configure +++ b/configure @@ -21249,6 +21249,7 @@ for ac_func in strchr \ wcwidth \ mbstowcs \ wcrtomb \ + wctomb \ putenv \ setenv do : diff --git a/configure.ac b/configure.ac index 00421c3..dfc83dd 100644 --- a/configure.ac +++ b/configure.ac @@ -1998,6 +1998,7 @@ AC_CHECK_FUNCS([strchr \ wcwidth \ mbstowcs \ wcrtomb \ + wctomb \ putenv \ setenv]) diff --git a/include/config.h.in b/include/config.h.in index 7d978e6..cf6e4c2 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -469,6 +469,9 @@ /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB +/* Define to 1 if you have the `wctomb' function. */ +#undef HAVE_WCTOMB + /* Define to 1 if you have the `wcwidth' function. */ #undef HAVE_WCWIDTH diff --git a/pith/charconv/utf8.c b/pith/charconv/utf8.c index 1651252..42a364b 100644 --- a/pith/charconv/utf8.c +++ b/pith/charconv/utf8.c @@ -125,6 +125,7 @@ pith_ucs4width(UCS ucs) int wtomb(char *dest, UCS ucs) { + int rv; /* * We believe that on modern unix systems wchar_t is a UCS-4 character. * That's the assumption here. @@ -150,7 +151,14 @@ wtomb(char *dest, UCS ucs) return(ret); } else - return(wcrtomb(dest, (wchar_t) ucs, NULL)); +#if defined(HAVE_WCRTOMB) + rv = wcrtomb(dest, (wchar_t) ucs, NULL); +#elif defined(HAVE_WCTOMB) + rv = wctomb(dest, (wchar_t) ucs); +#else + rv = -1; +#endif + return rv; } diff --git a/pith/pine.hlp b/pith/pine.hlp index 2605ae0..a226e99 100644 --- a/pith/pine.hlp +++ b/pith/pine.hlp @@ -35312,7 +35312,14 @@ To convert from Unicode to multi-byte the routine
wcrtomb

+is used, if available, otherwise + +

+

wctomb
+

+ is used. + And to find the screen width a particular Unicode character will occupy the routine used is -- cgit v1.2.3-54-g00ecf