Annotation of 43BSD/contrib/X/CLUlib/x_keymap.clu, revision 1.1.1.1

1.1       root        1: x_keymap = cluster is load, getc, gets
                      2: 
                      3: rep = null
                      4: 
                      5: mapsub = 85
                      6: 
                      7: qb = sequence[bool]
                      8: 
                      9: slmin = 192
                     10: 
                     11: slmap  = qb$[true,             % 0301 q
                     12:              true,             % 0302 a
                     13:              true,             % 0303 z
                     14:              false,            % 0304
                     15:              false,            % 0305 2
                     16:              true,             % 0306 w
                     17:              true,             % 0307 s
                     18:              true,             % 0310 x
                     19:              false,            % 0311 <
                     20:              false,            % 0312
                     21:              false,            % 0313 3
                     22:              true,             % 0314 e
                     23:              true,             % 0315 d
                     24:              true,             % 0316 c
                     25:              false,            % 0317
                     26:              false,            % 0320 4
                     27:              true,             % 0321 r
                     28:              true,             % 0322 f
                     29:              true,             % 0323 v
                     30:              false,            % 0324 space
                     31:              false,            % 0325
                     32:              false,            % 0326 5
                     33:              true,             % 0327 t
                     34:              true,             % 0330 g
                     35:              true,             % 0331 b
                     36:              false,            % 0332
                     37:              false,            % 0333 6
                     38:              true,             % 0334 y
                     39:              true,             % 0335 h
                     40:              true,             % 0336 n
                     41:              false,            % 0337
                     42:              false,            % 0340 7
                     43:              true,             % 0341 u
                     44:              true,             % 0342 j
                     45:              true,             % 0343 m
                     46:              false,            % 0344
                     47:              false,            % 0345 8
                     48:              true,             % 0346 i
                     49:              true,             % 0347 k
                     50:              false,            % 0350 ,
                     51:              false,            % 0351
                     52:              false,            % 0352 9
                     53:              true,             % 0353 o
                     54:              true,             % 0354 l
                     55:              false,            % 0355 .
                     56:              false,            % 0356
                     57:              false,            % 0357 0
                     58:              true              % 0360 p
                     59:                ]
                     60: 
                     61: qs = sequence[string]
                     62: 
                     63: %              plain,S,M,M-S,C,C-S,C-M,C-M-S
                     64: 
                     65: charmap        = qs$[
                     66:              "\330\330\330\330\330\330\330\330",       % 0126 F1/Hold Screen
                     67:              "\324\324\324\324\324\324\324\324",       % 0127 F2/Print Screen
                     68:              "\325\325\325\325\325\325\325\325",       % 0130 F3/Set-Up
                     69:              "\326\326\326\326\326\326\326\326",       % 0131 F4
                     70:              "\327\327\327\327\327\327\327\327",       % 0132 F5/Break
                     71:              "",                                       % 0133
                     72:              "",                                       % 0134
                     73:              "",                                       % 0135
                     74:              "",                                       % 0136
                     75:              "",                                       % 0137
                     76:              "",                                       % 0140
                     77:              "",                                       % 0141
                     78:              "",                                       % 0142
                     79:              "",                                       % 0143
                     80:              "\341\341\341\341\341\341\341\341",       % 0144 F6
                     81:              "\342\342\342\342\342\342\342\342",       % 0145 F7
                     82:              "\343\343\343\343\343\343\343\343",       % 0146 F8
                     83:              "\344\344\344\344\344\344\344\344",       % 0147 F9
                     84:              "\345\345\345\345\345\345\345\345",       % 0150 F10
                     85:              "",                                       % 0151
                     86:              "",                                       % 0152
                     87:              "",                                       % 0153
                     88:              "",                                       % 0154
                     89:              "",                                       % 0155
                     90:              "",                                       % 0156
                     91:              "",                                       % 0157
                     92:              "",                                       % 0160
                     93:              "\033\033\033\033\033\033\033\033",       % 0161 F11/ESC
                     94:              "\b\b\210\210\b\b\210\210",               % 0162 F12/BS
                     95:              "\n\n\212\212\n\n\212\212",               % 0163 F13/LF
                     96:              "",                                       % 0164 F14
                     97:              "",                                       % 0165
                     98:              "",                                       % 0166
                     99:              "",                                       % 0167
                    100:              "",                                       % 0170
                    101:              "",                                       % 0171
                    102:              "",                                       % 0172
                    103:              "",                                       % 0173
                    104:              "",                                       % 0174 Help/F15
                    105:              "",                                       % 0175 Do/F16
                    106:              "",                                       % 0176
                    107:              "",                                       % 0177
                    108:              "\346\346\346\346\346\346\346\346",       % 0200 F17
                    109:              "\347\347\347\347\347\347\347\347",       % 0201 F18
                    110:              "\350\350\350\350\350\350\350\350",       % 0202 F19
                    111:              "\351\351\351\351\351\351\351\351",       % 0203 F20/Hyph
                    112:              "",                                       % 0204
                    113:              "",                                       % 0205
                    114:              "",                                       % 0206
                    115:              "",                                       % 0207
                    116:              "",                                       % 0210
                    117:              "",                                       % 0211
                    118:              "\261\261\261\261\261\261\261\261",       % 0212 Find
                    119:              "\262\262\262\262\262\262\262\262",       % 0213 Insert
                    120:              "\263\263\263\263\263\263\263\263",       % 0214 Remove
                    121:              "\264\264\264\264\264\264\264\264",       % 0215 Select
                    122:              "\265\265\265\265\265\265\265\265",       % 0216 Prev Screen
                    123:              "\266\266\266\266\266\266\266\266",       % 0217 Next Screen
                    124:              "",                                       % 0220
                    125:              "",                                       % 0221
                    126:              "\360\360\360\360\360\360\360\360",       % 0222 R0
                    127:              "",                                       % 0223
                    128:              "\356\356\356\356\356\356\356\356",       % 0224 R.
                    129:              "\315\315\315\315\315\315\315\315",       % 0225 Enter
                    130:              "\361\361\361\361\361\361\361\361",       % 0226 R1
                    131:              "\362\362\362\362\362\362\362\362",       % 0227 R2
                    132:              "\363\363\363\363\363\363\363\363",       % 0230 R3
                    133:              "\364\364\364\364\364\364\364\364",       % 0231 R4
                    134:              "\365\365\365\365\365\365\365\365",       % 0232 R5
                    135:              "\366\366\366\366\366\366\366\366",       % 0233 R6
                    136:              "\354\354\354\354\354\354\354\354",       % 0234 R,
                    137:              "\367\367\367\367\367\367\367\367",       % 0235 R7
                    138:              "\370\370\370\370\370\370\370\370",       % 0236 R8
                    139:              "\371\371\371\371\371\371\371\371",       % 0237 R9
                    140:              "\355\355\355\355\355\355\355\355",       % 0240 R-
                    141:              "\320\320\320\320\320\320\320\320",       % 0241 PF1
                    142:              "\321\321\321\321\321\321\321\321",       % 0242 PF2
                    143:              "\322\322\322\322\322\322\322\322",       % 0243 PF3
                    144:              "\323\323\323\323\323\323\323\323",       % 0244 PF4
                    145:              "",                                       % 0245
                    146:              "",                                       % 0246
                    147:              "\304\304\304\304\304\304\304\304",       % 0247 leftarrow
                    148:              "\303\303\303\303\303\303\303\303",       % 0250 rightarrow
                    149:              "\302\302\302\302\302\302\302\302",       % 0251 downarrow
                    150:              "\301\301\301\301\301\301\301\301",       % 0252 uparrow
                    151:              "",                                       % 0253
                    152:              "",                                       % 0254
                    153:              "",                                       % 0255
                    154:              "",                                       % 0256 Shift
                    155:              "",                                       % 0257 Ctrl
                    156:              "",                                       % 0260 Lock
                    157:              "",                                       % 0261 Compose Character
                    158:              "",                                       % 0262
                    159:              "",                                       % 0263
                    160:              "",                                       % 0264
                    161:              "",                                       % 0265
                    162:              "",                                       % 0266
                    163:              "",                                       % 0267
                    164:              "",                                       % 0270
                    165:              "",                                       % 0271
                    166:              "",                                       % 0272
                    167:              "",                                       % 0273
                    168:              "\177\177\377\377\177\177\377\377",       % 0274 back
                    169:              "\r\r\215\215\r\r\215\215",               % 0275 Return
                    170:              "\t\t\211\211\t\t\211\211",               % 0276 Tab
                    171:              "`~\340\376",                             % 0277 `
                    172:              "1!\261\2411!",                           % 0300 1
                    173:              "qQ\361\321\021\021\221\221",             % 0301 q
                    174:              "aA\341\301\001\001\201\201",             % 0302 a
                    175:              "zZ\372\332\032\032\232\232",             % 0303 z
                    176:              "",                                       % 0304
                    177:              "2@\262\3002\000\262\200",                % 0305 2
                    178:              "wW\367\327\027\027\227\227",             % 0306 w
                    179:              "sS\363\323\023\023\223\223",             % 0307 s
                    180:              "xX\370\330\030\030\230\230",             % 0310 x
                    181:              "<>\274\276",                             % 0311 <
                    182:              "",                                       % 0312
                    183:              "3#\263\2433#",                           % 0313 3
                    184:              "eE\345\305\005\005\205\205",             % 0314 e
                    185:              "dD\344\304\004\004\204\204",             % 0315 d
                    186:              "cC\343\303\003\003\203\203",             % 0316 c
                    187:              "",                                       % 0317
                    188:              "4$\264\2444$",                           % 0320 4
                    189:              "rR\362\322\022\022\222\222",             % 0321 r
                    190:              "fF\346\306\006\006\206\206",             % 0322 f
                    191:              "vV\366\326\026\026\226\226",             % 0323 v
                    192:              "  \240\240\000\000\200\200",             % 0324 space
                    193:              "",                                       % 0325
                    194:              "5%\265\2455%",                           % 0326 5
                    195:              "tT\364\324\024\024\224\224",             % 0327 t
                    196:              "gG\347\307\007\007\207\207",             % 0330 g
                    197:              "bB\342\302\002\002\202\202",             % 0331 b
                    198:              "",                                       % 0332
                    199:              "6^\266\3366\036\266\236",                % 0333 6
                    200:              "yY\371\331\031\031\231\231",             % 0334 y
                    201:              "hH\350\310\010\010\210\210",             % 0335 h
                    202:              "nN\356\316\016\016\216\216",             % 0336 n
                    203:              "",                                       % 0337
                    204:              "7&\267\2467&",                           % 0340 7
                    205:              "uU\365\325\025\025\225\225",             % 0341 u
                    206:              "jJ\352\312\012\012\212\212",             % 0342 j
                    207:              "mM\355\315\015\015\215\215",             % 0343 m
                    208:              "",                                       % 0344
                    209:              "8*\270\2528*",                           % 0345 8
                    210:              "iI\351\311\011\011\211\211",             % 0346 i
                    211:              "kK\353\313\013\013\213\213",             % 0347 k
                    212:              ",<\254\274",                             % 0350 ,
                    213:              "",                                       % 0351
                    214:              "9(\271\2509(",                           % 0352 9
                    215:              "oO\357\317\017\017\217\217",             % 0353 o
                    216:              "lL\354\314\014\014\214\214",             % 0354 l
                    217:              ".>\256\276",                             % 0355 .
                    218:              "",                                       % 0356
                    219:              "0)\260\2510(",                           % 0357 0
                    220:              "pP\360\320\020\020\220\220",             % 0360 p
                    221:              "",                                       % 0361
                    222:              ";:\273\272",                             % 0362 ;
                    223:              "/?\257\277\037\037\237\237",             % 0363 /
                    224:              "",                                       % 0364
                    225:              "=+\275\253",                             % 0365 =
                    226:              "]}\335\375\035\035\235\235",             % 0366 ]
                    227:              "\\|\334\374\034\034\234\234",            % 0367 \
                    228:              "",                                       % 0370
                    229:              "-_\255\337-\037\255\237",                % 0371 -
                    230:              "[{\333\373\033\033\233\233",             % 0372 [
                    231:              "'\"\247\242"                             % 0373 '
                    232:              ]
                    233: 
                    234: multilist = array[multi]
                    235: multi = record[key:   int,
                    236:               mask:  int,
                    237:               value: string]
                    238: 
                    239: own havemap: bool := false
                    240: own keymap: _bytevec
                    241: own multis: multilist
                    242: 
                    243: load = proc (fs: string)
                    244:     if string$empty(fs)
                    245:        then fs := ".Xkeymap" end
                    246:     begin
                    247:     fn: file_name := file_name$parse(fs)
                    248:     if string$empty(fn.dir)
                    249:        then fn := file_name$create(_environ("HOME"), fn.name,
                    250:                                   fn.suffix, fn.other)
                    251:        end
                    252:     c: _chan := _chan$open(fn, "read", 0)
                    253:     if _chan$getc(c, false) ~= '\372'
                    254:        then _chan$close(c)
                    255:            return
                    256:        end
                    257:     keymap := _bytevec$create(c.length - 1)
                    258:     _chan$getb(c, keymap)
                    259:     _chan$close(c)
                    260:     havemap := _bytevec$size(keymap) >= 4096
                    261:     multis := multilist$new()
                    262:     i: int := 4097
                    263:     while true do
                    264:        multilist$addh(multis,
                    265:                       multi${key:   char$c2i(keymap[i]),
                    266:                              mask:  char$c2i(keymap[i + 1]),
                    267:                              value: string$substr(_cvt[_bytevec, string](
                    268:                                                       keymap),
                    269:                                                   i + 3,
                    270:                                                   char$c2i(keymap[i + 2]))})
                    271:        i := i + 3 + char$c2i(keymap[i + 2])
                    272:        end
                    273:     end except others: end
                    274:     end load
                    275: 
                    276: getc = proc (key, mask: int) returns (char) signals (none, multi(string))
                    277:     if havemap
                    278:        then mask := mask / 2**11
                    279:            c: char := keymap[(key * 16) + mask + 1]
                    280:            if c < '\375'
                    281:               then return(c) end
                    282:            if c = '\376'
                    283:               then for m: multi in multilist$elements(multis) do
                    284:                        if key = m.key  cand
                    285:                           (mask = m.mask  cor  m.mask = 255)
                    286:                           then if string$size(m.value) = 1
                    287:                                   then return(m.value[1]) end
                    288:                                if string$empty(m.value)
                    289:                                   then signal none end
                    290:                                signal multi(m.value)
                    291:                           end
                    292:                        end
                    293:               end
                    294:            signal none
                    295:        end except when bounds: signal none end
                    296:     key := key - mapsub
                    297:     keymode: int := mask / 2**12 + 1
                    298:     if (mask / 2**11) // 4 = 1  cand  slmap[key + (mapsub - slmin)]
                    299:        then keymode := keymode + 1
                    300:        end except when bounds: end
                    301:     return(charmap[key][keymode])
                    302:        except when bounds: signal none end
                    303:     end getc
                    304: 
                    305: gets = proc (key, mask: int) returns (string) signals (none)
                    306:     if havemap
                    307:        then mask := mask / 2**11
                    308:            c: char := keymap[(key * 16) + mask + 1]
                    309:            if c < '\375'
                    310:               then return(string$c2s(c)) end
                    311:            if c = '\376'
                    312:               then for m: multi in multilist$elements(multis) do
                    313:                        if key = m.key  cand
                    314:                           (mask = m.mask  cor  m.mask = 255)
                    315:                           then if string$empty(m.value)
                    316:                                   then signal none end
                    317:                                return(m.value)
                    318:                           end
                    319:                        end
                    320:               end
                    321:            signal none
                    322:        end except when bounds: signal none end
                    323:     key := key - mapsub
                    324:     keymode: int := mask / 2**12 + 1
                    325:     if (mask / 2**11) // 4 = 1  cand  slmap[key + (mapsub - slmin)]
                    326:        then keymode := keymode + 1
                    327:        end except when bounds: end
                    328:     return(string$c2s(charmap[key][keymode]))
                    329:        except when bounds: signal none end
                    330:     end gets
                    331: 
                    332: end x_keymap

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.