Formerly ../ctype/ctype.h.~4~
[kopensolaris-gnu/glibc.git] / ctype / ctype.h
1 /* Copyright (C) 1991 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 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 /* These are all the characteristics of characters.  All the
29    interdependencies (such as that an alphabetic is an uppercase or a
30    lowercase) are here.  If there get to be more than
31    (sizeof (unsigned short int) * CHAR_BIT) distinct characteristics,
32    many things must be changed that use `unsigned short int's.  */
33 enum
34   {
35     _ISupper    = 1 << 0,               /* UPPERCASE.  */
36     _ISlower    = 1 << 1,               /* lowercase.  */
37     _IScntrl    = 1 << 2,               /* Control character.  */
38     _ISdigit    = 1 << 3,               /* Numeric.  */
39     _ISspace    = 1 << 4,               /* Whitespace.  */
40     _IShex      = 1 << 5,               /* A - F, a - f.  */
41     _ISpunct    = 1 << 6,               /* Punctuation.  */
42     _NOgraph    = 1 << 7,               /* Printing but nongraphical.  */
43     _ISblank    = 1 << 8,               /* Blank (usually SPC and TAB).  */
44     _ISalpha    = _ISupper | _ISlower,  /* Alphabetic.  */
45     _ISalnum    = _ISalpha | _ISdigit,  /* Alphanumeric.  */
46     _ISxdigit   = _ISdigit | _IShex,    /* Hexadecimal numeric.  */
47     _ISgraph    = _ISalnum | _ISpunct,  /* Graphical.  */
48     _ISprint    = _ISgraph | _NOgraph   /* Printing.  */
49   };
50
51 /* These are defined in localeinfo.c.
52    The declarations here must match those in localeinfo.h.  */
53 extern CONST unsigned short int *__ctype_b;     /* Characteristics.  */
54 extern CONST unsigned char *__ctype_tolower;    /* Case conversions.  */
55 extern CONST unsigned char *__ctype_toupper;    /* Case conversions.  */
56
57 #define __isctype(c, type)      (__ctype_b[c] & (unsigned short int) type)
58
59 #define __isascii(c)    (((c) & (1 << 7)) == 0)
60 #define __toascii(c)    ((c) & 0x7f)
61
62 #define __tolower(c)    __ctype_tolower[c]
63 #define __toupper(c)    __ctype_toupper[c]
64
65 /* IGNORE(@ This line MUST be broken!  m4 will not change it otherwise. @) */
66 #define __exctype(name) \
67   extern int EXFUN(name, (int))
68
69 /* The following names are all functions:
70      int isCHARACTERISTIC(int c);
71    which return nonzero iff C has CHARACTERISTIC.
72    For the meaning of the characteristic names, see the `enum' above.  */
73 __exctype(isalnum);
74 __exctype(isalpha);
75 __exctype(iscntrl);
76 __exctype(isdigit);
77 __exctype(islower);
78 __exctype(isgraph);
79 __exctype(isprint);
80 __exctype(ispunct);
81 __exctype(isspace);
82 __exctype(isupper);
83 __exctype(isxdigit);
84
85 #ifdef  __USE_GNU
86 __exctype(isblank);
87 #endif
88
89
90 /* Return the lowercase version of C.  */
91 extern int EXFUN(tolower, (int __c));
92
93 /* Return the uppercase version of C.  */
94 extern int EXFUN(toupper, (int __c));
95
96
97 #if defined(__USE_SVID) || defined(__USE_MISC)
98
99 /* Return nonzero iff C is in the ASCII set
100    (i.e., is no more than 7 bits wide).  */
101 extern int EXFUN(isascii, (int __c));
102
103 /* Return the part of C that is in the ASCII set
104    (i.e., the low-order 7 bits of C).  */
105 extern int EXFUN(toascii, (int __c));
106
107 #endif  /* Use SVID or use misc.  */
108
109 #ifdef  __USE_SVID
110 /* These are the same as `toupper' and and `tolower'.  */
111 __exctype(_toupper);
112 __exctype(_tolower);
113 #endif
114
115 #ifndef __NO_CTYPE
116 #define isalnum(c)      __isctype((c), _ISalnum)
117 #define isalpha(c)      __isctype((c), _ISalpha)
118 #define iscntrl(c)      __isctype((c), _IScntrl)
119 #define isdigit(c)      __isctype((c), _ISdigit)
120 #define islower(c)      __isctype((c), _ISlower)
121 #define isgraph(c)      __isctype((c), _ISgraph)
122 #define isprint(c)      __isctype((c), _ISprint)
123 #define ispunct(c)      __isctype((c), _ISpunct)
124 #define isspace(c)      __isctype((c), _ISspace)
125 #define isupper(c)      __isctype((c), _ISupper)
126 #define isxdigit(c)     __isctype((c), _ISxdigit)
127
128 #ifdef  __USE_GNU
129 #define isblank(c)      __isctype((c), _ISblank)
130 #endif
131
132 #define tolower(c)      __tolower(c)
133 #define toupper(c)      __toupper(c)
134
135 #if defined(__USE_SVID) || defined(__USE_MISC)
136 #define isascii(c)      __isascii(c)
137 #define toascii(c)      __toascii(c)
138 #endif
139
140 #endif  /* Not __NO_CTYPE.  */
141
142 #endif  /* ctype.h  */