//----------------------------------------------------------------------------// // GNU GPL OS/K // // // // Desc: Character types // // // // // // Copyright © 2018-2019 The OS/K Team // // // // This file is part of OS/K. // // // // OS/K is free software: you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // // the Free Software Foundation, either version 3 of the License, or // // any later version. // // // // OS/K 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 General Public License for more details. // // // // You should have received a copy of the GNU General Public License // // along with OS/K. If not, see . // //----------------------------------------------------------------------------// #include #define SH(x) (1 << x) enum { CT = SH(0), // control PR = SH(1), // printing GR = SH(2)|PR, // graphical DX = SH(3)|GR, // hex digit DG = SH(4)|DX, // decimal digit SP = SH(5), // space BK = SH(6)|SP, // blank PT = SH(7)|GR, // punctuation AL = SH(8)|GR, // alpha UP = SH(9)|AL, // upper alpha LW = SH(10)|AL // lower alpha }; int __ctype[] = { // ASCII ctype table /* 0 */ CT, CT, CT, CT, CT, CT, CT, CT, CT, BK|CT, /* 10 */ SP|CT, SP|CT, SP|CT, SP|CT, CT, CT, CT, CT, CT, CT, /* 20 */ CT, CT, CT, CT, CT, CT, CT, CT, CT, CT, /* 30 */ CT, CT, BK|PR, PT, PT, PT, PT, PT, PT, PT, /* 40 */ PT, PT, PT, PT, PT, PT, PT, PT, DG, DG, /* 50 */ DG, DG, DG, DG, DG, DG, DG, DG, PT, PT, /* 60 */ PT, PT, PT, PT, PT, UP|DX, UP|DX, UP|DX, UP|DX, UP|DX, /* 70 */ UP|DX, UP, UP, UP, UP, UP, UP, UP, UP, UP, /* 80 */ UP, UP, UP, UP, UP, UP, UP, UP, UP, UP, /* 90 */ UP, PT, PT, PT, PT, PT, PT, LW|DX, LW|DX, LW|DX, /* 100 */ LW|DX, LW|DX, LW|DX, LW, LW, LW, LW, LW, LW, LW, /* 110 */ LW, LW, LW, LW, LW, LW, LW, LW, LW, LW, /* 120 */ LW, LW, LW, PT, PT, PT, PT, CT, }; static_assert(sizeof(__ctype) == 128 * sizeof(int), "ctype table - invalid size"); int tolower(int c) { if (isupper(c)) return c + ('a' - 'A'); return c; } int toupper(int c) { if (islower(c)) return c - ('a' - 'A'); return c; }