|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that this notice is preserved and that due credit is given ! 7: * to the University of California at Berkeley. The name of the University ! 8: * may not be used to endorse or promote products derived from this ! 9: * software without specific prior written permission. This software ! 10: * is provided ``as is'' without express or implied warranty. ! 11: */ ! 12: ! 13: #ifndef lint ! 14: char copyright[] = ! 15: "@(#) Copyright (c) 1988 Regents of the University of California.\n\ ! 16: All rights reserved.\n"; ! 17: #endif /* not lint */ ! 18: ! 19: #ifndef lint ! 20: static char sccsid[] = "@(#)mkastosc.c 3.2 (Berkeley) 3/28/88"; ! 21: #endif /* not lint */ ! 22: ! 23: #include <stdio.h> ! 24: #if defined(unix) ! 25: #include <strings.h> ! 26: #else /* defined(unix) */ ! 27: #include <string.h> ! 28: #endif /* defined(unix) */ ! 29: #include <ctype.h> ! 30: ! 31: #include "../general/general.h" ! 32: #include "../ctlr/function.h" ! 33: ! 34: #include "dohits.h" ! 35: ! 36: static struct tbl { ! 37: unsigned char ! 38: scancode, ! 39: used; ! 40: char ! 41: *shiftstate; ! 42: } tbl[128]; ! 43: ! 44: int ! 45: main(argc, argv) ! 46: int argc; ! 47: char *argv[]; ! 48: { ! 49: int scancode; ! 50: int asciicode; ! 51: int empty; ! 52: int i; ! 53: int c; ! 54: int found; ! 55: struct hits *ph; ! 56: struct Hits *Ph; ! 57: struct thing *this; ! 58: struct thing **attable; ! 59: struct tbl *Pt; ! 60: static char *shiftof[] = ! 61: { "0", "SHIFT_UPSHIFT", "SHIFT_ALT", "SHIFT_ALT|SHIFT_UPSHIFT" }; ! 62: char *aidfile = 0, *fcnfile = 0; ! 63: ! 64: if (argc > 1) { ! 65: if (argv[1][0] != '-') { ! 66: aidfile = argv[1]; ! 67: } ! 68: } ! 69: if (argc > 2) { ! 70: if (argv[2][0] != '-') { ! 71: fcnfile = argv[2]; ! 72: } ! 73: } ! 74: ! 75: dohits(aidfile, fcnfile); /* Set up "Hits" */ ! 76: ! 77: printf("/*\n"); ! 78: printf(" * Ascii to scancode conversion table. First\n"); ! 79: printf(" * 128 bytes (0-127) correspond with actual Ascii\n"); ! 80: printf(" * characters; the rest are functions from ctrl/function.h\n"); ! 81: printf(" */\n"); ! 82: /* Build the ascii part of the table. */ ! 83: for (Ph = Hits, scancode = 0; Ph <= Hits+highestof(Hits); ! 84: Ph++, scancode++) { ! 85: ph = &Ph->hits; ! 86: for (i = 0; i < 4; i++) { ! 87: if (ph->hit[i].ctlrfcn == FCN_CHARACTER) { ! 88: c = Ph->name[i][0]; /* "name" of this one */ ! 89: if (tbl[c].used == 0) { ! 90: tbl[c].used = 1; ! 91: tbl[c].shiftstate = shiftof[i]; ! 92: tbl[c].scancode = scancode; ! 93: } ! 94: } ! 95: } ! 96: } ! 97: /* Now, output the table */ ! 98: for (Pt = tbl, asciicode = 0; Pt <= tbl+highestof(tbl); Pt++, asciicode++) { ! 99: if (Pt->used == 0) { ! 100: if (isprint(asciicode) && (asciicode != ' ')) { ! 101: fprintf(stderr, "Unable to produce scancode sequence for"); ! 102: fprintf(stderr, " ASCII character [%c]!\n", asciicode); ! 103: } ! 104: printf("\t{ 0, 0, undefined, 0 },\t"); ! 105: } else { ! 106: printf("\t{ 0x%02x, %s, FCN_CHARACTER, 0 },", ! 107: Pt->scancode, Pt->shiftstate); ! 108: } ! 109: printf("\t/* 0x%x", asciicode); ! 110: if (isprint(asciicode)) { ! 111: printf(" [%c]", asciicode); ! 112: } ! 113: printf(" */\n"); ! 114: } ! 115: ! 116: ! 117: for (attable = &table[0]; attable <= &table[highestof(table)]; attable++) { ! 118: for (this = *attable; this; this = this->next) { ! 119: Ph = this->hits; ! 120: if (Ph == 0) { ! 121: continue; ! 122: } ! 123: for (i = 0; i < 4; i++) { ! 124: if ((Ph->name[i] != 0) && ! 125: (Ph->name[i][0] == this->name[0]) && ! 126: (strcmp(Ph->name[i], this->name) == 0)) { ! 127: printf("\t{ 0x%02x, %s, ", ! 128: Ph-Hits, shiftof[i]); ! 129: if (memcmp("AID_", this->name, 4) == 0) { /* AID key */ ! 130: printf("FCN_AID, "); ! 131: } else { ! 132: printf("%s, ", Ph->name[i]); ! 133: } ! 134: if (memcmp("PF", this->name+4, 2) == 0) { ! 135: printf("\"PFK%s\" },\n", Ph->name[i]+4+2); ! 136: } else { ! 137: printf("\"%s\" },\n", Ph->name[i]+4); ! 138: } ! 139: } ! 140: } ! 141: } ! 142: } ! 143: ! 144: return 0; ! 145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.