summaryrefslogtreecommitdiff
path: root/libc/include/ctype.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc/include/ctype.h')
-rw-r--r--libc/include/ctype.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/libc/include/ctype.h b/libc/include/ctype.h
new file mode 100644
index 0000000..038659f
--- /dev/null
+++ b/libc/include/ctype.h
@@ -0,0 +1,37 @@
+/*
+ * ctype.h Character classification and conversion
+ */
+
+#ifndef __CTYPE_H
+#define __CTYPE_H
+
+extern unsigned char _ctype[];
+
+#define __CT_d 0x01 /* numeric digit */
+#define __CT_u 0x02 /* upper case */
+#define __CT_l 0x04 /* lower case */
+#define __CT_c 0x08 /* control character */
+#define __CT_s 0x10 /* whitespace */
+#define __CT_p 0x20 /* punctuation */
+#define __CT_x 0x40 /* hexadecimal */
+
+#define toupper(c) (islower(c) ? (c)^0x20 : (c))
+#define tolower(c) (isupper(c) ? (c)^0x20 : (c))
+#define _toupper(c) ((c)^0x20)
+#define _tolower(c) ((c)^0x20)
+#define toascii(c) ((c)&0x7F)
+
+#define isalnum(c) (_ctype[(int) c]&(__CT_u|__CT_l|__CT_d))
+#define isalpha(c) (_ctype[(int) c]&(__CT_u|__CT_l))
+#define isascii(c) !((c)&~0x7F)
+#define iscntrl(c) (_ctype[(int) c]&__CT_c)
+#define isdigit(c) (_ctype[(int) c]&__CT_d)
+#define isgraph(c) !(_ctype[(int) c]&(__CT_c|__CT_s))
+#define islower(c) (_ctype[(int) c]&__CT_l)
+#define isprint(c) !(_ctype[(int) c]&__CT_c)
+#define ispunct(c) (_ctype[(int) c]&__CT_p)
+#define isspace(c) (_ctype[(int) c]&__CT_s)
+#define isupper(c) (_ctype[(int) c]&__CT_u)
+#define isxdigit(c) (_ctype[(int) c]&__CT_x)
+
+#endif /* __CTYPE_H */