aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2015-08-31 02:19:52 +0200
committerMattias Andrée <maandree@operamail.com>2015-08-31 02:19:52 +0200
commitc7b0dfe50773d615502e306a580dc2325834afdd (patch)
treef1642f88022e9e823239dde96b3270ecc691b32a /src
parentupdate todo: paging locking (diff)
downloadslibc-c7b0dfe50773d615502e306a580dc2325834afdd.tar.gz
slibc-c7b0dfe50773d615502e306a580dc2325834afdd.tar.bz2
slibc-c7b0dfe50773d615502e306a580dc2325834afdd.tar.xz
add ctype.h: add ASCII character type testers, that do not take locale
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src')
-rw-r--r--src/ctype.c268
1 files changed, 268 insertions, 0 deletions
diff --git a/src/ctype.c b/src/ctype.c
new file mode 100644
index 0000000..522a799
--- /dev/null
+++ b/src/ctype.c
@@ -0,0 +1,268 @@
+/**
+ * slibc — Yet another C library
+ * Copyright © 2015 Mattias Andrée (maandree@member.fsf.org)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <ctype.h>
+
+
+
+/**
+ * Check whether a character is an alphabetical
+ * character or a decimal digit.
+ *
+ * @param c The character.
+ * @return Whether the character is in
+ * ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ */
+int (isalnum)(int c)
+{
+ return isalnum(c);
+}
+
+
+/**
+ * Check whether a character is an alphabetical character.
+ *
+ * @param c The character.
+ * @return Whether the character is in
+ * ['A', 'Z'] or ['a', 'z'].
+ */
+int (isalpha)(int c)
+{
+ return isalpha(c);
+}
+
+
+/**
+ * Check whether a character is a regular blank space
+ * or a horizontal tabulation.
+ *
+ * @param c The character.
+ * @return Whether the character is a ' ' or a '\t'.
+ */
+int (isblank)(int c)
+{
+ return isblank(c);
+}
+
+
+/**
+ * Check whether a character is a non-printable
+ * ASCII character.
+ *
+ * @param c The character.
+ * @return Whether the character is lower than ' '.
+ */
+int (iscntrl)(int c)
+{
+ return iscntrl(c);
+}
+
+
+/**
+ * Check whether a character is a decimal digit.
+ *
+ * @param c The character.
+ * @return Whether the character is in ['0', '9'].
+ */
+int (isdigit)(int c)
+{
+ return isdigit(c);
+}
+
+
+/**
+ * Check whether a character is has a printable glyph.
+ *
+ * @param c The character.
+ * @return Whether the character is greater than ' '.
+ */
+int (isgraph)(int c)
+{
+ return isgraph(c);
+}
+
+
+/**
+ * Check whether a character is a lowercase
+ * alphabetical character.
+ *
+ * @param c The character.
+ * @return Whether the character is in ['a', 'z'].
+ */
+int (islower)(int c)
+{
+ return islower(c);
+}
+
+
+/**
+ * Check whether a character is has a printable glyph
+ * or a blank space.
+ *
+ * @param c The character.
+ * @return Whether the character is at least
+ * as great as ' '.
+ */
+int (isprint)(int c)
+{
+ return isprint(c);
+}
+
+
+/**
+ * Check whether a character is has a punctuation,
+ * that is, a printable character but a blank space,
+ * numerical or alphabetical.
+ *
+ * @param c The character.
+ * @return Whether the character is a punctuation.
+ */
+int (ispunct)(int c)
+{
+ return ispunct(c);
+}
+
+
+/**
+ * Check whether a character is a whitespace character.
+ *
+ * @param c The character.
+ * @return Whether the character is a ' ', '\f',
+ * '\n', '\r', '\t', or '\v'.
+ */
+int (isspace)(int c)
+{
+ return isspace(c);
+}
+
+
+/**
+ * Check whether a character is an uppercase
+ * alphabetical character.
+ *
+ * @param c The character.
+ * @return Whether the character is in ['A', 'Z'].
+ */
+int (isupper)(int c)
+{
+ return isupper(c);
+}
+
+
+/**
+ * Check whether a character is an ASCII
+ * hexadecimal digit. Both uppercase and
+ * lowercase is supported.
+ *
+ * @param c The character.
+ * @return Whether the character is in
+ * ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ */
+int (isxdigit)(int c)
+{
+ return isxdigit(c);
+}
+
+
+
+/**
+ * Convert a uppercase ASCII character to
+ * an lowercase ASCII character.
+ *
+ * The function's behaviour is unspecifed
+ * of the character is not alphabetical.
+ * You should consider running
+ * `(isupper(c) ? tolower(c) : c)` instead.
+ *
+ * @param c The character.
+ * @return The character in lowercase.
+ * Guaranteed to be unchanged if the
+ * character already is in lowercase.
+ */
+int (tolower)(int c)
+{
+ return tolower(c);
+}
+
+
+/**
+ * Convert a lowercase ASCII character to
+ * an uppercase ASCII character.
+ *
+ * The function's behaviour is unspecifed
+ * of the character is not alphabetical.
+ * You should consider running
+ * `(isupper(c) ? tolower(c) : c)` instead.
+ *
+ * @param c The character.
+ * @return The character in uppercase.
+ * Guaranteed to be unchanged if the
+ * character already is in lowercase.
+ */
+int (toupper)(int c)
+{
+ return toupper(c);
+}
+
+
+
+/**
+ * Check whether a character is an ASCII character.
+ *
+ * @param c The character
+ * @return - Whether the character is an ASCII character.
+ */
+int (isascii)(int c)
+{
+ return isascii(c);
+}
+
+
+/**
+ * Remove the 8:th bit from a character.
+ *
+ * Note that this does not make a proper character set
+ * convertion and the result is virtually arbitrary.
+ *
+ * @param c The character.
+ * @param c The character with the 8:th bit cleared.
+ */
+int (toascii)(int c)
+{
+ return c & 0x7F;
+}
+
+
+/**
+ * This function is identical to `tolower`.
+ * It is provided for backwards-compatibility with SVID.
+ */
+int _tolower(int c)
+{
+ return tolower(c);
+}
+
+
+/**
+ * This function is identical to `tolower`.
+ * It is provided for backwards-compatibility with SVID.
+ */
+int _toupper(int c)
+{
+ return toupper(c);
+}
+