View of xos/usr/lib/libc/ctype.c


XOS | Parent Directory | View | Download

/* Copyright (C) 2008  Emmanuel Varoquaux
 
   This file is part of XOS.
 
   This program 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
   (at your option) any later version.
 
   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>. */
 
#include "ctype.h"
 
#include <stdio.h>
 
/* classes de caracteres */
#define CC_ISUPPER 0001
#define CC_ISLOWER 0002
#define CC_ISCNTRL 0004
#define CC_ISDIGIT 0010
#define CC_ISSPACE 0020
#define CC_ISHEX   0040
#define CC_ISPUNCT 0100
#define CC_NOGRAPH 0200
#define CC_ISBLANK 0400
 
#define CC_ISALPHA  (CC_ISUPPER | CC_ISLOWER)
#define CC_ISALNUM  (CC_ISALPHA | CC_ISDIGIT)
#define CC_ISXDIGIT (CC_ISDIGIT | CC_ISHEX)
#define CC_ISGRAPH  (CC_ISALNUM | CC_ISPUNCT)
#define CC_ISPRINT  (CC_ISGRAPH | CC_NOGRAPH)
 
static const unsigned short _cc_table[257] = {
  0,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL | CC_ISSPACE | CC_ISBLANK,
  CC_ISCNTRL | CC_ISSPACE,
  CC_ISCNTRL | CC_ISSPACE,
  CC_ISCNTRL | CC_ISSPACE,
  CC_ISCNTRL | CC_ISSPACE,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISCNTRL,
  CC_ISSPACE | CC_NOGRAPH | CC_ISBLANK,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISDIGIT | CC_ISHEX,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER | CC_ISHEX,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISUPPER,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER | CC_ISHEX,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISLOWER,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISPUNCT,
  CC_ISCNTRL,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0
};
 
static const short _tolower_table[257] = {
  EOF,
  '\000',
  '\001',
  '\002',
  '\003',
  '\004',
  '\005',
  '\006',
  '\007',
  '\010',
  '\011',
  '\012',
  '\013',
  '\014',
  '\015',
  '\016',
  '\017',
  '\020',
  '\021',
  '\022',
  '\023',
  '\024',
  '\025',
  '\026',
  '\027',
  '\030',
  '\031',
  '\032',
  '\033',
  '\034',
  '\035',
  '\036',
  '\037',
  '\040',
  '!',
  '"',
  '#',
  '$',
  '%',
  '&',
  '\'',
  '(',
  ')',
  '*',
  '+',
  ',',
  '-',
  '.',
  '/',
  '0',
  '1',
  '2',
  '3',
  '4',
  '5',
  '6',
  '7',
  '8',
  '9',
  ':',
  ';',
  '<',
  '=',
  '>',
  '?',
  '@',
  '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',
  '[',
  '\\',
  ']',
  '^',
  '_',
  '`',
  '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',
  '{',
  '|',
  '}',
  '~',
  '\177',
  '\200',
  '\201',
  '\202',
  '\203',
  '\204',
  '\205',
  '\206',
  '\207',
  '\210',
  '\211',
  '\212',
  '\213',
  '\214',
  '\215',
  '\216',
  '\217',
  '\220',
  '\221',
  '\222',
  '\223',
  '\224',
  '\225',
  '\226',
  '\227',
  '\230',
  '\231',
  '\232',
  '\233',
  '\234',
  '\235',
  '\236',
  '\237',
  '\240',
  '\241',
  '\242',
  '\243',
  '\244',
  '\245',
  '\246',
  '\247',
  '\250',
  '\251',
  '\252',
  '\253',
  '\254',
  '\255',
  '\256',
  '\257',
  '\260',
  '\261',
  '\262',
  '\263',
  '\264',
  '\265',
  '\266',
  '\267',
  '\270',
  '\271',
  '\272',
  '\273',
  '\274',
  '\275',
  '\276',
  '\277',
  '\300',
  '\301',
  '\302',
  '\303',
  '\304',
  '\305',
  '\306',
  '\307',
  '\310',
  '\311',
  '\312',
  '\313',
  '\314',
  '\315',
  '\316',
  '\317',
  '\320',
  '\321',
  '\322',
  '\323',
  '\324',
  '\325',
  '\326',
  '\327',
  '\330',
  '\331',
  '\332',
  '\333',
  '\334',
  '\335',
  '\336',
  '\337',
  '\340',
  '\341',
  '\342',
  '\343',
  '\344',
  '\345',
  '\346',
  '\347',
  '\350',
  '\351',
  '\352',
  '\353',
  '\354',
  '\355',
  '\356',
  '\357',
  '\360',
  '\361',
  '\362',
  '\363',
  '\364',
  '\365',
  '\366',
  '\367',
  '\370',
  '\371',
  '\372',
  '\373',
  '\374',
  '\375',
  '\376',
  '\377'
};
 
static const short _toupper_table[257] = {
  EOF,
  '\000',
  '\001',
  '\002',
  '\003',
  '\004',
  '\005',
  '\006',
  '\007',
  '\010',
  '\011',
  '\012',
  '\013',
  '\014',
  '\015',
  '\016',
  '\017',
  '\020',
  '\021',
  '\022',
  '\023',
  '\024',
  '\025',
  '\026',
  '\027',
  '\030',
  '\031',
  '\032',
  '\033',
  '\034',
  '\035',
  '\036',
  '\037',
  '\040',
  '!',
  '"',
  '#',
  '$',
  '%',
  '&',
  '\'',
  '(',
  ')',
  '*',
  '+',
  ',',
  '-',
  '.',
  '/',
  '0',
  '1',
  '2',
  '3',
  '4',
  '5',
  '6',
  '7',
  '8',
  '9',
  ':',
  ';',
  '<',
  '=',
  '>',
  '?',
  '@',
  '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',
  '[',
  '\\',
  ']',
  '^',
  '_',
  '`',
  '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',
  '{',
  '|',
  '}',
  '~',
  '\177',
  '\200',
  '\201',
  '\202',
  '\203',
  '\204',
  '\205',
  '\206',
  '\207',
  '\210',
  '\211',
  '\212',
  '\213',
  '\214',
  '\215',
  '\216',
  '\217',
  '\220',
  '\221',
  '\222',
  '\223',
  '\224',
  '\225',
  '\226',
  '\227',
  '\230',
  '\231',
  '\232',
  '\233',
  '\234',
  '\235',
  '\236',
  '\237',
  '\240',
  '\241',
  '\242',
  '\243',
  '\244',
  '\245',
  '\246',
  '\247',
  '\250',
  '\251',
  '\252',
  '\253',
  '\254',
  '\255',
  '\256',
  '\257',
  '\260',
  '\261',
  '\262',
  '\263',
  '\264',
  '\265',
  '\266',
  '\267',
  '\270',
  '\271',
  '\272',
  '\273',
  '\274',
  '\275',
  '\276',
  '\277',
  '\300',
  '\301',
  '\302',
  '\303',
  '\304',
  '\305',
  '\306',
  '\307',
  '\310',
  '\311',
  '\312',
  '\313',
  '\314',
  '\315',
  '\316',
  '\317',
  '\320',
  '\321',
  '\322',
  '\323',
  '\324',
  '\325',
  '\326',
  '\327',
  '\330',
  '\331',
  '\332',
  '\333',
  '\334',
  '\335',
  '\336',
  '\337',
  '\340',
  '\341',
  '\342',
  '\343',
  '\344',
  '\345',
  '\346',
  '\347',
  '\350',
  '\351',
  '\352',
  '\353',
  '\354',
  '\355',
  '\356',
  '\357',
  '\360',
  '\361',
  '\362',
  '\363',
  '\364',
  '\365',
  '\366',
  '\367',
  '\370',
  '\371',
  '\372',
  '\373',
  '\374',
  '\375',
  '\376',
  '\377'
};
 
static const unsigned short *cc_table = _cc_table + 1;
static const short *tolower_table = _tolower_table + 1;
static const short *toupper_table = _toupper_table + 1;
 
int __attribute__ ((weak, visibility ("default"))) isalnum(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISALNUM;
}
typeof (isalnum) __isalnum __attribute__ ((alias ("isalnum")));
 
int __attribute__ ((weak, visibility ("default"))) isalpha(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISALPHA;
}
typeof (isalpha) __isalpha __attribute__ ((alias ("isalpha")));
 
int __attribute__ ((weak, visibility ("default"))) isascii(int c)
{
  return (c & (1 << 7)) == 0;
}
typeof (isascii) __isascii __attribute__ ((alias ("isascii")));
 
int __attribute__ ((weak, visibility ("default"))) isblank(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISBLANK;
}
typeof (isblank) __isblank __attribute__ ((alias ("isblank")));
 
int __attribute__ ((weak, visibility ("default"))) iscntrl(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISCNTRL;
}
typeof (iscntrl) __iscntrl __attribute__ ((alias ("iscntrl")));
 
int __attribute__ ((weak, visibility ("default"))) isdigit(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISDIGIT;
}
typeof (isdigit) __isdigit __attribute__ ((alias ("isdigit")));
 
int __attribute__ ((weak, visibility ("default"))) isgraph(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISGRAPH;
}
typeof (isgraph) __isgraph __attribute__ ((alias ("isgraph")));
 
int __attribute__ ((weak, visibility ("default"))) islower(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISLOWER;
}
typeof (islower) __islower __attribute__ ((alias ("islower")));
 
int __attribute__ ((weak, visibility ("default"))) isprint(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISPRINT;
}
typeof (isprint) __isprint __attribute__ ((alias ("isprint")));
 
int __attribute__ ((weak, visibility ("default"))) ispunct(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISPUNCT;
}
typeof (ispunct) __ispunct __attribute__ ((alias ("ispunct")));
 
int __attribute__ ((weak, visibility ("default"))) isspace(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISSPACE;
}
typeof (isspace) __isspace __attribute__ ((alias ("isspace")));
 
int __attribute__ ((weak, visibility ("default"))) isupper(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISUPPER;
}
typeof (isupper) __isupper __attribute__ ((alias ("isupper")));
 
int __attribute__ ((weak, visibility ("default"))) isxdigit(int c)
{
  return cc_table[c == EOF ? -1 : c] & CC_ISHEX;
}
typeof (isxdigit) __isxdigit __attribute__ ((alias ("isxdigit")));
 
int __attribute__ ((weak, visibility ("default"))) toascii(int c)
{
  return c & 0x7f;
}
typeof (toascii) __toascii __attribute__ ((alias ("toascii")));
 
int __attribute__ ((weak, visibility ("default"))) tolower(int c)
{
  return c == EOF ? tolower_table[-1] : (unsigned char)tolower_table[c];
}
typeof (tolower) __tolower __attribute__ ((alias ("tolower")));
 
int __attribute__ ((weak, visibility ("default"))) toupper(int c)
{
  return c == EOF ? toupper_table[-1] : (unsigned char)toupper_table[c];
}
typeof (toupper) __toupper __attribute__ ((alias ("toupper")));