1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* <ctype.h> replacement macros.
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Copyright (C) 2000, 2001, 2002, 2003, 2004,
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   2005 Free Software Foundation, Inc.
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Contributed by Zack Weinberg <zackw@stanford.edu>.
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThis file is part of the libiberty library.
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownLibiberty is free software; you can redistribute it and/or
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmodify it under the terms of the GNU Library General Public
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownLicense as published by the Free Software Foundation; either
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownversion 2 of the License, or (at your option) any later version.
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownLibiberty is distributed in the hope that it will be useful,
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownbut WITHOUT ANY WARRANTY; without even the implied warranty of
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownLibrary General Public License for more details.
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownYou should have received a copy of the GNU Library General Public
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownLicense along with libiberty; see the file COPYING.LIB.  If
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnot, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBoston, MA 02110-1301, USA.  */
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@defvr Extension HOST_CHARSET
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThis macro indicates the basic character set and encoding used by the
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownhost: more precisely, the encoding used for character constants in
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpreprocessor @samp{#if} statements (the C "execution character set").
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownIt is defined by @file{safe-ctype.h}, and will be an integer constant
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownwith one of the following values:
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@ftable @code
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item HOST_CHARSET_UNKNOWN
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThe host character set is unknown - that is, not one of the next two
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpossibilities.
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item HOST_CHARSET_ASCII
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThe host character set is ASCII.
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item HOST_CHARSET_EBCDIC
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThe host character set is some variant of EBCDIC.  (Only one of the
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnineteen EBCDIC varying characters is tested; exercise caution.)
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end ftable
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end defvr
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffn  Extension ISALPHA  (@var{c})
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISALNUM  (@var{c})
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISBLANK  (@var{c})
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISCNTRL  (@var{c})
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISDIGIT  (@var{c})
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISGRAPH  (@var{c})
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISLOWER  (@var{c})
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISPRINT  (@var{c})
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISPUNCT  (@var{c})
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISSPACE  (@var{c})
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISUPPER  (@var{c})
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISXDIGIT (@var{c})
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThese twelve macros are defined by @file{safe-ctype.h}.  Each has the
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownsame meaning as the corresponding macro (with name in lowercase)
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndefined by the standard header @file{ctype.h}.  For example,
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@code{ISALPHA} returns true for alphabetic characters and false for
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownothers.  However, there are two differences between these macros and
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownthose provided by @file{ctype.h}:
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@itemize @bullet
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item These macros are guaranteed to have well-defined behavior for all
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvalues representable by @code{signed char} and @code{unsigned char}, and
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownfor @code{EOF}.
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item These macros ignore the current locale; they are true for these
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownfixed sets of characters:
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{ALPHA}  @tab @kbd{A-Za-z}
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{ALNUM}  @tab @kbd{A-Za-z0-9}
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{BLANK}  @tab @kbd{space tab}
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{CNTRL}  @tab @code{!PRINT}
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{DIGIT}  @tab @kbd{0-9}
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{GRAPH}  @tab @code{ALNUM || PUNCT}
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{LOWER}  @tab @kbd{a-z}
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{PRINT}  @tab @code{GRAPH ||} @kbd{space}
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{PUNCT}  @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{SPACE}  @tab @kbd{space tab \n \r \f \v}
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{UPPER}  @tab @kbd{A-Z}
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end multitable
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownNote that, if the host character set is ASCII or a superset thereof,
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownall these macros will return false for all values of @code{char} outside
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownthe range of 7-bit ASCII.  In particular, both ISPRINT and ISCNTRL return
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownfalse for characters with numeric values from 128 to 255.
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end itemize
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end deffn
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffn  Extension ISIDNUM         (@var{c})
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension ISIDST          (@var{c})
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension IS_VSPACE       (@var{c})
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension IS_NVSPACE      (@var{c})
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension IS_SPACE_OR_NUL (@var{c})
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@deffnx Extension IS_ISOBASIC     (@var{c})
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThese six macros are defined by @file{safe-ctype.h} and provide
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownadditional character classes which are useful when doing lexical
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownanalysis of C or similar languages.  They are true for the following
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownsets of characters:
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{IDNUM}        @tab @kbd{A-Za-z0-9_}
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{IDST}         @tab @kbd{A-Za-z_}
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{VSPACE}       @tab @kbd{\r \n}
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{NVSPACE}      @tab @kbd{space tab \f \v \0}
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@item @code{ISOBASIC}     @tab @code{VSPACE || NVSPACE || PRINT}
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end multitable
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown@end deffn
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 /* in valgrind */
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "ansidecl.h"
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <safe-ctype.h>
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>  /* for EOF */
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* ! in valgrind */
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "vg_libciface.h"
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "safe-ctype.h"
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if EOF != -1
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #error "<safe-ctype.h> requires EOF == -1"
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Shorthand */
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define bl _sch_isblank
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define cn _sch_iscntrl
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define di _sch_isdigit
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define is _sch_isidst
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define lo _sch_islower
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define nv _sch_isnvsp
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define pn _sch_ispunct
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define pr _sch_isprint
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define sp _sch_isspace
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define up _sch_isupper
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define vs _sch_isvsp
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define xd _sch_isxdigit
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Masks.  */
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define L  (const unsigned short) (lo|is   |pr)	/* lower case letter */
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define XL (const unsigned short) (lo|is|xd|pr)	/* lowercase hex digit */
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define U  (const unsigned short) (up|is   |pr)	/* upper case letter */
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define XU (const unsigned short) (up|is|xd|pr)	/* uppercase hex digit */
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define D  (const unsigned short) (di   |xd|pr)	/* decimal digit */
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define P  (const unsigned short) (pn      |pr)	/* punctuation */
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _  (const unsigned short) (pn|is   |pr)	/* underscore */
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define C  (const unsigned short) (         cn)	/* control character */
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define Z  (const unsigned short) (nv      |cn)	/* NUL */
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define M  (const unsigned short) (nv|sp   |cn)	/* cursor movement: \f \v */
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define V  (const unsigned short) (vs|sp   |cn)	/* vertical space: \r \n */
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define T  (const unsigned short) (nv|sp|bl|cn)	/* tab */
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define S  (const unsigned short) (nv|sp|bl|pr)	/* space */
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Are we ASCII? */
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if HOST_CHARSET == HOST_CHARSET_ASCII
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst unsigned short _sch_istable[256] =
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  Z,  C,  C,  C,   C,  C,  C,  C,   /* NUL SOH STX ETX  EOT ENQ ACK BEL */
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  C,  T,  V,  M,   M,  V,  C,  C,   /* BS  HT  LF  VT   FF  CR  SO  SI  */
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  C,  C,  C,  C,   C,  C,  C,  C,   /* DLE DC1 DC2 DC3  DC4 NAK SYN ETB */
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  C,  C,  C,  C,   C,  C,  C,  C,   /* CAN EM  SUB ESC  FS  GS  RS  US  */
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  S,  P,  P,  P,   P,  P,  P,  P,   /* SP  !   "   #    $   %   &   '   */
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  P,  P,  P,  P,   P,  P,  P,  P,   /* (   )   *   +    ,   -   .   /   */
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  D,  D,  D,  D,   D,  D,  D,  D,   /* 0   1   2   3    4   5   6   7   */
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  D,  D,  P,  P,   P,  P,  P,  P,   /* 8   9   :   ;    <   =   >   ?   */
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  P, XU, XU, XU,  XU, XU, XU,  U,   /* @   A   B   C    D   E   F   G   */
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U,  U,  U,  U,   U,  U,  U,  U,   /* H   I   J   K    L   M   N   O   */
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U,  U,  U,  U,   U,  U,  U,  U,   /* P   Q   R   S    T   U   V   W   */
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U,  U,  U,  P,   P,  P,  P,  _,   /* X   Y   Z   [    \   ]   ^   _   */
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  P, XL, XL, XL,  XL, XL, XL,  L,   /* `   a   b   c    d   e   f   g   */
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  L,  L,  L,  L,   L,  L,  L,  L,   /* h   i   j   k    l   m   n   o   */
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  L,  L,  L,  L,   L,  L,  L,  L,   /* p   q   r   s    t   u   v   w   */
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  L,  L,  L,  P,   P,  P,  P,  C,   /* x   y   z   {    |   }   ~   DEL */
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /* high half of unsigned char is locale-specific, so all tests are
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     false in "C" locale */
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst unsigned char _sch_tolower[256] =
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0,  1,  2,  3,   4,  5,  6,  7,   8,  9, 10, 11,  12, 13, 14, 15,
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  16, 17, 18, 19,  20, 21, 22, 23,  24, 25, 26, 27,  28, 29, 30, 31,
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  32, 33, 34, 35,  36, 37, 38, 39,  40, 41, 42, 43,  44, 45, 46, 47,
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  48, 49, 50, 51,  52, 53, 54, 55,  56, 57, 58, 59,  60, 61, 62, 63,
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  64,
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  91, 92, 93, 94, 95, 96,
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 123,124,125,126,127,
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst unsigned char _sch_toupper[256] =
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0,  1,  2,  3,   4,  5,  6,  7,   8,  9, 10, 11,  12, 13, 14, 15,
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  16, 17, 18, 19,  20, 21, 22, 23,  24, 25, 26, 27,  28, 29, 30, 31,
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  32, 33, 34, 35,  36, 37, 38, 39,  40, 41, 42, 43,  44, 45, 46, 47,
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  48, 49, 50, 51,  52, 53, 54, 55,  56, 57, 58, 59,  60, 61, 62, 63,
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  64,
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  91, 92, 93, 94, 95, 96,
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 123,124,125,126,127,
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# if HOST_CHARSET == HOST_CHARSET_EBCDIC
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  #error "FIXME: write tables for EBCDIC"
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# else
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  #error "Unrecognized host character set"
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# endif
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
262