crt: replace is[w]print functions for crtdll.dll...msvcr110.dll

CRT's iw[w]print functions return inconsistent results for TAB character.
See comments in isprint.c and iswprint.c for behavior summary.

Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com>
Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index a6c593a..978294e 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -358,7 +358,9 @@
   misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/isblank.c \
+  misc/isprint.c \
   misc/iswblank.c \
+  misc/iswprint.c \
   misc/_isblank_l.c \
   misc/_iswblank_l.c \
   misc/wctrans.c \
@@ -1035,7 +1037,9 @@
   $(src_msvcrt_add_vscanf) \
   math/i386__copysignf.c \
   misc/isblank.c \
+  misc/isprint.c \
   misc/iswblank.c \
+  misc/iswprint.c \
   misc/wctrans.c \
   misc/wctype.c \
   stdio/scanf.S
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in b/mingw-w64-crt/lib-common/msvcrt.def.in
index 2cd26c9..500d076 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -999,7 +999,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1011,7 +1011,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/crtdll.def.in b/mingw-w64-crt/lib32/crtdll.def.in
index b76b7c7..0062013 100644
--- a/mingw-w64-crt/lib32/crtdll.def.in
+++ b/mingw-w64-crt/lib32/crtdll.def.in
@@ -392,7 +392,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -404,7 +404,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in b/mingw-w64-crt/lib32/msvcr100.def.in
index a5c1d9d..50d3169 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1726,7 +1726,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1738,7 +1738,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr100d.def.in b/mingw-w64-crt/lib32/msvcr100d.def.in
index 5881ef8..ee5717d 100644
--- a/mingw-w64-crt/lib32/msvcr100d.def.in
+++ b/mingw-w64-crt/lib32/msvcr100d.def.in
@@ -1792,7 +1792,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1804,7 +1804,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in b/mingw-w64-crt/lib32/msvcr110.def.in
index 2dd9e2c..09a7e68 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1858,7 +1858,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1870,7 +1870,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr110d.def.in b/mingw-w64-crt/lib32/msvcr110d.def.in
index 58aace1..3448d40 100644
--- a/mingw-w64-crt/lib32/msvcr110d.def.in
+++ b/mingw-w64-crt/lib32/msvcr110d.def.in
@@ -1925,7 +1925,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1937,7 +1937,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr40d.def.in b/mingw-w64-crt/lib32/msvcr40d.def.in
index 88309a7..73598f8 100644
--- a/mingw-w64-crt/lib32/msvcr40d.def.in
+++ b/mingw-w64-crt/lib32/msvcr40d.def.in
@@ -1521,7 +1521,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1533,7 +1533,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr70.def.in b/mingw-w64-crt/lib32/msvcr70.def.in
index af020cb..b05ed5a 100644
--- a/mingw-w64-crt/lib32/msvcr70.def.in
+++ b/mingw-w64-crt/lib32/msvcr70.def.in
@@ -771,7 +771,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -783,7 +783,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr70d.def.in b/mingw-w64-crt/lib32/msvcr70d.def.in
index 19610ee..727c056 100644
--- a/mingw-w64-crt/lib32/msvcr70d.def.in
+++ b/mingw-w64-crt/lib32/msvcr70d.def.in
@@ -815,7 +815,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -827,7 +827,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr71.def.in b/mingw-w64-crt/lib32/msvcr71.def.in
index 63d0594..1175bed 100644
--- a/mingw-w64-crt/lib32/msvcr71.def.in
+++ b/mingw-w64-crt/lib32/msvcr71.def.in
@@ -765,7 +765,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -777,7 +777,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr71d.def.in b/mingw-w64-crt/lib32/msvcr71d.def.in
index 5beec6e..27da9e0 100644
--- a/mingw-w64-crt/lib32/msvcr71d.def.in
+++ b/mingw-w64-crt/lib32/msvcr71d.def.in
@@ -809,7 +809,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -821,7 +821,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr80.def.in b/mingw-w64-crt/lib32/msvcr80.def.in
index c622479..96db56f 100644
--- a/mingw-w64-crt/lib32/msvcr80.def.in
+++ b/mingw-w64-crt/lib32/msvcr80.def.in
@@ -1365,7 +1365,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1377,7 +1377,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr80d.def.in b/mingw-w64-crt/lib32/msvcr80d.def.in
index 65959c4..d39efa4 100644
--- a/mingw-w64-crt/lib32/msvcr80d.def.in
+++ b/mingw-w64-crt/lib32/msvcr80d.def.in
@@ -1448,7 +1448,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1460,7 +1460,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr90.def.in b/mingw-w64-crt/lib32/msvcr90.def.in
index 94d877a..4e445a6 100644
--- a/mingw-w64-crt/lib32/msvcr90.def.in
+++ b/mingw-w64-crt/lib32/msvcr90.def.in
@@ -1360,7 +1360,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1372,7 +1372,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcr90d.def.in b/mingw-w64-crt/lib32/msvcr90d.def.in
index 1d5354d..e5f3430 100644
--- a/mingw-w64-crt/lib32/msvcr90d.def.in
+++ b/mingw-w64-crt/lib32/msvcr90d.def.in
@@ -1432,7 +1432,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1444,7 +1444,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcrt10.def.in b/mingw-w64-crt/lib32/msvcrt10.def.in
index 3129298..768120a 100644
--- a/mingw-w64-crt/lib32/msvcrt10.def.in
+++ b/mingw-w64-crt/lib32/msvcrt10.def.in
@@ -1167,7 +1167,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1179,7 +1179,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcrt20.def.in b/mingw-w64-crt/lib32/msvcrt20.def.in
index a61c945..e62d673 100644
--- a/mingw-w64-crt/lib32/msvcrt20.def.in
+++ b/mingw-w64-crt/lib32/msvcrt20.def.in
@@ -1389,7 +1389,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1401,7 +1401,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcrt40.def.in b/mingw-w64-crt/lib32/msvcrt40.def.in
index 83798ed..5c533e0 100644
--- a/mingw-w64-crt/lib32/msvcrt40.def.in
+++ b/mingw-w64-crt/lib32/msvcrt40.def.in
@@ -1489,7 +1489,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1501,7 +1501,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib32/msvcrtd.def.in b/mingw-w64-crt/lib32/msvcrtd.def.in
index 80189d2..34b1fcb 100644
--- a/mingw-w64-crt/lib32/msvcrtd.def.in
+++ b/mingw-w64-crt/lib32/msvcrtd.def.in
@@ -715,7 +715,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -727,7 +727,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in b/mingw-w64-crt/lib64/msvcr100.def.in
index 8db1ba9..7e70caa 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1681,7 +1681,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1693,7 +1693,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr100d.def.in b/mingw-w64-crt/lib64/msvcr100d.def.in
index fcb7c7c..65ed8c2 100644
--- a/mingw-w64-crt/lib64/msvcr100d.def.in
+++ b/mingw-w64-crt/lib64/msvcr100d.def.in
@@ -1746,7 +1746,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1758,7 +1758,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in b/mingw-w64-crt/lib64/msvcr110.def.in
index f0b338e..aea6fab 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1805,7 +1805,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1817,7 +1817,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr110d.def.in b/mingw-w64-crt/lib64/msvcr110d.def.in
index 4b65455..ee51330 100644
--- a/mingw-w64-crt/lib64/msvcr110d.def.in
+++ b/mingw-w64-crt/lib64/msvcr110d.def.in
@@ -1870,7 +1870,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1882,7 +1882,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr80.def.in b/mingw-w64-crt/lib64/msvcr80.def.in
index 1c3ef7e..db1710d 100644
--- a/mingw-w64-crt/lib64/msvcr80.def.in
+++ b/mingw-w64-crt/lib64/msvcr80.def.in
@@ -1303,7 +1303,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1315,7 +1315,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr80d.def.in b/mingw-w64-crt/lib64/msvcr80d.def.in
index db27778..a28217c 100644
--- a/mingw-w64-crt/lib64/msvcr80d.def.in
+++ b/mingw-w64-crt/lib64/msvcr80d.def.in
@@ -1380,7 +1380,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1392,7 +1392,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr90.def.in b/mingw-w64-crt/lib64/msvcr90.def.in
index ae71689..1bc3045 100644
--- a/mingw-w64-crt/lib64/msvcr90.def.in
+++ b/mingw-w64-crt/lib64/msvcr90.def.in
@@ -1301,7 +1301,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1313,7 +1313,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/lib64/msvcr90d.def.in b/mingw-w64-crt/lib64/msvcr90d.def.in
index 0982871..864e0e1 100644
--- a/mingw-w64-crt/lib64/msvcr90d.def.in
+++ b/mingw-w64-crt/lib64/msvcr90d.def.in
@@ -1367,7 +1367,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1379,7 +1379,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/libarm32/msvcr110.def.in b/mingw-w64-crt/libarm32/msvcr110.def.in
index b2d9486..d708540 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110.def.in
@@ -1792,7 +1792,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1804,7 +1804,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/libarm32/msvcr110d.def.in b/mingw-w64-crt/libarm32/msvcr110d.def.in
index 7c30d86..80a3e30 100644
--- a/mingw-w64-crt/libarm32/msvcr110d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110d.def.in
@@ -1857,7 +1857,7 @@
 isgraph
 isleadbyte
 islower
-isprint
+; isprint ; replaced by emu, CRT version mishandles TAB character
 ispunct
 isspace
 isupper
@@ -1869,7 +1869,7 @@
 iswdigit
 iswgraph
 iswlower
-iswprint
+; iswprint ; replaced by emu, CRT version mishandles TAB character
 iswpunct
 iswspace
 iswupper
diff --git a/mingw-w64-crt/misc/isprint.c b/mingw-w64-crt/misc/isprint.c
new file mode 100644
index 0000000..0b9dfe4
--- /dev/null
+++ b/mingw-w64-crt/misc/isprint.c
@@ -0,0 +1,28 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#define _CTYPE_DISABLE_MACROS
+#include <ctype.h>
+
+/**
+ * Calls to `isprint ('\t')` return inconsistent results depending on CRT
+ * and active locale.
+ *
+ * In all CRTs up to msvcr110.dll, it returns zero in "C" locale
+ * and non-zero otherwise.
+ *
+ * In msvcr120.dll and UCRT, it always returns zero.
+ */
+
+int __cdecl isprint (int _C) {
+  if (_C == '\t') {
+    return 0;
+  }
+
+  return _isctype (_C, _ALPHA | _BLANK | _DIGIT | _PUNCT);
+}
+
+int (__cdecl *__MINGW_IMP_SYMBOL(isprint))(int) = isprint;
diff --git a/mingw-w64-crt/misc/iswprint.c b/mingw-w64-crt/misc/iswprint.c
new file mode 100644
index 0000000..698b766
--- /dev/null
+++ b/mingw-w64-crt/misc/iswprint.c
@@ -0,0 +1,31 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#define _CTYPE_DISABLE_MACROS
+#include <wctype.h>
+
+/**
+ * Calls to `iswprint (L'\t')` return inconsistent results depending on CRT
+ * and active locale.
+ *
+ * In all CRTs up to msvcrt.dll version 6.1, it returns zero in "C" locale
+ * and non-zero otherwise.
+ *
+ * Since msvcr70.dll up to msvcr110.dll, it always returns non-zero;
+ * OS-specific versions of msvcrt.dll follow this behavior.
+ *
+ * In msvcr120.dll and UCRT, it always returns zero.
+ */
+
+int __cdecl iswprint (wint_t _C) {
+  /**
+   * mingw-w64's `iswctype` is a wrapper around CRT's `iswctype` which
+   * properly handles TAB character.
+   */
+  return iswctype (_C, _ALPHA | _BLANK | _DIGIT | _PUNCT);
+}
+
+int (__cdecl *__MINGW_IMP_SYMBOL(iswprint))(wint_t) = iswprint;