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>
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. */
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))
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. */
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. */
103 __exctype (isxdigit
);
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. */
130 /* These are the same as `toupper' and `tolower'. */
131 __exctype (_toupper
);
132 __exctype (_tolower
);
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)
149 #define isblank(c) __isctype((c), _ISblank)
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)
160 #endif /* Not __NO_CTYPE. */