1 /* $OpenBSD: ctype.h,v 1.24 2014/05/26 01:49:36 guenther 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 _U 0x01 46 #define _L 0x02 47 #define _N 0x04 48 #define _S 0x08 49 #define _P 0x10 50 #define _C 0x20 51 #define _X 0x40 52 #define _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 #if defined(__GNUC__) || defined(_ANSI_LIBRARY) 61 int isalnum(int); 62 int isalpha(int); 63 int iscntrl(int); 64 int isdigit(int); 65 int isgraph(int); 66 int islower(int); 67 int isprint(int); 68 int ispunct(int); 69 int isspace(int); 70 int isupper(int); 71 int isxdigit(int); 72 int tolower(int); 73 int toupper(int); 74 75 #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \ 76 || __XPG_VISIBLE > 600 77 int isblank(int); 78 #endif 79 80 #if __BSD_VISIBLE || __XPG_VISIBLE 81 int isascii(int); 82 int toascii(int); 83 int _tolower(int); 84 int _toupper(int); 85 #endif /* __BSD_VISIBLE || __XPG_VISIBLE */ 86 87 #endif /* __GNUC__ || _ANSI_LIBRARY */ 88 89 #if !defined(_ANSI_LIBRARY) 90 91 __only_inline int isalnum(int _c) 92 { 93 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (_U|_L|_N))); 94 } 95 96 __only_inline int isalpha(int _c) 97 { 98 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (_U|_L))); 99 } 100 101 __only_inline int iscntrl(int _c) 102 { 103 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _C)); 104 } 105 106 __only_inline int isdigit(int _c) 107 { 108 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _N)); 109 } 110 111 __only_inline int isgraph(int _c) 112 { 113 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (_P|_U|_L|_N))); 114 } 115 116 __only_inline int islower(int _c) 117 { 118 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _L)); 119 } 120 121 __only_inline int isprint(int _c) 122 { 123 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (_P|_U|_L|_N|_B))); 124 } 125 126 __only_inline int ispunct(int _c) 127 { 128 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _P)); 129 } 130 131 __only_inline int isspace(int _c) 132 { 133 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _S)); 134 } 135 136 __only_inline int isupper(int _c) 137 { 138 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _U)); 139 } 140 141 __only_inline int isxdigit(int _c) 142 { 143 return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (_N|_X))); 144 } 145 146 __only_inline int tolower(int _c) 147 { 148 if ((unsigned int)_c > 255) 149 return (_c); 150 return ((_tolower_tab_ + 1)[_c]); 151 } 152 153 __only_inline int toupper(int _c) 154 { 155 if ((unsigned int)_c > 255) 156 return (_c); 157 return ((_toupper_tab_ + 1)[_c]); 158 } 159 160 #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \ 161 || __XPG_VISIBLE > 600 162 __only_inline int isblank(int _c) 163 { 164 return (_c == ' ' || _c == '\t'); 165 } 166 #endif 167 168 #if __BSD_VISIBLE || __XPG_VISIBLE 169 __only_inline int isascii(int _c) 170 { 171 return ((unsigned int)_c <= 0177); 172 } 173 174 __only_inline int toascii(int _c) 175 { 176 return (_c & 0177); 177 } 178 179 __only_inline int _tolower(int _c) 180 { 181 return (_c - 'A' + 'a'); 182 } 183 184 __only_inline int _toupper(int _c) 185 { 186 return (_c - 'a' + 'A'); 187 } 188 #endif /* __BSD_VISIBLE || __XPG_VISIBLE */ 189 190 #endif /* !_ANSI_LIBRARY */ 191 192 __END_DECLS 193 194 #endif /* !_CTYPE_H_ */ 195