From 639fd069b23347f1aad19cec3034fa7e325082f7 Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Mon, 15 Jan 2007 14:25:27 +0300 Subject: [PATCH] 1.03wip --- Makefile.in | 2 +- configure | 2 +- data/Makefile | 2 +- data/consolefonts/README.Greek | 6 + data/consolefonts/gr.f14 | Bin 3584 -> 0 bytes data/consolefonts/gr.f16 | Bin 4096 -> 0 bytes data/consolefonts/gr737d-8x16.psfu | Bin 0 -> 5124 bytes .../{gr928thin.fnt => gr928-8x16-thin.psfu} | Bin 4096 -> 5046 bytes data/consolefonts/gr928-9x14 | Bin 3584 -> 0 bytes data/consolefonts/gr928-9x14.psfu | Bin 0 -> 4534 bytes data/consolefonts/gr928-9x16 | Bin 4096 -> 0 bytes data/consolefonts/gr928-9x16.psfu | Bin 0 -> 5046 bytes data/consolefonts/gr928a-8x14.psfu | Bin 0 -> 4536 bytes data/consolefonts/gr928a-8x16.psfu | Bin 0 -> 5048 bytes data/consolefonts/gr928b-8x14.psfu | Bin 0 -> 4600 bytes data/consolefonts/gr928b-8x16.psfu | Bin 0 -> 5112 bytes data/consolefonts/greek.16 | Bin 4096 -> 0 bytes data/consolefonts/grfixed.16 | Bin 5046 -> 0 bytes data/consolefonts/h14 | Bin 0 -> 4 bytes data/consolefonts/h16 | Bin 0 -> 4 bytes data/consolefonts/h8 | Bin 0 -> 4 bytes data/consolefonts/iso07.08 | 5 - data/consolefonts/iso07courier.16.psfu | Bin 5046 -> 0 bytes .../{koi8u_8x14.psf => koi8u_8x14.psfu} | Bin .../{koi8u_8x16.psf => koi8u_8x16.psfu} | Bin .../consolefonts/{koi8u_8x8.psf => koi8u_8x8.psfu} | Bin data/consolefonts/lat0-08.psfu | Bin 3108 -> 3110 bytes data/consolefonts/lat0-10.psfu | Bin 3620 -> 3622 bytes data/consolefonts/lat0-12.psfu | Bin 4132 -> 4134 bytes data/consolefonts/lat0-14.psfu | Bin 4644 -> 4646 bytes data/consolefonts/lat0-16.psfu | Bin 5156 -> 5158 bytes data/consolefonts/lat9-12.psfu | Bin 1864 -> 0 bytes data/consolefonts/lat9-14.psfu | Bin 1905 -> 0 bytes data/consolefonts/lat9-16.psfu | Bin 1974 -> 0 bytes data/consolefonts/{lat9u-08.psf => lat9u-08.psfu} | Bin data/consolefonts/{lat9u-10.psf => lat9u-10.psfu} | Bin data/consolefonts/{lat9u-12.psf => lat9u-12.psfu} | Bin data/consolefonts/{lat9u-14.psf => lat9u-14.psfu} | Bin data/consolefonts/{lat9u-16.psf => lat9u-16.psfu} | Bin data/consolefonts/{lat9v-08.psf => lat9v-08.psfu} | Bin data/consolefonts/{lat9v-10.psf => lat9v-10.psfu} | Bin data/consolefonts/{lat9v-12.psf => lat9v-12.psfu} | Bin data/consolefonts/{lat9v-14.psf => lat9v-14.psfu} | Bin data/consolefonts/{lat9v-16.psf => lat9v-16.psfu} | Bin data/consolefonts/{lat9w-08.psf => lat9w-08.psfu} | Bin data/consolefonts/{lat9w-10.psf => lat9w-10.psfu} | Bin data/consolefonts/{lat9w-12.psf => lat9w-12.psfu} | Bin data/consolefonts/{lat9w-14.psf => lat9w-14.psfu} | Bin data/consolefonts/{lat9w-16.psf => lat9w-16.psfu} | Bin data/keymaps/i386/qwerty/by.map | 587 ++++++++++++++++++ data/keymaps/sun/sunt5-ru.map | 2 +- data/keymaps/sun/sunt5-uk.map | 383 ++++++++++++ data/unimaps/8859-7.a0-ff.uni | 4 +- doc/kbd.FAQ-14.html | 40 +- doc/kbd.FAQ.sgml | 35 +- doc/{set_kbd_repeat => repeat/set_kbd_repeat-1} | 0 doc/repeat/set_kbd_repeat-2 | 34 ++ doc/scancodes/scancodes-1.html | 239 ++++++++ doc/scancodes/scancodes-2.html | 349 +++++++++++ doc/scancodes/scancodes-3.html | 26 + doc/scancodes/scancodes.html | 63 ++ doc/scancodes/scancodes.sgml | 668 +++++++++++++++++++++ man/man1/psfaddtable.1 | 5 +- man/man1/psfgettable.1 | 5 +- man/man1/psfstriptable.1 | 5 +- man/man1/psfxtable.1 | 55 ++ src/paths.h | 2 +- src/psffontop.c | 24 +- src/psfxtable.c | 6 +- src/setfont.c | 12 +- src/version.h | 2 +- 71 files changed, 2522 insertions(+), 41 deletions(-) delete mode 100644 data/consolefonts/gr.f14 delete mode 100644 data/consolefonts/gr.f16 create mode 100644 data/consolefonts/gr737d-8x16.psfu rename data/consolefonts/{gr928thin.fnt => gr928-8x16-thin.psfu} (78%) delete mode 100644 data/consolefonts/gr928-9x14 create mode 100644 data/consolefonts/gr928-9x14.psfu delete mode 100644 data/consolefonts/gr928-9x16 create mode 100644 data/consolefonts/gr928-9x16.psfu create mode 100644 data/consolefonts/gr928a-8x14.psfu create mode 100644 data/consolefonts/gr928a-8x16.psfu create mode 100644 data/consolefonts/gr928b-8x14.psfu create mode 100644 data/consolefonts/gr928b-8x16.psfu delete mode 100644 data/consolefonts/greek.16 delete mode 100644 data/consolefonts/grfixed.16 create mode 100644 data/consolefonts/h14 create mode 100644 data/consolefonts/h16 create mode 100644 data/consolefonts/h8 delete mode 100644 data/consolefonts/iso07.08 delete mode 100644 data/consolefonts/iso07courier.16.psfu rename data/consolefonts/{koi8u_8x14.psf => koi8u_8x14.psfu} (100%) rename data/consolefonts/{koi8u_8x16.psf => koi8u_8x16.psfu} (100%) rename data/consolefonts/{koi8u_8x8.psf => koi8u_8x8.psfu} (100%) delete mode 100644 data/consolefonts/lat9-12.psfu delete mode 100644 data/consolefonts/lat9-14.psfu delete mode 100644 data/consolefonts/lat9-16.psfu rename data/consolefonts/{lat9u-08.psf => lat9u-08.psfu} (100%) rename data/consolefonts/{lat9u-10.psf => lat9u-10.psfu} (100%) rename data/consolefonts/{lat9u-12.psf => lat9u-12.psfu} (100%) rename data/consolefonts/{lat9u-14.psf => lat9u-14.psfu} (100%) rename data/consolefonts/{lat9u-16.psf => lat9u-16.psfu} (100%) rename data/consolefonts/{lat9v-08.psf => lat9v-08.psfu} (100%) rename data/consolefonts/{lat9v-10.psf => lat9v-10.psfu} (100%) rename data/consolefonts/{lat9v-12.psf => lat9v-12.psfu} (100%) rename data/consolefonts/{lat9v-14.psf => lat9v-14.psfu} (100%) rename data/consolefonts/{lat9v-16.psf => lat9v-16.psfu} (100%) rename data/consolefonts/{lat9w-08.psf => lat9w-08.psfu} (100%) rename data/consolefonts/{lat9w-10.psf => lat9w-10.psfu} (100%) rename data/consolefonts/{lat9w-12.psf => lat9w-12.psfu} (100%) rename data/consolefonts/{lat9w-14.psf => lat9w-14.psfu} (100%) rename data/consolefonts/{lat9w-16.psf => lat9w-16.psfu} (100%) create mode 100644 data/keymaps/i386/qwerty/by.map create mode 100644 data/keymaps/sun/sunt5-uk.map rename doc/{set_kbd_repeat => repeat/set_kbd_repeat-1} (100%) create mode 100644 doc/repeat/set_kbd_repeat-2 create mode 100644 doc/scancodes/scancodes-1.html create mode 100644 doc/scancodes/scancodes-2.html create mode 100644 doc/scancodes/scancodes-3.html create mode 100644 doc/scancodes/scancodes.html create mode 100644 doc/scancodes/scancodes.sgml create mode 100644 man/man1/psfxtable.1 diff --git a/Makefile.in b/Makefile.in index 9e66f6b..ef5666a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -15,7 +15,7 @@ KEYMAPSUBDIRS = include sun amiga atari mac i386/azerty i386/dvorak i386/fgGIod # Do not use GZIP - it is interpreted by gzip MYGZIP = gzip -f -9 -DIR = kbd-1.01wip +DIR = kbd-1.03wip SUBDIRS = src openvt po diff --git a/configure b/configure index 8af07af..4a960c2 100755 --- a/configure +++ b/configure @@ -126,7 +126,7 @@ if [ $nls = 1 ]; then echo "(Otherwise, edit defines.h and delete the line with ENABLE_NLS)" ENABLE_NLS=yes else - echo "You don't have " + echo "You don't have and gettext()" ENABLE_NLS=no fi else diff --git a/data/Makefile b/data/Makefile index 589143f..e123c79 100644 --- a/data/Makefile +++ b/data/Makefile @@ -7,7 +7,7 @@ install: $(KEYMAPDIR)_Z $(FONTDIR)_Z install -d -m 755 $(DATADIR)/$(TRANSDIR) install -m 644 $(TRANSDIR)/* $(DATADIR)/$(TRANSDIR) install -d -m 755 $(DATADIR)/$(UNIMAPDIR) - install -m 644 $(TRANSDIR)/* $(DATADIR)/$(UNIMAPDIR) + install -m 644 $(UNIMAPDIR)/* $(DATADIR)/$(UNIMAPDIR) install -d -m 755 $(DATADIR)/$(KEYMAPDIR) install -d -m 755 $(DATADIR)/$(KEYMAPDIR)/i386 for i in $(KEYMAPSUBDIRS); do \ diff --git a/data/consolefonts/README.Greek b/data/consolefonts/README.Greek index b905c45..40907c9 100644 --- a/data/consolefonts/README.Greek +++ b/data/consolefonts/README.Greek @@ -2,6 +2,12 @@ Greek fonts found in kbd-1.00.tar.gz: iso07.* follows ISO 8859-7. +gr928* refers to elot928 which is the same. +(plain gr928 is elot928 with cp437 control chars; + gr928a* is gr928 with Euro at the 0xa4 position; + gr928b* is gr928 with the cp437 symbols in the 0x80-0x9f positions + and a filler symbol on the positions empty in ISO 8859-7) + gr737* somewhat follow cp737. (gr737a* is cp737 with cp437 control chars; gr737b* is gr737a with end replaced by cp865; diff --git a/data/consolefonts/gr.f14 b/data/consolefonts/gr.f14 deleted file mode 100644 index 4f21e577e2e97986b9849535782473b363b2abd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmZWrzl+>P6dqeaw}rB2r&6%8hTuOyj*M7*V%B#40v8511|2fG!prT#fxX~G;u@1O zWe!{g(i;pZ0!|ih5H6O~2OEN`+xAKq=9KTfHzR4!&(@y4d2inDc_XE^sW|@a`1sw) zaly+)y{_x!rWT~)5~PEkZ0QBM1%8rjHXGkhnCB-&T^AN%32dJ^HPL1XokX;h3jHkBrK!%(CoYbG9Jp`|D(rtc~Qo zbUH8R)ASy()D>svW_feRxxxs3`o3Qn-y$XzMa(PL>-EbUAVN9|gE-6Lz|Ays=?BT+ z_eKk+Nf6Wu4==3+r98KEJ?7AlAC{rW@lu+mqLI+8yv}d&GJbkNptUhahP4iC8LWu> zMWPd!7VF5#_Z@Z|moYzB^E{pHr`q{3)1LUVpShkNWh@`WajZ=ag6F$Mdle zhQ93bJ(tL{QRGRT@p$eW58BQhzXcd6b#FdqLt6jaX7= zESgEyfSiHj7)iH3i1X5QcUiJTZi|K&gh0rS)UsqP)=^FC4UgVNj^j#SOJ19Z_{9dq zJ|itI+rtmKfg1v^DXmjX%!5uBNjG^1noK5#srb^PHlt={$pRgz@ra&5w2vtEqXF~g zF}G_xXH-VF?<99_N0JFaVK`$R@0(=NcZ{H$4TuFa3zNjR%f+-O?kI}mB#xsa-Z$g2 zTMIbA>m`xsJbGD94y@M{0w@lc$1z~9_(J*2o=vp7Lrmr&4zU1Uhy!M-Qm;=sp3ycU z$r4*$VjQpqLhE&%OW!SNJ;{w{U;)}mR4-q7Nw~k1&PzC=FqGIaCx$`aP6p{R&m$hy zgbjW1Q==i;(`?v@tIf$#Qz)l09on5bOH&g=-*wTTRuTd_D=jaGe+cJI&cNG)pmuo@ zLT9`Oosu&&Q9$QGdct)T)Vi)z5RwrJXe3#zk%Z2(8WV19Jv-!XvWUwhxyBOlw5_1= z#hfd3xED1XiecC{@%1qFkoX&Ys}mt~qLso}o)pj`v`#1GRQ6GG0?QmzO1iuc^;0}z z0WUQ7%;Ds9fGO+TYYHGHzwmyt-Ia#8KCVV>R>U zhDVYu!U6A~;dt0V*g9J+Rx{tDBS2bOous8jq@_i~LkUfG!&w(C(y+s;Drl{$i>iVF zGTtJZITv|4PxA}#h{k_>Q~dl(!S8y!T3sO8e+Y?ZRVC3XD4PQa63;9mUnohECE~S+ z_R+S&rEsf?T&XJf1Trk6v)3y=fQlY}PYlOT({qfsv(F@{u;bbV{#_&RX|?+F_v*jZ z>Wolu2RZpniFxypaF;x<_f?C1zsLJ!Wy`|3(5}!n;#&%%#Wd5UyWfl%YenCG^6=rq zC--q!E^ARL9-oe5D~Z3w)vH%qNVA3L%YC@wg{9Q=^i+CS7EI`hvot*o(+{7l1~szUa{H&(-CKqtwMvxw>kWn$%#3*H?b|3C(P&`w_%Y=KWW*8O_|&|={+$l0 znfi-GwSsg1zVdvUBBW(NV~S<}{FMdc7eJo>Am>DzQ+(QND;Esqj(S&7gh;(mgpjijqzPQ#>P9%i}?w#hh!U*7zuH zqkZ(~`t_zN)Gv3N2~9|+!&JUX2+956I7$&>B{X-reh0MAc5_Dyt^-p)30Ntf?Dz-` zlo}vdT$Js;)}9*C#}d9V`_6!)?^ss@WP&=aF|V*%MtBJaj@&_N^t2lh-G8R9v2Qy|akolb lLR&y&=@JiErU(vklX(iKqmwH}ZN^>`YV8pMN3?8r-T%FLx1j(4 diff --git a/data/consolefonts/gr.f16 b/data/consolefonts/gr.f16 deleted file mode 100644 index 6945edc1b86e85e68ec676f6c94140eb085928d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmaJ^&1>9N5Pz5;d=SeXMPu9^Ldc;9k(MBea1s+ruj#Q65Kd5Y5XC36q(WZj;6I@x ze?af0=LEz$h#Zz2dRUg)EPGmCirG`x!=mkPKA!Ysmkzd8^JdRj@W^;DA*(h#IRs-^=Z+G^i+(m;pzP!8)f>`N6TwrsHV;L-gP&W*hXQY6D zSL1YlKb7sgc=q=F`?qIG-|c;Ie=r6NL_(Yb;s6Q+fB4PA5OBDh3x53k_&MO`%S9;* zL2w>l#^=gEEa%Hry;{!8A(OYf-tJz#x7+i!ls$&%ps)rTQU}1V(2vj0&wss5z<6FI zQC3x1c@RLF&D8eD~G@gQEN$saMK&uep@@rqIEF(|RUn zM^Tt{4)FeXCCwLhGUlzi^X9!vk(|8kWw3!FdvAP;jFuC1enp$n>)*mcvd1RmF z+vHXCY4&+h*>nZb0I~ooBd>(L(g*|hV$bs|zrPb_;~FOKimn>TSUdD60bT*L9BS+r zpM@X#EBd!|dM~iw*ZQUygVS+XaqBLdhp2fX4^LRG#?w+lH1e1bL;m{kt`SK3X0zEv zsrL1$d}}gD_}8d_oGN}Tc$|*lVL8$UHLHw>X_~EsUZ)2y2QQO@RO6+1k}RG5v#LtJ z6Pz@$I@L$T#}EsBm#d-e_XSi922i>X`Z8f?^i@}NJt3hguUdSrXP;V}V@;^~%l?rF zwNL4jS?>2p1JlVz)dzYK`ChZXD1PeLOQIQ6zG9heIKn5BNqv=x{g@T##vDNxoMOo_ zQ2*=dl#(~H^%qOKgrU+6CfH%L)6A<_+Q;{qPT3T>|MA4M4MTUZD9^ypn|?L(B%x@d z2pS1_g#xhg+kvJG?AqVNlvij1OOLV_3Fk=T3;GeUk8__#IOJzXBwyo;(u~~vd!Ff` z9RP?6HiKUZK>39kJ8V3R`KLyJC#~NXB;L+zwvUp~`XltbDFJJrZRv}nw5<=`j|#B+ z`(e1Ilswo0MS$IN;=$UR1H>390L?$P;IxR`Jdt%Y1bo|4W16ShPd&JLNCD#Nq`|<= zOiu=)5l?U^_|b*@womSGE6zwiqn&+^BQiF|wI8+D$tO0OPJMvi#W8Ijlos!ApC74HpY#Plf*O4Mh;pItA~usj3~m13!b%aWYplE-r9tPy|_?bDj*> zTx?IWt1FhU{UaR$1Un*;y5s-Of1Ky2KY-42<|mo%dEfeDuAg7bN)M?=E_XivbI~ug z34aU0tMPO>pD(9czudjNUH9KO@0$Z(_Se;GgABj6_SyEb{VR8m)*d?VQ_KVFAEb2Z zryik&5#W*fd;R>U?M}Q+fDfp1`u+*jpKIqm9aWPFt^hESKoie?A*QkWku#m{gO!6KEgkIr1WdPm-Kx= zH;z*xF|hleOM9ayf4&U@I0_gRUp>mBN98KNr3tVhZtdNWdZ%so=!3CHl6aRzASERt z+U`GQg##htS-heAH16GqXZANBw-zCO-+vuMFRVkR|J&p*K;9RNjd{Ws#7yM>a4jAP YgPSkTH}`}1L%2&fSm?-uRHvT*1-`owga7~l diff --git a/data/consolefonts/gr737d-8x16.psfu b/data/consolefonts/gr737d-8x16.psfu new file mode 100644 index 0000000000000000000000000000000000000000..ed15679db1b70bd518588aaeba55371662419698 GIT binary patch literal 5124 zcmai%S!^9w8GuIy-KUXzk$4yy%SqF;1Sl}1#kr(|T|$Afl&S|RtU&!;Bl{`1H<3t%HZWV2tt+*nQf`!C$lnWc2JhoDUf zJUYOwG>uwr8fydflqu69)1m#D`P4F1CVu%v zDLZ7k+{`sv<--rN(62amk|Z(SRqggDi?)~gW~&v)wtK2sytq{^Uumd*u{HtyJ0>26 zx~*;z;awrso)@RnN!(~0O=CNP>D2Z7Fg>c9wW6psvB-K&D4C@RwZc5HRmF34h3~nl zc;yJ&K^~adRyNFz?W=G_$YlekIvd8MY|+<{_{@4cvRZRwLWW)9_$^-deokS{38pNRdrAk>}>-vU8D%FOA5?m`T^N%%z$GGyW_+DvLL5_g|pX z#rKWg;RG9R4HV~9pwq{7m0ng;`~5#pPFvrv9xTSDU&UznNdQW~;jXjfT@tI#8Gw8e^|F zfU(!cw6OExIIm?)@LW0WMR9M>YZad?LOC9-kBco}Ua568E)MNfIYXSNr2r zfy<4;r5xz0+Wzm%x+=Zx_Y)?vTZ;XJysQq`W!+fryWzHkpkeYL*SJ<2QcG~f%_fCJL?22C_ zeqDdwDf}zD+&SOVzOXm?!d}^(FYQ%4dFjviDeP@~8^4knf33fvp(0*8K4Yg}mGPST zk)HO2KOK+PJHNf_Rm`9IC#dqU@!6`?o^nA?F?O|Zok%`N=Jb8U=}|k6_;ReBFCy2@ z6Yf<#S^7Q_eXm^2f6>?Sm2;&ki@p+1m>jEpkA}&MJA8kb`*z2$48rr|Td%xd!sN8> z-Fy!qtHVVOZLxPf5zF)2>QS2WQ+%p_FYKN$pU;I}&R6QJ+`nm)?XmKnpPx7PulU2( zUe6K)S8{PH%fClbS1(m-rSYu(0`+D)AM3S+Pj_Cp&Ez(KeV4#8oF;4|=9_#BMG z=iv+RMfehY87AO<=)hOttMCBC@HObdBpiPeYXc|XQFsi#1K)+m;Us(yz7IcuAHt8| z$8ZXM0zZYH!4vRvcoLq1U%)f)Ec_0B4}XB?;Cc8X{0UxwKf`G_124i~Ac4Qa3{1mI z@Ha@|@9;7lXAeCBC!i0u!M!jFx4<44gB##hxC`!tJD>?~g)87P7yt(XxEt<)y>K(! z2W<%9dWhfv9E5$aA8v=+;6}I!4#Oevz=en4>+mofgCp<{#_%-!3Vsd$gx|m{{0m-z zSK%l;1mA#f!o%<__%=MlI_@X0_Q95m$tU2-%&$TIE$_GSexCP*yeGG?9{fH<-=}#0 E4>1vT#{d8T literal 0 HcmV?d00001 diff --git a/data/consolefonts/gr928thin.fnt b/data/consolefonts/gr928-8x16-thin.psfu similarity index 78% rename from data/consolefonts/gr928thin.fnt rename to data/consolefonts/gr928-8x16-thin.psfu index 2c795205ff764e22c864295ee0d5acb6e3a04158..856ac95d87e0b83e32ed88b243bd90a979d294ca 100644 GIT binary patch delta 965 zcmbu-S8tAC7y#gg{(zoHIP$f$wYSn?)!uurQY~70@6Q2(2%Yw*phH_aXz4I(7RUS; zd0b!rf+xA|^*(v?-pPA5(vljV7T+tOA|d)WgpiRELMD0SlS>Xskq~|-htSO*vdyMa zKp|PQnRij1sCU05E`%!T%&N_bDW!xW`X_}@CO3KBksP8S;&LKM3}7J1q>#!W1~Y`A z3}ZMW7|AF`GlsE@V?1e0U?S;ckVzJkn9P*8sEriU$Ywe-n8_?=Gl#j%V?GO5$RZZA zgrzKFIV)JnDps?GwX9=38`#JuHb;dVwy>34wvk6Z+u6ZR3Mgb3yV=8D_OYJ>9OMv( zIl@tnahwyJi0RIrbM+Q`0l673-+)>H0)MXizoA_HUw@ zbG<`2&jnib7v)P_rd@wU?v$^}*C?Wx5=tqfoa@}+CbziF9qw|E`#hk6=tIGGi;sCi zB~?^Y!&7Rhqn>9xr-4SAXyyekX`z)@yrzwII_TsLZ+XZ2bm0RZ>EaWg`NCJe@ttmd J@RMJJ@DKb2a^L^} delta 7 Ocmdm{-k`9MMF0Q_<^nSS diff --git a/data/consolefonts/gr928-9x14 b/data/consolefonts/gr928-9x14 deleted file mode 100644 index 5497920f568417a65e051a875ce4b97a3b48a163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJy=x;!6d!!Bq*#PVwIo6ixZ=t^8_W_G8Sc*rDHc0SuGm7ASnwd9UARh-GHMR4 z$R7~gq=?C4!B*x~@Tl$}PwweX;2$rU6l!ZZ?}JN?8`AQy6)q6r>Rgc0`*w`2-Ow z)vsP@wj$1ac6~jYi)`5YYQMMz6{4rLP9r!abaZeOgT@c{gw9URPC!3y)+LaNqGh^C zm#q1wynlGKj}Q0d8%Xwo-f(0`!(On*iYeShQ#UvGCsOzkoh_Hk)2~4UOqC^hl_z0k z2r^MJ=mWuu7tWF(FnFHy2KgbN9NJJ)L8ftLvzR`F%CcmSj9%n6f8izlBr!&Y0}Dkk zi7$g!kvB4(VrUs1(L8U9bGW1*cu{1ko6-cAl@Z;WYLH~rrKl%)o=jG^w-bWMb0%zl zh7n~xjzUIw6Ge3tI^Cs`K$0VLanH)kXjD}btcbnpUI2#~S4=77y;@YrJ?lhCAsJ<4 zD%PyT5m1l@fh$osNb_48hC|l0$nCb4B^gjvIZX>Yj>`E2zn0P06ykzq6p;J{3UaZt zk0=bBrkY{{`R|PKgqRq^X9!CdEsbz@w<={}^(kBn7He)%L4*I6QL1kc#f|J1^_WAT zb^gdQtB+q7uaC84LQs}HGg%@Lph)HQPO8M1F+o zleMUdn`gED%ig{Bh$14Ah&TpV%3MUYxHDl7URhR;09l3|=Io}^?^-hxk6tDycUu5x zu~^tow62xHQZb1^78y~BC`O6TR+p&4v0E=GFXT8D8BU6EGH@q@N+}Z{$fzXj>*-^M zx<26+p>aD$-DepkP)jDDX{xex@eSZSN3MB~krPwdT6VY}7nq%2bra~_nvhRI_{=Bp zDOJHDN+?YdLlCH507A@g2u&`aXtG+Z3GqjZtksdN;L@FZJeRtDO0meGgb*m@<`T;O zSF4HkwS~}BAIDpSa5!KqJSc`HS}LL2(~waGt<;ZDo-{cpMQp)P*157jC1Y2= z9-a^`MgY`_J&)ef zP^GV=I*j&xi%E4b3|wna3caXh1vGC#RsQ^Y(`8&6s^x$F7RRIb<;x@HTwNU;936ld z{qYND#+^0_q2(XE;ag}D4Z+Cnk9CfAx59Bd0wyoiTS%tV+pBLt2VauU@C&6S(Xxv_ z*Z=G>st1xzBAXb!jD7y2|8>rJIzXtU%2`Jph>&5sZvR_%I-Vav>^|4=>;+bdQWr9p zZvW$v>(RU2kf%^TY>9S)dyjbO_CGqDn?8nn@N9;gRm!&Aju+wHx~yfXo`dxB4QbA$ zdUz7RMYrt}&Ghs=PUut81VF1Qd_Mw|{(uI~bc!7_q+S0!)Su{rs zxbV|5HHfvj-9y@px22mBZaQTV`g>Pv^bv0Qblo4ZM?9Lj5NAzSmNm3`iU seUIk5F#W#hb~>ISQ6obImph38xo$<<%{-T^Ue`da@qk)h{Pght8*j4y6951J diff --git a/data/consolefonts/gr928-9x14.psfu b/data/consolefonts/gr928-9x14.psfu new file mode 100644 index 0000000000000000000000000000000000000000..648c23acad222feea825b415b792cad737a14a42 GIT binary patch literal 4534 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 diff --git a/data/consolefonts/gr928-9x16.psfu b/data/consolefonts/gr928-9x16.psfu new file mode 100644 index 0000000000000000000000000000000000000000..71404741a9ee6c1a7b5f86cb6a8372137eb5137d GIT binary patch literal 5046 zcmeH~TWlQF8GuI#TJ>RMS(T86Hgb~?XbNrF#H|^^)P`^=w52z0Erl}JFa(&krhwU! z=^956l?t`t*0OC0MBG9Nm&7gC7#1%bZYGab&{~$Cye|m(3FTos!}p(aW_ET{#6w>> z(l;~z`Tz5u|6Jz$GegI$>bH(6)v3p)re9hquO9IZ`NX*Hw+DXP{Bwr&k{b5+@>&CJvqMnBN^rOlN&N=19{ z0*dF*ftE)GN6M7(l_f1tj!lkHu5B&Xb%o;OS+?Q*ZRq3v$_4tQj{FUz8l7I=-P3l4b)YpOp8p1_Gji(%T$^8 z<%!bikm<4$+h~=KvY+_nf^(~0uN&{Gc4L@?8$0@b*NvjAd#YKy$n7j&$51`7HXi+3 zCLV^mq1z(FyF#iRCyHn5QK_^ujU zWye;<>5MS&QqRn`vSD_zzH(QD+-YDHXTz9uTC6Hbd}h5ZS*`hbSut(sxD|X+%=$#J zHjj-@_UiFeB4 z&1U=0)2~apZ1ff<*tokUKd(If`q;M8%W7)B|KlpBEt}&gO~sD#_tjeReVJ`GL2eht zY=CV3*3eUkxp}|ED2jOra{bWeaz$d!_p>!2=5vv)j&S^k6XM^@FI&?su79ay_3=7T zm=~O5uQ!0P*T%HS=EJf+Oqk&L&bSxEeRf`}_+$|}o0QXy2W);_8bCs_Dapkd1~ILK889j6Qp*h zoWNPpor_LvoN*;jEa>XORlVVvyF&fvkDt$gRrb3-Eo?GTaa!E)YF{0>AGV9tpZ=_N zr`e`r)$@T=crCRLCur36?5Q;Z=hJ;!L*e0YsGv_*uP#Vk>94Ck6ZChcNb-4-)vCMx zxXAOT7ue3`T(Z2NG*HS?ANC~HuGYwnu8R7um%8$4A&+aj*Y}sp!{zd(O(R;Ko*o<= z8Kf9D2Om^3SUBGpdU!bRWH_h-)c&&v17 z4)z?O?J)86=6@ZFM5W{J{T|S@ooiC(gNpghzPNkyzhs(X{^r-DR;%&B>S-Tjg06h; z@c+WYDf@<5eQqK*)c;4(Ki?JG4@t(^uKgpEpDTI(MK<}56p9J5cB$7} zwrfjbE^O*9e`>zkOi!Dnue)e4K>pEGi-_4!zhl||7$#l)x8>`FruB-QebRQtGtAGK z`a>Jm&bb!jlgefF!MCjSZpa7DkOZt{t|A1%BzsaR~diXDY)mu(X)6?M^2w)6+Sid$+51){x@4*MK zmAW(Fdbj~Rc!l~m;emC?*uP+<>65UJy1mrh1NXtbunWGjK27iEegOSJSc~mCSP#d; z1~>sugs;Lz_!^u9C&Sm_8}Lmy1FpR(%a3*Yp zv*2tv2hN4>!g+8$d=I`4KY$D1hwvl#G5iF63Kzmfa4}p0m%`8B=WrSP0xpLu;FoYE z_;3}B!Wdi)*FXT*!Zx@Lu7?{SgkQn0;Wsc2H^Oh>Cb$`HfeE-3D)2kF4YorBzlSRP z|K$<9IBV1NIC#`}e1f~|fW7dPs(YI2K6pk+$F5D&=Xu%>2VffRSe>SK!cKS*`48Oh zfm4!|`03;qo+z>Dw_ybQ0vt8frz;5B$1>hK24LId7} X|3D0H!Q1c-ybJHa9J~*QAWc63kutD0 literal 0 HcmV?d00001 diff --git a/data/consolefonts/gr928a-8x14.psfu b/data/consolefonts/gr928a-8x14.psfu new file mode 100644 index 0000000000000000000000000000000000000000..d1028b767c0c3bd830c94bda4cae841ed34e85d9 GIT binary patch literal 4536 zcmeH~ZHygN8Guh(a^sK5W z@3IXxY6zB3Sw9L50!50_F7nxxVJ{9KOMh-kcC*=Ed;bu!zf6BzXMEoG%-j!}@W)>! zp6)Yu-t)faJ?A}N?{xT#4SnWqr9S=8^z_`!^mJVm^?WJM8_hgd$(Sgk#9qH`)bGU| z!S(%Sv+26N>Ri80qf#;kt*eS$O0yw8DN^N!yLN@zN@^N2b8|Bds~hY)Ye#K?QnPkp z82TO@B!(Z%J0yPi3dpSCd=NY^d}Nj$|W) zeU%Mr=;O|<7h}V}6vLmCsimc*z3-)n5T}6`rIF{Pv4~n^GUSC|trwjoD^a22lwV5O z1;$S1*r|}F)gTM1@?uMpBeO|7ss|cs#t{BE0>`(vA@i;PuI40qS@N5 zj&Lb|)VXe)&L?qYe;Qlc`EgsKl=nw;e_3 z=f0gl(G$9Luf|%@F*TiFt-3VbP{CoKD`pJyo-U@$z1p~5&CaMwajKT7b%a#$E0to2 zoB=;t$Q)--Ei>k})z*0dQkoW)8SONx!YB1@oxIgi*Hk9~S*&QKB6juRI+eoG)Hy)q zdm!^fOe*8kp=A-R^sutBoY;-kFX3iXsbz~5jG?8HAI=lSyge=ERD>c7qf@HO!m-`8 z-D9Dh2`dG`dZ*n=8tzmH-`augfz6^tPoNo;wJcAZS;KpcUe>hTdLX6jA$=>$Se0U& z>Ds@tl@p~T5lOKTX$-WqW3jr$mDrKHM|JHU&;^{ZqFudyb=SzO$5Lmds5k;hi;Iid zTe7c>VXMSm%q*%TQzS9k__B0At1wpV7hgAWwQ6{>WL^ z(`su@T$~)U8U!+dp`8gV<1|T%_y%wuG1q#=#7UfHZQbyWYK_sAyKWM@h1k)X5TDT` zKJBWoi9DGm8$+dH`YIG+#vzuvfYwsY+Lox_%$T)yWXrfLZay7Ld;N@2Rm>8iFs2xb zW6!@?o(#*iMH#0P14VrO)oP0nh6l724~d}@tt?@2rqRg?W_JBVioDL8iy=qQvHRR) zw|NuA`t=db1lTObi!Iup)+0|KO)hIy=b?wJaMG#$|J(ok3{->ebn0+#cZK9d*9UTm zz1h;rfjvQse|y^dv&&RB5*IXu+MeX!IU{24hK-p+hh`e#>DPdDHyoXehV3iQeB;LU zdslYosw-dh+Xz82aakw7HlfQCBOZMwe)k1J87_Op%7# z`WKE?t0UFz+efu#c6MlJbcmwT@%v;-%G<^eT6D5(co0h|gH!~oV_`(PTjshQK^8BP zTSRBf!P(7}p)(B&uo<10VddO=Dv1eBGn%^w*LvCBAf$np1vvb@e{N zm%e=NkEll;ov}#GntZaXsm_boa>I;GB_1-&aH_~-W*_sWhpQDNHSI92RP3(MffqZ3 zcDXhzz4#)L4y`;gp2$Z_(QZm|T&=W>d-7lJEL}tLU5xwtt!+=nGotF~Siz;-#=u;6 zMcX^`x@7Hrjnvg2QkR!MmG|7z_#H_tDE8z6*n2w=;mJU@9(p1%ffz%J@8hMVAK z@ZmY?UxIr!BV+%R$@53x2z7_4y94fmJK+GlZ%dxv&F?Yv$6*t;n_&x_4O`(HI2Yaz z+u#Fm9()i!1n0vA@L{OJcGv+!a3OpIhT)^&!N*`HTm(LR97bRiE{0FQF8CyT3O)^= zflJ`C@HzNATnb-+%iwbOB3uDqf-l2Y;7Yg(z6xK1ufsRsYWOBx1J}a0;M)+ubub3w za6Q}rA>0VN;X7~>+zb(X7rqDIhY9!r?13M`kKo5J2|s}v{1ko$dm)COLmmG6@&I1k zO?mzvc#!ua{O0+?yvZIo439#dKgRP2Jg(BaH|6;gyd8yOFblVC%=2Hses~)Bm;C+; zehtqf-^TA8zqj-I8#n-Wz@2ax+zt1@z3^MO4`$$Z@O$_J{1Fbq{qO)B0>;hrPw)^t z43EHJcohB&kHHam9R31-g(u)B9D`YS68;8H!PD>zJPXgk^KcyI;P3DPB=924Ljzud Xe?ST^!z=JA{1aY-1$Z4!K%V~xT%&Lt literal 0 HcmV?d00001 diff --git a/data/consolefonts/gr928a-8x16.psfu b/data/consolefonts/gr928a-8x16.psfu new file mode 100644 index 0000000000000000000000000000000000000000..645da49646a9a28237ff2636a52167c120988aa4 GIT binary patch literal 5048 zcmeH~TWlQF8GuI#TJbQltV&2jYndbj8laa=+?r_^Y#L~xTnfDdg)-PM1Q@`*xmz-< zaRgC|5QID1OG?xN0m3D5%QY@rFP(BRd9;Govi#(ILC8;49=0?6{&UXE&Tf!+;FTkN zGxMMSKmWO(|IF}lYx=EYQg!;t>FL?p^mJ9Ls%bM#8?7`ovSoz{DRT3&{ccng9nWjE zT8`rx*N#`Ea7QK^6Gv-Pm0As{K$6P!f^FLZU0h{0YO}MohS3l9eSS-2o>b8uyny66 zRG{V2q0usFVs%-|Q{z+Pq#If*b)DfjO|RuOjs2bV<<+Cf(beVpol3o?)HgVij12ab z));dS*G@HSuqD-zcx(Msv)SD71xZSdV&4tpICSke(gx}&L#9QBL;Ex1sb#WE`{j$& zsgU8a6WeH&kFuZm<$`moUauSPDtA+ugqu40e%Fnnta`GUyvXfLU&l~=F*hFdTc$m9 zbz`?hhuNCHrtxArqGs=#w zlGEv7;H91!ZDqsgWOe1PXmY23RU8dt(kZc~B<(ZvZOLpcEXa&$L&vS)i)7{}inV!c zd?J^;QmK?puRY*}^9fBJ)a4T?z6U!L{-qsca`#X#WY;cM5p7VD;c{W2hlG)UXGSpku(__mh4 zV2&Qv=gbDRj)tNPg7B!;C&AeE%65M&Fym!p-(M}1Uy9>ktCpoERh_9%7N1I<)(@)H z(An=RR8^@^>5A5``YPr1#UCXJ(@8S^SN@wU9q!0#tVJ~aRs9nerhP`guoT&S;z8-9 zkETBKzH68A^402Ac zjo$z@g_xWDEk;qyCdl=}Tgnw_bH1LfNim;~Y;}a=Kb#c*W_($iZgKugC999^Kw?~Q zj=f$0#$Fp!A{!6O`Y>UD7dri36!+PAt=cD((CLrXNBI)S+LvwV#mS(vK2&*DKvurL zTy9JEh6m8-q`Fra52-CbUog=Nz|6nMq3agsN!fD<*x8nvm-E!@r#`wmAp@jVr<}l9 z(v^!&Y@7)tPcG{0!c*<=%v~Y>v(L{)z$*LQR|}g+R2&vJyv|og?uTuiJun<_9ZCG4 zumOq%)ao?LRPuW+NQG^wOF2QKws&u>5jaIJJ>SFOk#M+>m#$q~kh;QOSAHhwd!|To zJ;`#_TVF2n_~`|Md*i=EnqvIs*Q8dfabfke z4#Hnx;~!^}P}ksIp&qv)S|#g4-gadv3`$i(ML9)FQd{3C>7 zf~;NY`IhC{k~S9>b(cRiUTub_P0-g>H0U7zXsSfSXsF+@?0*cCuKL?@d!cB(VrN&{ zuJ(-ZbEf{#MznLD#r8?&in{QvXuTV9!5NkYYni7AK`_Od)LAR6k9y*N?|5D%*O7&&zrSA>>5cbF zUC_%4Xr`ur%um;N^v;)>Z&|*kKgeD6BX{}BTdh9+$6xiz$TWR_<>?dy@c@Mxt@F47llQyL3!@LioKLqQr zT@M@JWY`F&z^U*>*aWA+>2L;o3BC+pfv-XtHp3Peg0I2XVHnN?7rp^o;VkgrY#4!2 zI0wE7+u&R{555K8hV$V9_zqkM7s17F349kWh0EZ3@O}6J{1AQwKZc*cO{6+V4>0x!#<9$Euh6mt5cnBVbN8nL-3?7FX`~m(5e}X^59{3A9 z0egXV^ZXk;2~WY(un(SrXW=>656{C3@FKhf2jC#gz~A8?@G`stufl8aI=lggU>5!f hZ$cgZ1#{4Vx8UCp!++pycn98v_h260hr^Jj{|5@7wT=J) literal 0 HcmV?d00001 diff --git a/data/consolefonts/gr928b-8x14.psfu b/data/consolefonts/gr928b-8x14.psfu new file mode 100644 index 0000000000000000000000000000000000000000..d21fb19000827a21394cee2b3af9aceb801f521f GIT binary patch literal 4600 zcmZXXYit}>6@Vw%YO+5DCq=3>RTn1>X?eq>8wL{(vx&?59Uu@Mfi;tkpfz3-0A%ubm9=>z#%+4A;Nt%m^ku1MK2@84CCSM49f*S;ji;J!s zsLl=QNm9=ws!+SCNu(?`@hL^Bf_P*k)@D-EoSB`SX&T+yHP5>`h-0I~jyD&l>ZepJ zd7f9jctNE`)QF;JY;j>uMAz*Ei$N!~+*YpE8ntS9o2aZ+xi#w>>(}H~sl+&4*R7{x zD{8TdMb$MrozDJiC?bWCSMa0AFW6D2T6vHReeZhFG#LrEM#oF92g`EohV7_E9Ff3%#keQfY5*^UB>7ATx>{I)G!&j(toG=91n{`p37Qm9*#?e=eeep>)2A9EQ&Ztf;h7#@&qzb zei6M)*6Gg#qf}{C4u4)cVWfU+a{pA6=G`d-j+ByGhLM^^CTmE!!CWr2vs?*JLn1q7E*t748)zu?U7fs@ayi?qYm?V*MEa5iq+=#6w)V$^)u0Q4*Rs@0 zOsd1DP14i6BTY_DPL$19^0LfiF{@>r6&Zr@GgurYiqYbr>T13&SHGrGqquoXuw`@6 zWWq?EH?2BtHyIUQpc1~d1JeVGMT?1VtxjgPIM5zM z>U5IWth=Vv2XQ(wREXJ0lr#@Ifj8PTD=*N9JkP|=IWbfi$W8{c${a^@GAG*6a~=r` zqPLqmWV(WXgIDY34Baq>p{*w&KK)^Q znw+tS3bG%}ny_sPx3+C&5X&MHm|Ch?*Akx#2`5}98`*@ercBalGP$NobYV7w=~&Wz zWlanhyBdjMXdsO*&#_11ujyVfgwPkQnV76UGl7}J(&yqRtvAK z)>5lQ2hw>@k~3#1F4xNO5;`fBGtaLdy1TCLVWr((BHCv}G9zoXOtcoxY6wO$Bg-Ti zizLZpNpw9)+DWszE#bCWGL%+}F;P-g>NB6OpQqIG`aLmJ*;BsA@wRYTEG=5BTjFn> z2$$OJOXu3ZYqu9fDr_MqmnAVLE{NP;94CK8Pj=nBwl_7)dbnuHT2q!wdP{M%q>E|A z-Jc#aSuf%C-8**d*u9<2veJuX`IY&KpIP!-U%h&DPn5Go%5&Rs#T%7nRp;l;8a5Sa z=$2-wI`5UwU&<^mco+LJ()X1i3)xyW>{|}^-!c+u=ESldKf$3zHzln)b*fk_$8U?A*J?AkXAe5AoFd|7P>w0Jee7N}^!Fh-?ntbOPIvK& z`wzpqpzY)i*P@bIqBEHi-87_<`GQC#=}oRwbBN2)CX$TH%yBQGD6ULbrz^3s%z7|V zw68HPPEu*vjVHZ|Khyj2`%ioBw$o@N2&`AmdxM=M9|^`wN%AEHON)=v{tSlWlrV30 zjwMN#1JjI5R6U&@B-JVXu+}u36_hp*RI!}Rg#Y-zA*=KgBpEb@75rh zkQJF~`o^NBOkr)W$;4nWms>B1Gd?W#07X`cR!kMS9nDIX{#>q;Zhx9KvqG?Kh!b<) zBB`#Pc`5PY4d%=pWR>>xMbAknFb)Bnq5d4) zc`Y*br>!J83dgBCM%}G&JKP3`VEx7~rK@4N? z3HT)34C7FNPr(FCLKQv@pMfd(EPM|3!akUW&%+mBKh)rhP=_RWlILakGyER@02kno zun2#Fzrvs3AMkhh8=QkD;3-&u7W@nT4gZAy!haxv-@vnQFZ=+Gz|jq?h*e2)5AQDT zSA*z|^P431@pcrB!TpdV5AZw=52|$4h9o(`+e2^?PQjOQN%Cbl2oEFQ!tYn$tMCZ& z*Z7^~_v`$A0}jEha2wnXcfg%+7km@$h8g%4d>anKci_A5J-7$H4~(1V58(*h2S?!; z+z&s32jDn72tS6OzzKK=PQoepDf|ph!^7}%_ywGSN8nMIg~#A=n1f%!S!lvJcmi7R UB%Ft*;8*Z8wBgtA3?#|_0kMNX-2eap literal 0 HcmV?d00001 diff --git a/data/consolefonts/gr928b-8x16.psfu b/data/consolefonts/gr928b-8x16.psfu new file mode 100644 index 0000000000000000000000000000000000000000..633df5f46f27438d6087377f093e9fcc2b6db1f4 GIT binary patch literal 5112 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 J_&bE*e*pKb?kE5N diff --git a/data/consolefonts/koi8u_8x14.psf b/data/consolefonts/koi8u_8x14.psfu similarity index 100% rename from data/consolefonts/koi8u_8x14.psf rename to data/consolefonts/koi8u_8x14.psfu diff --git a/data/consolefonts/koi8u_8x16.psf b/data/consolefonts/koi8u_8x16.psfu similarity index 100% rename from data/consolefonts/koi8u_8x16.psf rename to data/consolefonts/koi8u_8x16.psfu diff --git a/data/consolefonts/koi8u_8x8.psf b/data/consolefonts/koi8u_8x8.psfu similarity index 100% rename from data/consolefonts/koi8u_8x8.psf rename to data/consolefonts/koi8u_8x8.psfu diff --git a/data/consolefonts/lat0-08.psfu b/data/consolefonts/lat0-08.psfu index a216df3fecd27228f10be66278063c1a8775a0aa..e61d10a86032b8cc23e0a3a5ff07fd39d40ed12e 100644 GIT binary patch delta 15 XcmZ1?u}osa94@9c3Y+I}bua<|FD(Uu delta 12 TcmZ1`u|#6S9InmtxH=dCAwmST diff --git a/data/consolefonts/lat0-10.psfu b/data/consolefonts/lat0-10.psfu index db103e81c18edc05cdbfff12d95f5d2a92e02630..63924ea603752e3e2272a7846f2687e1a57ec128 100644 GIT binary patch delta 15 XcmZ1?vrJ~g93G}M3Y+KfbT9${FRcZQ delta 12 TcmZ1`vqWaY9G=bdcsdvXA*2Ms diff --git a/data/consolefonts/lat0-12.psfu b/data/consolefonts/lat0-12.psfu index 6a5dcc414f63f4ec2c1940b70f0b82c8601bdb0c..a857c60ae6bee5f9f38d6a0f1e1eaefb077b1ea1 100644 GIT binary patch delta 15 XcmZ3YuuNgY96qKs3Y+Kfbua<|Ff9d{ delta 12 TcmZ3cutZ_Q9KOx-_&OK?A_fG_ diff --git a/data/consolefonts/lat0-14.psfu b/data/consolefonts/lat0-14.psfu index 39452f8d700a6cf07503e70ed24b01abe9b695e3..487b4aaba243362c6cbf3ab77b500389d7270ebf 100644 GIT binary patch delta 15 XcmZ3YvP@;e908^^3Y+H$bT9${Fs%ip delta 12 TcmZ3cvP5OW9D&XA1UeW2B4`BJ diff --git a/data/consolefonts/lat0-16.psfu b/data/consolefonts/lat0-16.psfu index 323ef384289ff399b452745a8a83065b39c4f73f..ce811258dd76ab409839423d639c3a1a646541b3 100644 GIT binary patch delta 15 XcmZ3Yu}ovb93iGP3Y+H$bua<|F)anL delta 12 TcmZ3cu|#9T9HGtgggO`jBFY5i diff --git a/data/consolefonts/lat9-12.psfu b/data/consolefonts/lat9-12.psfu deleted file mode 100644 index 864d4abcde5c9db29d83ae920599f0775c105ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1864 zcmV-O2e1A$?^K%yw|AS)C<_D6o?fGYeC0}CPCM*<-nB7q@* z5atpBEy{B3au|Cdun16Q`1+XEIOeUs(bH4Uo7bdE3{%SJ&?E6CCVcYJV3%p!GS+q-wx#3n?^ajPw% zW+;NH>*RXLNxd}aNOkMBdMjlPxBqqLSjB1G3D&aLXa z#YvL%A(me@O@_2xj!9Cbmr8!Aq{cX9KkBCVm%cll&cxW`1l{;a6BD)Z9~--TZ<+Bj zM$J^0F{{7=Jzo{RnSeB@sPouNp3z66(MqSKa>xTxK%azR7{dhJ4?9vqAAKB!QlhbR z9tJ@i1YtVWgAMJo)9LA$6XR0)^mTe%-|BWtvu>Qo-9M+Kenex85ETb8%T zj-03`aoYPU?disUZ)(b`tGa+H^hb{9I`2j7qafVW5hZaH#fe@>pStba-lQ+meE_i| zqbPKl)=h_&4LVHAgWCVmP#e7=l9;Tyv$49n-veN+yuq;Ap3}} zrEWF0W88dH-h6UV`+u|35eJ9E;eqYQiH&CJ84uM(d%nF$Za(`h(MJPS=I6u6tu2gd z%t7hZV5R1`_0@Aie{AgP6!HqxDrJS>&AG{CN5Q`1gjt>>dVImKqhKEwZW|Y?U%_5X z>bT%%T=0_>?AZy?s=Fg4)1>UF?h(0te{j&+Ms*ALCC z{dggd6X&S)bJXa1{BdhPZghHut@*M!=X$l-o%R9_s?~9o>vHQ^J6m+P{or8ODzpps zjQk;x_XtN70rFwvTkXC-jtQzcVdJ)*lLF-bWthSM>#R zS$6T3EV~4fN|rr(XO=neICu=)itRSI9hTsI(1x4g7TC#{$HG6fS_5!OP)7aTamE0_~OXDtI;Q zg^S=~xCAbR%iuL|IlLBL2m9dl@CLX7-Ux3Jr;f=O+M8h>u7s=LY6#&i@K(46-Ue@n z2;Kn;upbuTo$xMrH(U$XK?AObCfoow!U2fkJ@I&aqkKhRW7=8jjg`dICp%1@+0sInv1w&YYU&9Cs1^6O-3GRZs;mhz9xCg!p_rllU>+lWu zCTzjSb?n#%oDSE+R&byU*MbWI&Vw1b^Wkjp;S}z_f%hBX36*_Z4@hg}BCe-ZF6DY= zCE(hG?UgIIZmI0$dVb{^u8*%=&h^U5Zm#E6LarB9BCe}M_8a&u{0@E(e}FYuhd;uf z;Lq?EI0}D-V?a&LHsEjYcX$Z?0sn+e_!o@f-|!#!FHGQJNag?ClK%l2#zLGW5C8!B Cin-eW diff --git a/data/consolefonts/lat9-14.psfu b/data/consolefonts/lat9-14.psfu deleted file mode 100644 index 132cddbd5644ddc1e620ab3f4ae6f8ad9a375bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmV-%2afn3iwFo+PCz#T18iY*HFYg9G%j#+W&mxNYmnqr6@aq~)#W1&QzccVYP;NF z*w&RrZ2{XTan`peK9-m0DjElfqH%UqXc{(V8_OT_gCBre<^B_O6!HB4UGdR^M%1=l zUu|oT&G?$}vF?tdW2;T#cW;uLo7p`*UnVE#=H7emJ@=fRX`H@&$_O7geE8w@^<;fL zG^8|F#E+DP0WyLGBYQ9$J~S9++O!?SfjuqnmzKs$OUB%z5VUc7wcR%6X6%_6v{t*_ zZW+$(+^$(Pl=e8cEzRnmyRXnc_Z`S=mRV>OGqz*5lPcS%=E69fo7yh5_UgtYo@}hPrDi#yB_-9QgpQSU zW0|p;-y25Vjoo@~k?$2Pcl)uwJ0HB#@QRj((FqoO#5h?j$8i`s8@%O2+}64Y(;aMXc@(sR;f6ZO4ib>I(|21ymYKir!!HuAVO1p z#!=>z8ZS^baTluh#QalqE%iuF+0EBQx~CizkEKt=tkoW&jYgxDPMEDc1I8e=iRXC% zOr+*`9U-10wXyFB@yF?4p6dp#>&3d}Zsa3$I=$SZC>tOh!AY0Xax`r)SWH`X2OArM zZq{GgiNjdefmxMT+5G) zU91xESQWGGc3Wvn&sVE!mv&mF1GRt1ij1aWE^4haTafRd(PYvr&l7W-+FSYFVl{iO zp1RPe<~HGMno+VX%=a(b!Xh<^9rPouWv{7DV9XBAr~5aBH;XW(W!gON%ICtK*R(?L zG7SnRJ(=>%#d0M?9xJqIGFhRCPBhKeZRAVc7K*wVi`rQ}x0Y{<{J`l9(vvF2D>N}) zp@|U+O}yu*{S)sMnuyLq6aEz%fe>h?A0HxdQsq2_?}0j1qR&DTb15|Oo~HRFTblM& z)(@lJsK2=uO|lW9(g;y$gs9YKp;=qclcrT$7=KX&hpRS~gd70im<(W7~d zvwb4f^)~aFMuG1KQ63ZywaU?|wvopY!?_Tc>D)?XH@xNW@}0|vZ%GfaE&=TsnW71fpRa8V-jC zcOWO1UTq+Ht1oIvh!J=cXif0WA7mwN-t(=-!l)4n7o}ErR~n|p7p>LvJZG$IGB@z! zW;>tgz7;1pmz^cs&Mj+kD#_j}J=B<@`x7|PkhBGw0f(nS3{DBrtxl}i73}>9EstMLxW*huA4FpK2?tu5h61)%Ea4XyfyJ+)RxQ2eN1s6IzzZY&li}&CTxD7rCAAozHb6S$j z7$4@(xU*mu&W2r3gD1h0VK+Pl&VfB}E<6>U22Y1NJOj>y^Wg$`CN$t#V8gTFIdCC3 z@LZUKz3@DEKD+>42rq&c!%N_$a1p!=UJe%<=P>VAaQ8}h6}%eu!6k4hTn3lJ74RCk z5?%|hgZ=P&cmrGoZ-h4)r;k}N?%oXZa5Y>5*MbLcfw#hS@HTim`0x%`fCI1y?}T^3 zyWx7c0h(|lwBRPV84f}K?}1R**!2#-zYX`p1MnUAuCWJSBksNj55o812k=Aa!jGT_ zKZc|56Zk3o41Ny3fIj>Z2JkERH4I?|egh+TNbEfEb0@z)0w0Bs!7_XtJ^^>ZC*f}R z6nq*!1D}P@k(iU@^W1#_z6f7}FT*`>FMI{Q3P<2;a36dfz5(BaZ^1VDxPgdm!kKU* zYzGsna6MRHzy&ZZA|K8L2TtStoA`Y*JfXIq>p}6fb_v%rYL|08yXJCj!H(KhT({Ns zalNp19oNU#uH<@kZ4cM;YaZ8&Yd+UiX7*e79sC~t0DpuvScgBspW!d?S2zZLgX2JQ rPd4E1@DF$x{t5qrP53vA;Xm+S_#aH*5s1Y zbY)RT!Pr6@bVWt+vAjfA(RNwdMcZst$PUoYChz}AUaW{&_QHO57+kLzH-p=lse4ROc?)#p5?n%Z@IceB1!Uqo>dTeDSSy>4U zDN~E$N6JLM+gW2 zRG*xgo|!b9ZO-VnRG&urrTxhl>z}Lc(LWC#&_78<>(pA+C;OLO1);rRwH&>g}t^VjKeLpLT{}N;=x*Ox17+*MCzG@ zj#X5!%-Ae7!)Um%+c5O{YWeMc>~AlN*Ty`hyjb&i!bgnbisd+t7>pc`=Xs-g0iV`W zvdte3I!BHKXPnUqhNTP4MW)qoqgyl0_I-P5vE6P@<6~8Y#_x9{-?sNBev8KE3 zno_?PMcxIOE_zD4ll?jJ09dm9EvYx)KXN^m>8jbJ(`9+0-BgPHqN8!#QQC`^*W=!N zsi$kLtamy;w;Z3ecY1+2RM^EFmkaw|+pHD!!*I7Y-l)>P)cia^rj2(x@lik5{lK;Z zKOdi1OGjxhj&2p3H<$aL(~#nn0Y%+@$CTpayJ?(Ih>POnRbMyFpg6C_lIu3pEe;BM z5a9s%{5I2*-!99i_PDg${$6)YSzmF#h~n+QOt+Nw{VA_pU;NTm*RxhLhH9yJsmoD5 za{yW1uJ{YG8neKia^8!XhbrS!_NTB1#SruHI8VpN4yUo1(g(K&$*%^WuP!W%qUlA~5`+<6%8K0($@db)bea&w8 z6+P?JD(|z9`=__g{WFmLMV0=dYJZjXHM_MTewOjdVsA3%Z;KeTIITIx2V&)Z5!IdC zW78Y{2=}`@&#pMn-g@D`QQ-SQR64uE^&D#Xj8XchI6J-whw=bzNJE^Rhi31ZJ+w1F z&W`Vo8=+QY%Wf%}2lYj$ws&~;@a(K?FR8{lk)CW!6-0g!W@f7qXvHnPd~vTT zlAZr`yd33Vr!zH{%5ifMwJBO|Og0+LjROp{SIpk;%FCT_xX%6H%|HDju>`q3u~0L& zifGVnbf*-1nqf6W)OQPyO!PELi6w<>t=PA2%)X8QDXRcn8>(DVAoH2bka7ulh9-wS_MbrEp1e1Hh2>4t6>7l3Z(G%lQZu)7de^M~{# ziT>4mLFE0ao&{JXpD=V?)K~KbQD4`Fc)^A#Dnd^Nv#oIj2) z*_I@iZ%UFYAgU+H6GoH7gwx=Oa0l=1gb%?Cd=RGLHn<%|Df1-QOFP$r3oYJ10C${4 zJ-8EYhmXLA;eKeHoFpU0$M|FYEZ7ET!zk3@8SqTl4$p#fUH@q3%0@uJ>;cdn#eO8QbZ-+f_E$oHsz=Lq|AGI)|6l-*LoEJ Russion +# English <- Control+LeftShift -> Bielorussion +# +# Svistunovich Oleg Georgievich +# Minsk, UGAI GUVD Mingorispolkoma + +charset "iso-8859-5" +keymaps 0,1,4,8,9,12,16,17,20,24,25,28,32,33,36,40,41,44 +strings as usual + +keycode 1 = Escape Escape Escape \ + Meta_Escape Meta_Escape Meta_Escape \ + Escape Escape Escape \ + Meta_Escape Meta_Escape Meta_Escape \ + Escape Escape Escape \ + Meta_Escape Meta_Escape Meta_Escape +keycode 2 = one exclam VoidSymbol \ + Meta_one Meta_exclam VoidSymbol \ + one exclam VoidSymbol \ + Meta_one Meta_exclam VoidSymbol \ + one exclam VoidSymbol \ + Meta_one Meta_exclam VoidSymbol +keycode 3 = two at nul \ + Meta_two Meta_at Meta_nul \ + two quotedbl nul \ + Meta_two Meta_quotedbl Meta_nul \ + two quotedbl VoidSymbol \ + Meta_two Meta_quotedbl VoidSymbol +keycode 4 = three numbersign Escape \ + Meta_three Meta_numbersign Meta_Escape \ + three numbersign Escape \ + Meta_three Meta_numbersign Meta_Escape \ + three numbersign Escape \ + Meta_three Meta_numbersign Meta_Escape +keycode 5 = four dollar Control_backslash \ + Meta_four Meta_dollar Meta_Control_backslash \ + four semicolon Control_backslash \ + Meta_four Meta_semicolon Meta_Control_backslash \ + four semicolon Control_backslash \ + Meta_four Meta_semicolon Meta_Control_backslash +keycode 6 = five percent Control_bracketright \ + Meta_five Meta_percent Meta_Control_bracketright \ + five percent Control_bracketright \ + Meta_five Meta_percent Meta_Control_bracketright \ + five percent Control_bracketright \ + Meta_five Meta_percent Meta_Control_bracketright +keycode 7 = six asciicircum Control_asciicircum \ + Meta_six Meta_asciicircum Meta_Control_asciicircum \ + six colon Control_asciicircum \ + Meta_six Meta_colon Meta_Control_asciicircum \ + six colon Control_asciicircum \ + Meta_six Meta_colon Meta_Control_asciicircum +keycode 8 = seven ampersand Control_underscore \ + Meta_seven Meta_ampersand Meta_Control_underscore \ + seven question Control_underscore \ + Meta_seven Meta_question Meta_Control_underscore \ + seven question Control_underscore \ + Meta_seven Meta_question Meta_Control_underscore +keycode 9 = eight asterisk Delete \ + Meta_eight Meta_asterisk Meta_Delete \ + eight asterisk Delete \ + Meta_eight Meta_asterisk Meta_Delete \ + eight asterisk Delete \ + Meta_eight Meta_asterisk Meta_Delete +keycode 10 = nine parenleft VoidSymbol \ + Meta_nine Meta_parenleft VoidSymbol \ + nine parenleft VoidSymbol \ + Meta_nine Meta_parenleft VoidSymbol \ + nine parenleft VoidSymbol \ + Meta_nine Meta_parenleft VoidSymbol +keycode 11 = zero parenright VoidSymbol \ + Meta_zero Meta_parenleft VoidSymbol \ + zero parenright VoidSymbol \ + Meta_zero Meta_parenleft VoidSymbol \ + zero parenright VoidSymbol \ + Meta_zero Meta_parenleft VoidSymbol +keycode 12 = minus underscore Control_underscore \ + Meta_minus Meta_underscore Meta_Control_underscore \ + minus underscore Control_underscore \ + Meta_minus Meta_underscore Meta_Control_underscore \ + minus underscore Control_underscore \ + Meta_minus Meta_underscore Meta_Control_underscore +keycode 13 = equal plus VoidSymbol \ + Meta_equal Meta_plus VoidSymbol \ + equal plus VoidSymbol \ + Meta_equal Meta_plus VoidSymbol \ + equal plus VoidSymbol \ + Meta_equal Meta_plus VoidSymbol +keycode 14 = Delete Delete Delete \ + Meta_Delete Meta_Delete Meta_Delete \ + Delete Delete Delete \ + Meta_Delete Meta_Delete Meta_Delete \ + Delete Delete Delete \ + Meta_Delete Meta_Delete Meta_Delete +keycode 15 = Tab Tab Tab \ + Meta_Tab Meta_Tab Meta_Tab \ + Tab Tab Tab \ + Meta_Tab Meta_Tab Meta_Tab \ + Tab Tab Tab \ + Meta_Tab Meta_Tab Meta_Tab +keycode 16 = +q +Q Control_q \ + Meta_q Meta_Q Meta_Control_q \ + +0xD9 +0xB9 Control_q \ + Meta_q Meta_Q Meta_Control_q \ + +0xD9 +0xB9 Control_q \ + Meta_q Meta_Q Meta_Control_q +keycode 17 = +w +W Control_w \ + Meta_w Meta_W Meta_Control_w \ + +0xE6 +0xC6 Control_w \ + Meta_w Meta_W Meta_Control_w \ + +0xE6 +0xC6 Control_w \ + Meta_w Meta_W Meta_Control_w +keycode 18 = +e +E Control_e \ + Meta_e Meta_E Meta_Control_e \ + +0xE3 +0xC3 Control_e \ + Meta_e Meta_E Meta_Control_e \ + +0xE3 +0xC3 Control_e \ + Meta_e Meta_E Meta_Control_e +keycode 19 = +r +R Control_r \ + Meta_r Meta_R Meta_Control_r \ + +0xDA +0xBA Control_r \ + Meta_r Meta_R Meta_Control_r \ + +0xDA +0xBA Control_r \ + Meta_r Meta_R Meta_Control_r +keycode 20 = +t +T Control_t \ + Meta_t Meta_T Meta_Control_t \ + +0xD5 +0xB5 Control_t \ + Meta_t Meta_T Meta_Control_t \ + +0xD5 +0xB5 Control_t \ + Meta_t Meta_T Meta_Control_t +keycode 21 = +y +Y Control_y \ + Meta_y Meta_Y Meta_Control_y \ + +0xDD +0xBD Control_y \ + Meta_y Meta_Y Meta_Control_y \ + +0xDD +0xBD Control_y \ + Meta_y Meta_Y Meta_Control_y +keycode 22 = +u +U Control_u \ + Meta_u Meta_U Meta_Control_u \ + +0xD3 +0xB3 Control_u \ + Meta_u Meta_U Meta_Control_u \ + +0xD3 +0xB3 Control_u \ + Meta_u Meta_U Meta_Control_u +keycode 23 = +i +I Tab \ + Meta_i Meta_I Meta_Tab \ + +0xE8 +0xC8 Tab \ + Meta_i Meta_I Meta_Tab \ + +0xE8 +0xC8 Tab \ + Meta_i Meta_I Meta_Tab +keycode 24 = +o +O Control_o \ + Meta_o Meta_O Meta_Control_o \ + +0xF6 +0xA6 Control_o \ + Meta_o Meta_O Meta_Control_o \ + +0xE9 +0xC9 Control_o \ + Meta_o Meta_O Meta_Control_o +keycode 25 = +p +P Control_p \ + Meta_p Meta_P Meta_Control_p \ + +0xD7 +0xB7 Control_p \ + Meta_p Meta_P Meta_Control_p \ + +0xD7 +0xB7 Control_p \ + Meta_p Meta_P Meta_Control_p +keycode 26 = bracketleft braceleft Escape \ + Meta_bracketleft Meta_braceleft Meta_Escape \ + +0xE5 +0xC5 Escape \ + Meta_bracketleft Meta_braceleft Meta_Escape \ + +0xE5 +0xC5 Escape \ + Meta_bracketleft Meta_braceleft Meta_Escape +keycode 27 = bracketright braceright Control_bracketright \ + Meta_bracketright Meta_braceright Meta_Control_bracketright \ + +0xFE +0xAE Control_bracketright \ + Meta_bracketright Meta_braceright Meta_Control_bracketright \ + +0xEA +0xCA Control_bracketright \ + Meta_bracketright Meta_braceright Meta_Control_bracketright +keycode 28 = Return Return Return \ + Meta_Control_m Meta_Control_m Return \ + Return Return Return \ + Meta_Control_m Meta_Control_m Return \ + Return Return Return \ + Meta_Control_m Meta_Control_m Return +keycode 29 = Control Control Control \ + Control Control Control \ + Control Control Control \ + Control Control Control \ + Control Control Control \ + Control Control Control +keycode 30 = +a +A Control_a \ + Meta_a Meta_A Meta_Control_a \ + +0xE4 +0xC4 Control_a \ + Meta_a Meta_A Meta_Control_a \ + +0xE4 +0xC4 Control_a \ + Meta_a Meta_A Meta_Control_a +keycode 31 = +s +S Control_s \ + Meta_s Meta_S Meta_Control_s \ + +0xEB +0xCB Control_s \ + Meta_s Meta_S Meta_Control_s \ + +0xEB +0xCB Control_s \ + Meta_s Meta_S Meta_Control_s +keycode 32 = +d +D Control_d \ + Meta_d Meta_D Meta_Control_d \ + +0xD2 +0xB2 Control_d \ + Meta_d Meta_D Meta_Control_d \ + +0xD2 +0xB2 Control_d \ + Meta_d Meta_D Meta_Control_d +keycode 33 = +f +F Control_f \ + Meta_f Meta_F Meta_Control_f \ + +0xD0 +0xB0 Control_f \ + Meta_f Meta_F Meta_Control_f \ + +0xD0 +0xB0 Control_f \ + Meta_f Meta_F Meta_Control_f +keycode 34 = +g +G Control_g \ + Meta_g Meta_G Meta_Control_g \ + +0xDF +0xBF Control_g \ + Meta_g Meta_G Meta_Control_g \ + +0xDF +0xBF Control_g \ + Meta_g Meta_G Meta_Control_g +keycode 35 = +h +H BackSpace \ + Meta_h Meta_H Meta_BackSpace \ + +0xE0 +0xC0 BackSpace \ + Meta_h Meta_H Meta_BackSpace \ + +0xE0 +0xC0 BackSpace \ + Meta_h Meta_H Meta_BackSpace +keycode 36 = +j +J Linefeed \ + Meta_j Meta_J Meta_Linefeed \ + +0xDE +0xBE Linefeed \ + Meta_j Meta_J Meta_Linefeed \ + +0xDE +0xBE Linefeed \ + Meta_j Meta_J Meta_Linefeed +keycode 37 = +k +K Control_k \ + Meta_k Meta_K Meta_Control_k \ + +0xDB +0xBB Control_k \ + Meta_k Meta_K Meta_Control_k \ + +0xDB +0xBB Control_k \ + Meta_k Meta_K Meta_Control_k +keycode 38 = +l +L Control_l \ + Meta_l Meta_L Meta_Control_l \ + +0xD4 +0xB4 Control_l \ + Meta_l Meta_L Meta_Control_l \ + +0xD4 +0xB4 Control_l \ + Meta_l Meta_L Meta_Control_l +keycode 39 = semicolon colon VoidSymbol \ + Meta_semicolon Meta_colon VoidSymbol \ + +0xD6 +0xB6 VoidSymbol \ + Meta_semicolon Meta_colon VoidSymbol \ + +0xD6 +0xB6 VoidSymbol \ + Meta_semicolon Meta_colon VoidSymbol +keycode 40 = apostrophe quotedbl Control_g \ + Meta_apostrophe Meta_quotedbl VoidSymbol \ + +0xED +0xCD Control_g \ + Meta_apostrophe Meta_quotedbl VoidSymbol \ + +0xED +0xCD Control_g \ + Meta_apostrophe Meta_quotedbl VoidSymbol +keycode 41 = grave asciitilde nul \ + Meta_grave Meta_asciitilde VoidSymbol \ + +0xF1 +0xA1 nul \ + Meta_grave Meta_asciitilde VoidSymbol \ + +0xF1 +0xA1 nul \ + Meta_grave Meta_asciitilde VoidSymbol +keycode 42 = Shift Shift ShiftL_Lock \ + Shift Shift Shift \ + Shift Shift ShiftL_Lock \ + Shift Shift Shift \ + Shift Shift Shift \ + Shift Shift Shift +keycode 43 = backslash bar Control_backslash \ + Meta_backslash Meta_bar Control_backslash \ + backslash bar Control_backslash \ + Meta_backslash Meta_bar Control_backslash \ + backslash bar Control_backslash \ + Meta_backslash Meta_bar Control_backslash +keycode 44 = +z +Z Control_z \ + Meta_z Meta_Z Meta_Control_z \ + +0xEF +0xCF Control_z \ + Meta_z Meta_Z Meta_Control_z \ + +0xEF +0xCF Control_z \ + Meta_z Meta_Z Meta_Control_z +keycode 45 = +x +X Control_x \ + Meta_x Meta_X Meta_Control_x \ + +0xE7 +0xC7 Control_x \ + Meta_x Meta_X Meta_Control_x \ + +0xE7 +0xC7 Control_x \ + Meta_x Meta_X Meta_Control_x +keycode 46 = +c +C Control_c \ + Meta_c Meta_C Meta_Control_c \ + +0xE1 +0xC1 Control_c \ + Meta_c Meta_C Meta_Control_c \ + +0xE1 +0xC1 Control_c \ + Meta_c Meta_C Meta_Control_c +keycode 47 = +v +V Control_v \ + Meta_v Meta_V Meta_Control_v \ + +0xDC +0xBC Control_v \ + Meta_v Meta_V Meta_Control_v \ + +0xDC +0xBC Control_v \ + Meta_v Meta_V Meta_Control_v +keycode 48 = +b +B Control_b \ + Meta_b Meta_B Meta_Control_b \ + +0xD8 +0xB8 Control_b \ + Meta_b Meta_B Meta_Control_b \ + +0xD8 +0xB8 Control_b \ + Meta_b Meta_B Meta_Control_b +keycode 49 = +n +N Control_n \ + Meta_n Meta_N Meta_Control_n \ + +0xE2 +0xC2 Control_t \ + Meta_n Meta_N Meta_Control_n \ + +0xE2 +0xC2 Control_t \ + Meta_n Meta_N Meta_Control_n +keycode 50 = +m +M Control_m \ + Meta_m Meta_M Meta_Control_m \ + +0xEC +0xCC Control_m \ + Meta_m Meta_M Meta_Control_m \ + +0xEC +0xCC Control_m \ + Meta_m Meta_M Meta_Control_m +keycode 51 = comma less VoidSymbol \ + Meta_comma Meta_less VoidSymbol \ + +0xD1 +0xB1 VoidSymbol \ + Meta_comma Meta_less VoidSymbol \ + +0xD1 +0xB1 VoidSymbol \ + Meta_comma Meta_less VoidSymbol +keycode 52 = period greater VoidSymbol \ + Meta_period Meta_greater VoidSymbol \ + +0xEE +0xCE VoidSymbol \ + Meta_period Meta_greater VoidSymbol \ + +0xEE +0xCE VoidSymbol \ + Meta_period Meta_greater VoidSymbol +keycode 53 = slash question Delete \ + Meta_slash Meta_question VoidSymbol \ + period comma Delete \ + Meta_slash Meta_question VoidSymbol \ + period comma Delete \ + Meta_slash Meta_question VoidSymbol +keycode 54 = Shift Shift ShiftR_Lock \ + Shift Shift Shift \ + Shift Shift Shift \ + Shift Shift Shift \ + Shift Shift ShiftR_Lock \ + Shift Shift Shift +keycode 55 = KP_Multiply KP_Multiply Hex_C \ + KP_Multiply KP_Multiply KP_Multiply \ + KP_Multiply KP_Multiply Hex_C \ + KP_Multiply KP_Multiply KP_Multiply \ + KP_Multiply KP_Multiply Hex_C \ + KP_Multiply KP_Multiply KP_Multiply +keycode 56 = Alt +keycode 57 = space space nul \ + Meta_space Meta_space Meta_nul \ + space space nul \ + Meta_space Meta_space Meta_nul \ + space space nul \ + Meta_space Meta_space Meta_nul +keycode 58 = Caps_Lock +keycode 59 = F1 F13 F25 \ + Console_1 Console_13 Console_1 \ + F1 F13 F25 \ + Console_1 Console_13 Console_1 \ + F1 F13 F25 \ + Console_1 Console_13 Console_1 +keycode 60 = F2 F14 F26 \ + Console_2 Console_14 Console_2 \ + F2 F14 F26 \ + Console_2 Console_14 Console_2 \ + F2 F14 F26 \ + Console_2 Console_14 Console_2 +keycode 61 = F3 F15 F27 \ + Console_3 Console_15 Console_3 \ + F3 F15 F27 \ + Console_3 Console_15 Console_3 \ + F3 F15 F27 \ + Console_3 Console_15 Console_3 +keycode 62 = F4 F16 F28 \ + Console_4 Console_16 Console_4 \ + F4 F16 F28 \ + Console_4 Console_16 Console_4 \ + F4 F16 F28 \ + Console_4 Console_16 Console_4 +keycode 63 = F5 F17 F29 \ + Console_5 Console_17 Console_5 \ + F5 F17 F29 \ + Console_5 Console_17 Console_5 \ + F5 F17 F29 \ + Console_5 Console_17 Console_5 +keycode 64 = F6 F18 F30 \ + Console_6 Console_18 Console_6 \ + F6 F18 F30 \ + Console_6 Console_18 Console_6 \ + F6 F18 F30 \ + Console_6 Console_18 Console_6 +keycode 65 = F7 F19 F31 \ + Console_7 Console_19 Console_7 \ + F7 F19 F31 \ + Console_7 Console_19 Console_7 \ + F7 F19 F31 \ + Console_7 Console_19 Console_7 +keycode 66 = F8 F20 F32 \ + Console_8 Console_20 Console_8 \ + F8 F20 F32 \ + Console_8 Console_20 Console_8 \ + F8 F20 F32 \ + Console_8 Console_20 Console_8 +keycode 67 = F9 F21 F33 \ + Console_9 Console_21 Console_9 \ + F9 F21 F33 \ + Console_9 Console_21 Console_9 \ + F9 F21 F33 \ + Console_9 Console_21 Console_9 +keycode 68 = F10 F22 F34 \ + Console_10 Console_22 Console_10 \ + F10 F22 F34 \ + Console_10 Console_22 Console_10 \ + F10 F22 F34 \ + Console_10 Console_22 Console_10 +keycode 69 = Num_Lock Num_Lock Hex_E \ + Num_Lock Num_Lock Num_Lock \ + Num_Lock Num_Lock Hex_E \ + Num_Lock Num_Lock Num_Lock \ + Num_Lock Num_Lock Hex_E \ + Num_Lock Num_Lock Num_Lock +keycode 70 = Scroll_Lock Show_Memory Show_State \ + Show_Registers VoidSymbol Scroll_Lock \ + Scroll_Lock Show_Memory Show_State \ + Show_Registers VoidSymbol Scroll_Lock \ + Scroll_Lock Show_Memory Show_State \ + Show_Registers VoidSymbol Scroll_Lock +keycode 71 = KP_7 KP_7 Hex_7 \ + Ascii_7 KP_7 KP_7 \ + KP_7 KP_7 Hex_7 \ + Ascii_7 KP_7 KP_7 \ + KP_7 KP_7 Hex_7 \ + Ascii_7 KP_7 KP_7 +keycode 72 = KP_8 KP_8 Hex_8 \ + Ascii_8 KP_8 KP_8 \ + KP_8 KP_8 Hex_8 \ + Ascii_8 KP_8 KP_8 \ + KP_8 KP_8 Hex_8 \ + Ascii_8 KP_8 KP_8 +keycode 73 = KP_9 KP_9 Hex_9 \ + Ascii_9 KP_9 KP_9 \ + KP_9 KP_9 Hex_9 \ + Ascii_9 KP_9 KP_9 \ + KP_9 KP_9 Hex_9 \ + Ascii_9 KP_9 KP_9 +keycode 74 = KP_Subtract +keycode 75 = KP_4 KP_4 Hex_4 \ + Ascii_4 KP_4 KP_4 \ + KP_4 KP_4 Hex_4 \ + Ascii_4 KP_4 KP_4 \ + KP_4 KP_4 Hex_4 \ + Ascii_4 KP_4 KP_4 +keycode 76 = KP_5 KP_5 Hex_5 \ + Ascii_5 KP_5 KP_5 \ + KP_5 KP_5 Hex_5 \ + Ascii_5 KP_5 KP_5 \ + KP_5 KP_5 Hex_5 \ + Ascii_5 KP_5 KP_5 +keycode 77 = KP_6 KP_6 Hex_6 \ + Ascii_6 KP_6 KP_6 \ + KP_6 KP_6 Hex_6 \ + Ascii_6 KP_6 KP_6 \ + KP_6 KP_6 Hex_6 \ + Ascii_6 KP_6 KP_6 +keycode 78 = KP_Add +keycode 79 = KP_1 KP_1 Hex_1 \ + Ascii_1 KP_1 KP_1 \ + KP_1 KP_1 Hex_1 \ + Ascii_1 KP_1 KP_1 \ + KP_1 KP_1 Hex_1 \ + Ascii_1 KP_1 KP_1 +keycode 80 = KP_2 KP_2 Hex_2 \ + Ascii_2 KP_2 KP_2 \ + KP_2 KP_2 Hex_2 \ + Ascii_2 KP_2 KP_2 \ + KP_2 KP_2 Hex_2 \ + Ascii_2 KP_2 KP_2 +keycode 81 = KP_3 KP_3 Hex_3 \ + Ascii_3 KP_3 KP_3 \ + KP_3 KP_3 Hex_3 \ + Ascii_3 KP_3 KP_3 \ + KP_3 KP_3 Hex_3 \ + Ascii_3 KP_3 KP_3 +keycode 82 = KP_0 KP_0 Hex_0 \ + Ascii_0 KP_0 KP_0 \ + KP_0 KP_0 Hex_0 \ + Ascii_0 KP_0 KP_0 \ + KP_0 KP_0 Hex_0 \ + Ascii_0 KP_0 KP_0 +keycode 83 = KP_Period KP_Period KP_Period \ + KP_Period KP_Period Boot \ + KP_Period KP_Period KP_Period \ + KP_Period KP_Period Boot \ + KP_Period KP_Period KP_Period \ + KP_Period KP_Period Boot +keycode 84 = Last_Console +keycode 85 = VoidSymbol +keycode 86 = less greater bar \ + Meta_less Meta_greater Meta_bar \ + less greater bar \ + Meta_less Meta_greater Meta_bar \ + less greater bar \ + Meta_less Meta_greater Meta_bar +keycode 87 = F11 F23 F35 \ + Console_11 Console_23 Console_11 \ + F11 F23 F35 \ + Console_11 Console_23 Console_11 \ + F11 F23 F35 \ + Console_11 Console_23 Console_11 +keycode 88 = F12 F24 F36 \ + Console_12 Console_24 Console_12 \ + F12 F24 F36 \ + Console_12 Console_24 Console_12 \ + F12 F24 F36 \ + Console_12 Console_24 Console_12 +keycode 89 = VoidSymbol +keycode 90 = VoidSymbol +keycode 91 = VoidSymbol +keycode 92 = VoidSymbol +keycode 93 = VoidSymbol +keycode 94 = VoidSymbol +keycode 95 = VoidSymbol +keycode 96 = KP_Enter +keycode 97 = Control +keycode 98 = KP_Divide KP_Divide Hex_B \ + KP_Divide KP_Divide KP_Divide \ + KP_Divide KP_Divide Hex_B \ + KP_Divide KP_Divide KP_Divide \ + KP_Divide KP_Divide Hex_B \ + KP_Divide KP_Divide KP_Divide +keycode 99 = Control_backslash Control_backslash Control_backslash \ + Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash \ + Control_backslash Control_backslash Control_backslash \ + Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash \ + Control_backslash Control_backslash Control_backslash \ + Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash +keycode 100 = Alt +keycode 101 = Break +keycode 102 = Find +keycode 103 = Up Up Up \ + KeyboardSignal Up Up \ + Up Up Up \ + KeyboardSignal Up Up \ + Up Up Up \ + KeyboardSignal Up Up +keycode 104 = Prior Scroll_Backward Prior \ + Prior Prior Prior \ + Prior Scroll_Backward Prior \ + Prior Prior Prior \ + Prior Scroll_Backward Prior \ + Prior Prior Prior +keycode 105 = Left Left Left \ + Decr_Console Left Left \ + Left Left Left \ + Decr_Console Left Left \ + Left Left Left \ + Decr_Console Left Left +keycode 106 = Right Right Right \ + Incr_Console Right Right \ + Right Right Right \ + Incr_Console Right Right \ + Right Right Right \ + Incr_Console Right Right +keycode 107 = Select +keycode 108 = Down +keycode 109 = Next Scroll_Forward Next \ + Next Next Next \ + Next Scroll_Forward Next \ + Next Next Next \ + Next Scroll_Forward Next \ + Next Next Next +keycode 110 = Insert +keycode 111 = Remove Remove Remove \ + Remove Remove Boot \ + Remove Remove Remove \ + Remove Remove Boot \ + Remove Remove Remove \ + Remove Remove Boot +keycode 112 = Macro +keycode 113 = F13 +keycode 114 = F14 +keycode 115 = Help +keycode 116 = Do +keycode 117 = F17 +keycode 118 = KP_MinPlus +keycode 119 = Pause +keycode 120 = VoidSymbol +keycode 121 = VoidSymbol +keycode 122 = VoidSymbol +keycode 123 = VoidSymbol +keycode 124 = VoidSymbol +keycode 125 = VoidSymbol +keycode 126 = VoidSymbol +keycode 127 = VoidSymbol diff --git a/data/keymaps/sun/sunt5-ru.map b/data/keymaps/sun/sunt5-ru.map index f217b4e..6469361 100644 --- a/data/keymaps/sun/sunt5-ru.map +++ b/data/keymaps/sun/sunt5-ru.map @@ -1,6 +1,6 @@ # Russian keyboard layout for Type4/5 Sun keyboards # Written by Alexander V. Lukyanov -# Version 1.0 +# Version 1.1 # # Uses KOI8-R coding without 'jo' # diff --git a/data/keymaps/sun/sunt5-uk.map b/data/keymaps/sun/sunt5-uk.map new file mode 100644 index 0000000..f217b4e --- /dev/null +++ b/data/keymaps/sun/sunt5-uk.map @@ -0,0 +1,383 @@ +# Russian keyboard layout for Type4/5 Sun keyboards +# Written by Alexander V. Lukyanov +# Version 1.0 +# +# Uses KOI8-R coding without 'jo' +# +keymaps 0-6,8,10,12,14 +keycode 1 = +keycode 2 = +keycode 3 = +keycode 4 = +keycode 5 = F1 + shift keycode 5 = F11 + alt keycode 5 = Console_1 + control alt keycode 5 = Console_1 + altgr shift keycode 5 = F11 + altgr alt keycode 5 = Console_1 + altgr control alt keycode 5 = Console_1 +keycode 6 = F2 + shift keycode 6 = F12 + alt keycode 6 = Console_2 + control alt keycode 6 = Console_2 + altgr shift keycode 6 = F12 + altgr alt keycode 6 = Console_2 + altgr control alt keycode 6 = Console_2 +keycode 7 = F10 + shift keycode 7 = F20 + alt keycode 7 = Console_10 + control alt keycode 7 = Console_10 + altgr shift keycode 7 = F20 + altgr alt keycode 7 = Console_10 + altgr control alt keycode 7 = Console_10 +keycode 8 = F3 + shift keycode 8 = F13 + alt keycode 8 = Console_3 + control alt keycode 8 = Console_3 + altgr shift keycode 8 = F13 + altgr alt keycode 8 = Console_3 + altgr control alt keycode 8 = Console_3 +keycode 9 = F11 + alt keycode 9 = Console_11 + control alt keycode 9 = Console_11 + altgr alt keycode 9 = Console_11 + altgr control alt keycode 9 = Console_11 +keycode 10 = F4 + shift keycode 10 = F14 + alt keycode 10 = Console_4 + control alt keycode 10 = Console_4 + altgr shift keycode 10 = F14 + altgr alt keycode 10 = Console_4 + altgr control alt keycode 10 = Console_4 +keycode 11 = F12 + alt keycode 11 = Console_12 + control alt keycode 11 = Console_12 + altgr alt keycode 11 = Console_12 + altgr control alt keycode 11 = Console_12 +keycode 12 = F5 + shift keycode 12 = F15 + alt keycode 12 = Console_5 + control alt keycode 12 = Console_5 + altgr shift keycode 12 = F15 + altgr alt keycode 12 = Console_5 + altgr control alt keycode 12 = Console_5 +keycode 13 = AltGr_Lock +keycode 14 = F6 + shift keycode 14 = F16 + alt keycode 14 = Console_6 + control alt keycode 14 = Console_6 + altgr shift keycode 14 = F16 + altgr alt keycode 14 = Console_6 + altgr control alt keycode 14 = Console_6 +keycode 15 = +keycode 16 = F7 + shift keycode 16 = F17 + alt keycode 16 = Console_7 + control alt keycode 16 = Console_7 + altgr shift keycode 16 = F17 + altgr alt keycode 16 = Console_7 + altgr control alt keycode 16 = Console_7 +keycode 17 = F8 + shift keycode 17 = F18 + alt keycode 17 = Console_8 + control alt keycode 17 = Console_8 + altgr shift keycode 17 = F18 + altgr alt keycode 17 = Console_8 + altgr control alt keycode 18 = Console_8 +keycode 18 = F9 + shift keycode 18 = F19 + alt keycode 18 = Console_9 + control alt keycode 18 = Console_9 + altgr shift keycode 18 = F19 + altgr alt keycode 18 = Console_9 + altgr control alt keycode 18 = Console_9 +keycode 19 = Alt +keycode 20 = Up +keycode 21 = Pause +keycode 22 = +keycode 23 = Scroll_Lock Show_Memory Show_Registers Show_State + alt keycode 23 = Scroll_Lock +keycode 24 = Left + alt keycode 24 = Decr_Console + altgr alt keycode 24 = Decr_Console +keycode 25 = +keycode 26 = +keycode 27 = Down +keycode 28 = Right + alt keycode 28 = Incr_Console + altgr alt keycode 28 = Incr_Console +keycode 29 = Escape + alt keycode 29 = Meta_Escape + altgr alt keycode 29 = Meta_Escape +keycode 30 = one exclam one exclam + alt keycode 30 = Meta_one + altgr alt keycode 30 = Meta_one +keycode 31 = two at two at + control keycode 31 = nul + alt keycode 31 = Meta_two + altgr control keycode 31 = nul + altgr alt keycode 31 = Meta_two +keycode 32 = three numbersign three numbersign + control keycode 32 = Escape + alt keycode 32 = Meta_three + altgr control keycode 32 = Escape + altgr alt keycode 32 = Meta_three +keycode 33 = four dollar four dollar + control keycode 33 = Control_backslash + alt keycode 33 = Meta_four + altgr control keycode 33 = Control_backslash + altgr alt keycode 33 = Meta_four +keycode 34 = five percent five colon + control keycode 34 = Control_bracketright + alt keycode 34 = Meta_five + altgr control keycode 34 = Control_bracketright + altgr alt keycode 34 = Meta_five +keycode 35 = six asciicircum six comma + control keycode 35 = Control_asciicircum + alt keycode 35 = Meta_six + altgr control keycode 35 = Control_asciicircum + altgr alt keycode 35 = Meta_six +keycode 36 = seven ampersand seven period + control keycode 36 = Control_underscore + alt keycode 36 = Meta_seven + altgr alt keycode 36 = Meta_seven +keycode 37 = eight asterisk eight semicolon + control keycode 37 = Delete + alt keycode 37 = Meta_eight + altgr control keycode 37 = Delete + altgr alt keycode 37 = Meta_eight +keycode 38 = nine parenleft nine parenleft + alt keycode 38 = Meta_nine + altgr alt keycode 38 = Meta_nine +keycode 39 = zero parenright zero parenright + alt keycode 39 = Meta_zero + altgr alt keycode 39 = Meta_zero +keycode 40 = minus underscore minus underscore + control keycode 40 = Control_underscore + alt keycode 40 = Meta_minus + altgr control keycode 40 = Control_underscore + altgr alt keycode 40 = Meta_minus +keycode 41 = equal plus equal plus + alt keycode 41 = Meta_equal + altgr alt keycode 41 = Meta_equal +keycode 42 = grave asciitilde grave asciitilde + control keycode 42 = nul + alt keycode 42 = Meta_grave + altgr control keycode 42 = nul + altgr alt keycode 42 = Meta_grave +keycode 43 = Delete Delete Delete Delete + control keycode 43 = BackSpace + alt keycode 43 = Meta_Delete + altgr control keycode 43 = BackSpace + altgr alt keycode 43 = Meta_Delete +keycode 44 = Insert +keycode 45 = equal +keycode 46 = KP_Divide +keycode 47 = KP_Multiply +keycode 48 = +keycode 49 = +keycode 50 = KP_Period + control alt keycode 50 = Boot + altgr control alt keycode 50 = Boot +keycode 51 = +keycode 52 = Find +keycode 53 = Tab Tab + alt keycode 53 = Meta_Tab + altgr alt keycode 53 = Meta_Tab +keycode 54 = q + altgr keycode 54 = +0xCA + altgr shift keycode 54 = +0xEA +keycode 55 = w + altgr keycode 55 = +0xC3 + altgr shift keycode 55 = +0xE3 +keycode 56 = e + altgr keycode 56 = +0xD5 + altgr shift keycode 56 = +0xF5 +keycode 57 = r + altgr keycode 57 = +0xCB + altgr shift keycode 57 = +0xEB +keycode 58 = t + altgr keycode 58 = +0xC5 + altgr shift keycode 58 = +0xE5 +keycode 59 = y + altgr keycode 59 = +0xCE + altgr shift keycode 59 = +0xEE +keycode 60 = u + altgr keycode 60 = +0xC7 + altgr shift keycode 60 = +0xE7 +keycode 61 = i + altgr keycode 61 = +0xDB + altgr shift keycode 61 = +0xFB +keycode 62 = o + altgr keycode 62 = +0xDD + altgr shift keycode 62 = +0xFD +keycode 63 = p + altgr keycode 63 = +0xDA + altgr shift keycode 63 = +0xFA +keycode 64 = bracketleft braceleft + control keycode 64 = Escape + alt keycode 64 = Meta_bracketleft + altgr control keycode 64 = Escape + altgr alt keycode 64 = Meta_bracketleft + altgr keycode 64 = +0xC8 + altgr shift keycode 64 = +0xE8 +keycode 65 = bracketright braceright + control keycode 65 = Control_bracketright + alt keycode 65 = Meta_bracketright + altgr control keycode 65 = Control_bracketright + altgr alt keycode 65 = Meta_bracketright + altgr keycode 65 = +0xDF + altgr shift keycode 65 = +0xFF +keycode 66 = Remove + control alt keycode 66 = Boot + altgr control alt keycode 66 = Boot +keycode 67 = +keycode 68 = KP_7 + alt keycode 68 = Ascii_7 + altgr alt keycode 68 = Ascii_7 +keycode 69 = KP_8 + alt keycode 69 = Ascii_8 + altgr alt keycode 69 = Ascii_8 +keycode 70 = KP_9 + alt keycode 70 = Ascii_9 + altgr alt keycode 70 = Ascii_9 +keycode 71 = KP_Subtract +keycode 72 = +keycode 73 = +keycode 74 = Select +keycode 75 = +keycode 76 = Control +keycode 77 = a + altgr keycode 77 = +0xC6 + altgr shift keycode 77 = +0xE6 +keycode 78 = s + altgr keycode 78 = +0xD9 + altgr shift keycode 78 = +0xF9 +keycode 79 = d + altgr keycode 79 = +0xD7 + altgr shift keycode 79 = +0xF7 +keycode 80 = f + altgr keycode 80 = +0xC1 + altgr shift keycode 80 = +0xE1 +keycode 81 = g + altgr keycode 81 = +0xD0 + altgr shift keycode 81 = +0xF0 +keycode 82 = h + altgr keycode 82 = +0xD2 + altgr shift keycode 82 = +0xF2 +keycode 83 = j + altgr keycode 83 = +0xCF + altgr shift keycode 83 = +0xEF +keycode 84 = k + altgr keycode 84 = +0xCC + altgr shift keycode 84 = +0xEC +keycode 85 = l + altgr keycode 85 = +0xC4 + altgr shift keycode 85 = +0xE4 +keycode 86 = semicolon colon + alt keycode 86 = Meta_semicolon + altgr alt keycode 86 = Meta_semicolon + altgr keycode 86 = +0xD6 + altgr shift keycode 86 = +0xF6 +keycode 87 = apostrophe quotedbl + control keycode 87 = Control_g + alt keycode 87 = Meta_apostrophe + altgr control keycode 87 = Control_g + altgr alt keycode 87 = Meta_apostrophe + altgr keycode 87 = +0xDC + altgr shift keycode 87 = +0xFC +keycode 88 = backslash bar backslash bar + control keycode 88 = Control_backslash + alt keycode 88 = Meta_backslash + altgr control keycode 88 = Control_backslash + altgr alt keycode 88 = Meta_backslash +keycode 89 = Return + alt keycode 89 = Meta_Control_m + altgr alt keycode 89 = Meta_Control_m +keycode 90 = KP_Enter +keycode 91 = KP_4 + alt keycode 91 = Ascii_4 + altgr alt keycode 91 = Ascii_4 +keycode 92 = KP_5 + alt keycode 92 = Ascii_5 + altgr alt keycode 92 = Ascii_5 +keycode 93 = KP_6 + alt keycode 93 = Ascii_6 + altgr alt keycode 93 = Ascii_6 +keycode 94 = KP_0 + alt keycode 94 = Ascii_0 + altgr alt keycode 94 = Ascii_0 +keycode 95 = +keycode 96 = Prior + shift keycode 96 = Scroll_Backward + altgr shift keycode 96 = Scroll_Backward +keycode 97 = +keycode 98 = Num_Lock +keycode 99 = Shift +keycode 100 = z + altgr keycode 100 = +0xD1 + altgr shift keycode 100 = +0xF1 +keycode 101 = x + altgr keycode 101 = +0xDE + altgr shift keycode 101 = +0xFE +keycode 102 = c + altgr keycode 102 = +0xD3 + altgr shift keycode 102 = +0xF3 +keycode 103 = v + altgr keycode 103 = +0xCD + altgr shift keycode 103 = +0xED +keycode 104 = b + altgr keycode 104 = +0xC9 + altgr shift keycode 104 = +0xE9 +keycode 105 = n + altgr keycode 105 = +0xD4 + altgr shift keycode 105 = +0xF4 +keycode 106 = m + altgr keycode 106 = +0xD8 + altgr shift keycode 106 = +0xF8 +keycode 107 = comma less + alt keycode 107 = Meta_comma + altgr alt keycode 107 = Meta_comma + altgr keycode 107 = +0xC2 + altgr shift keycode 107 = +0xE2 +keycode 108 = period greater +# control keycode 108 = Compose + alt keycode 108 = Meta_period + altgr alt keycode 108 = Meta_period + altgr keycode 108 = +0xC0 + altgr shift keycode 108 = +0xE0 +keycode 109 = slash question slash question + control keycode 109 = Delete + alt keycode 109 = Meta_slash + altgr control keycode 109 = Delete + altgr alt keycode 109 = Meta_slash +keycode 110 = Shift +keycode 111 = Linefeed +keycode 112 = KP_1 + alt keycode 112 = Ascii_1 + altgr alt keycode 112 = Ascii_1 +keycode 113 = KP_2 + alt keycode 113 = Ascii_2 + altgr alt keycode 113 = Ascii_2 +keycode 114 = KP_3 + alt keycode 114 = Ascii_3 + altgr alt keycode 114 = Ascii_3 +keycode 115 = +keycode 116 = +keycode 117 = +keycode 118 = Help +keycode 119 = Caps_Lock +keycode 120 = +keycode 121 = space + control keycode 121 = nul + alt keycode 121 = Meta_space + altgr control keycode 121 = nul + altgr alt keycode 121 = Meta_space +keycode 122 = +keycode 123 = Next + shift keycode 123 = Scroll_Forward + altgr shift keycode 123 = Scroll_Forward +keycode 124 = +keycode 125 = KP_Add +keycode 126 = +keycode 127 = diff --git a/data/unimaps/8859-7.a0-ff.uni b/data/unimaps/8859-7.a0-ff.uni index b9adbe2..59347b8 100644 --- a/data/unimaps/8859-7.a0-ff.uni +++ b/data/unimaps/8859-7.a0-ff.uni @@ -1,7 +1,7 @@ # fontpositions 0-95: positions 160-255 in ISO 8859-7 (Greek) 0x000 U+00A0 # NO-BREAK SPACE -0x001 U+2018 # LEFT SINGLE QUOTATION MARK -0x002 U+2019 # RIGHT SINGLE QUOTATION MARK +0x001 U+2018 U+02BD # LEFT SINGLE QUOTATION MARK +0x002 U+2019 U+02BC # RIGHT SINGLE QUOTATION MARK 0x003 U+00A3 # POUND SIGN 0x006 U+00A6 # BROKEN BAR 0x007 U+00A7 # SECTION SIGN diff --git a/doc/kbd.FAQ-14.html b/doc/kbd.FAQ-14.html index 078b91b..c121f83 100644 --- a/doc/kbd.FAQ-14.html +++ b/doc/kbd.FAQ-14.html @@ -27,13 +27,45 @@ have two keycodes: the former has keycode 84 when Alt is pressed simultaneously, and keycode 99 otherwise; the latter has keycode 101 when Ctrl is pressed simultaneously, and keycode 119 otherwise. (Thus, it makes no sense to bind functions to Alt keycode 99 or -Ctrl keycode 119.) +Ctrl keycode 119.) The Pause/Break key is also special in another way: +it does not generate key-up scancodes, but generates the entire +6-scancode sequence on key-down.

If you have strange keys, that do not generate any code under Linux (or generate messages like "unrecognized scancode"), and your kernel is 1.1.63 or later, then you can use setkeycodes(1) to tell the kernel -about them. They won't work under X, however. -Once they have gotten a keycode from setkeycodes, they can be assigned -a function by loadkeys. +about them. Once they have gotten a keycode from setkeycodes, +they can be assigned a function by loadkeys. +

For example, using showkey -s one sees that Microsoft keyboards +use the scancode sequences (in hexadecimal) e0 5b (left Windows key), +e0 5c (right Windows key), e0 5d (Menu key). +Microsoft Internet keyboard also uses e0 6a (Back), e0 69 (Forward), +e0 68 (Stop), e0 6c (Mail), e0 65 (Search), e0 66 (Favorites), +e0 32 (Web/Home), e0 6b (My Computer), e0 21 (Calculator), e0 5f (Sleep). +Use dumpkeys to see what keycodes are still unused. +Typically values like 89-95 and 112-118 and 120-127 are free. +Now +

+
+        % setkeycodes e05b 125
+        % setkeycodes e05c 126
+        % setkeycodes e05d 127
+
+
+ +assigns keycodes to these scancode sequences, and +
+
+        % loadkeys
+        keycode 125 = Decr_Console
+        keycode 126 = Incr_Console
+        keycode 127 = KeyboardSignal
+        %
+
+
+ +would make these Windows keys go to the previous or next virtual console, +and let the Menu key create a fresh virtual console (in case you have +something like spawn_console running).


Next diff --git a/doc/kbd.FAQ.sgml b/doc/kbd.FAQ.sgml index 227823f..8aecfb9 100644 --- a/doc/kbd.FAQ.sgml +++ b/doc/kbd.FAQ.sgml @@ -1370,14 +1370,41 @@ have two keycodes: the former has keycode 84 when Alt is pressed simultaneously, and keycode 99 otherwise; the latter has keycode 101 when Ctrl is pressed simultaneously, and keycode 119 otherwise. (Thus, it makes no sense to bind functions to Alt keycode 99 or -Ctrl keycode 119.) +Ctrl keycode 119.) The Pause/Break key is also special in another way: +it does not generate key-up scancodes, but generates the entire +6-scancode sequence on key-down. If you have strange keys, that do not generate any code under Linux (or generate messages like "unrecognized scancode"), and your kernel is 1.1.63 or later, then you can use setkeycodes(1) to tell the kernel -about them. They won't work under X, however. -Once they have gotten a keycode from dumpkeys to see what keycodes are still unused. +Typically values like 89-95 and 112-118 and 120-127 are free. +Now + + % setkeycodes e05b 125 + % setkeycodes e05c 126 + % setkeycodes e05d 127 + +assigns keycodes to these scancode sequences, and + + % loadkeys + keycode 125 = Decr_Console + keycode 126 = Incr_Console + keycode 127 = KeyboardSignal + % + +would make these Windows keys go to the previous or next virtual console, +and let the Menu key create a fresh virtual console (in case you have +something like Examples of use of loadkeys and xmodmap

loadkeys!example using diff --git a/doc/set_kbd_repeat b/doc/repeat/set_kbd_repeat-1 similarity index 100% rename from doc/set_kbd_repeat rename to doc/repeat/set_kbd_repeat-1 diff --git a/doc/repeat/set_kbd_repeat-2 b/doc/repeat/set_kbd_repeat-2 new file mode 100644 index 0000000..7fc6f91 --- /dev/null +++ b/doc/repeat/set_kbd_repeat-2 @@ -0,0 +1,34 @@ +Date: Wed, 21 Jul 1999 23:34:05 -0700 +From: Marc Merlin +Cc: linux-kernel@vger.rutgers.edu, Larry Augustin + +There is an issue with setup.S: +! Set the keyboard repeat rate to the max + mov ax,#0x0305 + xor bx,bx ! clear bx + int 0x16 + +Those lines are not really needed but they cause a problem on some (very +few) systems where every other boot (or so) the keyboard won't be found (and +has to be plugged/unplugged before it re-appears). +It happens to affect some of the Pentium Pro systems that VA Linux Systems +used to sell. +Larry Augustin (CEO VA) found that removing those three lines fixes the +problem and VA has been shipping kernels with them disabled for at least two +years without any adverse effects. +The patch actually got in the 2.0.31pre series (by David Miller) but got +dropped/lost when David gave up. + +More details from Larry: + +----- Forwarded message from Larry Augustin ----- +From: Larry Augustin + +Specifically, we had the problem on Intel Venus (VS440FX) Pentium Pro +systems. I have a feeling the problem could be traced to a Keytronic +keyboard BIOS bug, but I never tracked it down. + +Interesting enough, that was one of the patches david miller had in the code +base that got dropped when he quit doing 2.0 maintenance releases. + +Larry diff --git a/doc/scancodes/scancodes-1.html b/doc/scancodes/scancodes-1.html new file mode 100644 index 0000000..6b4781d --- /dev/null +++ b/doc/scancodes/scancodes-1.html @@ -0,0 +1,239 @@ + + + + + Keyboard scancodes: Ordinary PC keyboards + + + + + +Next +Previous +Contents +


+

1. Ordinary PC keyboards

+ +

The data from a keyboard comes mainly in the form of scancodes, +produced by key presses or used in the protocol with the computer. +(Different codes are used by the keyboard firmware internally, +and there also exist several +sets of scancodes. Here, for the +time being, we only give the default codes - those from scancode set 2.) +Each key press and key release produces between 0 and 6 scancodes. +

+

1.1 Key release +

+ +

Below I'll only mention the scancode for key press (`make'). +The scancode for key release (`break') is obtained from it +by setting the high order bit (adding 0x80 = 128). +Thus, Esc press produces scancode 01, Esc release +scancode 81 (hex). +For sequences things are similar: Keypad-/ gives e0 35 +when pressed, e0 b5 when released. Most keyboards will +repeat the make code (key down code) when the key repeats. Some will also +fake Shift down and Shift up events during the repeat. +

The keys PrtSc/SysRq and Pause/Break are special. +The former produces scancode e0 2a e0 37 +when no modifier key is pressed simultaneously, e0 37 +together with Shift or Ctrl, but 54 together with (left or right) Alt. +The latter produces scancode sequence +e1 1d 45 e1 9d c5 +when pressed (without modifier) and nothing at all upon release. +However, together with (left or right) Ctrl, one gets +e0 46 e0 c6, +and again nothing at release. It does not repeat. +

+

+

1.2 Protocol scancodes +

+ +

Most scancodes indicate a key press or release. +Some are used in the communication protocol. +

00 (Keyboard buffer overflow or parity error) +

aa (BAT [Basic Assurance Test] OK) +

ee (Result of echo command) +

f1 (Some keyboards, as reply to command a4: +Password not installed) +

fa (Ack) +

fc (BAT error or Mouse transmit error) +

fe (Keyboard fails to ack, please resend) +

ff (Keyboard parity error) +

+

1.3 Escape scancodes +

+ +

The codes e0 and e1 introduce scancode sequences, +and are not usually used as isolated scancodes themselves +(but see +below). +

This, and the above, means that scancodes +00, 60, 61, 6e, 71, +7a, 7c, 7e, 7f +are unavailable to signify key presses (on a default keyboard; +we'll see keyboards that actually use scancode 60). +

Also other prefixes occur, see +below. +

+

1.4 Ordinary scancodes +

+ +

The scancodes in scancode set 2 are given in hex. +Between parentheses the keycap on a US keyboard. +The scancodes are given in order, grouped according +to groups of keys that are usually found next to each other. +

00 is normally an error code +

01 (Esc) +

02 (1!), 03 (2@), 04 (3#), 05 (4$), +06 (5%E), 07 (6^), 08 (7&), +09 (8*), 0a (9(), 0b (0)), 0c (-_), +0d (=+), 0e (Backspace) +

0f (Tab), 10 (Q), 11 (W), 12 (E), +13 (R), 14 (T), 15 (Y), +16 (U), 17 (I), 18 (O), +19 (P), 1a ([{), 1b (]}) +

1c (Enter) +

1d (LCtrl) +

1e (A), 1f (S), 20 (D), 21 (F), +22 (G), 23 (H), 24 (J), 25 (K), +26 (L), 27 (;:), 28 ('") +

29 (`~) +

2a (LShift) +

2b (\|), on a 102-key keyboard +

2c (Z), 2d (X), 2e (C), 2f (V), +30 (B), 31 (N), 32 (M), 33 (,<), +34 (.>), 35 (/?), 36 (RShift) +

37 (Keypad-*) or (*/PrtScn) on a 83/84-key keyboard +

38 (LAlt), 39 (Space bar), +

3a (CapsLock) +

3b (F1), 3c (F2), 3d (F3), 3e (F4), +3f (F5), 40 (F6), 41 (F7), +42 (F8), 43 (F9), 44 (F10) +

45 (NumLock) +

46 (ScrollLock) +

47 (Keypad-7/Home), 48 (Keypad-8/Up), +49 (Keypad-9/PgUp) +

4a (Keypad--) +

4b (Keypad-4/Left), 4c (Keypad-5), +4d (Keypad-6/Right), 4e (Keypad-+) +

4f (Keypad-1/End), 50 (Keypad-2/Down), +51 (Keypad-3/PgDn) +

52 (Keypad-0/Ins), 53 (Keypad-./Del) +

54 (Alt-SysRq) on a 84+ key keyboard +

55 is less common; occurs as PF1 on a Focus 9000 keyboard, +and as FN on an IBM ThinkPad. +

56 mostly on non-US keyboards. It is an unlabelled key +next to the space bar on a Toshiba notebook. +

57 (F11), 58 (F12) both on a 101+ key keyboard +

59-5a-...-7f are less common. +Scancodes 59-5c occur on the RC930 keyboard. +X calls 5d `KEY_Begin'. +Scancodes 55, 6d, 6f, 73, 74, +77, 78, 79, 7a, 7b, +7c, 7e occur on the Focus 9000 keyboard. +Scancodes 73, 7d occur on a Japanese 86/106 keyboard. +

+

+

1.5 Escaped scancodes +

+ +

Apart from the Pause/Break key that has an escaped sequence starting +with e1, the escape used is e0. Often, the codes +are chosen in such a way that something meaningful happens when +the receiver just discards the e0. +

e0 1c (Keypad Enter) - 1c (Enter) +

e0 1d (RCtrl) - 1d (LCtrl) +

e0 2a (fake LShift) - 2a (LShift) +

e0 35 (Keypad-/) - 35 (/?) +

e0 36 (fake RShift) - 36 (RShift) +

e0 37 (Ctrl-PrtScn) - 37 (*/PrtScn) +

e0 38 (RAlt) - 38 (LAlt) +

e0 46 (Ctrl-Break) - 46 (ScrollLock) +

e0 47 (Grey Home) - 47 (Keypad-7/Home) +

e0 48 (Grey Up) - 48 (Keypad-8/UpArrow) +

e0 49 (Grey PgUp) - 49 (Keypad-9/PgUp) +

e0 4b (Grey Left) - 4b (Keypad-4/Left) +

e0 4d (Grey Right) - 4d (Keypad-6/Right) +

e0 4f (Grey End) - 4f (Keypad-1/End) +

e0 50 (Grey Down) - 50 (Keypad-2/DownArrow) +

e0 51 (Grey PgDn) - 51 (Keypad-3/PgDn) +

e0 52 (Grey Insert) - 52 (Keypad-0/Ins) +

e0 53 (Grey Delete) - 53 (Keypad-./Del) +

These escaped scancodes occur only on 101+ key keyboards. +

+

1.6 Fake shifts +

+ +

The ten grey keys Insert, Home, PgUp, Delete, End, PgDn, +Up, Left, Down, Right are supposed to function regardless +of the state of Shift and NumLock keys. But for an old AT keyboard +the keypad keys would produce digits when Numlock was on or Shift +was down. Therefore, in order to fool old programs, +fake scancodes are sent: when LShift is down, and Insert is +pressed, e0 aa e0 52 is sent; +upon release of Insert e0 d2 e0 2a +is sent. In other words, a fake LShift-up and +fake LShift-down are inserted. +

If the Shift key is released earlier than the repeated key, +then a real Shift-up code occurs (without preceding fake Shift-down) +so that a program ignoring e0 would see one more Shift-up +than Shift-down. +

When NumLock is on, no fake Shifts are sent when Shift was down, +but fake Shifts are sent when Shift was not down. Thus, +with Numlock, if Insert is pressed, +e0 2a e0 52 is sent +and upon release e0 d2 e0 aa is sent. +The keyboard maintains a private NumLock mode, toggled when +NumLock is pressed, and set when the NumLock LED is set. +

In the same way, when Shift is down, the Grey-/ key produces +fake Shift-up and fake Shift-down sequences. However, it does +not react to the state of NumLock. The purpose of course is to +fool programs that identify Grey-/ with ordinary /, so that they +don't treat Shift-Grey-/ like Shift-/, i.e., ?. +

On a Toshiba notebook, the three Windows keys are treated like +the group of ten keys mentioned, and get fake shifts when +(left or right) Shift is down. Thet do not react to NumLock. +

+

1.7 Turbo Mode +

+ +

On some motherboards the LCtrl-LAlt-GreyPlus and LCtrl-LAlt-GreyMinus +switch Turbo mode on/off, respectively. For these, the motherboard +may generate the same scancode sequence when the Turbo button is +pushed: Turbo Switch (High->Low): +1d 38 4a ce b8 9d +and Turbo Switch (Low->High): +1d 38 4e ce b8 9d. +

Other peculiar combinations in this style include +LCtrl-LAlt-LShift-GreyMinus to turn off system cache. +

Thio Yu Jin <jin@singmail.com> complains that on his Toshiba 4010CDS +the Ctrl-Alt-Shift-T key combination brings up the Toshiba user manual. +(04 Mar 1999 - not April 1.) +

+

+

1.8 Scancode modes +

+ +

The usual PC keyboards are capable of producing three +sets of scancodes. Writing 0xf0 followed by 1, 2 or 3 to port +0x60 will put the keyboard in scancode mode 1, 2 or 3. Writing +0xf0 followed by 0 queries the mode, resulting in a scancode +byte 0x43, 0x41 or 0x3f from the keyboard. +

Scancode mode 2 is the default. In this mode, a key press +usually produces a value s in the range 0x01-0x5f and the +corresponding key release produces s+0x80. In scancode +mode 3, the only key releases that produce a scan code are of +either Shift key, or of the left Ctrl and Alt keys; for all +other keys only the key presses are noted. The produced +scancodes are mostly equal to those for scancode mode 2. +

In scancode mode 1 most key releases produce the same values as +in scancode mode 2, but for key presses there are entirely +different, unrelated values. The details are somewhat messy. +

+


+Next +Previous +Contents + + diff --git a/doc/scancodes/scancodes-2.html b/doc/scancodes/scancodes-2.html new file mode 100644 index 0000000..79280df --- /dev/null +++ b/doc/scancodes/scancodes-2.html @@ -0,0 +1,349 @@ + + + + + Keyboard scancodes: Special keyboards + + + + + +Next +Previous +Contents +
+

2. Special keyboards

+ +

+

+

2.1 Focus KeyPro FK-9000 keyboard +

+ +

Raul D. Miller <rockwell@nova.umd.edu> +and <hagmanti@cps.msu.edu> report: +

The keyboard is a KeyPro FK-9000. The FCC label says it's made in +Taiwan by Focus Electronic Co, Ltd. It has a built-in calculator. +

This keyboard has twelve additional keys, with scancodes +55 (PF1), +6d (PF11), +6f (PF12), +73 (PF2), +74 (PF9), +77 (PF3), +78 (PF4), +79 (PF5), +7a* (PF6), +7b (PF7), +7c (PF8), +7e* (PF10). +

The break codes equal the make codes ORed with 0x80, as always, +but the Linux kernel eats fa and fe as +protocol bytes. +

The behavior of these keys is different from that of normal keys-- +they generate nothing when pressed; then generate the above scancodes +at the normal repeat time and rate, and then generate (except for the +starred ones) their scancode ORed with 0x80 when released... +

These PF keys are reprogrammable -- and programming occurs as a sequence +of keyboard actions. Therefore, the PF keys duplicate whatever +keyboard actions occurred during their programming. +You hit the "Prog" key, then the PF key you want to program; type the +string you want to store in the key (it's limited to 14 keypresses), +and then hit the PF key again. After that, when you hit the PF key, +it sends the string, and generates its own abnormal scancode upon +release. When the key is held down, it generates the scancode repeatedly, +but does not generate the string stored in it repeatedly. +

When you go to program a key, the scancodes for "PF##-" are sent +to the computer, then the scancodes for each key you hit as you +hit it (the shift, etc. keys are an exception-- they send "s-" +and such :), and then, when you hit the PF## key again to end the +programming, it sends a sequence of (at least) 18 "0e 8e"s -- +Backspaces... +

The program key itself doesn't generate a scancode at any time. +The same applies to the CE and AC/ON keys (part of the calculator). +There is a switch to change between calculator and keyboard mode +which generates no scancodes. +

When the keyboard is in calculator mode, the entire numeric +keypad (and everything else on the right side) generates no +scancodes. +

When the keyboard is not in caluclator mode, the %, MC, MR, M-, +M+, and Square Root keys all generate 0xff when pressed, +0xff to repeat, and 0xff on release. +

The little unlabeled key between the right Ctrl and right Alt +generates 56 when hit, repeats that, and then d6 +when released, just like a normal key. +

+

+

2.2 BTC keyboard +

+ +

This keyboard has one additional key, with escaped scancode +e0 6f (Macro). +

+

2.3 LK450 keyboard +

+ +

This keyboard has six additional keys, with escaped scancodes +e0 3d (F13), +e0 3e (F14), +e0 3f (Help), +e0 40 (Do), +e0 41 (F17), +e0 4e (Keypad-minplus). +

+

2.4 OmniKey keyboard +

+ +

This keyboard has one additional key, with escaped scancode +e0 4c (Omni). +

+

2.5 GRiD 2260 keyboard +

+ +

The GRiD 2260 notebook has a key producing the +6c scancode; I do not know the keycap. +

+

2.6 A Japanese 86/106 keyboard +

+ +

Barry Yip <g609296@cc.win.or.jp> reports: +

This keyboard has two additional keys, with scancodes +73 (\-) and 7d (\|). +This kind of keyboard is rather standard in Japan. They are called 106 +keyboard. Mine is a notebook so it is 86 keyboard. No specific brand +name. +

+

2.7 Brazilian keyboard +

+ +

Arnaldo Moura <lumbago@vnet.ibm.com> reports: +

This keyboard has two unusual keys, with scancodes +73 (/?) and 7e (Keypad-.). +

Also others mention an ABNT keyboard with 73 and +7e keys, mostly because these keys do not function +with Windows NT 4.0. +

ABNT (Associação Brasileira de Normas Tecnicas) and ABNT2 +are Brazilian keyboard layout standards. The plain Brazilian +keyboard has 103 keys. I find an ABNT 107 key keyboard announced by +gertec. +with Suspend / Wake-up / Power power management keys. +For enabling these functions, run BIOS setup. +

+

2.8 RC930 keyboard +

+ +

Torben Fjerdingstad <tfj@olivia.ping.dk> reports: +

It's an rc930 keyboard, from Regnecentralen/RC International, Now ICL. +This keyboard has four additional keys, with scancodes +59 (A1), +5a (A2), +5b (A3), +5c (A4). +

The rc930/rc931 keyboards are not made anymore, because they had a +problem with fast typists, writing over 400 chars/minute. +Writing 'af<space>', very, very fast, did a PgUp. +

+

2.9 Tandberg Data keyboard +

+ +

Kjetil Torgrim Homme <kjetilho@ifi.uio.no> reports: +

My Tandberg Data keyboard uses the prefix 80 for +its numerous (20) extra keys. The 80 scancodes are: +

11, 12, 13, 14, 16, +17, 18, 19, 1e, 1f, +20, 21, 22, 23, 25, +26, 2f, 30, 32, 56. +

For completeness, the e0 scancodes: +

1c, 2a, 35, 37, 47, +48, 49, 4b, 4d, 4f, +50, 51, 52, 53. +

The e1 scancode: 1d. +As you can see, there is no overlap on this keyboard. +

+

2.10 A keyboard +

+ +

Three unusual power keys: e0 5e, +e0 5f, e0 63. +

+

2.11 Microsoft Natural keyboard +

+ +

This keyboard has three additional keys, with escaped scancodes +e0 5b (LeftWindow), +e0 5c (RightWindow), +e0 5d (Menu). +

+

2.12 Microsoft Internet keyboard +

+ +

In addition to the three extra keys on the Microsoft Natural keyboard, +this keyboard has ten keys, with escaped scancodes +e0 21 (Calculator), +e0 32 (Web/Home), +e0 5f (Sleep), +e0 65 (Search), +e0 66 (Favorites), +e0 68 (Stop), +e0 69 (Forward), +e0 6a (Back), +e0 6b (My Computer), +e0 6c (Mail). +

+

2.13 Logitech Internet keyboard +

+ +

Jonathan DeBoer <deboer@ugrad.cs.ualberta.ca> +reports Key-down and key-up scancodes for a Logitech Internet keyboard. +

0xe0 0x7a 0xe0 0xfa +

0xe0 0x32 0xe0 0xb2 +

0xe0 0x21 0xe0 0xa1 +

0xe0 0x23 0xe0 0xa3 +

0x38 0x2a 0x0f 0x8f 0x8f 0xb8 0xaa +

0xe0 0x17 0xe0 0x97 +

0xe0 0x10 0xe0 0x90 +

0xe0 0x22 0xe0 0xa2 +

0xe0 0x24 0xe0 0xa4 +

0xe0 0x19 0xe0 0x99 +

0xe0 0x1e 0xe0 0x9e +

0xe0 0x12 0xe0 0x92 +

0xe0 0x26 0xe0 0xa6 +

0xe0 0x18 0xe0 0x98 +

0xe0 0x20 0xe0 0xa0 +

0xe0 0x30 0xe0 0xb0 +

0xe0 0x2e 0xe0 0xae +

0xe0 0x25 0xe0 0xa5 +

(But I have no keycap information.) +

+

2.14 A keyboard using e0 as ordinary scancode +

+ +

Benjamin Carter <bcarter@ultra5.cs.umr.edu> reports: +

I recently came into possession of a 97-key keyboard with Japanese +markings on the keys. (The keys also have the standard +qwerty-characters on them, with the exception of some of the meta-keys +(there are 3 keys near the Alt keys on either side of the spacebar with +only Japanese characters on them so I don't know what they are). +In any case, the keyboard sends out scancodes that work for all the main +keys (backspace, letters and numbers, enter, shift), but the numeric +keypad, Alt keys, and function keys don't work. +I have run the board through showkey -s, so I know what +scancodes this keyboard sends out. +However, the F9 and F10 keys send out 60 and 61, +respectively, so their key release events send out e0 +and e1, confusing the keyboard driver. +

# These are across the top of the keyboard. +

58 (F1), 59 (F2), 5a (F3), +5b (F4), 5c (F5), 5d (F6), +5e (F7), 5f (F8), 60 (F9), +61 (F10), 62 (F11), 63 (F12) +

+76 (Break), 77 (Setup). +

+# top row +

64 (Esc), +02 (1), 03 (2), 04 (3), +05 (4), 06 (5), 07 (6), +08 (7), 09 (8), 0a (9), +0b (0), 0c (-), 0d (=), +29 (`), 0e (Backspace) +

+

# 2nd row +

0f (Tab), +10 (Q), 11 (W), 12 (E), +13 (R), 14 (T), 15 (Y), +16 (U), 17 (I), 18 (O), +19 (P), 1a ([), 1b (]), +79 (Del), 6e (Line Feed) +

+

# 3rd row +

38 (Ctrl), +1e (A), 1f (S), 20 (D), +21 (F), 22 (G), 23 (H), +24 (J), 25 (K), 26 (L), +27 (;), 28 ('), 75 (\), +1c (Return) +

+

# 4th row +

2a (Shift_L), +2c (Z), 2d (X), 2e (C), +2f (V), 30 (B), 31 (N), +32 (M), 33 (,), 34 (.), +35 (/), +3a ((unknown)), +36 (Shift_R) +

+

# bottom row +

1d (Caps Lock), 71 (Alt_L), +01 ((unknown)), +39 (Space), +45 ((unknown)), +72 (Alt_R), +46 ((unknown)) +

+

# numeric keypad. No "grey" section on the keyboard. +

47 (7), 48 (8), 49 (9), +54 (Keypad -), +4b (4), 4c (5), 4d (6), +37 (Keypad +), +4f (1), 50 (2), 51 (3), +4e (Keypad Enter), +52 (0), +78 (Up), +53 (Keypad .), +56 (Left), +55 (Down), +7d (Right), +7e (Keypad ,). +

+

There are more keyboards that do not use e0 as escape code. +For example, Paul Schulz <pauls@caemrad.com.au> +reports the same for Sun Type 5 Keyboard with PS/2 connector, +NCD model N-123NA. A kernel patch is required for such keyboards. +

+

+

2.15 IBM ThinkPad +

+ +

George Staikos <staikos@0wned.org> writes: +

I have an IBM ThinkPad i1460. It has the IBM EasyLaunch<tm> keys. +These are four multicoloured keys up at the top of the keyboard +for "Home Page", "Search", "Shop", "Mail". They dont' seem to create +any keyboard events at all. The keyboard interrupt doesn't trigger, +showkeys doesn't see them do anything, and in DOS, a simple +sequence of BIOS calls doesn't see them either. +Also, being a laptop, it has an FN key. This key generates 55. +

+

2.16 Keyboards with many keys +

+ +

The current mechanism is unable to handle keyboards with more than +127 keys. But such keyboards seem to exist. (So far, nobody has +reported `I have one', but there are several reports saying +`I have heard about someone who has one'.) +

Mark Hatle <fray@kernel.crashing.org> wrote: +

On some ADB keyboards there are actually 128 distinct keys. +They use scancodes 0-127. +

ADB is Apple Desktop Bus. The way that ADB works is similar to SCSI but +on a much slower level. Specifically there is a communications chip in +the computer, ADB controller, and the same chip in the keyboard. The +keyboard sends the scancode to its internal ADB controller, the internal +ADB controller then does any key mapping needed (not used under linux +from my understanding) and passes the data to the computer. +

The ADB controller is capable of sending 256 distinct keys, but to my +knowledge only 128 are sent. The key 0 is the 'a' and key 127 is the +"power button". +

Also some of the Apple ADB keyboards have special "sound" and "function" +keys. These keys (used in MacOS for volume up and down, screen contrast +changing, etc) also show up on the ADB scancodes. +

ADB is used for both m68k and PPC Linux. The m68k Macintosh port, and +the PPC - Power Macintosh and CHRP ports. +

and later: +

Basically the scancode sequences for ADB are 16 bit. so there can actually +be 65536 scancodes, currently though only 128 are defined. +

+


+Next +Previous +Contents + + diff --git a/doc/scancodes/scancodes-3.html b/doc/scancodes/scancodes-3.html new file mode 100644 index 0000000..7adc63e --- /dev/null +++ b/doc/scancodes/scancodes-3.html @@ -0,0 +1,26 @@ + + + + + Keyboard scancodes: Reporting + + + + +Next +Previous +Contents +
+

3. Reporting

+ +

Additions and corrections are welcome. +Use showkey -s to get the scancodes. +Mention keyboard manufacturer and type, and the keycaps. +

Andries Brouwer - aeb@cwi.nl +

+


+Next +Previous +Contents + + diff --git a/doc/scancodes/scancodes.html b/doc/scancodes/scancodes.html new file mode 100644 index 0000000..50767ea --- /dev/null +++ b/doc/scancodes/scancodes.html @@ -0,0 +1,63 @@ + + + + + Keyboard scancodes + + + + + +Next +Previous +Contents +
+

Keyboard scancodes

+ +

Andries Brouwer, aeb@cwi.nl

v1.0, 991209 +


+This note contains some information about PC keyboard scancodes. +
+

+

1. Ordinary PC keyboards

+ + +

+

2. Special keyboards

+ + +

+

3. Reporting

+ +
+Next +Previous +Contents + + diff --git a/doc/scancodes/scancodes.sgml b/doc/scancodes/scancodes.sgml new file mode 100644 index 0000000..e4d524c --- /dev/null +++ b/doc/scancodes/scancodes.sgml @@ -0,0 +1,668 @@ + + +
+ +Keyboard scancodes +<author>Andries Brouwer, <tt/aeb@cwi.nl/ +<date>v1.0, 991209 + +<abstract> +This note contains some information about PC keyboard scancodes. +</abstract> + +<toc> + +<sect>Ordinary PC keyboards<p> +The data from a keyboard comes mainly in the form of scancodes, +produced by key presses or used in the protocol with the computer. +(Different codes are used by the keyboard firmware internally, +and there also exist several +<ref id="scancode_modes" name="sets of scancodes">. Here, for the +time being, we only give the default codes - those from scancode set 2.) +Each key press and key release produces between 0 and 6 scancodes. + +<sect1>Key release<p> +Below I'll only mention the scancode for key press (`make'). +The scancode for key release (`break') is obtained from it +by setting the high order bit (adding 0x80 = 128). +Thus, Esc press produces scancode <bf>01</bf>, Esc release +scancode <bf>81</bf> (hex). +For sequences things are similar: Keypad-/ gives <bf>e0</bf> <bf>35</bf> +when pressed, <bf>e0</bf> <bf>b5</bf> when released. Most keyboards will +repeat the make code (key down code) when the key repeats. Some will also +fake Shift down and Shift up events during the repeat. + +The keys PrtSc/SysRq and Pause/Break are special. +The former produces scancode <bf>e0</bf> <bf>2a</bf> <bf>e0</bf> <bf>37</bf> +when no modifier key is pressed simultaneously, <bf>e0</bf> <bf>37</bf> +together with Shift or Ctrl, but <bf>54</bf> together with (left or right) Alt. +The latter produces scancode sequence +<bf>e1</bf> <bf>1d</bf> <bf>45</bf> <bf>e1</bf> <bf>9d</bf> <bf>c5</bf> +when pressed (without modifier) and nothing at all upon release. +However, together with (left or right) Ctrl, one gets +<bf>e0</bf> <bf>46</bf> <bf>e0</bf> <bf>c6</bf>, +and again nothing at release. It does not repeat. + + +<sect1>Protocol scancodes<p> +Most scancodes indicate a key press or release. +Some are used in the communication protocol. +<p> +<bf>00</bf> (Keyboard buffer overflow or parity error) +<p> +<bf>aa</bf> (BAT [Basic Assurance Test] OK) +<p> +<bf>ee</bf> (Result of echo command) +<p> +<bf>f1</bf> (Some keyboards, as reply to command <bf>a4</bf>: +Password not installed) +<p> +<bf>fa</bf> (Ack) +<p> +<bf>fc</bf> (BAT error or Mouse transmit error) +<p> +<bf>fe</bf> (Keyboard fails to ack, please resend) +<p> +<bf>ff</bf> (Keyboard parity error) + +<sect1>Escape scancodes<p> +The codes <bf>e0</bf> and <bf>e1</bf> introduce scancode sequences, +and are not usually used as isolated scancodes themselves +(but see <ref id="e0_as_key" name="below">). +<p> +This, and the above, means that scancodes +<bf>00</bf>, <bf>60</bf>, <bf>61</bf>, <bf>6e</bf>, <bf>71</bf>, +<bf>7a</bf>, <bf>7c</bf>, <bf>7e</bf>, <bf>7f</bf> +are unavailable to signify key presses (on a default keyboard; +we'll see keyboards that actually use scancode <bf>60</bf>). +<p> +Also other prefixes occur, see <ref id="prefix_80" name="below">. + +<sect1>Ordinary scancodes<p> +The scancodes in scancode set 2 are given in hex. +Between parentheses the keycap on a US keyboard. +The scancodes are given in order, grouped according +to groups of keys that are usually found next to each other. +<p> +<bf>00</bf> is normally an error code +<p> +<bf>01</bf> (Esc) +<p> +<bf>02</bf> (1!), <bf>03</bf> (2@), <bf>04</bf> (3#), <bf>05</bf> (4$), +<bf>06</bf> (5%E), <bf>07</bf> (6^), <bf>08</bf> (7&), +<bf>09</bf> (8*), <bf>0a</bf> (9(), <bf>0b</bf> (0)), <bf>0c</bf> (-_), +<bf>0d</bf> (=+), <bf>0e</bf> (Backspace) +<p> +<bf>0f</bf> (Tab), <bf>10</bf> (Q), <bf>11</bf> (W), <bf>12</bf> (E), +<bf>13</bf> (R), <bf>14</bf> (T), <bf>15</bf> (Y), +<bf>16</bf> (U), <bf>17</bf> (I), <bf>18</bf> (O), +<bf>19</bf> (P), <bf>1a</bf> ([{), <bf>1b</bf> (]}) +<p> +<bf>1c</bf> (Enter) +<p> +<bf>1d</bf> (LCtrl) +<p> +<bf>1e</bf> (A), <bf>1f</bf> (S), <bf>20</bf> (D), <bf>21</bf> (F), +<bf>22</bf> (G), <bf>23</bf> (H), <bf>24</bf> (J), <bf>25</bf> (K), +<bf>26</bf> (L), <bf>27</bf> (;:), <bf>28</bf> ('") +<p> +<bf>29</bf> (`˜) +<p> +<bf>2a</bf> (LShift) +<p> +<bf>2b</bf> (\|), on a 102-key keyboard +<p> +<bf>2c</bf> (Z), <bf>2d</bf> (X), <bf>2e</bf> (C), <bf>2f</bf> (V), +<bf>30</bf> (B), <bf>31</bf> (N), <bf>32</bf> (M), <bf>33</bf> (,<), +<bf>34</bf> (.>), <bf>35</bf> (/?), <bf>36</bf> (RShift) +<p> +<bf>37</bf> (Keypad-*) or (*/PrtScn) on a 83/84-key keyboard +<p> +<bf>38</bf> (LAlt), <bf>39</bf> (Space bar), +<p> +<bf>3a</bf> (CapsLock) +<p> +<bf>3b</bf> (F1), <bf>3c</bf> (F2), <bf>3d</bf> (F3), <bf>3e</bf> (F4), +<bf>3f</bf> (F5), <bf>40</bf> (F6), <bf>41</bf> (F7), +<bf>42</bf> (F8), <bf>43</bf> (F9), <bf>44</bf> (F10) +<p> +<bf>45</bf> (NumLock) +<p> +<bf>46</bf> (ScrollLock) +<p> +<bf>47</bf> (Keypad-7/Home), <bf>48</bf> (Keypad-8/Up), +<bf>49</bf> (Keypad-9/PgUp) +<p> +<bf>4a</bf> (Keypad--) +<p> +<bf>4b</bf> (Keypad-4/Left), <bf>4c</bf> (Keypad-5), +<bf>4d</bf> (Keypad-6/Right), <bf>4e</bf> (Keypad-+) +<p> +<bf>4f</bf> (Keypad-1/End), <bf>50</bf> (Keypad-2/Down), +<bf>51</bf> (Keypad-3/PgDn) +<p> +<bf>52</bf> (Keypad-0/Ins), <bf>53</bf> (Keypad-./Del) +<p> +<bf>54</bf> (Alt-SysRq) on a 84+ key keyboard +<p> +<bf>55</bf> is less common; occurs as PF1 on a Focus 9000 keyboard, +and as FN on an IBM ThinkPad. +<p> +<bf>56</bf> mostly on non-US keyboards. It is an unlabelled key +next to the space bar on a Toshiba notebook. +<p> +<bf>57</bf> (F11), <bf>58</bf> (F12) both on a 101+ key keyboard +<p> +<bf>59</bf>-<bf>5a</bf>-...-<bf>7f</bf> are less common. +Scancodes <bf>59</bf>-<bf>5c</bf> occur on the RC930 keyboard. +X calls <bf>5d</bf> `KEY_Begin'. +Scancodes <bf>55</bf>, <bf>6d</bf>, <bf>6f</bf>, <bf>73</bf>, <bf>74</bf>, +<bf>77</bf>, <bf>78</bf>, <bf>79</bf>, <bf>7a</bf>, <bf>7b</bf>, +<bf>7c</bf>, <bf>7e</bf> occur on the Focus 9000 keyboard. +Scancodes <bf>73</bf>, <bf>7d</bf> occur on a Japanese 86/106 keyboard. +<p> + +<sect1>Escaped scancodes<p> +Apart from the Pause/Break key that has an escaped sequence starting +with <bf>e1</bf>, the escape used is <bf>e0</bf>. Often, the codes +are chosen in such a way that something meaningful happens when +the receiver just discards the <bf>e0</bf>. +<p> +<bf>e0</bf> <bf>1c</bf> (Keypad Enter) - <bf>1c</bf> (Enter) +<p> +<bf>e0</bf> <bf>1d</bf> (RCtrl) - <bf>1d</bf> (LCtrl) +<p> +<bf>e0</bf> <bf>2a</bf> (fake LShift) - <bf>2a</bf> (LShift) +<p> +<bf>e0</bf> <bf>35</bf> (Keypad-/) - <bf>35</bf> (/?) +<p> +<bf>e0</bf> <bf>36</bf> (fake RShift) - <bf>36</bf> (RShift) +<p> +<bf>e0</bf> <bf>37</bf> (Ctrl-PrtScn) - <bf>37</bf> (*/PrtScn) +<p> +<bf>e0</bf> <bf>38</bf> (RAlt) - <bf>38</bf> (LAlt) +<p> +<bf>e0</bf> <bf>46</bf> (Ctrl-Break) - <bf>46</bf> (ScrollLock) +<p> +<bf>e0</bf> <bf>47</bf> (Grey Home) - <bf>47</bf> (Keypad-7/Home) +<p> +<bf>e0</bf> <bf>48</bf> (Grey Up) - <bf>48</bf> (Keypad-8/UpArrow) +<p> +<bf>e0</bf> <bf>49</bf> (Grey PgUp) - <bf>49</bf> (Keypad-9/PgUp) +<p> +<bf>e0</bf> <bf>4b</bf> (Grey Left) - <bf>4b</bf> (Keypad-4/Left) +<p> +<bf>e0</bf> <bf>4d</bf> (Grey Right) - <bf>4d</bf> (Keypad-6/Right) +<p> +<bf>e0</bf> <bf>4f</bf> (Grey End) - <bf>4f</bf> (Keypad-1/End) +<p> +<bf>e0</bf> <bf>50</bf> (Grey Down) - <bf>50</bf> (Keypad-2/DownArrow) +<p> +<bf>e0</bf> <bf>51</bf> (Grey PgDn) - <bf>51</bf> (Keypad-3/PgDn) +<p> +<bf>e0</bf> <bf>52</bf> (Grey Insert) - <bf>52</bf> (Keypad-0/Ins) +<p> +<bf>e0</bf> <bf>53</bf> (Grey Delete) - <bf>53</bf> (Keypad-./Del) +<p> +These escaped scancodes occur only on 101+ key keyboards. + +<sect1>Fake shifts<p> +The ten grey keys Insert, Home, PgUp, Delete, End, PgDn, +Up, Left, Down, Right are supposed to function regardless +of the state of Shift and NumLock keys. But for an old AT keyboard +the keypad keys would produce digits when Numlock was on or Shift +was down. Therefore, in order to fool old programs, +fake scancodes are sent: when LShift is down, and Insert is +pressed, <bf>e0</bf> <bf>aa</bf> <bf>e0</bf> <bf>52</bf> is sent; +upon release of Insert <bf>e0</bf> <bf>d2</bf> <bf>e0</bf> <bf>2a</bf> +is sent. In other words, a fake LShift-up and +fake LShift-down are inserted. + +If the Shift key is released earlier than the repeated key, +then a real Shift-up code occurs (without preceding fake Shift-down) +so that a program ignoring <bf>e0</bf> would see one more Shift-up +than Shift-down. + +When NumLock is on, no fake Shifts are sent when Shift was down, +but fake Shifts are sent when Shift was not down. Thus, +with Numlock, if Insert is pressed, +<bf>e0</bf> <bf>2a</bf> <bf>e0</bf> <bf>52</bf> is sent +and upon release <bf>e0</bf> <bf>d2</bf> <bf>e0</bf> <bf>aa</bf> is sent. +The keyboard maintains a private NumLock mode, toggled when +NumLock is pressed, and set when the NumLock LED is set. + +In the same way, when Shift is down, the Grey-/ key produces +fake Shift-up and fake Shift-down sequences. However, it does +not react to the state of NumLock. The purpose of course is to +fool programs that identify Grey-/ with ordinary /, so that they +don't treat Shift-Grey-/ like Shift-/, i.e., ?. + +On a Toshiba notebook, the three Windows keys are treated like +the group of ten keys mentioned, and get fake shifts when +(left or right) Shift is down. Thet do not react to NumLock. + +<sect1>Turbo Mode<p> +On some motherboards the LCtrl-LAlt-GreyPlus and LCtrl-LAlt-GreyMinus +switch Turbo mode on/off, respectively. For these, the motherboard +may generate the same scancode sequence when the Turbo button is +pushed: Turbo Switch (High->Low): +<bf>1d</bf> <bf>38</bf> <bf>4a</bf> <bf>ce</bf> <bf>b8</bf> <bf>9d</bf> +and Turbo Switch (Low->High): +<bf>1d</bf> <bf>38</bf> <bf>4e</bf> <bf>ce</bf> <bf>b8</bf> <bf>9d</bf>. +<p> +Other peculiar combinations in this style include +LCtrl-LAlt-LShift-GreyMinus to turn off system cache. +<p> +Thio Yu Jin <jin@singmail.com> complains that on his Toshiba 4010CDS +the Ctrl-Alt-Shift-T key combination brings up the Toshiba user manual. +(04 Mar 1999 - not April 1.) +<p> + +<sect1>Scancode modes +<label id="scancode_modes"> +<p> +The usual PC keyboards are capable of producing three +sets of scancodes. Writing 0xf0 followed by 1, 2 or 3 to port +0x60 will put the keyboard in scancode mode 1, 2 or 3. Writing +0xf0 followed by 0 queries the mode, resulting in a scancode +byte 0x43, 0x41 or 0x3f from the keyboard. +<p> +Scancode mode 2 is the default. In this mode, a key press +usually produces a value <it>s</it> in the range 0x01-0x5f and the +corresponding key release produces <it>s</it>+0x80. In scancode +mode 3, the only key releases that produce a scan code are of +either Shift key, or of the left Ctrl and Alt keys; for all +other keys only the key presses are noted. The produced +scancodes are mostly equal to those for scancode mode 2. +<p> +In scancode mode 1 most key releases produce the same values as +in scancode mode 2, but for key presses there are entirely +different, unrelated values. The details are somewhat messy. + +<sect>Special keyboards<p> + +<sect1>Focus KeyPro FK-9000 keyboard<p> +Raul D. Miller <rockwell@nova.umd.edu> +and <hagmanti@cps.msu.edu> report: +<p> +<it> +The keyboard is a KeyPro FK-9000. The FCC label says it's made in +Taiwan by Focus Electronic Co, Ltd. It has a built-in calculator. +</it> +<p> +<it> +This keyboard has twelve additional keys, with scancodes +</it> +<bf>55</bf> (PF1), +<bf>6d</bf> (PF11), +<bf>6f</bf> (PF12), +<bf>73</bf> (PF2), +<bf>74</bf> (PF9), +<bf>77</bf> (PF3), +<bf>78</bf> (PF4), +<bf>79</bf> (PF5), +<bf>7a</bf>* (PF6), +<bf>7b</bf> (PF7), +<bf>7c</bf> (PF8), +<bf>7e</bf>* (PF10). +<p> +<it> +The break codes equal the make codes ORed with 0x80, as always, +but the Linux kernel eats <bf>fa</bf> and <bf>fe</bf> as +protocol bytes. +</it> +<p> +<it> +The behavior of these keys is different from that of normal keys-- +they generate nothing when pressed; then generate the above scancodes +at the normal repeat time and rate, and then generate (except for the +starred ones) their scancode ORed with 0x80 when released... +</it> +<p> +<it> +These PF keys are reprogrammable -- and programming occurs as a sequence +of keyboard actions. Therefore, the PF keys duplicate whatever +keyboard actions occurred during their programming. +You hit the "Prog" key, then the PF key you want to program; type the +string you want to store in the key (it's limited to 14 keypresses), +and then hit the PF key again. After that, when you hit the PF key, +it sends the string, and generates its own abnormal scancode upon +release. When the key is held down, it generates the scancode repeatedly, +but does not generate the string stored in it repeatedly. +</it> +<p> +<it> +When you go to program a key, the scancodes for "PF##-" are sent +to the computer, then the scancodes for each key you hit as you +hit it (the shift, etc. keys are an exception-- they send "s-" +and such :), and then, when you hit the PF## key again to end the +programming, it sends a sequence of (at least) 18 "0e 8e"s -- +Backspaces... +</it> +<p> +<it> +The program key itself doesn't generate a scancode at any time. +The same applies to the CE and AC/ON keys (part of the calculator). +There is a switch to change between calculator and keyboard mode +which generates no scancodes. +</it> +<p> +<it> +When the keyboard is in calculator mode, the entire numeric +keypad (and everything else on the right side) generates no +scancodes. +</it> +<p> +<it> +When the keyboard is not in caluclator mode, the %, MC, MR, M-, +M+, and Square Root keys all generate 0xff when pressed, +0xff to repeat, and 0xff on release. +</it> +<p> +<it> +The little unlabeled key between the right Ctrl and right Alt +generates <bf>56</bf> when hit, repeats that, and then <bf>d6</bf> +when released, just like a normal key. +</it> +<p> + +<sect1>BTC keyboard<p> +This keyboard has one additional key, with escaped scancode +<bf>e0</bf> <bf>6f</bf> (Macro). + +<sect1>LK450 keyboard<p> +This keyboard has six additional keys, with escaped scancodes +<bf>e0</bf> <bf>3d</bf> (F13), +<bf>e0</bf> <bf>3e</bf> (F14), +<bf>e0</bf> <bf>3f</bf> (Help), +<bf>e0</bf> <bf>40</bf> (Do), +<bf>e0</bf> <bf>41</bf> (F17), +<bf>e0</bf> <bf>4e</bf> (Keypad-minplus). + +<sect1>OmniKey keyboard<p> +This keyboard has one additional key, with escaped scancode +<bf>e0</bf> <bf>4c</bf> (Omni). + +<sect1>GRiD 2260 keyboard<p> +The GRiD 2260 notebook has a key producing the +<bf>6c</bf> scancode; I do not know the keycap. + +<sect1>A Japanese 86/106 keyboard<p> +Barry Yip <g609296@cc.win.or.jp> reports: +<p> +<it> +This keyboard has two additional keys, with scancodes +<bf>73</bf> (\-) and <bf>7d</bf> (\|). +This kind of keyboard is rather standard in Japan. They are called 106 +keyboard. Mine is a notebook so it is 86 keyboard. No specific brand +name. +</it> + +<sect1>Brazilian keyboard<p> +Arnaldo Moura <lumbago@vnet.ibm.com> reports: +<p> +<it> +This keyboard has two unusual keys, with scancodes +<bf>73</bf> (/?) and <bf>7e</bf> (Keypad-.). +</it> +<p> +Also others mention an ABNT keyboard with <bf>73</bf> and +<bf>7e</bf> keys, mostly because these keys do not function +with Windows NT 4.0. +<p> +ABNT (Associação Brasileira de Normas Tecnicas) and ABNT2 +are Brazilian keyboard layout standards. The plain Brazilian +keyboard has 103 keys. I find an ABNT 107 key keyboard announced by +<htmlurl name="gertec" url="http://www.gertec.com.br/tecpc1.htm">. +with Suspend / Wake-up / Power power management keys. +<it>For enabling these functions, run BIOS setup.</it> + +<sect1>RC930 keyboard<p> +Torben Fjerdingstad <tfj@olivia.ping.dk> reports: +<p> +<it> +It's an rc930 keyboard, from Regnecentralen/RC International, Now ICL. +This keyboard has four additional keys, with scancodes +</it> +<bf>59</bf> (A1), +<bf>5a</bf> (A2), +<bf>5b</bf> (A3), +<bf>5c</bf> (A4). +<p> +<it> +The rc930/rc931 keyboards are not made anymore, because they had a +problem with fast typists, writing over 400 chars/minute. +Writing 'af<space>', very, very fast, did a PgUp. +</it> + +<sect1>Tandberg Data keyboard +<label id="prefix_80"> +<p> +Kjetil Torgrim Homme <kjetilho@ifi.uio.no> reports: +<p> +<it> +My Tandberg Data keyboard uses the prefix <bf>80</bf> for +its numerous (20) extra keys. The <bf>80</bf> scancodes are: +</it><p> +<bf>11</bf>, <bf>12</bf>, <bf>13</bf>, <bf>14</bf>, <bf>16</bf>, +<bf>17</bf>, <bf>18</bf>, <bf>19</bf>, <bf>1e</bf>, <bf>1f</bf>, +<bf>20</bf>, <bf>21</bf>, <bf>22</bf>, <bf>23</bf>, <bf>25</bf>, +<bf>26</bf>, <bf>2f</bf>, <bf>30</bf>, <bf>32</bf>, <bf>56</bf>. +<p><it> +For completeness, the <bf>e0</bf> scancodes: +</it><p> +<bf>1c</bf>, <bf>2a</bf>, <bf>35</bf>, <bf>37</bf>, <bf>47</bf>, +<bf>48</bf>, <bf>49</bf>, <bf>4b</bf>, <bf>4d</bf>, <bf>4f</bf>, +<bf>50</bf>, <bf>51</bf>, <bf>52</bf>, <bf>53</bf>. +<p><it> +The <bf>e1</bf> scancode: <bf>1d</bf>. +As you can see, there is no overlap on this keyboard. +</it> + +<sect1>A keyboard<p> +<it>Three unusual power keys: <bf>e0</bf> <bf>5e</bf>, +<bf>e0</bf> <bf>5f</bf>, <bf>e0</bf> <bf>63</bf>.</it> + +<sect1>Microsoft Natural keyboard<p> +This keyboard has three additional keys, with escaped scancodes +<bf>e0</bf> <bf>5b</bf> (LeftWindow), +<bf>e0</bf> <bf>5c</bf> (RightWindow), +<bf>e0</bf> <bf>5d</bf> (Menu). + +<sect1>Microsoft Internet keyboard<p> +In addition to the three extra keys on the Microsoft Natural keyboard, +this keyboard has ten keys, with escaped scancodes +<bf>e0</bf> <bf>21</bf> (Calculator), +<bf>e0</bf> <bf>32</bf> (Web/Home), +<bf>e0</bf> <bf>5f</bf> (Sleep), +<bf>e0</bf> <bf>65</bf> (Search), +<bf>e0</bf> <bf>66</bf> (Favorites), +<bf>e0</bf> <bf>68</bf> (Stop), +<bf>e0</bf> <bf>69</bf> (Forward), +<bf>e0</bf> <bf>6a</bf> (Back), +<bf>e0</bf> <bf>6b</bf> (My Computer), +<bf>e0</bf> <bf>6c</bf> (Mail). + +<sect1>Logitech Internet keyboard<p> +Jonathan DeBoer <deboer@ugrad.cs.ualberta.ca> +reports Key-down and key-up scancodes for a Logitech Internet keyboard. +<p> 0xe0 0x7a 0xe0 0xfa +<p> 0xe0 0x32 0xe0 0xb2 +<p> 0xe0 0x21 0xe0 0xa1 +<p> 0xe0 0x23 0xe0 0xa3 +<p> 0x38 0x2a 0x0f 0x8f 0x8f 0xb8 0xaa +<p> 0xe0 0x17 0xe0 0x97 +<p> 0xe0 0x10 0xe0 0x90 +<p> 0xe0 0x22 0xe0 0xa2 +<p> 0xe0 0x24 0xe0 0xa4 +<p> 0xe0 0x19 0xe0 0x99 +<p> 0xe0 0x1e 0xe0 0x9e +<p> 0xe0 0x12 0xe0 0x92 +<p> 0xe0 0x26 0xe0 0xa6 +<p> 0xe0 0x18 0xe0 0x98 +<p> 0xe0 0x20 0xe0 0xa0 +<p> 0xe0 0x30 0xe0 0xb0 +<p> 0xe0 0x2e 0xe0 0xae +<p> 0xe0 0x25 0xe0 0xa5 +<p> (But I have no keycap information.) + +<sect1>A keyboard using e0 as ordinary scancode +<label id="e0_as_key"> +<p> +Benjamin Carter <bcarter@ultra5.cs.umr.edu> reports: +<p> +<it> +I recently came into possession of a 97-key keyboard with Japanese +markings on the keys. (The keys also have the standard +qwerty-characters on them, with the exception of some of the meta-keys +(there are 3 keys near the Alt keys on either side of the spacebar with +only Japanese characters on them so I don't know what they are). +In any case, the keyboard sends out scancodes that work for all the main +keys (backspace, letters and numbers, enter, shift), but the numeric +keypad, Alt keys, and function keys don't work. +I have run the board through <tt>showkey -s</tt>, so I know what +scancodes this keyboard sends out. +However, the F9 and F10 keys send out <bf>60</bf> and <bf>61</bf>, +respectively, so their key release events send out <bf>e0</bf> +and <bf>e1</bf>, confusing the keyboard driver. +</it> +<p> +# These are across the top of the keyboard. +<p> +<bf>58</bf> (F1), <bf>59</bf> (F2), <bf>5a</bf> (F3), +<bf>5b</bf> (F4), <bf>5c</bf> (F5), <bf>5d</bf> (F6), +<bf>5e</bf> (F7), <bf>5f</bf> (F8), <bf>60</bf> (F9), +<bf>61</bf> (F10), <bf>62</bf> (F11), <bf>63</bf> (F12) +<p> +<bf>76</bf> (Break), <bf>77</bf> (Setup). +<p> +# top row +<p> +<bf>64</bf> (Esc), +<bf>02</bf> (1), <bf>03</bf> (2), <bf>04</bf> (3), +<bf>05</bf> (4), <bf>06</bf> (5), <bf>07</bf> (6), +<bf>08</bf> (7), <bf>09</bf> (8), <bf>0a</bf> (9), +<bf>0b</bf> (0), <bf>0c</bf> (-), <bf>0d</bf> (=), +<bf>29</bf> (`), <bf>0e</bf> (Backspace) + +<p> +# 2nd row +<p> +<bf>0f</bf> (Tab), +<bf>10</bf> (Q), <bf>11</bf> (W), <bf>12</bf> (E), +<bf>13</bf> (R), <bf>14</bf> (T), <bf>15</bf> (Y), +<bf>16</bf> (U), <bf>17</bf> (I), <bf>18</bf> (O), +<bf>19</bf> (P), <bf>1a</bf> ([), <bf>1b</bf> (]), +<bf>79</bf> (Del), <bf>6e</bf> (Line Feed) + +<p> +# 3rd row +<p> +<bf>38</bf> (Ctrl), +<bf>1e</bf> (A), <bf>1f</bf> (S), <bf>20</bf> (D), +<bf>21</bf> (F), <bf>22</bf> (G), <bf>23</bf> (H), +<bf>24</bf> (J), <bf>25</bf> (K), <bf>26</bf> (L), +<bf>27</bf> (;), <bf>28</bf> ('), <bf>75</bf> (\), +<bf>1c</bf> (Return) + +<p> +# 4th row +<p> +<bf>2a</bf> (Shift_L), +<bf>2c</bf> (Z), <bf>2d</bf> (X), <bf>2e</bf> (C), +<bf>2f</bf> (V), <bf>30</bf> (B), <bf>31</bf> (N), +<bf>32</bf> (M), <bf>33</bf> (,), <bf>34</bf> (.), +<bf>35</bf> (/), +<bf>3a</bf> ((unknown)), +<bf>36</bf> (Shift_R) + +<p> +# bottom row +<p> +<bf>1d</bf> (Caps Lock), <bf>71</bf> (Alt_L), +<bf>01</bf> ((unknown)), +<bf>39</bf> (Space), +<bf>45</bf> ((unknown)), +<bf>72</bf> (Alt_R), +<bf>46</bf> ((unknown)) + +<p> +# numeric keypad. No "grey" section on the keyboard. +<p> +<bf>47</bf> (7), <bf>48</bf> (8), <bf>49</bf> (9), +<bf>54</bf> (Keypad -), +<bf>4b</bf> (4), <bf>4c</bf> (5), <bf>4d</bf> (6), +<bf>37</bf> (Keypad +), +<bf>4f</bf> (1), <bf>50</bf> (2), <bf>51</bf> (3), +<bf>4e</bf> (Keypad Enter), +<bf>52</bf> (0), +<bf>78</bf> (Up), +<bf>53</bf> (Keypad .), +<bf>56</bf> (Left), +<bf>55</bf> (Down), +<bf>7d</bf> (Right), +<bf>7e</bf> (Keypad ,). +<p> + +There are more keyboards that do not use <bf>e0</bf> as escape code. +For example, Paul Schulz <pauls@caemrad.com.au> +reports the same for Sun Type 5 Keyboard with PS/2 connector, +NCD model N-123NA. A kernel patch is required for such keyboards. + + +<sect1>IBM ThinkPad<p> +George Staikos <staikos@0wned.org> writes: +<p><it> +I have an IBM ThinkPad i1460. It has the IBM EasyLaunch<tm> keys. +These are four multicoloured keys up at the top of the keyboard +for "Home Page", "Search", "Shop", "Mail". They dont' seem to create +any keyboard events at all. The keyboard interrupt doesn't trigger, +<tt>showkeys</tt> doesn't see them do anything, and in DOS, a simple +sequence of BIOS calls doesn't see them either. +Also, being a laptop, it has an FN key. This key generates <bf>55</bf>. +</it> + +<sect1>Keyboards with many keys<p> +The current mechanism is unable to handle keyboards with more than +127 keys. But such keyboards seem to exist. (So far, nobody has +reported `I have one', but there are several reports saying +`I have heard about someone who has one'.) + +Mark Hatle <fray@kernel.crashing.org> wrote: +<p> +<it> +On some ADB keyboards there are actually 128 distinct keys. +They use scancodes 0-127. +</it><p><it> +ADB is Apple Desktop Bus. The way that ADB works is similar to SCSI but +on a much slower level. Specifically there is a communications chip in +the computer, ADB controller, and the same chip in the keyboard. The +keyboard sends the scancode to its internal ADB controller, the internal +ADB controller then does any key mapping needed (not used under linux +from my understanding) and passes the data to the computer. +</it><p><it> +The ADB controller is capable of sending 256 distinct keys, but to my +knowledge only 128 are sent. The key 0 is the 'a' and key 127 is the +"power button". +</it><p><it> +Also some of the Apple ADB keyboards have special "sound" and "function" +keys. These keys (used in MacOS for volume up and down, screen contrast +changing, etc) also show up on the ADB scancodes. +</it><p><it> +ADB is used for both m68k and PPC Linux. The m68k Macintosh port, and +the PPC - Power Macintosh and CHRP ports. +</it><p> +and later: +<p><it> +Basically the scancode sequences for ADB are 16 bit. so there can actually +be 65536 scancodes, currently though only 128 are defined. +</it> + +<sect>Reporting<p> +Additions and corrections are welcome. +Use <tt>showkey -s</tt> to get the scancodes. +Mention keyboard manufacturer and type, and the keycaps. +<p> +Andries Brouwer - <tt/aeb@cwi.nl/ + +</article> diff --git a/man/man1/psfaddtable.1 b/man/man1/psfaddtable.1 index 7ff36f6..e2f7637 100644 --- a/man/man1/psfaddtable.1 +++ b/man/man1/psfaddtable.1 @@ -43,6 +43,5 @@ It is permissible to have multiple lines for the same glyph. .SH "SEE ALSO" .BR setfont (8), .BR psfgettable (1), -.BR psfstriptable (1) - - +.BR psfstriptable (1), +.BR psfxtable (1) \ No newline at end of file diff --git a/man/man1/psfgettable.1 b/man/man1/psfgettable.1 index 702f2e3..228be18 100644 --- a/man/man1/psfgettable.1 +++ b/man/man1/psfgettable.1 @@ -18,6 +18,5 @@ standard input. .SH "SEE ALSO" .BR setfont (8), .BR psfaddtable (1), -.BR psfstriptable (1) - - +.BR psfstriptable (1), +.BR psfxtable (1) diff --git a/man/man1/psfstriptable.1 b/man/man1/psfstriptable.1 index ffb81e4..f7e059d 100644 --- a/man/man1/psfstriptable.1 +++ b/man/man1/psfstriptable.1 @@ -19,6 +19,5 @@ and an output file name of "\-" denotes standard output. .SH "SEE ALSO" .BR setfont (8), .BR psfaddtable (1), -.BR psfgettable (1) - - +.BR psfgettable (1), +.BR psfxtable (1) diff --git a/man/man1/psfxtable.1 b/man/man1/psfxtable.1 new file mode 100644 index 0000000..adc3bc9 --- /dev/null +++ b/man/man1/psfxtable.1 @@ -0,0 +1,55 @@ +.\" @(#)psfxtable.1 +.TH PSFXTABLE 1 "9 Dec 1999" +.SH NAME +psfxtable \- handle Unicode character tables for console fonts +.SH SYNOPSIS +.B psfxtable +.RB [ \-i +.IR infont ] +.RB [ \-o +.IR outfont ] +.RB [ \-it +.IR intable ] +.RB [ \-ot +.IR outtable ] +.RB [ \-nt ] +.SH DESCRIPTION +.IX "psfxtable command" "" "\fLpsfxtable\fR command" +.LP +.B psfxtable +handles the embedded Unicode character table for .psf format +console fonts. It reads a font and possibly a table +and writes a font and/or a table. +.BR psfaddtable (1), +.BR psfgettable (1) +and +.BR psfstriptable (1) +are links to it. + +Each of the filenames +.IR infont , +.IR outfont , +.IR intable , +and +.IR outtable +may be replaced by a single dash (\-), in which case +standard input or standard output is used. +If no \-i option is given, the font is read from standard input. +If no \-it or \-o or \-ot option is given, +no input table is read or no output font or output table is written. + +By default the output font (if any) will have a Unicode table +when either the input font has one, or an explicit table +(which overrides an input font table) has been provided. +The option \-nt causes output of a font without table. +When +.I outfont +is requested it will get a psf1 header when infont has +a psf1 header and +.I intable +does not have sequences and a psf2 header otherwise. +.SH "SEE ALSO" +.BR setfont (8), +.BR psfaddtable (1), +.BR psfgettable (1), +.BR psfstriptable (1) diff --git a/src/paths.h b/src/paths.h index 1c8e6f7..9c15303 100644 --- a/src/paths.h +++ b/src/paths.h @@ -15,7 +15,7 @@ /* * Default keymap, and where the kernel copy of it lives. */ -#ifdef sparc +#ifdef __sparc__ # define DEFMAP "sunkeymap.map" # define KERNDIR "/usr/src/linux/drivers/sbus/char" #else diff --git a/src/psffontop.c b/src/psffontop.c index def2333..8df477e 100644 --- a/src/psffontop.c +++ b/src/psffontop.c @@ -98,7 +98,13 @@ assemble_utf8(char **inptr, int cnt) { *inptr = in; return uc; } - + +static void +clear_uni_entry(struct unicode_list *up) { + up->next = NULL; + up->seq = NULL; + up->prev = up; +} /* * Read description of a single font position. @@ -277,15 +283,18 @@ readpsffont(FILE *fontf, char **allbufp, int *allszp, if (fontlenp) *fontlenp = fontlen; - if (hastable && uclistheadsp) { + if (!uclistheadsp) + return 0; /* got font, don't need unicode_list */ + + *uclistheadsp = xrealloc(*uclistheadsp, + (fontpos0+fontlen)*sizeof(struct unicode_list)); + + if (hastable) { char *inptr, *endptr; inptr = inputbuf + ftoffset + fontlen * charsize; endptr = inputbuf + inputlth; - *uclistheadsp = xrealloc(*uclistheadsp, - (fontpos0+fontlen)*sizeof(struct unicode_list)); - for (i=0; i<fontlen; i++) { k = fontpos0 + i; get_uni_entry(&inptr, &endptr, @@ -296,6 +305,11 @@ readpsffont(FILE *fontf, char **allbufp, int *allszp, fprintf(stderr, u, progname); exit(EX_DATAERR); } + } else { + for (i=0; i<fontlen; i++) { + k = fontpos0 + i; + clear_uni_entry(&(*uclistheadsp)[k]); + } } return 0; /* got psf font */ diff --git a/src/psfxtable.c b/src/psfxtable.c index f151937..95069ea 100644 --- a/src/psfxtable.c +++ b/src/psfxtable.c @@ -278,9 +278,11 @@ main(int argc, char **argv) { notable = 1; } else { for (i = 1; i < argc; i ++) { - if (!strcmp(argv[i], "-i") && i < argc-1) + if ((!strcmp(argv[i], "-i") || !strcmp(argv[i], "-if")) + && i < argc-1) ifname = argv[++i]; - else if(!strcmp(argv[i], "-o") && i < argc-1) + else if((!strcmp(argv[i],"-o")||!strcmp(argv[i],"-of")) + && i < argc-1) ofname = argv[++i]; else if(!strcmp(argv[i], "-it") && i < argc-1) itname = argv[++i]; diff --git a/src/setfont.c b/src/setfont.c index da09a63..eeb6b48 100644 --- a/src/setfont.c +++ b/src/setfont.c @@ -232,11 +232,15 @@ static int erase_mode = 1; static void do_loadfont(int fd, char *inbuf, int unit, int hwunit, int fontsize, char *pathname) { - char buf[16384]; - int i; + char *buf; + int i, buflen; int bad_video_erase_char = 0; - memset(buf,0,sizeof(buf)); + buflen = 32*fontsize; + if (buflen < 32*128) /* below we access position 32 */ + buflen = 32*128; /* so need at least 32*33 */ + buf = xmalloc(buflen); + memset(buf,0,buflen); if (unit < 1 || unit > 32) { fprintf(stderr, _("Bad character size %d\n"), unit); @@ -423,8 +427,8 @@ loadnewfonts(int fd, char **ifiles, int ifilct, memcpy(bigfontbuf+bigfontbuflth-fontbuflth, fontbuf, fontbuflth); } - do_loadfont(fd, bigfontbuf, bigunit, hwunit, bigfontsize, NULL); + if (uclistheads && !no_u) do_loadtable(fd, uclistheads, bigfontsize); } diff --git a/src/version.h b/src/version.h index ad20316..7f432a6 100644 --- a/src/version.h +++ b/src/version.h @@ -1,6 +1,6 @@ #include <string.h> -#define VERSION "1.00" +#define VERSION "1.02" char *progname; -- 2.7.4