Commit | Line | Data |
---|---|---|
a7e60862 WJ |
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 | { | |
42 | register char *p ; | |
43 | ||
44 | (void) memset(scan_code, SC_UNEXPECTED, SIZE_T(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 scan_print() | |
88 | { register char *p = scan_code ; | |
89 | register int c ; /* column */ | |
90 | register int r ; /* row */ | |
91 | ||
92 | printf("\n\n/* scancode.c */\n\n\n") ; | |
93 | printf( "char scan_code[256] = {\n" ) ; | |
94 | ||
95 | for( r = 1 ; r <= 16 ; r++) | |
96 | { | |
97 | for( c = 1 ; c <= 16 ; c++) | |
98 | { | |
99 | printf("%2d" , *p++) ; | |
100 | if ( r != 16 || c != 16 ) putchar(',') ; | |
101 | } | |
102 | putchar('\n') ; | |
103 | } | |
104 | ||
105 | printf("} ;\n") ; | |
106 | } | |
107 | ||
108 | ||
109 | int main(argc,argv) | |
110 | int argc; | |
111 | char **argv; | |
112 | { | |
113 | #ifdef THINK_C | |
114 | fprintf(stderr, "MAKESCAN for MacMAWK\n"); | |
115 | SetWTitle( FrontWindow(), "\pPC-KIMMO"); | |
116 | argc = ccommand(&argv); | |
117 | #endif | |
118 | scan_init() ; scan_print() ; | |
119 | return 0 ; | |
120 | } |