1*29996Sminshall /*
2*29996Sminshall  * This program scans a file which describes a keyboard.  The output
3*29996Sminshall  * of the program is a series of 'C' declarations which describe a
4*29996Sminshall  * mapping between (scancode, shiftstate, altstate) and 3270 functions,
5*29996Sminshall  * characters, and AIDs.
6*29996Sminshall  *
7*29996Sminshall  * The format of the input file is as follows:
8*29996Sminshall  *
9*29996Sminshall  * keynumber [ scancode [ unshifted [ shifted [ alted [ shiftalted ] ] ] ] ]
10*29996Sminshall  *
11*29996Sminshall  * keynumber is in decimal, and starts in column 1.
12*29996Sminshall  * scancode is hexadecimal.
13*29996Sminshall  * unshifted, etc. - these are either a single ascii character,
14*29996Sminshall  *			or the name of a function or an AID-generating key.
15*29996Sminshall  *
16*29996Sminshall  * all fields are separated by a single space.
17*29996Sminshall  */
18*29996Sminshall 
19*29996Sminshall #include <stdio.h>
20*29996Sminshall #include <string.h>
21*29996Sminshall #include <ctype.h>
22*29996Sminshall #include "../ascebc.h"
23*29996Sminshall #include "../ebc_disp.h"
24*29996Sminshall #include "../kbd3270.h"
25*29996Sminshall 
26*29996Sminshall #include "dohits.h"
27*29996Sminshall 
28*29996Sminshall 
29*29996Sminshall void
30*29996Sminshall main()
31*29996Sminshall {
32*29996Sminshall     int scancode;
33*29996Sminshall     int empty;
34*29996Sminshall     int i;
35*29996Sminshall     struct hits *ph;
36*29996Sminshall     struct Hits *Ph;
37*29996Sminshall 
38*29996Sminshall     dohits();		/* Set up "Hits" */
39*29996Sminshall 
40*29996Sminshall     printf("struct hits hits[] = {\n");
41*29996Sminshall     empty = 0;
42*29996Sminshall     scancode = -1;
43*29996Sminshall     for (Ph = Hits; Ph < Hits+(sizeof Hits/sizeof Hits[0]); Ph++) {
44*29996Sminshall 	ph = &Ph->hits;
45*29996Sminshall 	scancode++;
46*29996Sminshall 	if ((ph->hit[0].type == undefined)
47*29996Sminshall 		&& (ph->hit[1].type == undefined)
48*29996Sminshall 		&& (ph->hit[2].type == undefined)
49*29996Sminshall 		&& (ph->hit[3].type == undefined)) {
50*29996Sminshall 	    empty++;
51*29996Sminshall 	    continue;
52*29996Sminshall 	} else {
53*29996Sminshall 	    while (empty) {
54*29996Sminshall 		printf("\t{ 0, {\t{ illegal },\t{ illegal }");
55*29996Sminshall 		printf(",\t{ illegal },\t{ illegal } } },\n");
56*29996Sminshall 		empty--;
57*29996Sminshall 	    }
58*29996Sminshall 	}
59*29996Sminshall 	printf("\t{ %d, {\t/* 0x%02x */\n\t", ph->keynumber, scancode);
60*29996Sminshall 	for (i = 0; i < 4; i++) {
61*29996Sminshall 	    printf("\t{ ");
62*29996Sminshall 	    switch (ph->hit[i].type) {
63*29996Sminshall 	    case undefined:
64*29996Sminshall 	    case illegal:
65*29996Sminshall 		printf("illegal");
66*29996Sminshall 		break;
67*29996Sminshall 	    case character:
68*29996Sminshall 		printf("character, 0x%02x", ph->hit[i].code);
69*29996Sminshall 		break;
70*29996Sminshall 	    case function:
71*29996Sminshall 		printf("function, %s", Ph->name[i]);
72*29996Sminshall 		break;
73*29996Sminshall 	    case aid:
74*29996Sminshall 		printf("aid, %s", Ph->name[i]);
75*29996Sminshall 		break;
76*29996Sminshall 	    }
77*29996Sminshall 	    printf(" },\n\t");
78*29996Sminshall 	}
79*29996Sminshall 	printf("} },\n");
80*29996Sminshall     }
81*29996Sminshall     printf("};\n");
82*29996Sminshall }
83