-#define isalpha(c) ((_ctype_+1)[c]&(_U|_L))
-#define isupper(c) ((_ctype_+1)[c]&_U)
-#define islower(c) ((_ctype_+1)[c]&_L)
-#define isdigit(c) ((_ctype_+1)[c]&_N)
-#define isxdigit(c) ((_ctype_+1)[c]&(_N|_X))
-#define isspace(c) ((_ctype_+1)[c]&_S)
-#define ispunct(c) ((_ctype_+1)[c]&_P)
-#define isalnum(c) ((_ctype_+1)[c]&(_U|_L|_N))
-#define isprint(c) ((_ctype_+1)[c]&(_P|_U|_L|_N))
-#define iscntrl(c) ((_ctype_+1)[c]&_C)
-#define isascii(c) ((unsigned)(c)<=0177)
-#define toupper(c) ((c)-'a'+'A')
-#define tolower(c) ((c)-'A'+'a')
-#define toascii(c) ((c)&0177)
+extern char __ctype[], __maplower[], __mapupper[];
+
+#define isalnum(c) ((__ctype + 1)[c] & (_U|_L|_N))
+#define isalpha(c) ((__ctype + 1)[c] & (_U|_L))
+#define iscntrl(c) ((__ctype + 1)[c] & _C)
+#define isdigit(c) ((__ctype + 1)[c] & _N)
+#define isgraph(c) ((__ctype + 1)[c] & (_P|_U|_L|_N))
+#define islower(c) ((__ctype + 1)[c] & _L)
+#define isprint(c) ((__ctype + 1)[c] & (_P|_U|_L|_N|_B))
+#define ispunct(c) ((__ctype + 1)[c] & _P)
+#define isspace(c) ((__ctype + 1)[c] & _S)
+#define isupper(c) ((__ctype + 1)[c] & _U)
+#define isxdigit(c) ((__ctype + 1)[c] & (_N|_X))
+#define tolower(c) ((__maplower + 1)[c])
+#define toupper(c) ((__mapupper + 1)[c])
+
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+#define isascii(c) ((unsigned int)(c) <= 0177)
+#define isblank(c) ((c) == '\t' || (c) == ' ')
+#define toascii(c) ((c) & 0177)
+#endif
+
+#endif /* !_CTYPE_H_ */