home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / jove-4.16-src.tgz / tar.out / bsd / jove / jctype.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  21KB  |  563 lines

  1. /************************************************************************
  2.  * This program is Copyright (C) 1986-1996 by Jonathan Payne.  JOVE is  *
  3.  * provided to you without charge, and with no warranty.  You may give  *
  4.  * away copies of JOVE, including sources, provided that this notice is *
  5.  * included in all the files.                                           *
  6.  ************************************************************************/
  7.  
  8. #include "jove.h"
  9. #include "jctype.h"
  10.  
  11. #define cU    (C_UPPER | C_WORD | C_PRINT)    /* Upper case  => Word => Printable */
  12. #define cL    (C_LOWER | C_WORD | C_PRINT)    /* Lower case => Word => Printable */
  13. #define cN    (C_DIGIT | C_WORD | C_PRINT)    /* Numeric => Word => Printable */
  14. #define cP    (C_PUNCT | C_PRINT)    /* Punctuation => Printable */
  15. #define cV    C_PRINT    /* printable (Visible) */
  16. #define cW    (C_WORD | C_PRINT)    /* Word => Printable */
  17. #define cO    (C_BRA | C_PUNCT | C_PRINT)    /* Open parenthesis => Punctuation => Printable */
  18. #define cC    (C_KET | C_PUNCT | C_PRINT)    /* Close parenthesis => Punctuation => Printable */
  19.  
  20. const unsigned char CharTable[NCHARS] = {
  21.     0,    0,    0,    0,    0,    0,    0,    0,    /* 000 */
  22.     0,    0,    0,    0,    0,    0,    0,    0,    /* 010 */
  23.     0,    0,    0,    0,    0,    0,    0,    0,    /* 020 */
  24.     0,    0,    0,    0,    0,    0,    0,    0,    /* 030 */
  25.  
  26.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 040 */
  27.     cO,    cC,    cP,    cP,    cP,    cP,    cP,    cP,    /* 050 */
  28.     cN,    cN,    cN,    cN,    cN,    cN,    cN,    cN,    /* 060 */
  29.     cN,    cN,    cP,    cP,    cP,    cP,    cP,    cP,    /* 070 */
  30.  
  31.     cP,    cU,    cU,    cU,    cU,    cU,    cU,    cU,    /* 100 */
  32.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cU,    /* 110 */
  33.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cU,    /* 120 */
  34.     cU,    cU,    cU,    cO,    cP,    cC,    cP,    cP,    /* 130 */
  35.  
  36.     cP,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 140 */
  37.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 150 */
  38.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 160 */
  39.     cL,    cL,    cL,    cO,    cP,    cC,    cP,    0,    /* 170 */
  40. #if NCHARS != 128
  41. # ifdef ISO_8859_1
  42.     0,    0,    0,    0,    0,    0,    0,    0,    /* 200 */
  43.     0,    0,    0,    0,    0,    0,    0,    0,    /* 210 */
  44.     0,    0,    0,    0,    0,    0,    0,    0,    /* 220 */
  45.     0,    0,    0,    0,    0,    0,    0,    0,    /* 230 */
  46.  
  47.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 240 */
  48.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 250 */
  49.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 260 */
  50.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 270 */
  51.  
  52.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cU,    /* 300 */
  53.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cU,    /* 310 */
  54.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cP,    /* 320 */
  55.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cL,    /* 330 */
  56.  
  57.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 340 */
  58.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 350 */
  59.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cP,    /* 360 */
  60.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 370 */
  61. # else /* !ISO_8859_1 */
  62. #  ifdef CODEPAGE437
  63.     cU,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 200 */
  64.     cL,    cL,    cL,    cL,    cL,    cL,    cU,    cU,    /* 210 */
  65.     cU,    cL,    cU,    cL,    cL,    cL,    cL,    cL,    /* 220 */
  66.     cL,    cU,    cU,    cP,    cP,    cP,    cP,    cP,    /* 230 */
  67.  
  68.     cL,    cL,    cL,    cL,    cL,    cU,    cP,    cP,    /* 240 */
  69.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 250 */
  70.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 260 */
  71.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 270 */
  72.  
  73.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 300 */
  74.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 310 */
  75.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 320 */
  76.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 330 */
  77.  
  78.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 340 */
  79.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 350 */
  80.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 360 */
  81.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 370 */
  82. #  else /* !CODEPAGE437 */
  83. #   ifdef MAC    /* See Inside Macintosh Vol One p. 247 */
  84.     cU,    cU,    cU,    cU,    cU,    cU,    cU,    cL,    /* 200 */
  85.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 210 */
  86.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 220 */
  87.     cL,    cL,    cL,    cL,    cL,    cL,    cL,    cL,    /* 230 */
  88.  
  89.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 240 */
  90.     cP,    cP,    cP,    cP,    cP,    cP,    cU,    cU,    /* 250 */
  91.     cP,    cP,    cP,    cP,    cP,    cU,    cL,    cU,    /* 260 */
  92.     cU,    cL,    cP,    cP,    cP,    cU,    cL,    cL,    /* 270 */
  93.  
  94.     cP,    cP,    cP,    cP,    cP,    cP,    cU,    cP,    /* 300 */
  95.     cP,    cP,    cP,    cU,    cU,    cU,    cU,    cU,    /* 310 */
  96.     cP,    cP,    cP,    cP,    cP,    cP,    cP,    cP,    /* 320 */
  97.     cU,    0,    0,    0,    0,    0,    0,    0,    /* 330 */
  98.  
  99.     0,    0,    0,    0,    0,    0,    0,    0,    /* 340 */
  100.     0,    0,    0,    0,    0,    0,    0,    0,    /* 350 */
  101.     0,    0,    0,    0,    0,    0,    0,    0,    /* 360 */
  102.     0,    0,    0,    0,    0,    0,    0,    0,    /* 370 */
  103. #   else /* !MAC */
  104.     /* control, by default */
  105.     0,    0,    0,    0,    0,    0,    0,    0,    /* 200 */
  106.     0,    0,    0,    0,    0,    0,    0,    0,    /* 210 */
  107.     0,    0,    0,    0,    0,    0,    0,    0,    /* 220 */
  108.     0,    0,    0,    0,    0,    0,    0,    0,    /* 230 */
  109.  
  110.     0,    0,    0,    0,    0,    0,    0,    0,    /* 240 */
  111.     0,    0,    0,    0,    0,    0,    0,    0,    /* 250 */
  112.     0,    0,    0,    0,    0,    0,    0,    0,    /* 260 */
  113.     0,    0,    0,    0,    0,    0,    0,    0,    /* 270 */
  114.  
  115.     0,    0,    0,    0,    0,    0,    0,    0,    /* 300 */
  116.     0,    0,    0,    0,    0,    0,    0,    0,    /* 310 */
  117.     0,    0,    0,    0,    0,    0,    0,    0,    /* 320 */
  118.     0,    0,    0,    0,    0,    0,    0,    0,    /* 330 */
  119.  
  120.     0,    0,    0,    0,    0,    0,    0,    0,    /* 340 */
  121.     0,    0,    0,    0,    0,    0,    0,    0,    /* 350 */
  122.     0,    0,    0,    0,    0,    0,    0,    0,    /* 360 */
  123.     0,    0,    0,    0,    0,    0,    0,    0,    /* 370 */
  124. #   endif /* !MAC */
  125. #  endif /* !CODEPAGE437 */
  126. # endif /* !ISO_8859_1 */
  127. #endif /* NCHARS != 128 */
  128. };
  129.  
  130. #undef cU
  131. #undef cL
  132. #undef cN
  133. #undef cP
  134. #undef cV
  135. #undef cW
  136. #undef cO
  137. #undef cC
  138.  
  139. /* Which characters are legal in an identifier (word)?
  140.  * This depends on the major mode.  Anything considered
  141.  * part of an identifier in Fundamental mode is considered to
  142.  * be a part of an identifier in any other mode (this is
  143.  * an assumption of the USE_LCTYPE code).  For other modes,
  144.  * more characters are considered to be part of identifiers:
  145.  * - text mode adds '
  146.  * - C mode adds _
  147.  * - lisp mode adds !$%& *+-/ :<=>? @ ^_{|}~
  148.  * Note that none of these modes currently adds anything in the
  149.  * upper half of an 8-bit character set.
  150.  */
  151.  
  152. #define wF    (1 << FUNDAMENTAL)
  153. #define wT    (1 << TEXTMODE)
  154. #define wC    (1 << CMODE)
  155. #ifdef LISP
  156. # define wL    (1 << LISPMODE)
  157. #else
  158. # define wL    0
  159. #endif
  160. #define w    (wF|wT|wC|wL)
  161.  
  162. private const unsigned char IdChartable[NCHARS] = {
  163.     0,    0,    0,    0,    0,    0,    0,    0,    /* 000 */
  164.     0,    0,    0,    0,    0,    0,    0,    0,    /* 010 */
  165.     0,    0,    0,    0,    0,    0,    0,    0,    /* 020 */
  166.     0,    0,    0,    0,    0,    0,    0,    0,    /* 030 */
  167.  
  168.     0,    wL,    0,    0,    wL,    wL,    wL,    wT,    /* 040 */
  169.     0,    0,    wL,    wL,    0,    wL,    0,    wL,    /* 050 */
  170.     w,    w,    w,    w,    w,    w,    w,    w,    /* 060 */
  171.     w,    w,    wL,    0,    wL,    wL,    wL,    wL,    /* 070 */
  172.  
  173.     wL,    w,    w,    w,    w,    w,    w,    w,    /* 100 */
  174.     w,    w,    w,    w,    w,    w,    w,    w,    /* 110 */
  175.     w,    w,    w,    w,    w,    w,    w,    w,    /* 120 */
  176.     w,    w,    w,    0,    0,    0,    wL,    wC|wL,    /* 130 */
  177.  
  178.     0,    w,    w,    w,    w,    w,    w,    w,    /* 140 */
  179.     w,    w,    w,    w,    w,    w,    w,    w,    /* 150 */
  180.     w,    w,    w,    w,    w,    w,    w,    w,    /* 160 */
  181.     w,    w,    w,    wL,    wL,    wL,    wL,    wL,    /* 170 */
  182. #if NCHARS != 128
  183. # ifdef ISO_8859_1
  184.     0,    0,    0,    0,    0,    0,    0,    0,    /* 200 */
  185.     0,    0,    0,    0,    0,    0,    0,    0,    /* 210 */
  186.     0,    0,    0,    0,    0,    0,    0,    0,    /* 220 */
  187.     0,    0,    0,    0,    0,    0,    0,    0,    /* 230 */
  188.  
  189.     0,    0,    0,    0,    0,    0,    0,    0,    /* 240 */
  190.     0,    0,    0,    0,    0,    0,    0,    0,    /* 250 */
  191.     0,    0,    0,    0,    0,    0,    0,    0,    /* 260 */
  192.     0,    0,    0,    0,    0,    0,    0,    0,    /* 270 */
  193.  
  194.     w,    w,    w,    w,    w,    w,    w,    w,    /* 300 */
  195.     w,    w,    w,    w,    w,    w,    w,    w,    /* 310 */
  196.     w,    w,    w,    w,    w,    w,    w,    0,    /* 320 */
  197.     w,    w,    w,    w,    w,    w,    w,    w,    /* 330 */
  198.  
  199.     w,    w,    w,    w,    w,    w,    w,    w,    /* 340 */
  200.     w,    w,    w,    w,    w,    w,    w,    w,    /* 350 */
  201.     w,    w,    w,    w,    w,    w,    w,    0,    /* 360 */
  202.     w,    w,    w,    w,    w,    w,    w,    w,    /* 370 */
  203. # else /* !ISO_8859_1 */
  204. #  ifdef CODEPAGE437
  205.     w,    w,    w,    w,    w,    w,    w,    w,    /* 200 */
  206.     w,    w,    w,    w,    w,    w,    w,    w,    /* 210 */
  207.     w,    w,    w,    w,    w,    w,    w,    w,    /* 220 */
  208.     w,    w,    w,    0,    0,    0,    0,    0,    /* 230 */
  209.  
  210.     w,    w,    w,    w,    w,    w,    0,    0,    /* 240 */
  211.     0,    0,    0,    0,    0,    0,    0,    0,    /* 250 */
  212.     0,    0,    0,    0,    0,    0,    0,    0,    /* 260 */
  213.     0,    0,    0,    0,    0,    0,    0,    0,    /* 270 */
  214.  
  215.     0,    0,    0,    0,    0,    0,    0,    0,    /* 300 */
  216.     0,    0,    0,    0,    0,    0,    0,    0,    /* 310 */
  217.     0,    0,    0,    0,    0,    0,    0,    0,    /* 320 */
  218.     0,    0,    0,    0,    0,    0,    0,    0,    /* 330 */
  219.  
  220.     0,    0,    0,    0,    0,    0,    0,    0,    /* 340 */
  221.     0,    0,    0,    0,    0,    0,    0,    0,    /* 350 */
  222.     0,    0,    0,    0,    0,    0,    0,    0,    /* 360 */
  223.     0,    0,    0,    0,    0,    0,    0,    0,    /* 370 */
  224. #  else /* !CODEPAGE437 */
  225. #   ifdef MAC    /* See Inside Macintosh Vol One p. 247 */
  226.     w,    w,    w,    w,    w,    w,    w,    w,    /* 200 */
  227.     w,    w,    w,    w,    w,    w,    w,    w,    /* 210 */
  228.     w,    w,    w,    w,    w,    w,    w,    w,    /* 220 */
  229.     w,    w,    w,    w,    w,    w,    w,    w,    /* 230 */
  230.  
  231.     0,    0,    0,    0,    0,    0,    0,    0,    /* 240 */
  232.     0,    0,    0,    0,    0,    0,    w,    w,    /* 250 */
  233.     0,    0,    0,    0,    0,    w,    w,    w,    /* 260 */
  234.     w,    w,    0,    0,    0,    w,    w,    w,    /* 270 */
  235.  
  236.     0,    0,    0,    0,    0,    0,    w,    0,    /* 300 */
  237.     0,    0,    0,    w,    w,    w,    w,    w,    /* 310 */
  238.     0,    0,    0,    0,    0,    0,    0,    0,    /* 320 */
  239.     w,    0,    0,    0,    0,    0,    0,    0,    /* 330 */
  240.  
  241.     0,    0,    0,    0,    0,    0,    0,    0,    /* 340 */
  242.     0,    0,    0,    0,    0,    0,    0,    0,    /* 350 */
  243.     0,    0,    0,    0,    0,    0,    0,    0,    /* 360 */
  244.     0,    0,    0,    0,    0,    0,    0,    0,    /* 370 */
  245. #   else /* !MAC */
  246.     /* control, by default */
  247.     0,    0,    0,    0,    0,    0,    0,    0,    /* 200 */
  248.     0,    0,    0,    0,    0,    0,    0,    0,    /* 210 */
  249.     0,    0,    0,    0,    0,    0,    0,    0,    /* 220 */
  250.     0,    0,    0,    0,    0,    0,    0,    0,    /* 230 */
  251.  
  252.     0,    0,    0,    0,    0,    0,    0,    0,    /* 240 */
  253.     0,    0,    0,    0,    0,    0,    0,    0,    /* 250 */
  254.     0,    0,    0,    0,    0,    0,    0,    0,    /* 260 */
  255.     0,    0,    0,    0,    0,    0,    0,    0,    /* 270 */
  256.  
  257.     0,    0,    0,    0,    0,    0,    0,    0,    /* 300 */
  258.     0,    0,    0,    0,    0,    0,    0,    0,    /* 310 */
  259.     0,    0,    0,    0,    0,    0,    0,    0,    /* 320 */
  260.     0,    0,    0,    0,    0,    0,    0,    0,    /* 330 */
  261.  
  262.     0,    0,    0,    0,    0,    0,    0,    0,    /* 340 */
  263.     0,    0,    0,    0,    0,    0,    0,    0,    /* 350 */
  264.     0,    0,    0,    0,    0,    0,    0,    0,    /* 360 */
  265.     0,    0,    0,    0,    0,    0,    0,    0,    /* 370 */
  266. #   endif /* !MAC */
  267. #  endif /* !CODEPAGE437 */
  268. # endif /* !ISO_8859_1 */
  269. #endif /* NCHARS != 128 */
  270. };
  271.  
  272. #undef wF
  273. #undef wT
  274. #undef wC
  275. #undef wL
  276. #undef w
  277.  
  278. bool
  279. jisident(c)
  280. char    c;
  281. {
  282. #ifdef USE_CTYPE
  283.     return (IdChartable[ZXC(c)] & (1 << curbuf->b_major)) != 0 || jisword(c);
  284. #else
  285.     return (IdChartable[ZXC(c)] & (1 << curbuf->b_major)) != 0;
  286. #endif
  287. }
  288.  
  289. #ifdef USE_CTYPE
  290.  
  291. # ifndef NO_SETLOCALE
  292.  
  293. #  include <locale.h>
  294.  
  295. char    LcCtype[32] = "";    /* VAR: lc-ctype, for use in setlocale */
  296.  
  297. /* adjust the locale to reflect possible change to LcCtype */
  298.  
  299. void
  300. locale_adjust()
  301. {
  302.     char    *res = setlocale(LC_CTYPE, LcCtype);
  303.  
  304.     if (res != NULL) {
  305.         /* success: if it fits, record result */
  306.         if (strlen(res) < sizeof(LcCtype))
  307.             strcpy(LcCtype, res);
  308.     } else if (LcCtype[0] != '\0') {
  309.         /* Failure, but not for "".  Complain, after recovering.
  310.          * Note: We don't try to print a message if "" fails because it
  311.          * might be the initializing call, too early for "complain",
  312.          * or it might be the recursive call.
  313.          */
  314.         char    temp[sizeof(LcCtype)];
  315.  
  316.         strcpy(temp, LcCtype);
  317.         res = setlocale(LC_CTYPE, (char *)NULL);
  318.         if (res != NULL && strlen(res) < sizeof(LcCtype)) {
  319.             strcpy(LcCtype, res);
  320.         } else {
  321.             LcCtype[0] = '\0';    /* default */
  322.             locale_adjust();    /* note: this will recurse only one level */
  323.         }
  324.         complain("Unrecognized lc-ctype: %s", temp);
  325.     }
  326. }
  327.  
  328. # endif /* !NO_SETLOCALE */
  329.  
  330. #else /* !USE_CTYPE */
  331.  
  332. /* Map lower case characters to upper case and the rest to themselves. */
  333.  
  334. const char    RaiseTable[NCHARS] = {
  335.     '\000',    '\001',    '\002',    '\003',    '\004',    '\005',    '\006',    '\007',
  336.     '\010',    '\011',    '\012',    '\013',    '\014',    '\015',    '\016',    '\017',
  337.     '\020',    '\021',    '\022',    '\023',    '\024',    '\025',    '\026',    '\027',
  338.     '\030',    '\031',    '\032',    '\033',    '\034',    '\035',    '\036',    '\037',
  339.     '\040',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
  340.     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
  341.     '0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',
  342.     '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
  343.     '@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  344.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  345.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  346.     'X',    'Y',    'Z',    '[',    '\\',    ']',    '^',    '_',
  347.     '`',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  348.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  349.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  350.     'X',    'Y',    'Z',    '{',    '|',    '}',    '~',    '\177',
  351. # if NCHARS != 128
  352. #  ifdef ISO_8859_1
  353.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  354.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  355.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  356.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  357.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  358.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  359.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  360.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  361.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  362.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  363.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  364.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  365.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  366.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  367.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\367',
  368.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\377',
  369. #  else /* !ISO_8859_1 */
  370. #   ifdef CODEPAGE437
  371.     /* Only codes changed are lowercase Umlauted letters (indented):
  372.      *    Ae '\216'; ae '\204'
  373.      *    Oe '\231'; oe '\224'
  374.      *    Ue '\232'; ue '\201'
  375.      */
  376.     '\200',     '\232',    '\202',    '\203',     '\216',    '\205',    '\206',    '\207',
  377.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  378.     '\220',    '\221',    '\222',    '\223',     '\231',    '\225',    '\226',    '\227',
  379.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  380.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  381.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  382.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  383.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  384.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  385.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  386.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  387.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  388.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  389.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  390.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  391.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  392. #   else /* !CODEPAGE437 */
  393. #    ifdef MAC
  394.     /* '\230' -> '\313'
  395.      * '\212' -> '\200'
  396.      * '\213' -> '\314'
  397.      * '\214' -> '\201'
  398.      * '\215' -> '\202'
  399.      * '\216' -> '\203'
  400.      * '\226' -> '\204'
  401.      * '\232' -> '\205'
  402.      * '\233' -> '\315'
  403.      * '\237' -> '\206'
  404.      * '\271' -> '\270'
  405.      * '\317' -> '\316'
  406.      */
  407.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  408.      '\313',    '\211',     '\200',     '\314',     '\201',     '\202',     '\203',    '\217',
  409.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',     '\204',    '\227',
  410.     '\230',    '\231',     '\205',     '\315',    '\234',    '\235',    '\236',     '\206',
  411.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  412.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  413.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\306',    '\267',
  414.     '\270',     '\270',    '\272',    '\273',    '\274',    '\275',    '\256',    '\257',
  415.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  416.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',     '\316',
  417.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  418.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  419.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  420.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  421.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  422.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  423. #    else /* !MAC */
  424.     /* identity, by default */
  425.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  426.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  427.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  428.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  429.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  430.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  431.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  432.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  433.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  434.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  435.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  436.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  437.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  438.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  439.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  440.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  441. #    endif /* !MAC */
  442. #   endif /* !CODEPAGE437 */
  443. #  endif /* !ISO_8859_1 */
  444. # endif /* NCHARS != 128*/
  445. };
  446.  
  447. /* Map upper case characters to lower case and the rest to themselves. */
  448.  
  449. const char    LowerTable[NCHARS] = {
  450.     '\000',    '\001',    '\002',    '\003',    '\004',    '\005',    '\006',    '\007',
  451.     '\010',    '\011',    '\012',    '\013',    '\014',    '\015',    '\016',    '\017',
  452.     '\020',    '\021',    '\022',    '\023',    '\024',    '\025',    '\026',    '\027',
  453.     '\030',    '\031',    '\032',    '\033',    '\034',    '\035',    '\036',    '\037',
  454.     '\040',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
  455.     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
  456.     '0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',
  457.     '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
  458.     '@',    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  459.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  460.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  461.     'x',    'y',    'z',    '[',    '\\',    ']',    '^',    '_',
  462.     '`',    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  463.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  464.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  465.     'x',    'y',    'z',    '{',    '|',    '}',    '~',    '\177',
  466. # if NCHARS != 128
  467. #  ifdef ISO_8859_1
  468.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  469.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  470.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  471.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  472.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  473.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  474.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  475.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  476.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  477.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  478.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\327',
  479.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\337',
  480.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  481.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  482.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  483.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  484. #  else /* !ISO_8859_1 */
  485. #   ifdef CODEPAGE437
  486.     /* Only codes changed are uppercase Umlauted letters (indented):
  487.      *    Ae '\216'; ae '\204'
  488.      *    Oe '\231'; oe '\224'
  489.      *    Ue '\232'; ue '\201'
  490.      */
  491.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  492.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',     '\204',    '\217',
  493.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  494.     '\230',     '\224',     '\201',    '\233',    '\234',    '\235',    '\236',    '\237',
  495.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  496.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  497.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  498.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  499.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  500.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  501.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  502.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  503.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  504.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  505.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  506.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  507. #   else /* !CODEPAGE437 */
  508. #    ifdef MAC
  509.     /* '\200' -> '\212'
  510.      * '\201' -> '\214'
  511.      * '\202' -> '\215'
  512.      * '\203' -> '\216'
  513.      * '\204' -> '\226'
  514.      * '\205' -> '\232'
  515.      * '\206' -> '\237'
  516.      * '\270' -> '\271'
  517.      * '\313' -> '\230'
  518.      * '\314' -> '\213'
  519.      * '\315' -> '\233'
  520.      * '\316' -> '\317'
  521.      */
  522.      '\212',     '\214',     '\215',     '\216',     '\226',     '\232',     '\237',    '\207',
  523.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  524.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  525.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  526.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  527.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  528.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  529.      '\271',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  530.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  531.     '\310',    '\311',    '\312',     '\230',     '\213',     '\233',     '\317',    '\317',
  532.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  533.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  534.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  535.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  536.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  537.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  538. #    else /* !MAC */
  539.     /* identity, by default */
  540.     '\200',    '\201',    '\202',    '\203',    '\204',    '\205',    '\206',    '\207',
  541.     '\210',    '\211',    '\212',    '\213',    '\214',    '\215',    '\216',    '\217',
  542.     '\220',    '\221',    '\222',    '\223',    '\224',    '\225',    '\226',    '\227',
  543.     '\230',    '\231',    '\232',    '\233',    '\234',    '\235',    '\236',    '\237',
  544.     '\240',    '\241',    '\242',    '\243',    '\244',    '\245',    '\246',    '\247',
  545.     '\250',    '\251',    '\252',    '\253',    '\254',    '\255',    '\256',    '\257',
  546.     '\260',    '\261',    '\262',    '\263',    '\264',    '\265',    '\266',    '\267',
  547.     '\270',    '\271',    '\272',    '\273',    '\274',    '\275',    '\276',    '\277',
  548.     '\300',    '\301',    '\302',    '\303',    '\304',    '\305',    '\306',    '\307',
  549.     '\310',    '\311',    '\312',    '\313',    '\314',    '\315',    '\316',    '\317',
  550.     '\320',    '\321',    '\322',    '\323',    '\324',    '\325',    '\326',    '\327',
  551.     '\330',    '\331',    '\332',    '\333',    '\334',    '\335',    '\336',    '\337',
  552.     '\340',    '\341',    '\342',    '\343',    '\344',    '\345',    '\346',    '\347',
  553.     '\350',    '\351',    '\352',    '\353',    '\354',    '\355',    '\356',    '\357',
  554.     '\360',    '\361',    '\362',    '\363',    '\364',    '\365',    '\366',    '\367',
  555.     '\370',    '\371',    '\372',    '\373',    '\374',    '\375',    '\376',    '\377',
  556. #    endif /* !MAC */
  557. #   endif /* !CODEPAGE437 */
  558. #  endif /* !ISO_8859_1 */
  559. # endif /* NCHARS != 128*/
  560. };
  561.  
  562. #endif /* !USE_CTYPE */
  563.