]> git.ipfire.org Git - thirdparty/bash.git/blame - include/chartypes.h
Bash-4.3 patch 7
[thirdparty/bash.git] / include / chartypes.h
CommitLineData
f73dda09
JA
1/* chartypes.h -- extend ctype.h */
2
3/* Copyright (C) 2001 Free Software Foundation, Inc.
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
3185942a
JA
7 Bash is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
f73dda09 11
3185942a
JA
12 Bash is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
f73dda09 16
3185942a
JA
17 You should have received a copy of the GNU General Public License
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.
19*/
f73dda09
JA
20
21#ifndef _SH_CHARTYPES_H
22#define _SH_CHARTYPES_H
23
24#include <ctype.h>
25
26/* Jim Meyering writes:
27
28 "... Some ctype macros are valid only for character codes that
29 isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
30 using /bin/cc or gcc but without giving an ansi option). So, all
31 ctype uses should be through macros like ISPRINT... If
32 STDC_HEADERS is defined, then autoconf has verified that the ctype
33 macros don't need to be guarded with references to isascii. ...
34 Defining IN_CTYPE_DOMAIN to 1 should let any compiler worth its salt
35 eliminate the && through constant folding."
36 Solaris defines some of these symbols so we must undefine them first. */
37
ac50fbac 38#if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII)
f73dda09
JA
39# define IN_CTYPE_DOMAIN(c) 1
40#else
41# define IN_CTYPE_DOMAIN(c) isascii(c)
42#endif
43
44#if !defined (isspace) && !defined (HAVE_ISSPACE)
45# define isspace(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\f')
46#endif
47
48#if !defined (isprint) && !defined (HAVE_ISPRINT)
49# define isprint(c) (isalpha(c) || isdigit(c) || ispunct(c))
50#endif
51
52#if defined (isblank) || defined (HAVE_ISBLANK)
53# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
54#else
55# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
56#endif
57
58#if defined (isgraph) || defined (HAVE_ISGRAPH)
59# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
60#else
61# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
62#endif
63
64#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT)
65# define isxdigit(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
66#endif
67
68#undef ISPRINT
69
70#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
71#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
72#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
73#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
74#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
75#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
76#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
77#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
78#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
79#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
80
81#define ISLETTER(c) (ISALPHA(c))
82
83#define DIGIT(c) ((c) >= '0' && (c) <= '9')
84
7117c2d2
JA
85#define ISWORD(c) (ISLETTER(c) || DIGIT(c) || ((c) == '_'))
86
f73dda09
JA
87#define HEXVALUE(c) \
88 (((c) >= 'a' && (c) <= 'f') \
89 ? (c)-'a'+10 \
90 : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
91
92#ifndef ISOCTAL
93# define ISOCTAL(c) ((c) >= '0' && (c) <= '7')
94#endif
95#define OCTVALUE(c) ((c) - '0')
96
97#define TODIGIT(c) ((c) - '0')
98#define TOCHAR(c) ((c) + '0')
99
100#define TOLOWER(c) (ISUPPER(c) ? tolower(c) : (c))
101#define TOUPPER(c) (ISLOWER(c) ? toupper(c) : (c))
102
7117c2d2
JA
103#ifndef TOCTRL
104 /* letter to control char -- ASCII. The TOUPPER is in there so \ce and
105 \cE will map to the same character in $'...' expansions. */
106# define TOCTRL(x) (TOUPPER(x) & 037)
f73dda09 107#endif
7117c2d2
JA
108#ifndef UNCTRL
109 /* control char to letter -- ASCII */
495aee44 110# define UNCTRL(x) (TOUPPER(x) ^ 0x40)
f73dda09
JA
111#endif
112
113#endif /* _SH_CHARTYPES_H */