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 the above copyright notice and this paragraph are 7 * duplicated in all such forms and that any documentation, 8 * advertising materials, and other materials related to such 9 * distribution and use acknowledge that the software was developed 10 * by the University of California, Berkeley. The name of the 11 * University may not be used to endorse or promote products derived 12 * from this software without specific prior written permission. 13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16 */ 17 18 #ifndef lint 19 char copyright[] = 20 "@(#) Copyright (c) 1988 Regents of the University of California.\n\ 21 All rights reserved.\n"; 22 #endif /* not lint */ 23 24 #ifndef lint 25 static char sccsid[] = "@(#)mkhits.c 4.1 (Berkeley) 12/04/88"; 26 #endif /* not lint */ 27 28 /* 29 * This program scans a file which describes a keyboard. The output 30 * of the program is a series of 'C' declarations which describe a 31 * mapping between (scancode, shiftstate, altstate) and 3270 functions, 32 * characters, and AIDs. 33 * 34 * The format of the input file is as follows: 35 * 36 * keynumber [ scancode [ unshifted [ shifted [ alted [ shiftalted ] ] ] ] ] 37 * 38 * keynumber is in decimal, and starts in column 1. 39 * scancode is hexadecimal. 40 * unshifted, etc. - these are either a single ascii character, 41 * or the name of a function or an AID-generating key. 42 * 43 * all fields are separated by a single space. 44 */ 45 46 #include <stdio.h> 47 #if defined(unix) 48 #include <strings.h> 49 #else /* defined(unix) */ 50 #include <string.h> 51 #endif /* defined(unix) */ 52 #include <ctype.h> 53 #include "../ctlr/function.h" 54 55 #include "dohits.h" 56 57 58 int 59 main(argc, argv) 60 int argc; 61 char *argv[]; 62 { 63 int scancode; 64 int empty; 65 int i; 66 struct hits *ph; 67 struct Hits *Ph; 68 char *aidfile = 0, *fcnfile = 0; 69 70 if (argc > 1) { 71 if (argv[1][0] != '-') { 72 aidfile = argv[1]; 73 } 74 } 75 if (argc > 2) { 76 if (argv[2][0] != '-') { 77 fcnfile = argv[2]; 78 } 79 } 80 81 dohits(aidfile, fcnfile); /* Set up "Hits" */ 82 83 printf("struct hits hits[] = {\n"); 84 empty = 0; 85 scancode = -1; 86 for (Ph = Hits; Ph < Hits+(sizeof Hits/sizeof Hits[0]); Ph++) { 87 ph = &Ph->hits; 88 scancode++; 89 if ((ph->hit[0].ctlrfcn == undefined) 90 && (ph->hit[1].ctlrfcn == undefined) 91 && (ph->hit[2].ctlrfcn == undefined) 92 && (ph->hit[3].ctlrfcn == undefined)) { 93 empty++; 94 continue; 95 } else { 96 while (empty) { 97 printf("\t{ 0, { {undefined}, {undefined}"); 98 printf(", {undefined}, {undefined} } },\n"); 99 empty--; 100 } 101 } 102 printf("\t{ %d, {\t/* 0x%02x */\n\t", ph->keynumber, scancode); 103 for (i = 0; i < 4; i++) { 104 printf("\t{ "); 105 switch (ph->hit[i].ctlrfcn) { 106 case undefined: 107 printf("undefined"); 108 break; 109 case FCN_CHARACTER: 110 printf("FCN_CHARACTER, 0x%02x", ph->hit[i].code); 111 break; 112 case FCN_AID: 113 printf("FCN_AID, %s", Ph->name[i]); 114 break; 115 case FCN_NULL: 116 default: 117 if ((Ph->name[i] != 0) 118 && (strcmp(Ph->name[i], "FCN_NULL") != 0)) { 119 printf("%s", Ph->name[i]); 120 } else { 121 printf("undefined"); 122 } 123 break; 124 } 125 printf(" },\n\t"); 126 } 127 printf("} },\n"); 128 } 129 printf("};\n"); 130 return 0; 131 } 132