diff --git a/libmaxsi/Makefile b/libmaxsi/Makefile index 5debe31e..c3dd4b43 100644 --- a/libmaxsi/Makefile +++ b/libmaxsi/Makefile @@ -29,11 +29,13 @@ ASFLAGS=$(CPUASFLAGS) NASMFLAGS=$(CPUNASMFLAGS) COBJS=\ +c/ctype.o \ c/file.o \ c/fdio.o \ c/stdio.o \ CHEADERS=\ +c/h/ctype.h \ c/h/unistd.h \ c/h/stdlib.h \ c/h/wchar.h \ diff --git a/libmaxsi/c/ctype.c b/libmaxsi/c/ctype.c new file mode 100644 index 00000000..a639ac9e --- /dev/null +++ b/libmaxsi/c/ctype.c @@ -0,0 +1,103 @@ +/****************************************************************************** + + COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011. + + This file is part of LibMaxsi. + + LibMaxsi is free software: you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + LibMaxsi 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with LibMaxsi. If not, see . + + ctype.c + Character types. + +******************************************************************************/ + +#include + +// TODO: Support other locales than ASCII. + +int isalnum(int c) +{ + return isalpha(c) || isdigit(c); +} + +int isalpha(int c) +{ + return isupper(c) || islower(c); +} + +int isblank(int c) +{ + return c == ' ' || c == '\t'; +} + +int iscntrl(int c) +{ + return 0 <= c && c < 32; +} + +int isdigit(int c) +{ + return '0' <= c && c <= '9'; +} + +int isgraph(int c) +{ + return '!' <= c && c <= '~'; +} + +int islower(int c) +{ + return 'a' <= c && c <= 'z'; +} + +int isprint(int c) +{ + return isgraph(c) || c == ' '; +} + +int ispunct(int c) +{ + return isprint(c) && c != ' ' && !isalnum(c); +} + +int isspace(int c) +{ + return c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' || c == ' '; +} + +int isupper(int c) +{ + return 'A' <= c && c <= 'Z'; +} + +int isxdigit(int c) +{ + if ( isdigit(c) ) { return 1; } + if ( 'a' <= c && c <= 'f' ) { return 1; } + if ( 'A' <= c && c <= 'F' ) { return 1; } + return 0; +} + +int tolower(int c) +{ + if ( 'A' <= c && c <= 'Z' ) { return 'a' + c - 'A'; } + return c; +} + +int toupper(int c) +{ + if ( 'a' <= c && c <= 'z' ) { return 'A' + c - 'a'; } + return c; +} + diff --git a/libmaxsi/c/hsrc/ctype.h b/libmaxsi/c/hsrc/ctype.h new file mode 100644 index 00000000..619db406 --- /dev/null +++ b/libmaxsi/c/hsrc/ctype.h @@ -0,0 +1,53 @@ +/****************************************************************************** + + COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011. + + This file is part of LibMaxsi. + + LibMaxsi is free software: you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + LibMaxsi 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with LibMaxsi. If not, see . + + ctype.h + Character types. + +******************************************************************************/ + +/* TODO: POSIX-1.2008 compliance is only partial */ + +#ifndef _CTYPE_H +#define _CTYPE_H 1 + +#include + +__BEGIN_DECLS + +/* TODO: Declare locale_t and the *_t functions here */ +int isalnum(int c); +int isalpha(int c); +int isblank(int c); +int iscntrl(int c); +int isdigit(int c); +int isgraph(int c); +int islower(int c); +int isprint(int c); +int ispunct(int c); +int isspace(int c); +int isupper(int c); +int isxdigit(int c); +int tolower(int c); +int toupper(int c); + +__END_DECLS + +#endif +