libc: Add ctype.h

This commit is contained in:
apio 2022-10-14 21:12:26 +02:00
parent 91d76a2ee4
commit eb67ab113e
2 changed files with 139 additions and 0 deletions

58
libs/libc/include/ctype.h Normal file
View File

@ -0,0 +1,58 @@
#ifndef _CTYPE_H
#define _CTYPE_H
#ifdef __cplusplus
extern "C"
{
#endif
/* Is this character alphanumeric? */
int isalnum(int c);
/* Is this character a letter? */
int isalpha(int c);
/* Is this character part of ASCII? */
int isascii(int c);
/* Is this character a blank character (space or tab)? */
int isblank(int c);
/* Is this character a control character? */
int iscntrl(int c);
/* Is this character a digit? */
int isdigit(int c);
/* Is this character any printable character except space? */
int isgraph(int c);
/* Is this character a lowercase letter? */
int islower(int c);
/* Is this character any printable character (including space)? */
int isprint(int c);
/* Is this character any printable character which is not a space or an alphanumeric character? */
int ispunct(int c);
/* Is this character any space character (space, form feed, newline, carriage return, tab, vertical tab)? */
int isspace(int c);
/* Is this character an uppercase letter? */
int isupper(int c);
/* Is this character a hexadecimal digit (0-9, a-f, A-F)? */
int isxdigit(int c);
/* Returns the lowercase form of the specified character. */
int tolower(int c);
/* Returns the uppercase form of the specified character. */
int toupper(int c);
#ifdef __cplusplus
}
#endif
#endif

81
libs/libc/src/ctype.cpp Normal file
View File

@ -0,0 +1,81 @@
#include <ctype.h>
extern "C"
{
int isalnum(int c)
{
return isalpha(c) || isdigit(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 (unsigned int)c < 0x20 || c == 0x7f;
}
int isdigit(int c)
{
return c >= '0' && c < ':';
}
int isgraph(int c)
{
return (unsigned int)c - 0x21 < 0x5e;
}
int islower(int c)
{
return c >= 'a' && c < '{';
}
int isprint(int c)
{
return (unsigned int)c - 0x20 < 0x5f;
}
int ispunct(int c)
{
return isgraph(c) && !isalnum(c);
}
int isspace(int c)
{
return c == ' ' || (unsigned int)c - '\t' < 5;
}
int isupper(int c)
{
return c >= 'A' && c < '[';
}
int isxdigit(int c)
{
return isdigit(c) || ((unsigned int)c | 32) - 'a' < 6;
}
int tolower(int c)
{
if (isupper(c)) return c | 32;
return c;
}
int toupper(int c)
{
if (islower(c)) return c & 0x5f;
return c;
}
}