Annotation of 43BSD/contrib/X/CLUlib/x_keymap.clu, revision 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.