Wed Jun 5 15:57:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
[glibc.git] / ctype / ctype.h
blobc97c3e0f5df79afc362a2efa40e03bf3a7b65179
1 /* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA. */
20 * ANSI Standard 4.3: CHARACTER HANDLING <ctype.h>
23 #ifndef _CTYPE_H
25 #define _CTYPE_H 1
26 #include <features.h>
28 __BEGIN_DECLS
30 #ifndef _ISbit
31 /* These are all the characteristics of characters.
32 If there get to be more than 16 distinct characteristics,
33 many things must be changed that use `unsigned short int's.
35 The characteristics are stored always in network byte order (big
36 endian). We define the bit value interpretations here dependent on the
37 machine's byte order. */
39 #include <endian.h>
40 #if __BYTE_ORDER == __BIG_ENDIAN
41 #define _ISbit(bit) (1 << bit)
42 #else /* __BYTE_ORDER == __LITTLE_ENDIAN */
43 #define _ISbit(bit) (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
44 #endif
46 enum
48 _ISupper = _ISbit (0), /* UPPERCASE. */
49 _ISlower = _ISbit (1), /* lowercase. */
50 _ISalpha = _ISbit (2), /* Alphabetic. */
51 _ISdigit = _ISbit (3), /* Numeric. */
52 _ISxdigit = _ISbit (4), /* Hexadecimal numeric. */
53 _ISspace = _ISbit (5), /* Whitespace. */
54 _ISprint = _ISbit (6), /* Printing. */
55 _ISgraph = _ISbit (7), /* Graphical. */
56 _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
57 _IScntrl = _ISbit (9), /* Control character. */
58 _ISpunct = _ISbit (10), /* Punctuation. */
59 _ISalnum = _ISbit (11) /* Alphanumeric. */
61 #endif /* ! _ISbit */
63 /* These are defined in ctype-info.c.
64 The declarations here must match those in localeinfo.h.
66 These point into arrays of 384, so they can be indexed by any `unsigned
67 char' value [0,255]; by EOF (-1); or by any `signed char' value
68 [-128,-1). ANSI requires that the ctype functions work for `unsigned
69 char' values and for EOF; we also support negative `signed char' values
70 for broken old programs. The case conversion arrays are of `int's
71 rather than `unsigned char's because tolower (EOF) must be EOF, which
72 doesn't fit into an `unsigned char'. But today more important is that
73 the arrays are also used for multi-byte character sets. */
74 extern __const unsigned short int *__ctype_b; /* Characteristics. */
75 extern __const int *__ctype_tolower; /* Case conversions. */
76 extern __const int *__ctype_toupper; /* Case conversions. */
78 #define __isctype(c, type) \
79 (__ctype_b[(int) (c)] & (unsigned short int) type)
81 #define __isascii(c) (((c) & (1 << 7)) == 0) /* If high bit is set. */
82 #define __toascii(c) ((c) & 0x7f) /* Mask off high bit. */
84 #define __tolower(c) ((int) __ctype_tolower[(int) (c)])
85 #define __toupper(c) ((int) __ctype_toupper[(int) (c)])
87 #define __exctype(name) extern int name __P ((int))
89 /* The following names are all functions:
90 int isCHARACTERISTIC(int c);
91 which return nonzero iff C has CHARACTERISTIC.
92 For the meaning of the characteristic names, see the `enum' above. */
93 __exctype (isalnum);
94 __exctype (isalpha);
95 __exctype (iscntrl);
96 __exctype (isdigit);
97 __exctype (islower);
98 __exctype (isgraph);
99 __exctype (isprint);
100 __exctype (ispunct);
101 __exctype (isspace);
102 __exctype (isupper);
103 __exctype (isxdigit);
105 #ifdef __USE_GNU
106 __exctype (isblank);
107 #endif
110 /* Return the lowercase version of C. */
111 extern int tolower __P ((int __c));
113 /* Return the uppercase version of C. */
114 extern int toupper __P ((int __c));
117 #if defined(__USE_SVID) || defined(__USE_MISC)
119 /* Return nonzero iff C is in the ASCII set
120 (i.e., is no more than 7 bits wide). */
121 extern int isascii __P ((int __c));
123 /* Return the part of C that is in the ASCII set
124 (i.e., the low-order 7 bits of C). */
125 extern int toascii __P ((int __c));
127 #endif /* Use SVID or use misc. */
129 #ifdef __USE_SVID
130 /* These are the same as `toupper' and `tolower'. */
131 __exctype (_toupper);
132 __exctype (_tolower);
133 #endif
135 #ifndef __NO_CTYPE
136 #define isalnum(c) __isctype((c), _ISalnum)
137 #define isalpha(c) __isctype((c), _ISalpha)
138 #define iscntrl(c) __isctype((c), _IScntrl)
139 #define isdigit(c) __isctype((c), _ISdigit)
140 #define islower(c) __isctype((c), _ISlower)
141 #define isgraph(c) __isctype((c), _ISgraph)
142 #define isprint(c) __isctype((c), _ISprint)
143 #define ispunct(c) __isctype((c), _ISpunct)
144 #define isspace(c) __isctype((c), _ISspace)
145 #define isupper(c) __isctype((c), _ISupper)
146 #define isxdigit(c) __isctype((c), _ISxdigit)
148 #ifdef __USE_GNU
149 #define isblank(c) __isctype((c), _ISblank)
150 #endif
152 #define tolower(c) __tolower(c)
153 #define toupper(c) __toupper(c)
155 #if defined(__USE_SVID) || defined(__USE_MISC)
156 #define isascii(c) __isascii(c)
157 #define toascii(c) __toascii(c)
158 #endif
160 #endif /* Not __NO_CTYPE. */
162 __END_DECLS
164 #endif /* ctype.h */