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> 20*31102Sminshall #if defined(unix) 2131065Sminshall #include <strings.h> 22*31102Sminshall #else /* defined(unix) */ 23*31102Sminshall #include <string.h> 24*31102Sminshall #endif /* defined(unix) */ 2529996Sminshall #include <ctype.h> 2630052Sminshall #include "../ascii/ascebc.h" 2730052Sminshall #include "../ctlr/ebc_disp.h" 2830052Sminshall #include "../ctlr/function.h" 2929996Sminshall 3029996Sminshall #include "dohits.h" 3129996Sminshall 3229996Sminshall 33*31102Sminshall int 3430077Sminshall main(argc, argv) 3530077Sminshall int argc; 3630077Sminshall char *argv[]; 3729996Sminshall { 3829996Sminshall int scancode; 3929996Sminshall int empty; 4029996Sminshall int i; 4129996Sminshall struct hits *ph; 4229996Sminshall struct Hits *Ph; 4330077Sminshall char *aidfile = 0, *fcnfile = 0; 4429996Sminshall 4530077Sminshall if (argc > 1) { 4630077Sminshall if (argv[1][0] != '-') { 4730077Sminshall aidfile = argv[1]; 4830077Sminshall } 4930077Sminshall } 5030077Sminshall if (argc > 2) { 5130077Sminshall if (argv[2][0] != '-') { 5230077Sminshall fcnfile = argv[2]; 5330077Sminshall } 5430077Sminshall } 5529996Sminshall 5630077Sminshall dohits(aidfile, fcnfile); /* Set up "Hits" */ 5730077Sminshall 5829996Sminshall printf("struct hits hits[] = {\n"); 5929996Sminshall empty = 0; 6029996Sminshall scancode = -1; 6129996Sminshall for (Ph = Hits; Ph < Hits+(sizeof Hits/sizeof Hits[0]); Ph++) { 6229996Sminshall ph = &Ph->hits; 6329996Sminshall scancode++; 6430077Sminshall if ((ph->hit[0].ctlrfcn == undefined) 6530077Sminshall && (ph->hit[1].ctlrfcn == undefined) 6630077Sminshall && (ph->hit[2].ctlrfcn == undefined) 6730077Sminshall && (ph->hit[3].ctlrfcn == undefined)) { 6829996Sminshall empty++; 6929996Sminshall continue; 7029996Sminshall } else { 7129996Sminshall while (empty) { 7230077Sminshall printf("\t{ 0, { {undefined}, {undefined}"); 7330077Sminshall printf(", {undefined}, {undefined} } },\n"); 7429996Sminshall empty--; 7529996Sminshall } 7629996Sminshall } 7729996Sminshall printf("\t{ %d, {\t/* 0x%02x */\n\t", ph->keynumber, scancode); 7829996Sminshall for (i = 0; i < 4; i++) { 7929996Sminshall printf("\t{ "); 8030077Sminshall switch (ph->hit[i].ctlrfcn) { 8129996Sminshall case undefined: 8230077Sminshall printf("undefined"); 8329996Sminshall break; 8430077Sminshall case FCN_CHARACTER: 8530077Sminshall printf("FCN_CHARACTER, 0x%02x", ph->hit[i].code); 8629996Sminshall break; 8730077Sminshall case FCN_AID: 8830077Sminshall printf("FCN_AID, %s", Ph->name[i]); 8929996Sminshall break; 9030077Sminshall case FCN_NULL: 9130077Sminshall default: 9230077Sminshall if ((Ph->name[i] != 0) 9330077Sminshall && (strcmp(Ph->name[i], "FCN_NULL") != 0)) { 9430077Sminshall printf("%s", Ph->name[i]); 9530077Sminshall } else { 9630077Sminshall printf("undefined"); 9730077Sminshall } 9829996Sminshall break; 9929996Sminshall } 10029996Sminshall printf(" },\n\t"); 10129996Sminshall } 10229996Sminshall printf("} },\n"); 10329996Sminshall } 10429996Sminshall printf("};\n"); 105*31102Sminshall return 0; 10629996Sminshall } 107