1cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/* 2cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * ctype.h 3cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 4cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * This assumes ISO 8859-1, being a reasonable superset of ASCII. 5cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 6cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 7cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#ifndef _CTYPE_H 8cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#define _CTYPE_H 9cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 10cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <klibc/extern.h> 11cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 12cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#ifndef __CTYPE_NO_INLINE 13cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project# define __ctype_inline static __inline__ 14cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#else 15cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project# define __ctype_inline 16cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#endif 17cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 18cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/* 19cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * This relies on the following definitions: 20e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * 21cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * cntrl = !print 224a0748be283a8c9efa02243c3e1716c49443a87cDima Zavin * alpha = upper|lower 23cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * graph = punct|alpha|digit 24e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * blank = '\t' || ' ' (per POSIX requirement) 25cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 26cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectenum { 27cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_upper = (1 << 0), 283e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi __ctype_lower = (1 << 1), 293e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi __ctype_digit = (1 << 2), 30cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_xdigit = (1 << 3), 31cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_space = (1 << 4), 32cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_print = (1 << 5), 33cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_punct = (1 << 6), 34cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project __ctype_cntrl = (1 << 7), 35cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project}; 36cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 373e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Triviextern const unsigned char __ctypes[]; 38cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 39cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project__ctype_inline int isalnum(int __c) 403e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi{ 413e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi return __ctypes[__c + 1] & (__ctype_upper | __ctype_lower | __ctype_digit); 42cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project} 43cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 44cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project__ctype_inline int isalpha(int __c) 45dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent{ 46dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent return __ctypes[__c + 1] & (__ctype_upper | __ctype_lower); 473e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi} 48cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 49617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman__ctype_inline int isascii(int __c) 503e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi{ 51cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project return !(__c & ~0x7f); 52cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project} 53cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 54cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project__ctype_inline int isblank(int __c) 553e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi{ 563e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi return (__c == '\t') || (__c == ' '); 573e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi} 583e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi 593e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi__ctype_inline int iscntrl(int __c) 603e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi{ 613e480fa067136253ae05faaba77f814f42cd56f0Jean-Michel Trivi return __ctypes[__c + 1] & __ctype_cntrl; 62cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project} 63cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 64cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project__ctype_inline int isdigit(int __c) 65cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project{ 66cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project return ((unsigned)__c - '0') <= 9; 67} 68 69__ctype_inline int isgraph(int __c) 70{ 71 return __ctypes[__c + 1] & 72 (__ctype_upper | __ctype_lower | __ctype_digit | __ctype_punct); 73} 74 75__ctype_inline int islower(int __c) 76{ 77 return __ctypes[__c + 1] & __ctype_lower; 78} 79 80__ctype_inline int isprint(int __c) 81{ 82 return __ctypes[__c + 1] & __ctype_print; 83} 84 85__ctype_inline int ispunct(int __c) 86{ 87 return __ctypes[__c + 1] & __ctype_punct; 88} 89 90__ctype_inline int isspace(int __c) 91{ 92 return __ctypes[__c + 1] & __ctype_space; 93} 94 95__ctype_inline int isupper(int __c) 96{ 97 return __ctypes[__c + 1] & __ctype_upper; 98} 99 100__ctype_inline int isxdigit(int __c) 101{ 102 return __ctypes[__c + 1] & __ctype_xdigit; 103} 104 105/* Note: this is decimal, not hex, to avoid accidental promotion to unsigned */ 106#define _toupper(__c) ((__c) & ~32) 107#define _tolower(__c) ((__c) | 32) 108 109__ctype_inline int toupper(int __c) 110{ 111 return islower(__c) ? _toupper(__c) : __c; 112} 113 114__ctype_inline int tolower(int __c) 115{ 116 return isupper(__c) ? _tolower(__c) : __c; 117} 118 119__extern char *skipspace(const char *p); 120__extern void chrreplace(char *source, char old, char new); 121 122#endif /* _CTYPE_H */ 123