safe-ctype.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* <ctype.h> replacement macros.
  2.    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  3.    Contributed by Zack Weinberg <zackw@stanford.edu>.
  4. This file is part of the libiberty library.
  5. Libiberty is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Library General Public
  7. License as published by the Free Software Foundation; either
  8. version 2 of the License, or (at your option) any later version.
  9. Libiberty is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13. You should have received a copy of the GNU Library General Public
  14. License along with libiberty; see the file COPYING.LIB.  If
  15. not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16. Boston, MA 02111-1307, USA.  */
  17. /* This is a compatible replacement of the standard C library's <ctype.h>
  18.    with the following properties:
  19.    - Implements all isxxx() macros required by C99.
  20.    - Also implements some character classes useful when
  21.      parsing C-like languages.
  22.    - Does not change behavior depending on the current locale.
  23.    - Behaves properly for all values in the range of a signed or
  24.      unsigned char.
  25.    To avoid conflicts, this header defines the isxxx functions in upper
  26.    case, e.g. ISALPHA not isalpha.  */
  27. #ifndef SAFE_CTYPE_H
  28. #define SAFE_CTYPE_H
  29. #ifdef isalpha
  30.  #error "safe-ctype.h and ctype.h may not be used simultaneously"
  31. #else
  32. /* Categories.  */
  33. enum {
  34.   /* In C99 */
  35.   _sch_isblank  = 0x0001, /* space t */
  36.   _sch_iscntrl  = 0x0002, /* nonprinting characters */
  37.   _sch_isdigit  = 0x0004, /* 0-9 */
  38.   _sch_islower  = 0x0008, /* a-z */
  39.   _sch_isprint  = 0x0010, /* any printing character including ' ' */
  40.   _sch_ispunct  = 0x0020, /* all punctuation */
  41.   _sch_isspace  = 0x0040, /* space t n r f v */
  42.   _sch_isupper  = 0x0080, /* A-Z */
  43.   _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */
  44.   /* Extra categories useful to cpplib.  */
  45.   _sch_isidst = 0x0200, /* A-Za-z_ */
  46.   _sch_isvsp    = 0x0400, /* n r */
  47.   _sch_isnvsp   = 0x0800, /* space t f v  */
  48.   /* Combinations of the above.  */
  49.   _sch_isalpha  = _sch_isupper|_sch_islower, /* A-Za-z */
  50.   _sch_isalnum  = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */
  51.   _sch_isidnum  = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */
  52.   _sch_isgraph  = _sch_isalnum|_sch_ispunct, /* isprint and not space */
  53.   _sch_iscppsp  = _sch_isvsp|_sch_isnvsp /* isspace +  */
  54. };
  55. /* Character classification.  */
  56. extern const unsigned short _sch_istable[256];
  57. #define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (bit))
  58. #define ISALPHA(c)  _sch_test(c, _sch_isalpha)
  59. #define ISALNUM(c)  _sch_test(c, _sch_isalnum)
  60. #define ISBLANK(c)  _sch_test(c, _sch_isblank)
  61. #define ISCNTRL(c)  _sch_test(c, _sch_iscntrl)
  62. #define ISDIGIT(c)  _sch_test(c, _sch_isdigit)
  63. #define ISGRAPH(c)  _sch_test(c, _sch_isgraph)
  64. #define ISLOWER(c)  _sch_test(c, _sch_islower)
  65. #define ISPRINT(c)  _sch_test(c, _sch_isprint)
  66. #define ISPUNCT(c)  _sch_test(c, _sch_ispunct)
  67. #define ISSPACE(c)  _sch_test(c, _sch_isspace)
  68. #define ISUPPER(c)  _sch_test(c, _sch_isupper)
  69. #define ISXDIGIT(c) _sch_test(c, _sch_isxdigit)
  70. #define ISIDNUM(c) _sch_test(c, _sch_isidnum)
  71. #define ISIDST(c) _sch_test(c, _sch_isidst)
  72. #define IS_VSPACE(c) _sch_test(c, _sch_isvsp)
  73. #define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp)
  74. #define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp)
  75. /* Character transformation.  */
  76. extern const unsigned char  _sch_toupper[256];
  77. extern const unsigned char  _sch_tolower[256];
  78. #define TOUPPER(c) _sch_toupper[(c) & 0xff]
  79. #define TOLOWER(c) _sch_tolower[(c) & 0xff]
  80. #endif /* no ctype.h */
  81. #endif /* SAFE_CTYPE_H */