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	_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
56extern const char	*_ctype_;
57extern const short	*_tolower_tab_;
58extern 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)
72int	isalnum(int);
73int	isalpha(int);
74int	iscntrl(int);
75int	isdigit(int);
76int	isgraph(int);
77int	islower(int);
78int	isprint(int);
79int	ispunct(int);
80int	isspace(int);
81int	isupper(int);
82int	isxdigit(int);
83int	tolower(int);
84int	toupper(int);
85
86#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \
87    || __XPG_VISIBLE > 600
88int	isblank(int);
89#endif
90
91#if __BSD_VISIBLE || __XPG_VISIBLE
92int	isascii(int);
93int	toascii(int);
94int	_tolower(int);
95int	_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] & (_U|_L|_N)));
105}
106
107__CTYPE_INLINE int isalpha(int c)
108{
109	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_U|_L)));
110}
111
112__CTYPE_INLINE int iscntrl(int c)
113{
114	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _C));
115}
116
117__CTYPE_INLINE int isdigit(int c)
118{
119	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _N));
120}
121
122__CTYPE_INLINE int isgraph(int c)
123{
124	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N)));
125}
126
127__CTYPE_INLINE int islower(int c)
128{
129	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _L));
130}
131
132__CTYPE_INLINE int isprint(int c)
133{
134	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N|_B)));
135}
136
137__CTYPE_INLINE int ispunct(int c)
138{
139	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _P));
140}
141
142__CTYPE_INLINE int isspace(int c)
143{
144	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _S));
145}
146
147__CTYPE_INLINE int isupper(int c)
148{
149	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _U));
150}
151
152__CTYPE_INLINE int isxdigit(int c)
153{
154	return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_N|_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