home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 11 / AUCD11B.iso / LANGUAGES / WraithSet / AwkStuff / MawkSrc / c / makescan < prev    next >
Text File  |  1999-11-28  |  3KB  |  120 lines

  1.  
  2. /********************************************
  3. makescan.c
  4. copyright 1991, Michael D. Brennan
  5.  
  6. This is a source file for mawk, an implementation of
  7. the AWK programming language.
  8.  
  9. Mawk is distributed without warranty under the terms of
  10. the GNU General Public License, version 2, 1991.
  11. ********************************************/
  12.  
  13. /*$Log: makescan.c,v $
  14.  * Revision 1.3  1993/07/17  13:23:01  mike
  15.  * indent and general code cleanup
  16.  *
  17.  * Revision 1.2  1993/07/15  13:26:59  mike
  18.  * SIZE_T and indent
  19.  *
  20.  * Revision 1.1.1.1  1993/07/03  18:58:16  mike
  21.  * move source to cvs
  22.  *
  23.  * Revision 5.1  1991/12/05  07:56:16  brennan
  24.  * 1.1 pre-release
  25.  *
  26. */
  27.  
  28. /* source for makescan.exe which builds the scancode[]
  29.    via:   makescan.exe > scancode.c
  30. */
  31.  
  32.  
  33. #define  MAKESCAN
  34.  
  35. #include  "scan.h"
  36.  
  37. char scan_code[256] ;
  38.  
  39. void
  40. scan_init()
  41. {
  42.    register char *p ;
  43.  
  44.    memset(scan_code, SC_UNEXPECTED, sizeof(scan_code)) ;
  45.    for (p = scan_code + '0'; p <= scan_code + '9'; p++)
  46.       *p = SC_DIGIT ;
  47.    scan_code[0] = 0 ;
  48.    scan_code[' '] = scan_code['\t'] = scan_code['\f'] = SC_SPACE ;
  49.    scan_code['\r'] = scan_code['\013'] = SC_SPACE ;
  50.  
  51.    scan_code[';'] = SC_SEMI_COLON ;
  52.    scan_code['\n'] = SC_NL ;
  53.    scan_code['{'] = SC_LBRACE ;
  54.    scan_code['}'] = SC_RBRACE ;
  55.    scan_code['+'] = SC_PLUS ;
  56.    scan_code['-'] = SC_MINUS ;
  57.    scan_code['*'] = SC_MUL ;
  58.    scan_code['/'] = SC_DIV ;
  59.    scan_code['%'] = SC_MOD ;
  60.    scan_code['^'] = SC_POW ;
  61.    scan_code['('] = SC_LPAREN ;
  62.    scan_code[')'] = SC_RPAREN ;
  63.    scan_code['_'] = SC_IDCHAR ;
  64.    scan_code['='] = SC_EQUAL ;
  65.    scan_code['#'] = SC_COMMENT ;
  66.    scan_code['\"'] = SC_DQUOTE ;
  67.    scan_code[','] = SC_COMMA ;
  68.    scan_code['!'] = SC_NOT ;
  69.    scan_code['<'] = SC_LT ;
  70.    scan_code['>'] = SC_GT ;
  71.    scan_code['|'] = SC_OR ;
  72.    scan_code['&'] = SC_AND ;
  73.    scan_code['?'] = SC_QMARK ;
  74.    scan_code[':'] = SC_COLON ;
  75.    scan_code['['] = SC_LBOX ;
  76.    scan_code[']'] = SC_RBOX ;
  77.    scan_code['\\'] = SC_ESCAPE ;
  78.    scan_code['.'] = SC_DOT ;
  79.    scan_code['~'] = SC_MATCH ;
  80.    scan_code['$'] = SC_DOLLAR ;
  81.  
  82.    for (p = scan_code + 'A'; p <= scan_code + 'Z'; p++)
  83.       *p = *(p + 'a' - 'A') = SC_IDCHAR ;
  84.  
  85. }
  86.  
  87. void
  88. scan_print()
  89. {
  90.    register char *p = scan_code ;
  91.    register int c ;              /* column */
  92.    register int r ;              /* row */
  93.  
  94.    printf("\n\n/* scancode.c */\n\n\n") ;
  95.    printf("char scan_code[256] = {\n") ;
  96.  
  97.    for (r = 1; r <= 16; r++)
  98.    {
  99.       for (c = 1; c <= 16; c++)
  100.       {
  101.          printf("%2d", *p++) ;
  102.          if (r != 16 || c != 16)  putchar(',') ;
  103.       }
  104.       putchar('\n') ;
  105.    }
  106.  
  107.    printf("} ;\n") ;
  108. }
  109.  
  110.  
  111. int
  112. main(argc, argv)
  113.    int argc ;
  114.    char **argv ;
  115. {
  116.    scan_init() ;
  117.    scan_print() ;
  118.    return 0 ;
  119. }
  120.