(linenum→info "unix/slp.c:2238")

glibc/2.7/ctype/test_ctype.c

    1: /* Copyright (C) 1991, 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public
    6:    License as published by the Free Software Foundation; either
    7:    version 2.1 of the License, or (at your option) any later version.
    8: 
    9:    The GNU C Library 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:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; if not, write to the Free
   16:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17:    02111-1307 USA.  */
   18: 
   19: #include <limits.h>
   20: #include <ctype.h>
   21: #include <stdio.h>
   22: #include <stdlib.h>
   23: 
   24: #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
   25: #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
   26: #define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
   27: 
   28: #ifdef  __GNUC__
   29: __inline
   30: #endif
   31: static void
   32: print_char (unsigned char c)
   33: {
   34:   printf("%d/", (int) c);
   35:   if (isgraph(c))
   36:     printf("'%c'", c);
   37:   else
   38:     printf("'\\%.3o'", c);
   39: }
   40: 
   41: int
   42: main (int argc, char **argv)
   43: {
   44:   unsigned short int c;
   45:   int lose = 0;
   46: 
   47: #define TRYEM do {                                                            \
   48:       TRY (isascii);                                                          \
   49:       TRY (isalnum);                                                          \
   50:       TRY (isalpha);                                                          \
   51:       TRY (iscntrl);                                                          \
   52:       TRY (isdigit);                                                          \
   53:       TRY (isgraph);                                                          \
   54:       TRY (islower);                                                          \
   55:       TRY (isprint);                                                          \
   56:       TRY (ispunct);                                                          \
   57:       TRY (isspace);                                                          \
   58:       TRY (isupper);                                                          \
   59:       TRY (isxdigit);                                                         \
   60:       TRY (isblank);                                                          \
   61:     } while (0)
   62: 
   63:   for (c = 0; c <= UCHAR_MAX; ++c)
   64:     {
   65:       print_char (c);
   66: 
   67:       if (XOR (islower (c), ISLOWER (c)) || toupper (c) != TOUPPER (c))
   68:         {
   69:           fputs (" BOGUS", stdout);
   70:           ++lose;
   71:         }
   72: 
   73: #define TRY(isfoo) if (isfoo (c)) fputs (" " #isfoo, stdout)
   74:       TRYEM;
   75: #undef TRY
   76: 
   77:       fputs("; lower = ", stdout);
   78:       print_char(tolower(c));
   79:       fputs("; upper = ", stdout);
   80:       print_char(toupper(c));
   81:       putchar('\n');
   82:     }
   83: 
   84:   fputs ("EOF", stdout);
   85:   if (tolower (EOF) != EOF)
   86:     {
   87:       ++lose;
   88:       printf (" tolower BOGUS %d;", tolower (EOF));
   89:     }
   90:   if (toupper (EOF) != EOF)
   91:     {
   92:       ++lose;
   93:       printf (" toupper BOGUS %d;", toupper (EOF));
   94:     }
   95: 
   96: #define TRY(isfoo) if (isfoo (EOF)) fputs (" " #isfoo, stdout), ++lose
   97:   TRYEM;
   98: #undef TRY
   99: 
  100:   return lose ? EXIT_FAILURE : EXIT_SUCCESS;
  101: }
Syntax (Markdown)