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