129998Sminshall 229998Sminshall #include <stdio.h> 331102Sminshall #if defined(unix) 431065Sminshall #include <strings.h> 531102Sminshall #else /* defined(unix) */ 631102Sminshall #include <string.h> 731102Sminshall #endif /* defined(unix) */ 829998Sminshall #include <ctype.h> 929998Sminshall 1031175Sminshall #include "../general/general.h" 1130052Sminshall #include "../ascii/ascebc.h" 1230052Sminshall #include "../ctlr/ebc_disp.h" 1330052Sminshall #include "../ctlr/function.h" 1429998Sminshall 1529998Sminshall #include "dohits.h" 1629998Sminshall 1731102Sminshall static struct tbl { 1831246Sminshall unsigned char 1931246Sminshall scancode, 2031246Sminshall used; 2131246Sminshall char 2231246Sminshall *shiftstate; 2331102Sminshall } tbl[128]; 2429998Sminshall 2531102Sminshall int 2630077Sminshall main(argc, argv) 2730077Sminshall int argc; 2830077Sminshall char *argv[]; 2929998Sminshall { 3029998Sminshall int scancode; 3130052Sminshall int asciicode; 3229998Sminshall int empty; 3329998Sminshall int i; 3430052Sminshall int c; 3529998Sminshall int found; 3629998Sminshall struct hits *ph; 3729998Sminshall struct Hits *Ph; 3829998Sminshall struct thing *this; 3931246Sminshall struct thing **attable; 4031102Sminshall struct tbl *Pt; 4131246Sminshall static char *shiftof[] = 4231246Sminshall { "0", "SHIFT_UPSHIFT", "SHIFT_ALT", "SHIFT_ALT|SHIFT_UPSHIFT" }; 4330077Sminshall char *aidfile = 0, *fcnfile = 0; 4429998Sminshall 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 } 5529998Sminshall 5630077Sminshall dohits(aidfile, fcnfile); /* Set up "Hits" */ 5730077Sminshall 5830052Sminshall printf("/*\n"); 5930052Sminshall printf(" * Ascii to scancode conversion table. First\n"); 6030052Sminshall printf(" * 128 bytes (0-127) correspond with actual Ascii\n"); 6131246Sminshall printf(" * characters; the rest are functions from ctrl/function.h\n"); 6230052Sminshall printf(" */\n"); 6330052Sminshall /* Build the ascii part of the table. */ 6430052Sminshall for (Ph = Hits, scancode = 0; Ph <= Hits+highestof(Hits); 6530052Sminshall Ph++, scancode++) { 6630052Sminshall ph = &Ph->hits; 6730052Sminshall for (i = 0; i < 4; i++) { 6830077Sminshall if (ph->hit[i].ctlrfcn == FCN_CHARACTER) { 6930052Sminshall c = Ph->name[i][0]; /* "name" of this one */ 7031246Sminshall if (tbl[c].used == 0) { 7131246Sminshall tbl[c].used = 1; 7231246Sminshall tbl[c].shiftstate = shiftof[i]; 7330052Sminshall tbl[c].scancode = scancode; 7430052Sminshall } 7530052Sminshall } 7630052Sminshall } 7730052Sminshall } 7830052Sminshall /* Now, output the table */ 7930052Sminshall for (Pt = tbl, asciicode = 0; Pt <= tbl+highestof(tbl); Pt++, asciicode++) { 8031246Sminshall if (Pt->used == 0) { 8130052Sminshall if (isprint(asciicode) && (asciicode != ' ')) { 8230052Sminshall fprintf(stderr, "Unable to produce scancode sequence for"); 8330052Sminshall fprintf(stderr, " ASCII character [%c]!\n", asciicode); 8430052Sminshall } 8531246Sminshall printf("\t{ 0, 0, undefined, 0 },\t"); 8630052Sminshall } else { 8731246Sminshall printf("\t{ 0x%02x, %s, FCN_CHARACTER, 0 },", 8831246Sminshall Pt->scancode, Pt->shiftstate); 8930052Sminshall } 9030052Sminshall printf("\t/* 0x%x", asciicode); 9130052Sminshall if (isprint(asciicode)) { 9230052Sminshall printf(" [%c]", asciicode); 9330052Sminshall } 9430052Sminshall printf(" */\n"); 9530052Sminshall } 9630052Sminshall 9730052Sminshall 9831246Sminshall for (attable = &table[0]; attable <= &table[highestof(table)]; attable++) { 9931246Sminshall for (this = *attable; this; this = this->next) { 10031246Sminshall Ph = this->hits; 10131246Sminshall if (Ph == 0) { 10231246Sminshall continue; 10331246Sminshall } 10431246Sminshall for (i = 0; i < 4; i++) { 10531246Sminshall if ((Ph->name[i] != 0) && 10631246Sminshall (Ph->name[i][0] == this->name[0]) && 10731246Sminshall (strcmp(Ph->name[i], this->name) == 0)) { 10831246Sminshall printf("\t{ 0x%02x, %s, ", 10931246Sminshall Ph-Hits, shiftof[i]); 110*31247Sminshall if (memcmp("AID_", this->name, 4) == 0) { /* AID key */ 11131246Sminshall printf("FCN_AID, "); 11231246Sminshall } else { 11331246Sminshall printf("%s, ", Ph->name[i]); 11429998Sminshall } 115*31247Sminshall if (memcmp("PF", this->name+4, 2) == 0) { 11631246Sminshall printf("\"PFK%s\" },\n", Ph->name[i]+4+2); 11731246Sminshall } else { 11831246Sminshall printf("\"%s\" },\n", Ph->name[i]+4); 11931246Sminshall } 12029998Sminshall } 12129998Sminshall } 12229998Sminshall } 12329998Sminshall } 12431102Sminshall 12531102Sminshall return 0; 12629998Sminshall } 127