From fd16c1cf58b0b1015e2d539a4e7a6d73b79c788f Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 16 Jan 2023 19:13:11 +0200 Subject: [PATCH] LibC: Add is*() functions to libc --- libc/Makefile | 1 + libc/ctype.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++ libc/include/ctype.h | 21 ++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 libc/ctype.cpp create mode 100644 libc/include/ctype.h diff --git a/libc/Makefile b/libc/Makefile index 437742b74..97da9536c 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -31,6 +31,7 @@ BUILDDIR=$(abspath build) FREEOBJS=\ $(ARCH_FREEOBJS) \ +ctype.o \ stdio/printf.o \ stdio/putchar.o \ stdio/puts.o \ diff --git a/libc/ctype.cpp b/libc/ctype.cpp new file mode 100644 index 000000000..db0964392 --- /dev/null +++ b/libc/ctype.cpp @@ -0,0 +1,66 @@ +#include + +int isalnum(int c) +{ + return isdigit(c) || isalpha(c); +} + +int isalpha(int c) +{ + return islower(c) || isupper(c); +} + +int isascii(int c) +{ + return c <= 0x7F; +} + +int isblank(int c) +{ + return c == ' ' || c == '\t'; +} + +int iscntrl(int c) +{ + return c < 32 || c == 0x7F; +} + +int isdigit(int c) +{ + return '0' <= c && c <= '9'; +} + +int isgraph(int c) +{ + return 0x21 <= c && c <= 0x7E; +} + +int islower(int c) +{ + return 'a' <= c && c <= 'z'; +} + +int isprint(int c) +{ + return isgraph(c) || c == ' '; +} + +int ispunct(int c) +{ + return isgraph(c) && !isalnum(c); +} + +int isspace(int c) +{ + return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; +} + +int isupper(int c) +{ + return 'A' <= c && c <= 'Z'; +} + +int isxdigit(int c) +{ + return isdigit(c) || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F'); +} diff --git a/libc/include/ctype.h b/libc/include/ctype.h new file mode 100644 index 000000000..d2672fae7 --- /dev/null +++ b/libc/include/ctype.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +__BEGIN_DECLS + +int isalnum(int); +int isalpha(int); +int isascii(int); +int isblank(int); +int iscntrl(int); +int isdigit(int); +int isgraph(int); +int islower(int); +int isprint(int); +int ispunct(int); +int isspace(int); +int isupper(int); +int isxdigit(int); + +__END_DECLS \ No newline at end of file