Browse Source

Plan 9 from Bell Labs 2004-03-17

David du Colombier 20 years ago
parent
commit
4b196857ec

+ 13 - 11
dist/replica/plan9.db

@@ -543,7 +543,7 @@
 386/lib/libmemdraw.a - 664 sys sys 1073851273 291288
 386/lib/libmemlayer.a - 664 sys sys 1073851273 47636
 386/lib/libmp.a - 664 sys sys 1077940925 77700
-386/lib/libndb.a - 664 sys sys 1078929181 61344
+386/lib/libndb.a - 664 sys sys 1079451578 61344
 386/lib/libplumb.a - 664 sys sys 1073851274 18876
 386/lib/libregexp.a - 664 sys sys 1073851274 37502
 386/lib/libscribble.a - 664 sys sys 1073851274 107542
@@ -3013,7 +3013,7 @@ rc/bin/ipconf/inside - 775 sys sys 1058790955 427
 rc/bin/ipconf/lra - 775 sys sys 1058791152 1558
 rc/bin/ipconf/outside - 775 sys sys 1058790951 550
 rc/bin/ipconf/theworld - 775 sys sys 1058790940 1212
-rc/bin/ipso - 775 sys sys 1035591514 2304
+rc/bin/ipso - 775 sys sys 1079377794 2838
 rc/bin/iwhois - 775 sys sys 1068053163 584
 rc/bin/kill - 775 sys sys 1018387014 132
 rc/bin/label - 775 sys sys 945617207 34
@@ -4611,7 +4611,7 @@ sys/man/1/INDEX.html - 664 sys sys 1026845791 15882
 sys/man/1/acid - 664 sys sys 1046201556 9731
 sys/man/1/acme - 664 sys sys 1019828741 17587
 sys/man/1/ap - 664 sys sys 1068471657 364
-sys/man/1/ar - 664 sys sys 1055701045 3149
+sys/man/1/ar - 664 sys sys 1079397701 3153
 sys/man/1/ascii - 664 sys sys 957920005 2733
 sys/man/1/awk - 664 sys sys 944959677 10645
 sys/man/1/basename - 664 sys sys 944959673 535
@@ -4712,7 +4712,7 @@ sys/man/1/rm - 664 sys sys 944959673 515
 sys/man/1/rtstats - 664 sys sys 1018897631 2108
 sys/man/1/rwd - 664 sys sys 1042469992 2958
 sys/man/1/sam - 664 sys sys 984709628 18107
-sys/man/1/secstore - 664 sys sys 1041890056 3434
+sys/man/1/secstore - 664 sys sys 1079378118 3763
 sys/man/1/sed - 664 sys sys 944959674 6884
 sys/man/1/seq - 664 sys sys 1063855680 1131
 sys/man/1/size - 664 sys sys 944959674 393
@@ -4919,6 +4919,7 @@ sys/man/3/floppy - 664 sys sys 954378905 881
 sys/man/3/fs - 664 sys sys 1055701106 2706
 sys/man/3/i82365 - 664 sys sys 954378906 884
 sys/man/3/ip - 664 sys sys 1019858396 21625
+sys/man/3/kbmap - 644 sys sys 1079463778 1331
 sys/man/3/kprof - 664 sys sys 1018029972 1377
 sys/man/3/loopback - 664 sys sys 964662153 1995
 sys/man/3/lpt - 664 sys sys 944959698 893
@@ -5213,7 +5214,7 @@ sys/src/9/bitsy/wavelan.c - 664 sys sys 1064584681 27267
 sys/src/9/bitsy/wavelan.h - 664 sys sys 1037029076 27
 sys/src/9/boot - 20000000775 sys sys 1018556557 0
 sys/src/9/boot/aux.c - 664 sys sys 1063857702 2579
-sys/src/9/boot/boot.c - 664 sys sys 1077376393 5361
+sys/src/9/boot/boot.c - 664 sys sys 1079463769 5842
 sys/src/9/boot/boot.h - 664 sys sys 1063857659 1785
 sys/src/9/boot/bootauth.c - 664 sys sys 1039763726 1097
 sys/src/9/boot/bootcache.c - 664 sys sys 1063857645 1579
@@ -5322,7 +5323,7 @@ sys/src/9/pc/ether8003.c - 664 sys sys 1015014516 6665
 sys/src/9/pc/ether8139.c - 664 sys sys 1071245462 18026
 sys/src/9/pc/ether82543gc.c - 664 sys sys 1055689887 32296
 sys/src/9/pc/ether82557.c - 664 sys sys 1066514925 29683
-sys/src/9/pc/ether83815.c - 664 sys sys 1076594631 23182
+sys/src/9/pc/ether83815.c - 664 sys sys 1079387926 23128
 sys/src/9/pc/ether8390.c - 664 sys sys 1071245462 17557
 sys/src/9/pc/ether8390.h - 664 sys sys 1015014517 1511
 sys/src/9/pc/etherec2t.c - 664 sys sys 1020284820 4038
@@ -5345,7 +5346,7 @@ sys/src/9/pc/i8259.c - 664 sys sys 1015014519 4423
 sys/src/9/pc/init9.c - 664 sys sys 1040002518 94
 sys/src/9/pc/initcode.s - 664 sys sys 1015014519 282
 sys/src/9/pc/io.h - 664 sys sys 1072972600 8023
-sys/src/9/pc/kbd.c - 664 sys sys 1071726245 9135
+sys/src/9/pc/kbd.c - 664 sys sys 1079491476 11550
 sys/src/9/pc/l.s - 664 sys sys 1074785126 22699
 sys/src/9/pc/main.c - 664 sys sys 1074785126 14644
 sys/src/9/pc/mem.h - 664 sys sys 1018553448 4573
@@ -5430,6 +5431,7 @@ sys/src/9/port/devdraw.c - 664 sys sys 1039753332 41987
 sys/src/9/port/devdup.c - 664 sys sys 1014931172 2332
 sys/src/9/port/devenv.c - 664 sys sys 1048644225 6992
 sys/src/9/port/devfs.c - 664 sys sys 1067722764 10760
+sys/src/9/port/devkbmap.c - 644 sys sys 1079463756 2774
 sys/src/9/port/devkprof.c - 664 sys sys 1014931173 3111
 sys/src/9/port/devloopback.c - 664 sys sys 1076612248 14573
 sys/src/9/port/devmnt.c - 664 sys sys 1067953214 21594
@@ -5479,7 +5481,7 @@ sys/src/9/port/parse.c - 664 sys sys 1014931177 2026
 sys/src/9/port/pgrp.c - 664 sys sys 1072704671 3940
 sys/src/9/port/portclock.c - 664 sys sys 1077376395 4759
 sys/src/9/port/portdat.h - 664 sys sys 1073324006 22707
-sys/src/9/port/portfns.h - 664 sys sys 1068215525 11376
+sys/src/9/port/portfns.h - 664 sys sys 1079463756 11455
 sys/src/9/port/portmkfile - 664 sys sys 1067722766 2098
 sys/src/9/port/print.c - 664 sys sys 1014931178 227
 sys/src/9/port/proc.c - 664 sys sys 1078550254 28021
@@ -6809,7 +6811,7 @@ sys/src/cmd/acme/ecmd.c - 664 sys sys 1077376256 24294
 sys/src/cmd/acme/edit.c - 664 sys sys 1015701171 12055
 sys/src/cmd/acme/edit.h - 664 sys sys 969500816 2466
 sys/src/cmd/acme/elog.c - 664 sys sys 1078839859 7236
-sys/src/cmd/acme/exec.c - 664 sys sys 1077376257 28024
+sys/src/cmd/acme/exec.c - 664 sys sys 1079489096 28152
 sys/src/cmd/acme/file.c - 664 sys sys 1044626079 5717
 sys/src/cmd/acme/fns.h - 664 sys sys 1079102913 2883
 sys/src/cmd/acme/fsys.c - 664 sys sys 1079102915 12799
@@ -11156,7 +11158,7 @@ sys/src/cmd/webfs/url.c - 664 sys sys 1019240175 24238
 sys/src/cmd/webfs/util.c - 664 sys sys 1015015823 1211
 sys/src/cmd/webfsget.c - 664 sys sys 1068413017 1595
 sys/src/cmd/wikifs - 20000000775 sys sys 1018211094 0
-sys/src/cmd/wikifs/fs.c - 664 sys sys 1019678648 15353
+sys/src/cmd/wikifs/fs.c - 664 sys sys 1079380576 15626
 sys/src/cmd/wikifs/io.c - 664 sys sys 1018387004 11469
 sys/src/cmd/wikifs/lookup.c - 664 sys sys 1018211093 182
 sys/src/cmd/wikifs/map.c - 664 sys sys 1018211093 109
@@ -11164,7 +11166,7 @@ sys/src/cmd/wikifs/mkfile - 664 sys sys 1045503591 468
 sys/src/cmd/wikifs/parse.c - 664 sys sys 1018211093 4929
 sys/src/cmd/wikifs/parsehist.c - 664 sys sys 1018211093 1906
 sys/src/cmd/wikifs/testwrite.c - 664 sys sys 1018211093 818
-sys/src/cmd/wikifs/tohtml.c - 664 sys sys 1045503591 13989
+sys/src/cmd/wikifs/tohtml.c - 664 sys sys 1079380577 13998
 sys/src/cmd/wikifs/util.c - 664 sys sys 1018211093 1807
 sys/src/cmd/wikifs/wdir.c - 664 sys sys 1018211094 876
 sys/src/cmd/wikifs/wiki.h - 664 sys sys 1018323492 1891

+ 13 - 0
dist/replica/plan9.log

@@ -14663,3 +14663,16 @@
 1079376349 12 c sys/src/cmd/test.c - 664 sys sys 1079372543 5409
 1079376349 13 c sys/src/libhttpd/hio.c - 664 sys sys 1079372798 7482
 1079376349 14 c dist/replica/plan9.proto - 664 sys sys 1079376335 2533
+1079492484 0 c 386/lib/libndb.a - 664 sys sys 1079451578 61344
+1079492484 1 c rc/bin/ipso - 775 sys sys 1079377794 2838
+1079492484 2 c sys/man/1/ar - 664 sys sys 1079397701 3153
+1079492484 3 c sys/man/1/secstore - 664 sys sys 1079378118 3763
+1079492484 4 a sys/man/3/kbmap - 644 sys sys 1079463778 1331
+1079492484 5 c sys/src/9/boot/boot.c - 664 sys sys 1079463769 5842
+1079492484 6 c sys/src/9/pc/ether83815.c - 664 sys sys 1079387926 23128
+1079492484 7 c sys/src/9/pc/kbd.c - 664 sys sys 1079491476 11550
+1079492484 8 c sys/src/9/port/portfns.h - 664 sys sys 1079463756 11455
+1079492484 9 a sys/src/9/port/devkbmap.c - 644 sys sys 1079463756 2774
+1079492484 10 c sys/src/cmd/acme/exec.c - 664 sys sys 1079489096 28152
+1079492484 11 c sys/src/cmd/wikifs/fs.c - 664 sys sys 1079380576 15626
+1079492484 12 c sys/src/cmd/wikifs/tohtml.c - 664 sys sys 1079380577 13998

+ 512 - 0
sys/lib/kbmap/ascii

@@ -0,0 +1,512 @@
+          0           0           0 
+          0           1          27 
+          0           2          49 
+          0           3          50 
+          0           4          51 
+          0           5          52 
+          0           6          53 
+          0           7          54 
+          0           8          55 
+          0           9          56 
+          0          10          57 
+          0          11          48 
+          0          12          45 
+          0          13          61 
+          0          14           8 
+          0          15           9 
+          0          16         113 
+          0          17         119 
+          0          18         101 
+          0          19         114 
+          0          20         116 
+          0          21         121 
+          0          22         117 
+          0          23         105 
+          0          24         111 
+          0          25         112 
+          0          26          91 
+          0          27          93 
+          0          28          10 
+          0          29         226 
+          0          30          97 
+          0          31         115 
+          0          32         100 
+          0          33         102 
+          0          34         103 
+          0          35         104 
+          0          36         106 
+          0          37         107 
+          0          38         108 
+          0          39          59 
+          0          40          39 
+          0          41          96 
+          0          42         224 
+          0          43          92 
+          0          44         122 
+          0          45         120 
+          0          46          99 
+          0          47         118 
+          0          48          98 
+          0          49         110 
+          0          50         109 
+          0          51          44 
+          0          52          46 
+          0          53          47 
+          0          54         224 
+          0          55          42 
+          0          56         227 
+          0          57          32 
+          0          58         226 
+          0          59       61441 
+          0          60       61442 
+          0          61       61443 
+          0          62       61444 
+          0          63       61445 
+          0          64       61446 
+          0          65       61447 
+          0          66       61448 
+          0          67       61449 
+          0          68       61450 
+          0          69         229 
+          0          70       61461 
+          0          71          55 
+          0          72          56 
+          0          73          57 
+          0          74          45 
+          0          75          52 
+          0          76          53 
+          0          77          54 
+          0          78          43 
+          0          79          49 
+          0          80          50 
+          0          81          51 
+          0          82          48 
+          0          83          46 
+          0          84           0 
+          0          85           0 
+          0          86           0 
+          0          87       61451 
+          0          88       61452 
+          0          89           0 
+          0          90           0 
+          0          91           0 
+          0          92           0 
+          0          93           0 
+          0          94           0 
+          0          95           0 
+          0          96           0 
+          0          97           0 
+          0          98           0 
+          0          99           0 
+          0         100           0 
+          0         101           0 
+          0         102           0 
+          0         103           0 
+          0         104           0 
+          0         105           0 
+          0         106           0 
+          0         107           0 
+          0         108           0 
+          0         109           0 
+          0         110           0 
+          0         111           0 
+          0         112           0 
+          0         113           0 
+          0         114           0 
+          0         115           0 
+          0         116           0 
+          0         117           0 
+          0         118           0 
+          0         119           0 
+          0         120           0 
+          0         121         128 
+          0         122           0 
+          0         123       61454 
+          0         124           0 
+          0         125           0 
+          0         126           0 
+          0         127           0 
+          1           0           0 
+          1           1          27 
+          1           2          33 
+          1           3          64 
+          1           4          35 
+          1           5          36 
+          1           6          37 
+          1           7          94 
+          1           8          38 
+          1           9          42 
+          1          10          40 
+          1          11          41 
+          1          12          95 
+          1          13          43 
+          1          14           8 
+          1          15           9 
+          1          16          81 
+          1          17          87 
+          1          18          69 
+          1          19          82 
+          1          20          84 
+          1          21          89 
+          1          22          85 
+          1          23          73 
+          1          24          79 
+          1          25          80 
+          1          26         123 
+          1          27         125 
+          1          28          10 
+          1          29         226 
+          1          30          65 
+          1          31          83 
+          1          32          68 
+          1          33          70 
+          1          34          71 
+          1          35          72 
+          1          36          74 
+          1          37          75 
+          1          38          76 
+          1          39          58 
+          1          40          34 
+          1          41         126 
+          1          42         224 
+          1          43         124 
+          1          44          90 
+          1          45          88 
+          1          46          67 
+          1          47          86 
+          1          48          66 
+          1          49          78 
+          1          50          77 
+          1          51          60 
+          1          52          62 
+          1          53          63 
+          1          54         224 
+          1          55          42 
+          1          56         227 
+          1          57          32 
+          1          58         226 
+          1          59       61441 
+          1          60       61442 
+          1          61       61443 
+          1          62       61444 
+          1          63       61445 
+          1          64       61446 
+          1          65       61447 
+          1          66       61448 
+          1          67       61449 
+          1          68       61450 
+          1          69         229 
+          1          70       61461 
+          1          71          55 
+          1          72          56 
+          1          73          57 
+          1          74          45 
+          1          75          52 
+          1          76          53 
+          1          77          54 
+          1          78          43 
+          1          79          49 
+          1          80          50 
+          1          81          51 
+          1          82          48 
+          1          83          46 
+          1          84           0 
+          1          85           0 
+          1          86           0 
+          1          87       61451 
+          1          88       61452 
+          1          89           0 
+          1          90           0 
+          1          91           0 
+          1          92           0 
+          1          93           0 
+          1          94           0 
+          1          95           0 
+          1          96           0 
+          1          97           0 
+          1          98           0 
+          1          99           0 
+          1         100           0 
+          1         101           0 
+          1         102           0 
+          1         103           0 
+          1         104           0 
+          1         105           0 
+          1         106           0 
+          1         107           0 
+          1         108           0 
+          1         109           0 
+          1         110           0 
+          1         111           0 
+          1         112           0 
+          1         113           0 
+          1         114           0 
+          1         115           0 
+          1         116           0 
+          1         117           0 
+          1         118           0 
+          1         119           0 
+          1         120           0 
+          1         121       61454 
+          1         122           0 
+          1         123       61454 
+          1         124           0 
+          1         125           0 
+          1         126           0 
+          1         127           0 
+          2           0           0 
+          2           1           0 
+          2           2           0 
+          2           3           0 
+          2           4           0 
+          2           5           0 
+          2           6           0 
+          2           7           0 
+          2           8           0 
+          2           9           0 
+          2          10           0 
+          2          11           0 
+          2          12           0 
+          2          13           0 
+          2          14           0 
+          2          15           0 
+          2          16           0 
+          2          17           0 
+          2          18           0 
+          2          19           0 
+          2          20           0 
+          2          21           0 
+          2          22           0 
+          2          23           0 
+          2          24           0 
+          2          25           0 
+          2          26           0 
+          2          27           0 
+          2          28          10 
+          2          29         226 
+          2          30           0 
+          2          31           0 
+          2          32           0 
+          2          33           0 
+          2          34           0 
+          2          35           0 
+          2          36           0 
+          2          37           0 
+          2          38           0 
+          2          39           0 
+          2          40           0 
+          2          41           0 
+          2          42         224 
+          2          43           0 
+          2          44           0 
+          2          45           0 
+          2          46           0 
+          2          47           0 
+          2          48           0 
+          2          49           0 
+          2          50           0 
+          2          51           0 
+          2          52           0 
+          2          53          47 
+          2          54           0 
+          2          55       61456 
+          2          56         231 
+          2          57           0 
+          2          58           0 
+          2          59           0 
+          2          60           0 
+          2          61           0 
+          2          62           0 
+          2          63           0 
+          2          64           0 
+          2          65           0 
+          2          66           0 
+          2          67           0 
+          2          68           0 
+          2          69           0 
+          2          70         225 
+          2          71       61453 
+          2          72       61454 
+          2          73       61455 
+          2          74           0 
+          2          75       61457 
+          2          76           0 
+          2          77       61458 
+          2          78           0 
+          2          79       61464 
+          2          80         128 
+          2          81       61459 
+          2          82       61460 
+          2          83         127 
+          2          84           0 
+          2          85           0 
+          2          86           0 
+          2          87           0 
+          2          88           0 
+          2          89           0 
+          2          90           0 
+          2          91           0 
+          2          92           0 
+          2          93           0 
+          2          94           0 
+          2          95           0 
+          2          96           0 
+          2          97           0 
+          2          98           0 
+          2          99           0 
+          2         100           0 
+          2         101           0 
+          2         102           0 
+          2         103           0 
+          2         104           0 
+          2         105           0 
+          2         106           0 
+          2         107           0 
+          2         108           0 
+          2         109           0 
+          2         110           0 
+          2         111           0 
+          2         112           0 
+          2         113           0 
+          2         114           0 
+          2         115           0 
+          2         116           0 
+          2         117           0 
+          2         118           0 
+          2         119           0 
+          2         120           0 
+          2         121       61454 
+          2         122           0 
+          2         123           0 
+          2         124           0 
+          2         125           0 
+          2         126           0 
+          2         127           0 
+          3           0           0 
+          3           1           0 
+          3           2           0 
+          3           3           0 
+          3           4           0 
+          3           5           0 
+          3           6           0 
+          3           7           0 
+          3           8           0 
+          3           9           0 
+          3          10           0 
+          3          11           0 
+          3          12           0 
+          3          13           0 
+          3          14           0 
+          3          15           0 
+          3          16           0 
+          3          17           0 
+          3          18           0 
+          3          19           0 
+          3          20           0 
+          3          21           0 
+          3          22           0 
+          3          23           0 
+          3          24           0 
+          3          25           0 
+          3          26           0 
+          3          27           0 
+          3          28           0 
+          3          29           0 
+          3          30           0 
+          3          31           0 
+          3          32           0 
+          3          33           0 
+          3          34           0 
+          3          35           0 
+          3          36           0 
+          3          37           0 
+          3          38           0 
+          3          39           0 
+          3          40           0 
+          3          41           0 
+          3          42           0 
+          3          43           0 
+          3          44           0 
+          3          45           0 
+          3          46           0 
+          3          47           0 
+          3          48           0 
+          3          49           0 
+          3          50           0 
+          3          51           0 
+          3          52           0 
+          3          53           0 
+          3          54           0 
+          3          55           0 
+          3          56           0 
+          3          57           0 
+          3          58           0 
+          3          59           0 
+          3          60           0 
+          3          61           0 
+          3          62           0 
+          3          63           0 
+          3          64           0 
+          3          65           0 
+          3          66           0 
+          3          67           0 
+          3          68           0 
+          3          69           0 
+          3          70           0 
+          3          71           0 
+          3          72           0 
+          3          73           0 
+          3          74           0 
+          3          75           0 
+          3          76           0 
+          3          77           0 
+          3          78           0 
+          3          79           0 
+          3          80           0 
+          3          81           0 
+          3          82           0 
+          3          83           0 
+          3          84           0 
+          3          85           0 
+          3          86           0 
+          3          87           0 
+          3          88           0 
+          3          89           0 
+          3          90           0 
+          3          91           0 
+          3          92           0 
+          3          93           0 
+          3          94           0 
+          3          95           0 
+          3          96           0 
+          3          97           0 
+          3          98           0 
+          3          99           0 
+          3         100           0 
+          3         101           0 
+          3         102           0 
+          3         103           0 
+          3         104           0 
+          3         105           0 
+          3         106           0 
+          3         107           0 
+          3         108           0 
+          3         109           0 
+          3         110           0 
+          3         111           0 
+          3         112           0 
+          3         113           0 
+          3         114           0 
+          3         115           0 
+          3         116           0 
+          3         117           0 
+          3         118           0 
+          3         119           0 
+          3         120           0 
+          3         121       61454 
+          3         122           0 
+          3         123           0 
+          3         124           0 
+          3         125           0 
+          3         126           0 
+          3         127           0 

+ 61 - 0
sys/lib/kbmap/azerty

@@ -0,0 +1,61 @@
+0	0x02	0x26
+0	0x03	0xE9
+0	0x04	0x22
+0	0x05	0x27
+0	0x06	0x28
+0	0x07	0x2D
+0	0x08	0xE8
+0	0x09	0x5F
+0	0x0A	0xE7
+0	0x0B	0xE0
+0	0x0C	0x29
+0	0x10	0x61
+0	0x11	0x7A
+0	0x1A	0x5E
+0	0x1B	0x24
+0	0x1E	0x71
+0	0x27	0x6D
+0	0x29	0x2072
+0	0x2B	0x2A
+0	0x2C	0x77
+0	0x32	0x2C
+0	0x33	0x3B
+0	0x34	0x3A
+0	0x35	0x21
+0	0x56	0x3C
+1	0x02	0x31
+1	0x03	0x32
+1	0x04	0x33
+1	0x05	0x34
+1	0x06	0x35
+1	0x07	0x36
+1	0x08	0x37
+1	0x09	0x38
+1	0x0A	0x39
+1	0x0B	0x30
+1	0x0C	0xB0
+1	0x10	0x41
+1	0x11	0x5A
+1	0x1B	0xA3
+1	0x1E	0x51
+1	0x27	0x4D
+1	0x28	0x25
+1	0x29	0x00
+1	0x2B	0x3BC
+1	0x2C	0x57
+1	0x32	0x3F
+1	0x33	0x2E
+1	0x34	0x2F
+1	0x35	0xA7
+1	0x56	0x3E
+3	0x03	0x7E
+3	0x04	0x23
+3	0x05	0x7B
+3	0x06	0x5B
+3	0x07	0x7c
+3	0x08	0x60
+3	0x09	0x5C
+3	0x0A	0x5E
+3	0x0B	0x40
+3	0x0C	0x5D
+3	0x0D	0x7D

+ 61 - 0
sys/lib/kbmap/bgmap

@@ -0,0 +1,61 @@
+# bulgarian keyboard
+0	16	'я
+0	17	'в
+0	18	'е
+0	19	'р
+0	20	'т
+0	21	'ъ
+0	22	'у
+0	23	'и
+0	24	'о
+0	25	'п
+0	26	'ш
+0	27	'щ
+0	30	'а
+0	31	'с
+0	32	'д
+0	33	'ф
+0	34	'г
+0	35	'х
+0	36	'й
+0	37	'к
+0	38	'л
+0	41	'ч
+0	43	'ю
+0	44	'з
+0	45	'ь
+0	46	'ц
+0	47	'ж
+0	48	'б
+0	49	'н
+0	50	'м
+1	16	'Я
+1	17	'В
+1	18	'Е
+1	19	'Р
+1	20	'Т
+1	21	'Ъ
+1	22	'У
+1	23	'И
+1	24	'О
+1	25	'П
+1	26	'Ш
+1	27	'Щ
+1	30	'А
+1	31	'С
+1	32	'Д
+1	33	'Ф
+1	34	'Г
+1	35	'Х
+1	36	'Й
+1	37	'К
+1	38	'Л
+1	41	'Ч
+1	43	'Ю
+1	44	'З
+1	45	'Ь
+1	46	'Ц
+1	47	'Ж
+1	48	'Б
+1	49	'Н
+1	50	'М

+ 7 - 0
sys/lib/kbmap/uk

@@ -0,0 +1,7 @@
+0 43 '#
+1 43 '~
+1 3 '"
+1 4 '£
+1 40 '@
+0 86 '\
+1 86 '|

+ 54 - 0
sys/man/3/kbmap

@@ -0,0 +1,54 @@
+.TH KBMAP 3 
+.SH NAME
+kbmap \- keyboard map
+.SH SYNOPSIS
+.nf
+.B bind -a #κ /dev
+
+.B /dev/kbmap
+.fi
+.SH DESCRIPTION
+.PP
+The
+.I kbmap
+device serves a one-level directory containing a single file,
+.BR kbmap ,
+representing the kernel's mapping of
+keyboard scan codes to Unicode characters
+(see
+.IR cons (3)
+and
+.IR keyboard (6)).
+.PP
+Reads return the current contents of the map.
+Each entry is one line containing three 11 character numeric fields, each followed by a space:
+a table number, an index into the table (scan code), and the decimal value
+of the corresponding Unicode character (0 if none).
+The table numbers are platform dependent; they typically distinguish
+between unshifted and shifted keys.
+The scan code values are hardware dependent and can vary
+from keyboard to keyboard.
+.PP
+Writes to the file change the map.
+Lines written to the file must contain three space-separated numeric fields,
+representing the table number, scan code index, and Unicode character.
+Values are taken to be decimal unless they start with
+.B 0x
+(hexadecimal) or
+.B 0
+(octal).
+The Unicode character can also be represented as
+.BI ' x
+where
+.I x
+gives the UTF-8 representation of the character
+(see
+.IR utf (6)).
+.SH "SEE ALSO"
+.IR cons (3),
+.IR keyboard (6),
+.IR utf (6)
+.SH FILES
+.B /sys/lib/kbmap/*
+.SH SOURCE
+.B /sys/src/9/port/devkbmap.c

+ 36 - 0
sys/src/9/boot/boot.c

@@ -17,6 +17,7 @@ int	bargc;
 
 static void	swapproc(void);
 static Method	*rootserver(char*);
+static void	kbmap(void);
 
 void
 boot(int argc, char *argv[])
@@ -73,6 +74,11 @@ boot(int argc, char *argv[])
 	islocal = strcmp(mp->name, "local") == 0;
 	ishybrid = strcmp(mp->name, "hybrid") == 0;
 
+	/*
+	 *  load keymap if its there
+	 */
+	kbmap();
+
 	/*
  	 *  authentication agent
 	 */
@@ -289,3 +295,33 @@ old9p(int fd)
 	}
 	return p[1];	
 }
+
+static void
+kbmap(void)
+{
+	char *f;
+	int in, out;
+	int n;
+	char buf[1024];
+
+	f = getenv("kbmap");
+	if(f == nil)
+		return;
+	in = open(f, OREAD);
+	if(in < 0)
+		return;
+	if(bind("#κ", "/dev", MAFTER) < 0){
+		close(in);
+		return;
+	}
+	out = open(f, OREAD);
+	if(out < 0){
+		close(in);
+		return;
+	}
+	while((n = read(in, buf, sizeof(buf))) > 0)
+		if(write(out, buf, n) != n)
+			break;
+	close(in);
+	close(out);
+}

+ 113 - 11
sys/src/9/pc/kbd.c

@@ -33,6 +33,7 @@ enum {
 	Caps=		Spec|0x64,
 	Num=		Spec|0x65,
 	Middle=		Spec|0x66,
+	Altgr=		Spec|0x67,
 	No=		0x00,		/* peter */
 
 	Home=		KF|13,
@@ -47,13 +48,15 @@ enum {
 	Ins=		KF|20,
 	Del=		0x7F,
 	Scroll=		KF|21,
+
+	Nscan=	128,
 };
 
 /*
  * The codes at 0x79 and 0x81 are produed by the PFU Happy Hacking keyboard.
  * A 'standard' keyboard doesn't produce anything above 0x58.
  */
-Rune kbtab[] = 
+Rune kbtab[Nscan] = 
 {
 [0x00]	No,	0x1b,	'1',	'2',	'3',	'4',	'5',	'6',
 [0x08]	'7',	'8',	'9',	'0',	'-',	'=',	'\b',	'\t',
@@ -73,7 +76,7 @@ Rune kbtab[] =
 [0x78]	No,	View,	No,	Up,	No,	No,	No,	No,
 };
 
-Rune kbtabshift[] =
+Rune kbtabshift[Nscan] =
 {
 [0x00]	No,	0x1b,	'!',	'@',	'#',	'$',	'%',	'^',
 [0x08]	'&',	'*',	'(',	')',	'_',	'+',	'\b',	'\t',
@@ -93,7 +96,7 @@ Rune kbtabshift[] =
 [0x78]	No,	Up,	No,	Up,	No,	No,	No,	No,
 };
 
-Rune kbtabesc1[] =
+Rune kbtabesc1[Nscan] =
 {
 [0x00]	No,	No,	No,	No,	No,	No,	No,	No,
 [0x08]	No,	No,	No,	No,	No,	No,	No,	No,
@@ -102,7 +105,7 @@ Rune kbtabesc1[] =
 [0x20]	No,	No,	No,	No,	No,	No,	No,	No,
 [0x28]	No,	No,	Shift,	No,	No,	No,	No,	No,
 [0x30]	No,	No,	No,	No,	No,	'/',	No,	Print,
-[0x38]	Latin,	No,	No,	No,	No,	No,	No,	No,
+[0x38]	Altgr,	No,	No,	No,	No,	No,	No,	No,
 [0x40]	No,	No,	No,	No,	No,	No,	Break,	Home,
 [0x48]	Up,	Pgup,	No,	Left,	No,	Right,	No,	End,
 [0x50]	Down,	Pgdown,	Ins,	Del,	No,	No,	No,	No,
@@ -113,6 +116,46 @@ Rune kbtabesc1[] =
 [0x78]	No,	Up,	No,	No,	No,	No,	No,	No,
 };
 
+Rune kbtabaltgr[Nscan] =
+{
+[0x00]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x08]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x10]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x18]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x20]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x28]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x30]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x38]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x40]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x48]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x50]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x58]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x60]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x68]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x70]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x78]	No,	Up,	No,	No,	No,	No,	No,	No,
+};
+
+Rune kbtabctrl[] =
+{
+[0x00]	No,	'', 	'', 	'', 	'', 	'', 	'', 	'', 
+[0x08]	'', 	'', 	'', 	'', 	'
', 	'', 	'\b',	'\t',
+[0x10]	'', 	'', 	'', 	'', 	'', 	'', 	'', 	'\t',
+[0x18]	'', 	'', 	'', 	'', 	'\n',	Ctrl,	'', 	'', 
+[0x20]	'', 	'', 	'', 	'\b',	'\n',	'', 	'', 	'', 
+[0x28]	'', 	No, 	Shift,	'', 	'', 	'', 	'', 	'', 
+[0x30]	'', 	'', 	'
', 	'', 	'', 	'', 	Shift,	'\n',
+[0x38]	Latin,	No, 	Ctrl,	'', 	'', 	'', 	'', 	'', 
+[0x40]	'', 	'', 	'', 	'
', 	'', 	'', 	'', 	'', 
+[0x48]	'', 	'', 	'
', 	'', 	'', 	'', 	'', 	'', 
+[0x50]	'', 	'', 	'', 	'', 	No,	No,	No,	'', 
+[0x58]	'', 	No,	No,	No,	No,	No,	No,	No,
+[0x60]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x68]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x70]	No,	No,	No,	No,	No,	No,	No,	No,
+[0x78]	No,	'', 	No,	'\b',	No,	No,	No,	No,
+};
+
 enum
 {
 	/* controller command byte */
@@ -254,7 +297,7 @@ i8042intr(Ureg*, void*)
 {
 	int s, c, i;
 	static int esc1, esc2;
-	static int alt, caps, ctl, num, shift;
+	static int alt, altgr, caps, ctl, num, shift;
 	static int collecting, nk;
 	static Rune kc[5];
 	int keyup;
@@ -285,7 +328,8 @@ i8042intr(Ureg*, void*)
 	}
 
 	/*
-	 *  e0's is the first of a 2 character sequence
+	 *  e0's is the first of a 2 character sequence, e1 the first
+	 *  of a 3 character sequence (on the safari)
 	 */
 	if(c == 0xe0){
 		esc1 = 1;
@@ -312,6 +356,10 @@ i8042intr(Ureg*, void*)
 		return;
 	} else if(shift)
 		c = kbtabshift[c];
+	else if(altgr)
+		c = kbtabaltgr[c];
+	else if(ctl)
+		c = kbtabctrl[c];
 	else
 		c = kbtab[c];
 
@@ -341,11 +389,9 @@ i8042intr(Ureg*, void*)
  	 *  normal character
 	 */
 	if(!(c & (Spec|KF))){
-		if(ctl){
+		if(ctl)
 			if(alt && c == Del)
 				exit(0);
-			c &= 0x1f;
-		}
 		if(!collecting){
 			kbdputc(kbdq, c);
 			return;
@@ -392,10 +438,12 @@ i8042intr(Ureg*, void*)
 			}
 			return;
 		case Ctrl:
-			collecting = 0;
-			nk = 0;
 			ctl = 1;
 			return;
+		case Altgr:
+			altgr = 1;
+			collecting = 0;
+			return;
 		}
 	}
 	kbdputc(kbdq, c);
@@ -473,3 +521,57 @@ kbdenable(void)
 
 	intrenable(IrqKBD, i8042intr, 0, BUSUNKNOWN, "kbd");
 }
+
+void
+kbdputmap(ushort m, ushort scanc, Rune r)
+{
+	if(scanc >= Nscan)
+		error(Ebadarg);
+	switch(m) {
+	default:
+		error(Ebadarg);
+	case 0:
+		kbtab[scanc] = r;
+		break;
+	case 1:
+		kbtabshift[scanc] = r;
+		break;
+	case 2:
+		kbtabesc1[scanc] = r;
+		break;
+	case 3:
+		kbtabaltgr[scanc] = r;
+		break;
+	case 4:	
+		kbtabctrl[scanc] = r;
+		break;
+	}
+}
+
+int
+kbdgetmap(int offset, int *t, int *sc, Rune *r)
+{
+	*t = offset/Nscan;
+	*sc = offset%Nscan;
+	if(*t < 0 || *sc < 0)
+		error(Ebadarg);
+	switch(*t) {
+	default:
+		return 0;
+	case 0:
+		*r = kbtab[*sc];
+		return 1;
+	case 1:
+		*r = kbtabshift[*sc];
+		return 1;
+	case 2:
+		*r = kbtabesc1[*sc];
+		return 1;
+	case 3:
+		*r = kbtabaltgr[*sc];
+		return 1;
+	case 4:
+		*r = kbtabctrl[*sc];
+		return 1;
+	}
+}

+ 168 - 0
sys/src/9/port/devkbmap.c

@@ -0,0 +1,168 @@
+/*
+ *  keyboard map
+ */
+
+#include	"u.h"
+#include	"../port/lib.h"
+#include	"mem.h"
+#include	"dat.h"
+#include	"fns.h"
+#include	"../port/error.h"
+
+enum{
+	Qdir,
+	Qdata,
+};
+Dirtab kbmaptab[]={
+	".",		{Qdir, 0, QTDIR},	0,	0555,
+	"kbmap",	{Qdata, 0},		0,	0600,
+};
+#define	NKBFILE	sizeof(kbmaptab)/sizeof(kbmaptab[0])
+
+#define	KBLINELEN	(3*NUMSIZE+1)	/* t code val\n */
+
+static Chan *
+kbmapattach(char *spec)
+{
+	return devattach(L'κ', spec);
+}
+
+static Walkqid*
+kbmapwalk(Chan *c, Chan *nc, char **name, int nname)
+{
+	return devwalk(c, nc, name, nname, kbmaptab, NKBFILE, devgen);
+}
+
+static int
+kbmapstat(Chan *c, uchar *dp, int n)
+{
+	return devstat(c, dp, n, kbmaptab, NKBFILE, devgen);
+}
+
+static Chan*
+kbmapopen(Chan *c, int omode)
+{
+	if(!iseve())
+		error(Eperm);
+	return devopen(c, omode, kbmaptab, NKBFILE, devgen);
+}
+
+static void
+kbmapclose(Chan *c)
+{
+	if(c->aux){
+		free(c->aux);
+		c->aux = nil;
+	}
+}
+
+static long
+kbmapread(Chan *c, void *a, long n, vlong offset)
+{
+	char *bp;
+	char tmp[KBLINELEN+1];
+	int t, sc;
+	Rune r;
+
+	if(c->qid.type == QTDIR)
+		return devdirread(c, a, n, kbmaptab, NKBFILE, devgen);
+
+	switch((int)(c->qid.path)){
+	case Qdata:
+		if(kbdgetmap(offset/KBLINELEN, &t, &sc, &r)) {
+			bp = tmp;
+			bp += readnum(0, bp, NUMSIZE, t, NUMSIZE);
+			bp += readnum(0, bp, NUMSIZE, sc, NUMSIZE);
+			bp += readnum(0, bp, NUMSIZE, r, NUMSIZE);
+			*bp++ = '\n';
+			*bp = 0;
+			n = readstr(offset%KBLINELEN, a, n, tmp);
+		} else
+			n = 0;
+		break;
+	default:
+		n=0;
+		break;
+	}
+	return n;
+}
+
+static long
+kbmapwrite(Chan *c, void *a, long n, vlong)
+{
+	char line[100], *lp, *b;
+	int key, m, l;
+	Rune r;
+
+	if(c->qid.type == QTDIR)
+		error(Eperm);
+
+	switch((int)(c->qid.path)){
+	case Qdata:
+		b = a;
+		l = n;
+		lp = line;
+		if(c->aux){
+			strcpy(line, c->aux);
+			lp = line+strlen(line);
+			free(c->aux);
+			c->aux = nil;
+		}
+		while(--l >= 0) {
+			*lp++  = *b++;
+			if(lp[-1] == '\n' || lp == &line[sizeof(line)-1]) {
+				*lp = 0;
+				if(*line == 0)
+					error(Ebadarg);
+				if(*line == '\n' || *line == '#'){
+					lp = line;
+					continue;
+				}
+				m = strtoul(line, &lp, 0);
+				key = strtoul(lp, &lp, 0);
+				while(*lp == ' ' || *lp == '\t')
+					lp++;
+				r = 0;
+				if(*lp == '\'' && lp[1])
+					chartorune(&r, lp+1);
+				else if(*lp>='0' && *lp<='9') /* includes 0x... */
+					r = strtoul(lp, &lp, 0);
+				else
+					error(Ebadarg);
+				kbdputmap(m, key, r);
+				lp = line;
+			}
+		}
+		if(lp != line){
+			l = lp-line;
+			c->aux = lp = smalloc(l+1);
+			memmove(lp, line, l);
+			lp[l] = 0;
+		}
+		break;
+	default:
+		error(Ebadusefd);
+	}
+	return n;
+}
+
+Dev kbmapdevtab = {
+	L'κ',
+	"kbmap",
+
+	devreset,
+	devinit,
+	devshutdown,
+	kbmapattach,
+	kbmapwalk,
+	kbmapstat,
+	kbmapopen,
+	devcreate,
+	kbmapclose,
+	kbmapread,
+	devbread,
+	kbmapwrite,
+	devbwrite,
+	devremove,
+	devwstat,
+};

+ 2 - 0
sys/src/9/port/portfns.h

@@ -150,7 +150,9 @@ int		isphysseg(char*);
 void		ixsummary(void);
 void		kbdclock(void);
 int		kbdcr2nl(Queue*, int);
+int		kbdgetmap(int, int*, int*, Rune*);
 int		kbdputc(Queue*, int);
+void		kbdputmap(ushort, ushort, Rune);
 void		kbdrepeat(int);
 long		keyread(char*, int, long);
 void		kickpager(void);

+ 10 - 2
sys/src/cmd/acme/exec.c

@@ -1041,6 +1041,7 @@ indent(Text *et, Text*, Text *argt, int, int, Rune *arg, int narg)
 	Rune *a, *r;
 	Window *w;
 	int na, len, autoindent;
+	char *result;
 
 	if(et==nil || et->w==nil)
 		return;
@@ -1056,8 +1057,15 @@ indent(Text *et, Text*, Text *argt, int, int, Rune *arg, int narg)
 	}
 	if(autoindent >= 0)
 		w->autoindent = autoindent;
-	if(autoindent != -2)
-		warning(nil, "%.*S: Indent %s\n", w->body.file->nname, w->body.file->name, w->autoindent? "on" : "off");
+	if(autoindent != -2){
+		result = "off";
+		if(w->autoindent)
+			result = "on";
+		if(w->body.file->nname)
+			warning(nil, "%.*S: Indent %s\n", w->body.file->nname, w->body.file->name, result);
+		else
+			warning(nil, "Indent %s\n", result);
+	}
 }
 
 void