scc

simple C compiler
git clone git://git.2f30.org/scc
Log | Files | Refs | README | LICENSE

commit 88da94f56db2db1c405c2f80a4fed7e961b54f78
parent b3b28414fd4050514ac583ba72060574d74a1bab
Author: Quentin Rameau <quinq@fifth.space>
Date:   Fri, 17 Feb 2017 17:50:25 +0100

[libc] Implement ctype function-style

Diffstat:
Mlibc/src/ctype.c | 93++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 92 insertions(+), 1 deletion(-)

diff --git a/libc/src/ctype.c b/libc/src/ctype.c @@ -1,6 +1,7 @@ - #include <ctype.h> +#ifdef __USE_MACROS + unsigned char _ctype[255] = { _C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ _C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ @@ -19,3 +20,93 @@ unsigned char _ctype[255] = { _L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ _L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ }; + +#else + +int +isblank(int c) +{ + return (c == ' ') || (c == '\t'); +} + +int +iscntrl(int c) +{ + return (unsigned)c < ' ' || c == 0x7f; +} + +int +isdigit(int c) +{ + return (unsigned)c - '0' < 10; +} + +int +islower(int c) +{ + return (unsigned)c - 'a' < 26; +} + +int +isupper(int c) +{ + return (unsigned)c - 'A' < 26; +} + +int +isprint(int c) +{ + return (unsigned)c - ' ' < 95; +} + +int +isspace(int c) +{ + return (c == ' ') || ((unsigned)c - '\t' < 5); +} + +int +isxdigit(int c) +{ + return isdigit(c) || + ((unsigned)c - 'a' < 6) || + ((unsigned)c - 'A' < 6); +} + +int +isgraph(int c) +{ + return isprint(c) && c != ' '; +} + +int +isalpha(int c) +{ + return islower(c) || isupper(c); +} + +int +isalnum(int c) +{ + return isalpha(c) || isdigit(c); +} + +int +ispunct(int c) +{ + return isprint(c) && !isspace(c) && !isalnum(c); +} + +int +tolower(int c) +{ + return (isupper(c) ? (unsigned)c + ' ' : c); +} + +int +toupper(int c) +{ + return (islower(c) ? (unsigned)c - ' ' : c); +} + +#endif // __USE_MACROS