home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / editor / j414src.arc / CTYPE.C < prev    next >
C/C++ Source or Header  |  1989-10-10  |  11KB  |  258 lines

  1. /***************************************************************************
  2.  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
  3.  * is 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 "ctype.h"
  10.  
  11. int    SyntaxTable = FUNDAMENTAL;    /* Current table to use. */
  12.  
  13. const unsigned char CharTable[NMAJORS][NCHARS] = {
  14.     {
  15.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  16.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  17.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  18.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  19.     _P,    _P,    _P,    _P,    _P,    _P,    _P,    _P,
  20.     _Op|_P,    _Cl|_P,    _P,    _P,    _P,    _P,    _P,    _P,
  21.     _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,
  22.     _W|_N,    _W|_N,    _P,    _P,    _P,    _P,    _P,    _P,
  23.     _P,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  24.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  25.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  26.     _W|_U,    _W|_U,    _W|_U,    _Op|_P,    _P,    _Cl|_P,    _P,    _P,
  27.     _P,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  28.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  29.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  30.     _W|_L,    _W|_L,    _W|_L,    _Op|_P,    _P,    _Cl|_P,    _P,    _C,
  31. #ifdef IBMPC
  32.     0, _W|_L, 0, 0, _W|_L, 0, 0, 0, 0, 0, 0, 0, 0, 0, _W|_U, 0,
  33.     0, 0, 0, 0, _W|_L, 0, 0, 0, 0, _W|_U, _W|_U, 0, 0, 0, 0, 0,
  34.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  35.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  36.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  37.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  38.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  39.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  40. #endif /* IBMPC */
  41. #ifdef MAC    /* See Inside Macintosh Vol One p. 247 */
  42.     _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_L,
  43.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  44.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  45.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  46.     _P, _P, _P, _P, _P, _P, _P, _P,
  47.     _P, _P, _P, _P, _P, _P, _W|_U, _W|_U,
  48.     _P, _P, _P, _P, _P, _W|_U, _W|_L, _W|_U,
  49.     _W|_U, _W|_L, _P, _P, _P, _W|_U, _W|_L, _W|_L,
  50.     _P, _P, _P, _P, _P, _P, _W|_U, _P,
  51.     _P, _P, _P, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U,
  52.     _P, _P, _P, _P, _P, _P, _P, _P,
  53.     _W|_U, 0, 0, 0, 0, 0, 0, 0,
  54.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  55.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  56. #endif /* MAC */
  57.     },
  58.  
  59.     {
  60.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  61.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  62.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  63.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  64.     _P,    _P,    _P,    _P,    _P,    _P,    _P,    _P|_W,
  65.     _Op|_P,    _Cl|_P,    _P,    _P,    _P,    _P,    _P,    _P,
  66.     _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,
  67.     _W|_N,    _W|_N,    _P,    _P,    _P,    _P,    _P,    _P,
  68.     _P,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  69.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  70.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  71.     _W|_U,    _W|_U,    _W|_U,    _Op|_P,    _P,    _Cl|_P,    _P,    _P,
  72.     _P,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  73.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  74.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  75.     _W|_L,    _W|_L,    _W|_L,    _Op|_P,    _P,    _Cl|_P,    _P,    _C,
  76. #ifdef IBMPC
  77.     0, _W|_L, 0, 0, _W|_L, 0, 0, 0, 0, 0, 0, 0, 0, 0, _W|_U, 0,
  78.     0, 0, 0, 0, _W|_L, 0, 0, 0, 0, _W|_U, _W|_U, 0, 0, 0, 0, 0,
  79.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  80.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  81.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  82.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  83.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  84.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  85. #endif /* IBMPC */
  86. #ifdef MAC    /* See Inside Macintosh Vol One p. 247 */
  87.     _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U, _W|_L,
  88.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  89.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  90.     _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L, _W|_L,
  91.     _P, _P, _P, _P, _P, _P, _P, _P,
  92.     _P, _P, _P, _P, _P, _P, _W|_U, _W|_U,
  93.     _P, _P, _P, _P, _P, _W|_U, _W|_L, _W|_U,
  94.     _W|_U, _W|_L, _P, _P, _P, _W|_U, _W|_L, _W|_L,
  95.     _P, _P, _P, _P, _P, _P, _W|_U, _P,
  96.     _P, _P, _P, _W|_U, _W|_U, _W|_U, _W|_U, _W|_U,
  97.     _P, _P, _P, _P, _P, _P, _P, _P,
  98.     _W|_U, 0, 0, 0, 0, 0, 0, 0,
  99.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  100.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  101. #endif /* MAC */
  102.     },
  103.  
  104.     {
  105.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  106.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  107.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  108.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  109.     _P,    _P,    _P,    _P,    _P|_W,    _P,    _P,    _P,
  110.     _Op|_P,    _Cl|_P,    _P,    _P,    _P,    _P,    _P,    _P,
  111.     _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,
  112.     _W|_N,    _W|_N,    _P,    _P,    _P,    _P,    _P,    _P,
  113.     _P,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  114.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  115.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  116.     _W|_U,    _W|_U,    _W|_U,    _Op|_P,    _P,    _Cl|_P,    _P,    _P|_W,
  117.     _P,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  118.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  119.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  120.     _W|_L,    _W|_L,    _W|_L,    _Op|_P,    _P,    _Cl|_P,    _P,    _C,
  121. #ifndef ASCII
  122.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  123.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  124.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  125.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  126.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  127.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  128.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  129.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  130. #endif /* ASCII */
  131.     },
  132.  
  133. #ifdef LISP
  134.     {
  135.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  136.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  137.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  138.     _C,    _C,    _C,    _C,    _C,    _C,    _C,    _C,
  139.     _P,    _W|_P,    _P,    _P,    _W|_P,    _W|_P,    _W|_P,    _P,
  140.     _Op|_P,    _Cl|_P,    _W|_P,    _W|_P,    _P,    _W|_P,    _P,    _W,
  141.     _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,    _W|_N,
  142.     _W|_N,    _W|_N,    _W|_P,    _P,    _W|_P,    _W|_P,    _W|_P,    _W|_P,
  143.     _W|_P,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  144.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  145.     _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,    _W|_U,
  146.     _W|_U,    _W|_U,    _W|_U,    _Op|_P,    _P,    _Cl|_P,    _W|_P,    _W|_P,
  147.     _P,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  148.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  149.     _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,    _W|_L,
  150.     _W|_L,    _W|_L,    _W|_L,    _Op|_W|_P,    _W|_P,    _Cl|_W|_P,    _W|_P,    _W|_C,
  151. #ifndef ASCII
  152.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  153.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  154.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  155.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  156.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  157.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  158.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  159.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  160. #endif /* ASCII */
  161.     },
  162. #endif    /* LISP */
  163. };
  164.  
  165. int
  166. ismword(c)
  167. int    c;
  168. {
  169.     return ((CharTable[curbuf->b_major])[c]&(_W));
  170. }
  171.  
  172. #ifdef IBMPC
  173. const char    CaseEquiv[NCHARS] = {
  174.     '\000',    '\001',    '\002',    '\003',    '\004',    '\005',    '\006',    '\007',
  175.     '\010',    '\011',    '\012',    '\013',    '\014',    '\015',    '\016',    '\017',
  176.     '\020',    '\021',    '\022',    '\023',    '\024',    '\025',    '\026',    '\027',
  177.     '\030',    '\031',    '\032',    '\033',    '\034',    '\035',    '\036',    '\037',
  178.     '\040',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
  179.     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
  180.     '0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',
  181.     '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
  182.     '@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  183.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  184.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  185.     'X',    'Y',    'Z',    '[',    '\\',    ']',    '^',    '_',
  186.     '`',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  187.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  188.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  189.     'X',    'Y',    'Z',    '{',    '|',    '}',    '~',    '\177',
  190.     128, 154, 130, 131, 142, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  191.     144, 145, 146, 147, 153, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  192.     160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
  193.     176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
  194.     192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
  195.     208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
  196.     224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
  197.     240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
  198. };
  199. #endif /* IBMPC */
  200.  
  201. #ifdef MAC
  202. const char    CaseEquiv[NCHARS] = {
  203.     '\000',    '\001',    '\002',    '\003',    '\004',    '\005',    '\006',    '\007',
  204.     '\010',    '\011',    '\012',    '\013',    '\014',    '\015',    '\016',    '\017',
  205.     '\020',    '\021',    '\022',    '\023',    '\024',    '\025',    '\026',    '\027',
  206.     '\030',    '\031',    '\032',    '\033',    '\034',    '\035',    '\036',    '\037',
  207.     '\040',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
  208.     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
  209.     '0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',
  210.     '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
  211.     '@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  212.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  213.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  214.     'X',    'Y',    'Z',    '[',    '\\',    ']',    '^',    '_',
  215.     '`',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  216.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  217.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  218.     'X',    'Y',    'Z',    '{',    '|',    '}',    '~',    '\177',
  219.     0x80,    0x81,    0x82,    0x83,    0x84,    0x85,    0x86,    0x87,
  220.     0xCB,    0x89,    0x80,    0xCC,    0x81,    0x82,    0x83,    0x8F,
  221.     0x90,    0x91,    0x92,    0x93,    0x94,    0x95,    0x84,    0x97,
  222.     0x98,    0x99,    0x85,    0xCD,    0x9C,    0x9D,    0x9E,    0x86,
  223.     0xA0,    0xA1,    0xA2,    0xA3,    0xA4,    0xA5,    0xA6,    0xA7,
  224.     0xA8,    0xA9,    0xAA,    0xAB,    0xAC,    0xAD,    0xAE,    0xAF,
  225.     0xB0,    0xB1,    0xB2,    0xB3,    0xB4,    0xB5,    0xC6,    0xB7,
  226.     0xB8,    0xB8,    0xBA,    0xBB,    0xBC,    0xBD,    0xAE,    0xAF,
  227.     0xC0,    0xC1,    0xC2,    0xC3,    0xC4,    0xC5,    0xC6,    0xC7,
  228.     0xC8,    0xC9,    0xCA,    0xCB,    0xCC,    0xCD,    0xCE,    0xCE,
  229.     0xD0,    0xD1,    0xD2,    0xD3,    0xD4,    0xD5,    0xD6,    0xD7,
  230.     0xD8,    0,        0,        0,        0,        0,        0,        0,
  231.     0,        0,        0,        0,        0,        0,        0,        0,
  232.     0,        0,        0,        0,        0,        0,        0,        0,
  233.     0,        0,        0,        0,        0,        0,        0,        0,
  234.     0,        0,        0,        0,        0,        0,        0,        0
  235. };
  236. #endif /* MAC */
  237.  
  238. #ifdef ASCII
  239. const char CaseEquiv[] = {
  240.     '\000',    '\001',    '\002',    '\003',    '\004',    '\005',    '\006',    '\007',
  241.     '\010',    '\011',    '\012',    '\013',    '\014',    '\015',    '\016',    '\017',
  242.     '\020',    '\021',    '\022',    '\023',    '\024',    '\025',    '\026',    '\027',
  243.     '\030',    '\031',    '\032',    '\033',    '\034',    '\035',    '\036',    '\037',
  244.     '\040',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
  245.     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
  246.     '0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',
  247.     '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
  248.     '@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  249.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  250.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  251.     'X',    'Y',    'Z',    '[',    '\\',    ']',    '^',    '_',
  252.     '`',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  253.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  254.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  255.     'X',    'Y',    'Z',    '{',    '|',    '}',    '~',    '\177'
  256. };
  257. #endif /* ASCII */
  258.