libc

A portable C Library
Log | Files | Refs | README

commit 2ebcce134c08c23dec91756db5d025b7b499c80d
parent be1f980821cd86c02ce64e89479ce2e9bde34d79
Author: zerous Naveen Narayanan <zerous@nocebo.space>
Date:   Sun, 17 Nov 2019 16:43:30 +0100

Add ctype.h and obligatory functions

Diffstat:
Actype.h | 38++++++++++++++++++++++++++++++++++++++
Aisalnum.c | 7+++++++
Aisalpha.c | 7+++++++
Aiscntrl.c | 7+++++++
Aisdigit.c | 7+++++++
Aisgraph.c | 7+++++++
Aislower.c | 7+++++++
Aisprint.c | 7+++++++
Aispunct.c | 7+++++++
Aisspace.c | 7+++++++
Aisupper.c | 7+++++++
Aisxdigit.c | 7+++++++
Atolower.c | 7+++++++
Atoupper.c | 7+++++++
Axctype.c | 33+++++++++++++++++++++++++++++++++
Axtolower.c | 44++++++++++++++++++++++++++++++++++++++++++++
Axtoupper.c | 44++++++++++++++++++++++++++++++++++++++++++++
17 files changed, 250 insertions(+), 0 deletions(-)

diff --git a/ctype.h b/ctype.h @@ -0,0 +1,38 @@ +#ifndef _CTYPE +#define _CTYPE + +#define _XA 0x200 +#define _XS 0x100 +#define _BB 0x80 +#define _CN 0x40 +#define _DI 0x20 +#define _LO 0x10 +#define _PU 0x08 +#define _SP 0x04 +#define _UP 0x02 +#define _XD 0x01 + +extern const short *_Ctype; +extern const short *_Tolower; +extern const short *_Toupper; + +int isalnum(int), isalpha(int), iscntrl(int), isdigit(int); +int isgraph(int), islower(int), isprint(int), ispunct(int); +int isspace(int), isupper(int), isxdigit(int); +int tolower(int), toupper(int); + +#define isalnum(c) (_Ctype[(int) (c)] & (_DI|_LO|_UP|_XA)) +#define isalpha(c) (_Ctype[(int) (c)] & (_LO|_UP|_XA)) +#define iscntrl(c) (_Ctype[(int) (c)] & (_BB|_CN)) +#define isdigit(c) (_Ctype[(int) (c)] & _DI) +#define isgraph(c) (_Ctype[(int) (c)] & (_DI|_LO|_PU|_UP|_XA)) +#define islower(c) (_Ctype[(int) (c)] & _LO) +#define isprint(c) \ + (_Ctype[(int) (c)] & (_DI|_LO|_PU|_SP|_UP|_XA)) +#define ispunct(c) (_Ctype[(int) (c)] & _PU) +#define isspace(c) (_Ctype[(int) (c)] & (_CN|_SP|_XS)) +#define isupper(c) (_Ctype[(int) (c)] & _UP) +#define isxdigit(c) (_Ctype[(int) (c)] & _XD) +#define tolower(c) _Tolower[(int) (c)] +#define toupper(c) _Toupper[(int) (c)] +#endif diff --git a/isalnum.c b/isalnum.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isalnum)(int c) +{ + return (_Ctype[c] & (_DI|_LO|_UP|_XA)); +} diff --git a/isalpha.c b/isalpha.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isalpha)(int c) +{ + return (_Ctype[c] & (_LO|_UP|_XA)); +} diff --git a/iscntrl.c b/iscntrl.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(iscntrl)(int c) +{ + return (_Ctype[c] & (_BB|_CN)); +} diff --git a/isdigit.c b/isdigit.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isdigit)(int c) +{ + return (_Ctype[c] & _DI); +} diff --git a/isgraph.c b/isgraph.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isgraph)(int c) +{ + return (_Ctype[c] & (_DI|_LO|_PU|_UP|_XA)); +} diff --git a/islower.c b/islower.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(islower)(int c) +{ + return (_Ctype[c] & _LO); +} diff --git a/isprint.c b/isprint.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isprint)(int c) +{ + return (_Ctype[c] & (_DI|_LO|_PU|_SP|_UP|_XA)); +} diff --git a/ispunct.c b/ispunct.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(ispunct)(int c) +{ + return (_Ctype[c] & _PU); +} diff --git a/isspace.c b/isspace.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isspace)(int c) +{ + return (_Ctype[c] & (_CN|_SP|_XS)); +} diff --git a/isupper.c b/isupper.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isupper)(int c) +{ + return (_Ctype[c] & _UP); +} diff --git a/isxdigit.c b/isxdigit.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(isxdigit)(int c) +{ + return (_Ctype[c] & _XD); +} diff --git a/tolower.c b/tolower.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(tolower)(int c) +{ + return (_Tolower[c]); +} diff --git a/toupper.c b/toupper.c @@ -0,0 +1,7 @@ +#include "ctype.h" + +int +(toupper)(int c) +{ + return (_Toupper[c]); +} diff --git a/xctype.c b/xctype.c @@ -0,0 +1,33 @@ +#include <limits.h> +#include <stdio.h> + +#include "ctype.h" + +#if EOF != -1 || UCHAR_MAX != 255 +#error WRONG CTYPE TABLE +#endif + +#define XDI (_DI|_XD) +#define XLO (_LO|_XD) +#define XUP (_UP|_XD) + +static const short ctyp_tab[257] = {0, +_BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, +_BB, _CN, _CN, _CN, _CN, _CN, _BB, _BB, +_BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, +_BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, +_SP, _PU, _PU, _PU, _PU, _PU, _PU, _PU, +_PU, _PU, _PU, _PU, _PU, _PU, _PU, _PU, +XDI, XDI, XDI, XDI, XDI, XDI, XDI, XDI, +XDI, XDI, _PU, _PU, _PU, _PU, _PU, _PU, +_PU, XUP, XUP, XUP, XUP, XUP, XUP, XUP, +_UP, _UP, _UP, _UP, _UP, _UP, _UP, _UP, +_UP, _UP, _UP, _UP, _UP, _UP, _UP, _UP, +_UP, _UP, _UP, _PU, _PU, _PU, _PU, _PU, +_PU, XLO, XLO, XLO, XLO, XLO, XLO, _LO, +_LO, _LO, _LO, _LO, _LO, _LO, _LO, _LO, +_LO, _LO, _LO, _LO, _LO, _LO, _LO, _LO, +_LO, _LO, _LO, _PU, _PU, _PU, _PU, _BB, +}; + +const short *_Ctype = &ctyp_tab[1]; diff --git a/xtolower.c b/xtolower.c @@ -0,0 +1,44 @@ +#include <limits.h> +#include <stdio.h> + +#include "ctype.h" + +#if EOF != -1 || UCHAR_MAX != 255 +#error WRONG TOLOWER TABLE +#endif + +static const short tolow_tab[257] = {EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; + +const short *_Tolower = &tolow_tab[1]; diff --git a/xtoupper.c b/xtoupper.c @@ -0,0 +1,44 @@ +#include <limits.h> +#include <stdio.h> + +#include "ctype.h" + +#if EOF != -1 || UCHAR_MAX != 255 +#error WRONG TOUPPER TABLE +#endif + +static const short toup_tab[257] = {EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; + +const short *_Toupper = &toup_tab[1];