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