129996Sminshall /*
229996Sminshall  * This program scans a file which describes a keyboard.  The output
329996Sminshall  * of the program is a series of 'C' declarations which describe a
429996Sminshall  * mapping between (scancode, shiftstate, altstate) and 3270 functions,
529996Sminshall  * characters, and AIDs.
629996Sminshall  *
729996Sminshall  * The format of the input file is as follows:
829996Sminshall  *
929996Sminshall  * keynumber [ scancode [ unshifted [ shifted [ alted [ shiftalted ] ] ] ] ]
1029996Sminshall  *
1129996Sminshall  * keynumber is in decimal, and starts in column 1.
1229996Sminshall  * scancode is hexadecimal.
1329996Sminshall  * unshifted, etc. - these are either a single ascii character,
1429996Sminshall  *			or the name of a function or an AID-generating key.
1529996Sminshall  *
1629996Sminshall  * all fields are separated by a single space.
1729996Sminshall  */
1829996Sminshall 
1929996Sminshall #include <stdio.h>
2029996Sminshall #include <string.h>
2129996Sminshall #include <ctype.h>
22*30052Sminshall #include "../ascii/ascebc.h"
23*30052Sminshall #include "../ctlr/ebc_disp.h"
24*30052Sminshall #include "../ctlr/function.h"
2529996Sminshall 
2629996Sminshall #include "dohits.h"
2729996Sminshall 
2829996Sminshall 
2929996Sminshall void
3029996Sminshall main()
3129996Sminshall {
3229996Sminshall     int scancode;
3329996Sminshall     int empty;
3429996Sminshall     int i;
3529996Sminshall     struct hits *ph;
3629996Sminshall     struct Hits *Ph;
3729996Sminshall 
3829996Sminshall     dohits();		/* Set up "Hits" */
3929996Sminshall 
4029996Sminshall     printf("struct hits hits[] = {\n");
4129996Sminshall     empty = 0;
4229996Sminshall     scancode = -1;
4329996Sminshall     for (Ph = Hits; Ph < Hits+(sizeof Hits/sizeof Hits[0]); Ph++) {
4429996Sminshall 	ph = &Ph->hits;
4529996Sminshall 	scancode++;
4629996Sminshall 	if ((ph->hit[0].type == undefined)
4729996Sminshall 		&& (ph->hit[1].type == undefined)
4829996Sminshall 		&& (ph->hit[2].type == undefined)
4929996Sminshall 		&& (ph->hit[3].type == undefined)) {
5029996Sminshall 	    empty++;
5129996Sminshall 	    continue;
5229996Sminshall 	} else {
5329996Sminshall 	    while (empty) {
5429996Sminshall 		printf("\t{ 0, {\t{ illegal },\t{ illegal }");
5529996Sminshall 		printf(",\t{ illegal },\t{ illegal } } },\n");
5629996Sminshall 		empty--;
5729996Sminshall 	    }
5829996Sminshall 	}
5929996Sminshall 	printf("\t{ %d, {\t/* 0x%02x */\n\t", ph->keynumber, scancode);
6029996Sminshall 	for (i = 0; i < 4; i++) {
6129996Sminshall 	    printf("\t{ ");
6229996Sminshall 	    switch (ph->hit[i].type) {
6329996Sminshall 	    case undefined:
6429996Sminshall 	    case illegal:
6529996Sminshall 		printf("illegal");
6629996Sminshall 		break;
6729996Sminshall 	    case character:
6829996Sminshall 		printf("character, 0x%02x", ph->hit[i].code);
6929996Sminshall 		break;
7029996Sminshall 	    case function:
7129996Sminshall 		printf("function, %s", Ph->name[i]);
7229996Sminshall 		break;
7329996Sminshall 	    case aid:
7429996Sminshall 		printf("aid, %s", Ph->name[i]);
7529996Sminshall 		break;
7629996Sminshall 	    }
7729996Sminshall 	    printf(" },\n\t");
7829996Sminshall 	}
7929996Sminshall 	printf("} },\n");
8029996Sminshall     }
8129996Sminshall     printf("};\n");
8229996Sminshall }
83