aboutsummaryrefslogtreecommitdiff
path: root/include/ctype.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ctype.h')
-rw-r--r--include/ctype.h144
1 files changed, 103 insertions, 41 deletions
diff --git a/include/ctype.h b/include/ctype.h
index cdfddcbb81b2..f3000073c259 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -5,11 +5,14 @@
* or UNIX System Laboratories, Inc. and are reproduced herein with
* the permission of UNIX System Laboratories, Inc.
*
- * $Id: ctype.h,v 1.2.2.1 1994/05/04 07:37:44 rgrimes Exp $
+ * $Id: ctype.h,v 1.6 1994/05/04 08:50:12 rgrimes Exp $
*/
/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,53 +42,112 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)ctype.h 5.3 (Berkeley) 4/3/91
+ * @(#)ctype.h 8.1 (Berkeley) 6/6/93
*/
-#ifndef _CTYPE_H_
+#ifndef _CTYPE_H_
#define _CTYPE_H_
-#include <sys/cdefs.h>
+#ifndef _ANSI_SOURCE
+#include <runetype.h>
+#endif
+
+#define _A 0x00000100L /* Alpha */
+#define _C 0x00000200L /* Control */
+#define _D 0x00000400L /* Digit */
+#define _G 0x00000800L /* Graph */
+#define _L 0x00001000L /* Lower */
+#define _P 0x00002000L /* Punct */
+#define _S 0x00004000L /* Space */
+#define _U 0x00008000L /* Upper */
+#define _X 0x00010000L /* X digit */
+#define _B 0x00020000L /* Blank */
+#define _R 0x00040000L /* Print */
+#define _I 0x00080000L /* Ideogram */
+#define _T 0x00100000L /* Special */
+#define _Q 0x00200000L /* Phonogram */
-#define _U 0x01
-#define _L 0x02
-#define _N 0x04
-#define _S 0x08
-#define _P 0x10
-#define _C 0x20
-#define _X 0x40
-#define _B 0x80
+#define isalnum(c) __istype((c), (_A|_D))
+#define isalpha(c) __istype((c), _A)
+#define iscntrl(c) __istype((c), _C)
+#define isdigit(c) __isctype((c), _D) /* ANSI -- locale independent */
+#define isgraph(c) __istype((c), _G)
+#define islower(c) __istype((c), _L)
+#define isprint(c) __istype((c), _R)
+#define ispunct(c) __istype((c), _P)
+#define isspace(c) __istype((c), _S)
+#define isupper(c) __istype((c), _U)
+#define isxdigit(c) __isctype((c), _X) /* ANSI -- locale independent */
-extern char _ctype_[];
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+#define isascii(c) ((c & ~0x7F) == 0)
+#define toascii(c) ((c) & 0x7F)
+#define digittoint(c) __istype((c), 0xFF)
+#define isideogram(c) __istype((c), _I)
+#define isphonogram(c) __istype((c), _Q)
+#define isspecial(c) __istype((c), _T)
+#define isblank(c) __istype((c), _B)
+#define isrune(c) __istype((c), 0xFFFFFF00L)
+#define isnumber(c) __istype((c), _D)
+#define ishexnumber(c) __istype((c), _X)
+#endif
+/* See comments in <machine/ansi.h> about _BSD_RUNE_T_. */
__BEGIN_DECLS
-int isdigit __P((int));
-int islower __P((int));
-int isspace __P((int));
-int ispunkt __P((int));
-int isupper __P((int));
-int isalpha __P((int));
-int isxdigit __P((int));
-int isalnum __P((int));
-int isprint __P((int));
-int isgraph __P((int));
-int iscntrl __P((int));
-int toupper __P((int));
-int tolower __P((int));
+unsigned long ___runetype __P((_BSD_RUNE_T_));
+_BSD_RUNE_T_ ___tolower __P((_BSD_RUNE_T_));
+_BSD_RUNE_T_ ___toupper __P((_BSD_RUNE_T_));
__END_DECLS
-#define isdigit(c) ((_ctype_ + 1)[c] & _N)
-#define islower(c) ((_ctype_ + 1)[c] & _L)
-#define isspace(c) ((_ctype_ + 1)[c] & _S)
-#define ispunct(c) ((_ctype_ + 1)[c] & _P)
-#define isupper(c) ((_ctype_ + 1)[c] & _U)
-#define isalpha(c) ((_ctype_ + 1)[c] & (_U|_L))
-#define isxdigit(c) ((_ctype_ + 1)[c] & (_N|_X))
-#define isalnum(c) ((_ctype_ + 1)[c] & (_U|_L|_N))
-#define isprint(c) ((_ctype_ + 1)[c] & (_P|_U|_L|_N|_B))
-#define isgraph(c) ((_ctype_ + 1)[c] & (_P|_U|_L|_N))
-#define iscntrl(c) ((_ctype_ + 1)[c] & _C)
-#define isascii(c) ((unsigned)(c) <= 0177)
-#define toascii(c) ((c) & 0177)
+/*
+ * If your compiler supports prototypes and inline functions,
+ * #define _USE_CTYPE_INLINE_. Otherwise, use the C library
+ * functions.
+ */
+#if !defined(_USE_CTYPE_CLIBRARY_) && defined(__GNUC__) || defined(__cplusplus)
+#define _USE_CTYPE_INLINE_ 1
+#endif
+
+#if defined(_USE_CTYPE_INLINE_)
+static __inline__ int
+__istype(_BSD_RUNE_T_ __c, unsigned long __f)
+{
+ return((((__c & _CRMASK) ? ___runetype(__c) :
+ _CurrentRuneLocale->runetype[__c]) & __f) ? 1 : 0);
+}
+
+static __inline__ int
+__isctype(_BSD_RUNE_T_ __c, unsigned long __f)
+{
+ return((((__c & _CRMASK) ? 0 :
+ _DefaultRuneLocale.runetype[__c]) & __f) ? 1 : 0);
+}
+
+/* _ANSI_LIBRARY is defined by lib/libc/gen/isctype.c. */
+#if !defined(_ANSI_LIBRARY)
+static __inline__ _BSD_RUNE_T_
+toupper(_BSD_RUNE_T_ __c)
+{
+ return((__c & _CRMASK) ?
+ ___toupper(__c) : _CurrentRuneLocale->mapupper[__c]);
+}
+
+static __inline__ _BSD_RUNE_T_
+tolower(_BSD_RUNE_T_ __c)
+{
+ return((__c & _CRMASK) ?
+ ___tolower(__c) : _CurrentRuneLocale->maplower[__c]);
+}
+#endif /* !_ANSI_LIBRARY */
+
+#else /* !_USE_CTYPE_INLINE_ */
+
+__BEGIN_DECLS
+int __istype __P((_BSD_RUNE_T_, unsigned long));
+int __isctype __P((_BSD_RUNE_T_, unsigned long));
+_BSD_RUNE_T_ toupper __P((_BSD_RUNE_T_));
+_BSD_RUNE_T_ tolower __P((_BSD_RUNE_T_));
+__END_DECLS
+#endif /* _USE_CTYPE_INLINE_ */
#endif /* !_CTYPE_H_ */