[BACK]Return to makemap.awk CVS log [TXT][DIR] Up to [local] / sys / arch / hppa / gsc

Annotation of sys/arch/hppa/gsc/makemap.awk, Revision 1.1.1.1

1.1       nbrk        1: #! /usr/bin/awk -f
                      2: #      $OpenBSD: makemap.awk,v 1.6 2005/05/12 16:21:23 miod Exp $
                      3: #
                      4: # Copyright (c) 2003, 2005, Miodrag Vallat.
                      5: # All rights reserved.
                      6: #
                      7: # Redistribution and use in source and binary forms, with or without
                      8: # modification, are permitted provided that the following conditions
                      9: # are met:
                     10: # 1. Redistributions of source code must retain the above copyright
                     11: #    notice, this list of conditions and the following disclaimer.
                     12: # 2. Redistributions in binary form must reproduce the above copyright
                     13: #    notice, this list of conditions and the following disclaimer in the
                     14: #    documentation and/or other materials provided with the distribution.
                     15: #
                     16: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     17: # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     18: # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     19: # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     20: # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     21: # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     22: # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     23: # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     24: # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     25: # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     26: #
                     27:
                     28: #
                     29: # This script attempts to convert, with minimal hacks and losses, the
                     30: # regular PS/2 keyboard (pckbd) layout tables into GSC keyboard (gsckbd)
                     31: # layout tables, as almost all scancodes are completely different in the
                     32: # GSC world.
                     33: #
                     34:
                     35: BEGIN {
                     36:        rcsid = "$OpenBSD: makemap.awk,v 1.6 2005/05/12 16:21:23 miod Exp $"
                     37:        ifdepth = 0
                     38:        ignore = 0
                     39:        mapnum = 0
                     40:        declk = 0
                     41:
                     42:        # PS/2 id -> GSCKBD conversion table, or "sanity lossage 101"
                     43:        for (i = 0; i < 256; i++)
                     44:                conv[i] = -1
                     45:
                     46:        conv[1] = 118
                     47:        conv[2] = 22
                     48:        conv[3] = 30
                     49:        conv[4] = 38
                     50:        conv[5] = 37
                     51:        conv[6] = 46
                     52:        conv[7] = 54
                     53:        conv[8] = 61
                     54:        conv[9] = 62
                     55:        conv[10] = 70
                     56:        conv[11] = 69
                     57:        conv[12] = 78
                     58:        conv[13] = 85
                     59:        conv[14] = 102
                     60:        conv[15] = 13
                     61:        conv[16] = 21
                     62:        conv[17] = 29
                     63:        conv[18] = 36
                     64:        conv[19] = 45
                     65:        conv[20] = 44
                     66:        conv[21] = 53
                     67:        conv[22] = 60
                     68:        conv[23] = 67
                     69:        conv[24] = 68
                     70:        conv[25] = 77
                     71:        conv[26] = 84
                     72:        conv[27] = 91
                     73:        conv[28] = 90
                     74:        conv[29] = 20
                     75:        conv[30] = 28
                     76:        conv[31] = 27
                     77:        conv[32] = 35
                     78:        conv[33] = 43
                     79:        conv[34] = 52
                     80:        conv[35] = 51
                     81:        conv[36] = 59
                     82:        conv[37] = 66
                     83:        conv[38] = 75
                     84:        conv[39] = 76
                     85:        conv[40] = 82
                     86:        conv[41] = 14
                     87:        conv[42] = 18
                     88:        conv[43] = 93
                     89:        conv[44] = 26
                     90:        conv[45] = 34
                     91:        conv[46] = 33
                     92:        conv[47] = 42
                     93:        conv[48] = 50
                     94:        conv[49] = 49
                     95:        conv[50] = 58
                     96:        conv[51] = 65
                     97:        conv[52] = 73
                     98:        conv[53] = 74
                     99:        conv[54] = 89
                    100:        conv[55] = 124
                    101:        conv[56] = 17
                    102:        conv[57] = 41
                    103:        conv[58] = 88
                    104:        conv[59] = 5
                    105:        conv[60] = 6
                    106:        conv[61] = 4
                    107:        conv[62] = 12
                    108:        conv[63] = 3
                    109:        conv[64] = 11
                    110:        conv[65] = 131
                    111:        conv[66] = 10
                    112:        conv[67] = 1
                    113:        conv[68] = 9
                    114:        conv[69] = 119
                    115:        conv[70] = 126
                    116:        conv[71] = 108
                    117:        conv[72] = 117
                    118:        conv[73] = 125
                    119:        conv[74] = 123
                    120:        conv[75] = 107
                    121:        conv[76] = 115
                    122:        conv[77] = 116
                    123:        conv[78] = 121
                    124:        conv[79] = 105
                    125:        conv[80] = 114
                    126:        conv[81] = 122
                    127:        conv[82] = 112
                    128:        conv[83] = 113
                    129:        conv[86] = 97
                    130:        conv[87] = 120
                    131:        conv[88] = 7
                    132:        # 112 used by jp
                    133:        # 115 used by jp and br
                    134:        # 121 used by jp
                    135:        # 123 used by jp
                    136:        # 125 used by jp
                    137:        conv[127] = 127
                    138:        conv[156] = 218
                    139:        conv[157] = 148
                    140:        # Print Screen produces E0 12 E0 7C when pressed, then E0 7C E0 12
                    141:        # when released.  Ignore the E0 12 code and match only on E0 7C
                    142:        conv[170] = 252
                    143:        conv[181] = 202
                    144:        conv[184] = 145
                    145:        conv[198] = 254
                    146:        conv[199] = 236
                    147:        conv[200] = 245
                    148:        conv[201] = 253
                    149:        conv[203] = 235
                    150:        conv[205] = 244
                    151:        conv[207] = 233
                    152:        conv[208] = 242
                    153:        conv[209] = 250
                    154:        conv[210] = 240
                    155:        conv[211] = 113
                    156: }
                    157: NR == 1 {
                    158:        VERSION = $0
                    159:        gsub("\\$", "", VERSION)
                    160:        gsub("\\$", "", rcsid)
                    161:
                    162:        printf("/*\t\$OpenBSD\$\t*/\n\n")
                    163:        printf("/*\n")
                    164:        printf(" * THIS FILE IS AUTOMAGICALLY GENERATED.  DO NOT EDIT.\n")
                    165:        printf(" *\n")
                    166:        printf(" * generated by:\n")
                    167:        printf(" *\t%s\n", rcsid)
                    168:        printf(" * generated from:\n")
                    169:        printf(" */\n")
                    170:        print VERSION
                    171:
                    172:        next
                    173: }
                    174:
                    175: #
                    176: # A very limited #if ... #endif parser. We only want to correctly detect
                    177: # ``#if 0'' constructs, so as not to process their contents. This is necessary
                    178: # since our output is out-of-order from our input.
                    179: #
                    180: # Note that this does NOT handle ``#ifdef notyet'' correctly - please only use
                    181: # ``#if 0'' constructs in the input.
                    182: #
                    183:
                    184: /^#if/ {
                    185:        ignores[ifdepth] = ignore
                    186:        if ($2 == "0")
                    187:                ignore = 1
                    188:        else
                    189:                ignore = 0
                    190:        ifdepth++
                    191:        if (ignore)
                    192:                next
                    193: }
                    194: /^#endif/ {
                    195:        oldignore = ignore
                    196:        ifdepth--
                    197:        ignore = ignores[ifdepth]
                    198:        ignores[ifdepth] = 0
                    199:        if (oldignore)
                    200:                next
                    201: }
                    202:
                    203: $1 == "#include" {
                    204:        if (ignore)
                    205:                next
                    206:        if ($2 == "<dev/pckbc/wskbdmap_mfii.h>")
                    207:                print "#include <hppa/gsc/gsckbdmap.h>"
                    208:        else
                    209:                printf("#include %s\n", $2)
                    210:
                    211:        next
                    212: }
                    213: $1 == "#define" || $1 == "#undef" {
                    214:        if (ignore)
                    215:                next
                    216:        print $0
                    217:        next
                    218: }
                    219:
                    220: # Don't bother converting the DEC LK layout.
                    221: /declk\[/ {
                    222:        declk = 1
                    223:        next
                    224: }
                    225: /declk/ {
                    226:        next
                    227: }
                    228:
                    229: /pckbd/ {
                    230:        if (ignore)
                    231:                next
                    232:        gsub("pckbd", "gsckbd", $0)
                    233:        print $0
                    234:        next
                    235: }
                    236:
                    237: /KC/ {
                    238:        if (ignore)
                    239:                next
                    240:
                    241:        if (declk)
                    242:                next
                    243:
                    244:        sidx = substr($1, 4, length($1) - 5)
                    245:        orig = int(sidx)
                    246:        id = conv[orig]
                    247:
                    248:        # 183 is another Print Screen...
                    249:        if (orig == 183)
                    250:                next
                    251:
                    252:        if (id == -1) {
                    253:                printf("/* initially KC(%d),", orig)
                    254:                for (f = 2; f <= NF; f++) {
                    255:                        if ($f != "/*" && $f != "*/")
                    256:                                printf("\t%s", $f)
                    257:                }
                    258:                printf("\t*/\n")
                    259:        } else {
                    260:                lines[id] = sprintf("    KC(%d),\t", id)
                    261:                #
                    262:                # This makes sure that the non-comment part of the output
                    263:                # ends up with a trailing comma. This is necessary since
                    264:                # the last line of an input block might not have a trailing
                    265:                # comma, but might not be the last line of an output block
                    266:                # due to sorting.
                    267:                #
                    268:                comma = 0
                    269:                for (f = 2; f <= NF; f++) {
                    270:                        l = length($f)
                    271:                        if ($f == "/*")
                    272:                                comma++
                    273:                        if (comma == 0 && substr($f, l) != ",") {
                    274:                                lines[id] = sprintf("%s%s,", lines[id], $f)
                    275:                                l++
                    276:                        } else {
                    277:                                lines[id] = sprintf("%s%s", lines[id], $f)
                    278:                        }
                    279:                        if (comma == 0 && f != NF) {
                    280:                                if (l < 2 * 8)
                    281:                                        lines[id] = lines[id] "\t"
                    282:                                if (l < 8)
                    283:                                        lines[id] = lines[id] "\t"
                    284:                        }
                    285:                        if ($f == "*/")
                    286:                                comma--
                    287:                }
                    288:        }
                    289:
                    290:        next
                    291: }
                    292: /};/ {
                    293:        if (ignore)
                    294:                next
                    295:
                    296:        if (declk) {
                    297:                declk = 0
                    298:                next
                    299:        }
                    300:
                    301:        for (i = 0; i < 256; i++)
                    302:                if (lines[i]) {
                    303:                        print lines[i]
                    304:                        lines[i] = ""
                    305:                }
                    306:
                    307:        if (mapnum == 0) {
                    308:                # Add 241 to the US map...
                    309:                print "    KC(241),\tKS_Delete"
                    310:                print $0
                    311:                print "\nstatic const keysym_t gsckbd_keydesc_precisionbook[] = {"
                    312:                print "/*  pos      command\t\tnormal           shifted */"
                    313:                print "    KC(7),   KS_Cmd_Screen0,\tKS_f1,"
                    314:                print "    KC(15),  KS_Cmd_Screen1,\tKS_f2,"
                    315:                print "    KC(23),  KS_Cmd_Screen2,\tKS_f3,"
                    316:                print "    KC(31),  KS_Cmd_Screen3,\tKS_f4,"
                    317:                print "    KC(39),  KS_Cmd_Screen4,\tKS_f5,"
                    318:                print "    KC(47),  KS_Cmd_Screen5,\tKS_f6,"
                    319:                print "    KC(55),  KS_Cmd_Screen6,\tKS_f7,"
                    320:                print "    KC(63),  KS_Cmd_Screen7,\tKS_f8,"
                    321:                print "    KC(71),  KS_Cmd_Screen8,\tKS_f9,"
                    322:                print "    KC(79),  KS_Cmd_Screen9,\tKS_f10,"
                    323:                print "    KC(86),  KS_Cmd_Screen10,\tKS_f11,"
                    324:                print "    KC(94),  KS_Cmd_Screen11,\tKS_f12,"
                    325:                print "    KC(8),   KS_Cmd_Debugger,\tKS_Escape,"
                    326:                print "    KC(87),\t\t\tKS_Print_Screen,"
                    327:                print "    KC(92),\t\t\tKS_backslash,\tKS_bar,"
                    328:                print "    KC(96),\t\t\tKS_KP_Down,\tKS_KP_2,"
                    329:                print "    KC(95),\t\t\tKS_Hold_Screen,"
                    330:                print "    KC(97),\t\t\tKS_KP_Left,\tKS_KP_4,"
                    331:                print "    KC(98),\t\t\tKS_Pause, /* Break */"
                    332:                print "    KC(99),\t\t\tKS_KP_Up,\tKS_KP_8,"
                    333:                print "    KC(100),\t\t\tKS_KP_Delete,\tKS_KP_Decimal,"
                    334:                print "    KC(101),\t\t\tKS_KP_End,\tKS_KP_1,"
                    335:                print "    KC(103),\t\t\tKS_KP_Insert,\tKS_KP_0,"
                    336:                print "    KC(106),\t\t\tKS_KP_Right,\tKS_KP_6,"
                    337:                print "    KC(109),\t\t\tKS_KP_Next,\tKS_KP_3,"
                    338:                print "    KC(110),\t\t\tKS_KP_Home,\tKS_KP_7,"
                    339:                print "    KC(111),\t\t\tKS_KP_Prior,\tKS_KP_9,"
                    340:                print "    KC(20),\t\t\tKS_Caps_Lock,"
                    341:                print "    KC(17),  KS_Cmd1,\t\tKS_Control_L,"
                    342:                print "    KC(88),  KS_Cmd1,\t\tKS_Control_R,"
                    343:                print "    KC(25),  KS_Cmd2,\t\tKS_Alt_L,"
                    344:                print "    KC(57),  KS_Cmd2,\t\tKS_Alt_R,\tKS_Multi_key,"
                    345:                print "    KC(139),\t\t\tKS_Meta_L,"
                    346:                print "    KC(140),\t\t\tKS_Meta_R,"
                    347:        }
                    348:        mapnum++
                    349: }
                    350: /{0, 0, 0, 0}/ {
                    351:        printf("\tKBD_MAP(KB_US | KB_MACHDEP,\tKB_US,\tgsckbd_keydesc_precisionbook),\n");
                    352: }
                    353: {
                    354:        if (ignore)
                    355:                next
                    356:        if (declk)
                    357:                next
                    358:        print $0
                    359: }

CVSweb