OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / user / mawk / makescan.c
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 }