1 /* $OpenBSD: ctype.h,v 1.19 2005/12/13 00:35:22 millert Exp $ */ 2 /* $NetBSD: ctype.h,v 1.14 1994/10/26 00:55:47 cgd Exp $ */ 3 4 /* 5 * Copyright (c) 1989 The Regents of the University of California. 6 * All rights reserved. 7 * (c) UNIX System Laboratories, Inc. 8 * All or some portions of this file are derived from material licensed 9 * to the University of California by American Telephone and Telegraph 10 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 11 * the permission of UNIX System Laboratories, Inc. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 1. Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 2. Redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution. 21 * 3. Neither the name of the University nor the names of its contributors 22 * may be used to endorse or promote products derived from this software 23 * without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * 37 * @(#)ctype.h 5.3 (Berkeley) 4/3/91 38 */ 39 40 #ifndef _CTYPE_H_ 41 #define _CTYPE_H_ 42 43 #include <sys/cdefs.h> 44 45 #define _CTYPE_U 0x01 46 #define _CTYPE_L 0x02 47 #define _CTYPE_N 0x04 48 #define _CTYPE_S 0x08 49 #define _CTYPE_P 0x10 50 #define _CTYPE_C 0x20 51 #define _CTYPE_X 0x40 52 #define _CTYPE_B 0x80 53 54 __BEGIN_DECLS 55 56 extern const char *_ctype_; 57 extern const short *_tolower_tab_; 58 extern const short *_toupper_tab_; 59 60 /* extern __inline is a GNU C extension */ 61 #ifdef __GNUC__ 62 # if defined(__GNUC_STDC_INLINE__) 63 #define __CTYPE_INLINE extern __inline __attribute__((__gnu_inline__)) 64 # else 65 #define __CTYPE_INLINE extern __inline 66 # endif 67 #else 68 #define __CTYPE_INLINE static __inline 69 #endif 70 71 #if defined(__GNUC__) || defined(_ANSI_LIBRARY) || defined(lint) 72 int isalnum(int); 73 int isalpha(int); 74 int iscntrl(int); 75 int isdigit(int); 76 int isgraph(int); 77 int islower(int); 78 int isprint(int); 79 int ispunct(int); 80 int isspace(int); 81 int isupper(int); 82 int isxdigit(int); 83 int tolower(int); 84 int toupper(int); 85 86 #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \ 87 || __XPG_VISIBLE > 600 88 int isblank(int); 89 #endif 90 91 #if __BSD_VISIBLE || __XPG_VISIBLE 92 int isascii(int); 93 int toascii(int); 94 int _tolower(int); 95 int _toupper(int); 96 #endif /* __BSD_VISIBLE || __XPG_VISIBLE */ 97 98 #endif /* __GNUC__ || _ANSI_LIBRARY || lint */ 99 100 #if defined(NDEBUG) 101 102 __CTYPE_INLINE int isalnum(int c) 103 { 104 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_CTYPE_U|_CTYPE_L|_CTYPE_N))); 105 } 106 107 __CTYPE_INLINE int isalpha(int c) 108 { 109 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_CTYPE_U|_CTYPE_L))); 110 } 111 112 __CTYPE_INLINE int iscntrl(int c) 113 { 114 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_C)); 115 } 116 117 __CTYPE_INLINE int isdigit(int c) 118 { 119 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_N)); 120 } 121 122 __CTYPE_INLINE int isgraph(int c) 123 { 124 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N))); 125 } 126 127 __CTYPE_INLINE int islower(int c) 128 { 129 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_L)); 130 } 131 132 __CTYPE_INLINE int isprint(int c) 133 { 134 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B))); 135 } 136 137 __CTYPE_INLINE int ispunct(int c) 138 { 139 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_P)); 140 } 141 142 __CTYPE_INLINE int isspace(int c) 143 { 144 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_S)); 145 } 146 147 __CTYPE_INLINE int isupper(int c) 148 { 149 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_U)); 150 } 151 152 __CTYPE_INLINE int isxdigit(int c) 153 { 154 return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_CTYPE_N|_CTYPE_X))); 155 } 156 157 __CTYPE_INLINE int tolower(int c) 158 { 159 if ((unsigned int)c > 255) 160 return (c); 161 return ((_tolower_tab_ + 1)[c]); 162 } 163 164 __CTYPE_INLINE int toupper(int c) 165 { 166 if ((unsigned int)c > 255) 167 return (c); 168 return ((_toupper_tab_ + 1)[c]); 169 } 170 171 #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \ 172 || __XPG_VISIBLE > 600 173 __CTYPE_INLINE int isblank(int c) 174 { 175 return (c == ' ' || c == '\t'); 176 } 177 #endif 178 179 #if __BSD_VISIBLE || __XPG_VISIBLE 180 __CTYPE_INLINE int isascii(int c) 181 { 182 return ((unsigned int)c <= 0177); 183 } 184 185 __CTYPE_INLINE int toascii(int c) 186 { 187 return (c & 0177); 188 } 189 190 __CTYPE_INLINE int _tolower(int c) 191 { 192 return (c - 'A' + 'a'); 193 } 194 195 __CTYPE_INLINE int _toupper(int c) 196 { 197 return (c - 'a' + 'A'); 198 } 199 #endif /* __BSD_VISIBLE || __XPG_VISIBLE */ 200 201 #endif /* NDEBUG */ 202 203 __END_DECLS 204 205 #undef __CTYPE_INLINE 206 207 #endif /* !_CTYPE_H_ */ 208