home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / m / mawk11as.zip / MAKESCAN.C < prev    next >
C/C++ Source or Header  |  1991-12-18  |  3KB  |  121 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 5.1  91/12/05  07:56:16  brennan
  15.  * 1.1 pre-release
  16.  * 
  17. */
  18.  
  19. /* source for makescan.exe which builds the scancode[]
  20.    via:   makescan.exe > scancode.c
  21. */
  22.  
  23. #ifdef THINK_C
  24. #include <stdio.h>
  25. #include <console.h>
  26. #include <string.h>
  27. #define SIZE_T(x) (size_t)(x)
  28. #endif
  29.  
  30. #ifndef SIZE_T
  31. #define SIZE_T(x) (x)
  32. #endif
  33.  
  34. #define  MAKESCAN
  35.  
  36. #include  "scan.h"
  37.  
  38. char   scan_code[256] ;
  39.  
  40. void  scan_init()
  41.   register char *p ;
  42.  
  43.   (void) memset(scan_code, SC_UNEXPECTED, SIZE_T(sizeof(scan_code))) ;
  44.   for( p = scan_code + '0' ; p <= scan_code + '9' ; p++ )
  45.        *p = SC_DIGIT ;
  46.   scan_code[0] = 0 ;
  47.   scan_code[ ' ' ] = scan_code['\t'] = scan_code['\f'] = SC_SPACE ;
  48.   scan_code[ '\r'] = scan_code['\013'] = SC_SPACE ;
  49.  
  50.   scan_code[';'] = SC_SEMI_COLON ;
  51.   scan_code['\n'] = SC_NL ;
  52.   scan_code['{'] = SC_LBRACE ;
  53.   scan_code[ '}'] = SC_RBRACE ;
  54.   scan_code['+'] = SC_PLUS ;
  55.   scan_code['-'] = SC_MINUS ;
  56.   scan_code['*'] = SC_MUL ;
  57.   scan_code['/'] = SC_DIV ;
  58.   scan_code['%'] = SC_MOD ;
  59.   scan_code['^'] = SC_POW ;
  60.   scan_code['('] = SC_LPAREN ;
  61.   scan_code[')'] = SC_RPAREN ;
  62.   scan_code['_'] = SC_IDCHAR ;
  63.   scan_code['='] = SC_EQUAL ;
  64.   scan_code['#'] = SC_COMMENT ;
  65.   scan_code['\"'] = SC_DQUOTE ;
  66.   scan_code[','] = SC_COMMA ;
  67.   scan_code['!'] = SC_NOT ;
  68.   scan_code['<'] = SC_LT ;
  69.   scan_code['>'] = SC_GT ;
  70.   scan_code['|'] = SC_OR ;
  71.   scan_code['&'] = SC_AND ;
  72.   scan_code['?'] = SC_QMARK ;
  73.   scan_code[':'] = SC_COLON ;
  74.   scan_code['['] = SC_LBOX ;
  75.   scan_code[']'] = SC_RBOX ;
  76.   scan_code['\\'] = SC_ESCAPE ;
  77.   scan_code['.'] = SC_DOT ;
  78.   scan_code['~'] = SC_MATCH ;
  79.   scan_code['$'] = SC_DOLLAR ;
  80.  
  81.   for( p = scan_code + 'A' ; p <= scan_code + 'Z' ; p++ )
  82.        *p = *(p + 'a' - 'A') = SC_IDCHAR ;
  83.  
  84. }
  85.  
  86. void scan_print()
  87. { register char *p = scan_code ;
  88.   register int c ; /* column */
  89.   register int r ; /* row */
  90.  
  91.   printf("\n\n/* scancode.c */\n\n\n") ;
  92.   printf( "char scan_code[256] = {\n" ) ;
  93.  
  94.   for( r = 1 ; r <= 16 ; r++)
  95.   {
  96.     for( c = 1 ; c <= 16 ; c++)
  97.     {
  98.       printf("%2d" , *p++) ;
  99.       if ( r != 16 || c != 16 )  putchar(',') ;
  100.     }
  101.     putchar('\n') ;
  102.   }
  103.  
  104.   printf("} ;\n") ;
  105. }
  106.  
  107.  
  108. int main(argc,argv)
  109. int argc;
  110. char **argv;
  111. {
  112. #ifdef THINK_C
  113. fprintf(stderr, "MAKESCAN for MacMAWK\n");
  114. SetWTitle( FrontWindow(), "\pPC-KIMMO");
  115. argc = ccommand(&argv);
  116. #endif
  117.   scan_init() ; scan_print() ;
  118.   return 0 ;
  119. }
  120.