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