Comment fix.
[kopensolaris-gnu/glibc.git] / ctype / ctype.h
1 /* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
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.
8
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.
13
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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA.  */
18
19 /*
20  *      ANSI Standard 4.3: CHARACTER HANDLING   <ctype.h>
21  */
22
23 #ifndef _CTYPE_H
24
25 #define _CTYPE_H        1
26 #include <features.h>
27
28 __BEGIN_DECLS
29
30 /* These are all the characteristics of characters.  All the
31    interdependencies (such as that an alphabetic is an uppercase or a
32    lowercase) are here.  If there get to be more than
33    (sizeof (unsigned short int) * CHAR_BIT) distinct characteristics,
34    many things must be changed that use `unsigned short int's.  */
35 enum
36 {
37   _ISupper = 1 << 0,            /* UPPERCASE.  */
38   _ISlower = 1 << 1,            /* lowercase.  */
39   _ISalpha = 1 << 2,            /* Alphabetic.  */
40   _ISdigit = 1 << 3,            /* Numeric.  */
41   _ISxdigit = 1 << 4,           /* Hexadecimal numeric.  */
42   _ISspace = 1 << 5,            /* Whitespace.  */
43   _ISprint = 1 << 6,            /* Printing.  */
44   _ISgraph = 1 << 7,            /* Graphical.  */
45   _ISblank = 1 << 8,            /* Blank (usually SPC and TAB).  */
46   _IScntrl = 1 << 9,            /* Control character.  */
47   _ISpunct = 1 << 10,           /* Punctuation.  */
48
49   /* The following are defined in POSIX.2 as being combinations of the
50      classes above.  */
51   _ISalnum = _ISalpha | _ISdigit        /* Alphanumeric.  */
52 };
53
54 /* These are defined in localeinfo.c.
55    The declarations here must match those in localeinfo.h.
56
57    These point to the second element ([1]) of arrays of size (UCHAR_MAX + 1).
58    EOF is -1, so [EOF] is the first element of the original array.
59    ANSI requires that the ctype functions work for `unsigned char' values
60    and for EOF.  The case conversion arrays are of `short int's rather than
61    `unsigned char's because tolower (EOF) must be EOF, which doesn't fit
62    into an `unsigned char'.  */
63 extern __const unsigned short int *__ctype_b;   /* Characteristics.  */
64 extern __const short int *__ctype_tolower;      /* Case conversions.  */
65 extern __const short int *__ctype_toupper;      /* Case conversions.  */
66
67 #define __isctype(c, type) \
68   (__ctype_b[(int) (c)] & (unsigned short int) type)
69
70 #define __isascii(c)    (((c) & (1 << 7)) == 0) /* If high bit is set.  */
71 #define __toascii(c)    ((c) & 0x7f) /* Mask off high bit.  */
72
73 #define __tolower(c)    ((int) __ctype_tolower[(int) (c)])
74 #define __toupper(c)    ((int) __ctype_toupper[(int) (c)])
75
76 #define __exctype(name) extern int name __P ((int))
77
78 /* The following names are all functions:
79      int isCHARACTERISTIC(int c);
80    which return nonzero iff C has CHARACTERISTIC.
81    For the meaning of the characteristic names, see the `enum' above.  */
82 __exctype (isalnum);
83 __exctype (isalpha);
84 __exctype (iscntrl);
85 __exctype (isdigit);
86 __exctype (islower);
87 __exctype (isgraph);
88 __exctype (isprint);
89 __exctype (ispunct);
90 __exctype (isspace);
91 __exctype (isupper);
92 __exctype (isxdigit);
93
94 #ifdef  __USE_GNU
95 __exctype (isblank);
96 #endif
97
98
99 /* Return the lowercase version of C.  */
100 extern int tolower __P ((int __c));
101
102 /* Return the uppercase version of C.  */
103 extern int toupper __P ((int __c));
104
105
106 #if defined(__USE_SVID) || defined(__USE_MISC)
107
108 /* Return nonzero iff C is in the ASCII set
109    (i.e., is no more than 7 bits wide).  */
110 extern int isascii __P ((int __c));
111
112 /* Return the part of C that is in the ASCII set
113    (i.e., the low-order 7 bits of C).  */
114 extern int toascii __P ((int __c));
115
116 #endif /* Use SVID or use misc.  */
117
118 #ifdef  __USE_SVID
119 /* These are the same as `toupper' and `tolower'.  */
120 __exctype (_toupper);
121 __exctype (_tolower);
122 #endif
123
124 #ifndef __NO_CTYPE
125 #define isalnum(c)      __isctype((c), _ISalnum)
126 #define isalpha(c)      __isctype((c), _ISalpha)
127 #define iscntrl(c)      __isctype((c), _IScntrl)
128 #define isdigit(c)      __isctype((c), _ISdigit)
129 #define islower(c)      __isctype((c), _ISlower)
130 #define isgraph(c)      __isctype((c), _ISgraph)
131 #define isprint(c)      __isctype((c), _ISprint)
132 #define ispunct(c)      __isctype((c), _ISpunct)
133 #define isspace(c)      __isctype((c), _ISspace)
134 #define isupper(c)      __isctype((c), _ISupper)
135 #define isxdigit(c)     __isctype((c), _ISxdigit)
136
137 #ifdef  __USE_GNU
138 #define isblank(c)      __isctype((c), _ISblank)
139 #endif
140
141 #define tolower(c)      __tolower(c)
142 #define toupper(c)      __toupper(c)
143
144 #if defined(__USE_SVID) || defined(__USE_MISC)
145 #define isascii(c)      __isascii(c)
146 #define toascii(c)      __toascii(c)
147 #endif
148
149 #endif /* Not __NO_CTYPE.  */
150
151 __END_DECLS
152
153 #endif /* ctype.h  */