File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srclib / c-ctype.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:57:48 2012 UTC (12 years, 4 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_13_1, HEAD
libiconv

    1: /* Character handling in C locale.
    2: 
    3:    Copyright 2000-2003, 2006 Free Software Foundation, Inc.
    4: 
    5: This program is free software; you can redistribute it and/or modify
    6: it under the terms of the GNU General Public License as published by
    7: the Free Software Foundation; either version 3 of the License, or
    8: (at your option) any later version.
    9: 
   10: This program is distributed in the hope that it will be useful,
   11: but WITHOUT ANY WARRANTY; without even the implied warranty of
   12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13: GNU General Public License for more details.
   14: 
   15: You should have received a copy of the GNU General Public License
   16: along with this program; if not, write to the Free Software Foundation,
   17: Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
   18: 
   19: #include <config.h>
   20: 
   21: /* Specification.  */
   22: #define NO_C_CTYPE_MACROS
   23: #include "c-ctype.h"
   24: 
   25: /* The function isascii is not locale dependent. Its use in EBCDIC is
   26:    questionable. */
   27: bool
   28: c_isascii (int c)
   29: {
   30:   return (c >= 0x00 && c <= 0x7f);
   31: }
   32: 
   33: bool
   34: c_isalnum (int c)
   35: {
   36: #if C_CTYPE_CONSECUTIVE_DIGITS \
   37:     && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
   38: #if C_CTYPE_ASCII
   39:   return ((c >= '0' && c <= '9')
   40:           || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
   41: #else
   42:   return ((c >= '0' && c <= '9')
   43:           || (c >= 'A' && c <= 'Z')
   44:           || (c >= 'a' && c <= 'z'));
   45: #endif
   46: #else
   47:   switch (c)
   48:     {
   49:     case '0': case '1': case '2': case '3': case '4': case '5':
   50:     case '6': case '7': case '8': case '9':
   51:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
   52:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
   53:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
   54:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
   55:     case 'Y': case 'Z':
   56:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
   57:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
   58:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
   59:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
   60:     case 'y': case 'z':
   61:       return 1;
   62:     default:
   63:       return 0;
   64:     }
   65: #endif
   66: }
   67: 
   68: bool
   69: c_isalpha (int c)
   70: {
   71: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
   72: #if C_CTYPE_ASCII
   73:   return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
   74: #else
   75:   return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
   76: #endif
   77: #else
   78:   switch (c)
   79:     {
   80:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
   81:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
   82:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
   83:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
   84:     case 'Y': case 'Z':
   85:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
   86:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
   87:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
   88:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
   89:     case 'y': case 'z':
   90:       return 1;
   91:     default:
   92:       return 0;
   93:     }
   94: #endif
   95: }
   96: 
   97: bool
   98: c_isblank (int c)
   99: {
  100:   return (c == ' ' || c == '\t');
  101: }
  102: 
  103: bool
  104: c_iscntrl (int c)
  105: {
  106: #if C_CTYPE_ASCII
  107:   return ((c & ~0x1f) == 0 || c == 0x7f);
  108: #else
  109:   switch (c)
  110:     {
  111:     case ' ': case '!': case '"': case '#': case '$': case '%':
  112:     case '&': case '\'': case '(': case ')': case '*': case '+':
  113:     case ',': case '-': case '.': case '/':
  114:     case '0': case '1': case '2': case '3': case '4': case '5':
  115:     case '6': case '7': case '8': case '9':
  116:     case ':': case ';': case '<': case '=': case '>': case '?':
  117:     case '@':
  118:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  119:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
  120:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
  121:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
  122:     case 'Y': case 'Z':
  123:     case '[': case '\\': case ']': case '^': case '_': case '`':
  124:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  125:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  126:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  127:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  128:     case 'y': case 'z':
  129:     case '{': case '|': case '}': case '~':
  130:       return 0;
  131:     default:
  132:       return 1;
  133:     }
  134: #endif
  135: }
  136: 
  137: bool
  138: c_isdigit (int c)
  139: {
  140: #if C_CTYPE_CONSECUTIVE_DIGITS
  141:   return (c >= '0' && c <= '9');
  142: #else
  143:   switch (c)
  144:     {
  145:     case '0': case '1': case '2': case '3': case '4': case '5':
  146:     case '6': case '7': case '8': case '9':
  147:       return 1;
  148:     default:
  149:       return 0;
  150:     }
  151: #endif
  152: }
  153: 
  154: bool
  155: c_islower (int c)
  156: {
  157: #if C_CTYPE_CONSECUTIVE_LOWERCASE
  158:   return (c >= 'a' && c <= 'z');
  159: #else
  160:   switch (c)
  161:     {
  162:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  163:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  164:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  165:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  166:     case 'y': case 'z':
  167:       return 1;
  168:     default:
  169:       return 0;
  170:     }
  171: #endif
  172: }
  173: 
  174: bool
  175: c_isgraph (int c)
  176: {
  177: #if C_CTYPE_ASCII
  178:   return (c >= '!' && c <= '~');
  179: #else
  180:   switch (c)
  181:     {
  182:     case '!': case '"': case '#': case '$': case '%': case '&':
  183:     case '\'': case '(': case ')': case '*': case '+': case ',':
  184:     case '-': case '.': case '/':
  185:     case '0': case '1': case '2': case '3': case '4': case '5':
  186:     case '6': case '7': case '8': case '9':
  187:     case ':': case ';': case '<': case '=': case '>': case '?':
  188:     case '@':
  189:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  190:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
  191:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
  192:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
  193:     case 'Y': case 'Z':
  194:     case '[': case '\\': case ']': case '^': case '_': case '`':
  195:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  196:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  197:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  198:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  199:     case 'y': case 'z':
  200:     case '{': case '|': case '}': case '~':
  201:       return 1;
  202:     default:
  203:       return 0;
  204:     }
  205: #endif
  206: }
  207: 
  208: bool
  209: c_isprint (int c)
  210: {
  211: #if C_CTYPE_ASCII
  212:   return (c >= ' ' && c <= '~');
  213: #else
  214:   switch (c)
  215:     {
  216:     case ' ': case '!': case '"': case '#': case '$': case '%':
  217:     case '&': case '\'': case '(': case ')': case '*': case '+':
  218:     case ',': case '-': case '.': case '/':
  219:     case '0': case '1': case '2': case '3': case '4': case '5':
  220:     case '6': case '7': case '8': case '9':
  221:     case ':': case ';': case '<': case '=': case '>': case '?':
  222:     case '@':
  223:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  224:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
  225:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
  226:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
  227:     case 'Y': case 'Z':
  228:     case '[': case '\\': case ']': case '^': case '_': case '`':
  229:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  230:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  231:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  232:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  233:     case 'y': case 'z':
  234:     case '{': case '|': case '}': case '~':
  235:       return 1;
  236:     default:
  237:       return 0;
  238:     }
  239: #endif
  240: }
  241: 
  242: bool
  243: c_ispunct (int c)
  244: {
  245: #if C_CTYPE_ASCII
  246:   return ((c >= '!' && c <= '~')
  247:           && !((c >= '0' && c <= '9')
  248:                || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
  249: #else
  250:   switch (c)
  251:     {
  252:     case '!': case '"': case '#': case '$': case '%': case '&':
  253:     case '\'': case '(': case ')': case '*': case '+': case ',':
  254:     case '-': case '.': case '/':
  255:     case ':': case ';': case '<': case '=': case '>': case '?':
  256:     case '@':
  257:     case '[': case '\\': case ']': case '^': case '_': case '`':
  258:     case '{': case '|': case '}': case '~':
  259:       return 1;
  260:     default:
  261:       return 0;
  262:     }
  263: #endif
  264: }
  265: 
  266: bool
  267: c_isspace (int c)
  268: {
  269:   return (c == ' ' || c == '\t'
  270:           || c == '\n' || c == '\v' || c == '\f' || c == '\r');
  271: }
  272: 
  273: bool
  274: c_isupper (int c)
  275: {
  276: #if C_CTYPE_CONSECUTIVE_UPPERCASE
  277:   return (c >= 'A' && c <= 'Z');
  278: #else
  279:   switch (c)
  280:     {
  281:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  282:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
  283:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
  284:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
  285:     case 'Y': case 'Z':
  286:       return 1;
  287:     default:
  288:       return 0;
  289:     }
  290: #endif
  291: }
  292: 
  293: bool
  294: c_isxdigit (int c)
  295: {
  296: #if C_CTYPE_CONSECUTIVE_DIGITS \
  297:     && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
  298: #if C_CTYPE_ASCII
  299:   return ((c >= '0' && c <= '9')
  300:           || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
  301: #else
  302:   return ((c >= '0' && c <= '9')
  303:           || (c >= 'A' && c <= 'F')
  304:           || (c >= 'a' && c <= 'f'));
  305: #endif
  306: #else
  307:   switch (c)
  308:     {
  309:     case '0': case '1': case '2': case '3': case '4': case '5':
  310:     case '6': case '7': case '8': case '9':
  311:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  312:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  313:       return 1;
  314:     default:
  315:       return 0;
  316:     }
  317: #endif
  318: }
  319: 
  320: int
  321: c_tolower (int c)
  322: {
  323: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
  324:   return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
  325: #else
  326:   switch (c)
  327:     {
  328:     case 'A': return 'a';
  329:     case 'B': return 'b';
  330:     case 'C': return 'c';
  331:     case 'D': return 'd';
  332:     case 'E': return 'e';
  333:     case 'F': return 'f';
  334:     case 'G': return 'g';
  335:     case 'H': return 'h';
  336:     case 'I': return 'i';
  337:     case 'J': return 'j';
  338:     case 'K': return 'k';
  339:     case 'L': return 'l';
  340:     case 'M': return 'm';
  341:     case 'N': return 'n';
  342:     case 'O': return 'o';
  343:     case 'P': return 'p';
  344:     case 'Q': return 'q';
  345:     case 'R': return 'r';
  346:     case 'S': return 's';
  347:     case 'T': return 't';
  348:     case 'U': return 'u';
  349:     case 'V': return 'v';
  350:     case 'W': return 'w';
  351:     case 'X': return 'x';
  352:     case 'Y': return 'y';
  353:     case 'Z': return 'z';
  354:     default: return c;
  355:     }
  356: #endif
  357: }
  358: 
  359: int
  360: c_toupper (int c)
  361: {
  362: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
  363:   return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
  364: #else
  365:   switch (c)
  366:     {
  367:     case 'a': return 'A';
  368:     case 'b': return 'B';
  369:     case 'c': return 'C';
  370:     case 'd': return 'D';
  371:     case 'e': return 'E';
  372:     case 'f': return 'F';
  373:     case 'g': return 'G';
  374:     case 'h': return 'H';
  375:     case 'i': return 'I';
  376:     case 'j': return 'J';
  377:     case 'k': return 'K';
  378:     case 'l': return 'L';
  379:     case 'm': return 'M';
  380:     case 'n': return 'N';
  381:     case 'o': return 'O';
  382:     case 'p': return 'P';
  383:     case 'q': return 'Q';
  384:     case 'r': return 'R';
  385:     case 's': return 'S';
  386:     case 't': return 'T';
  387:     case 'u': return 'U';
  388:     case 'v': return 'V';
  389:     case 'w': return 'W';
  390:     case 'x': return 'X';
  391:     case 'y': return 'Y';
  392:     case 'z': return 'Z';
  393:     default: return c;
  394:     }
  395: #endif
  396: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>