Current Dir: /usr/bin/
[DIR] X11 [ delete | rename ]
[FILE] 7z [ edit | delete | rename ]
[FILE] 7za [ edit | delete | rename ]
[FILE] 7zr [ edit | delete | rename ]
[FILE] 411toppm [ edit | delete | rename ]
[FILE] aa-enabled [ edit | delete | rename ]
[FILE] aa-exec [ edit | delete | rename ]
[FILE] aa-features-abi [ edit | delete | rename ]
[FILE] ab [ edit | delete | rename ]
[FILE] aclocal [ edit | delete | rename ]
[FILE] aclocal-1.16 [ edit | delete | rename ]
[FILE] acpidbg [ edit | delete | rename ]
[FILE] add-apt-repository [ edit | delete | rename ]
[FILE] addpart [ edit | delete | rename ]
[FILE] addr2line [ edit | delete | rename ]
[FILE] animate [ edit | delete | rename ]
[FILE] animate-im6 [ edit | delete | rename ]
[FILE] animate-im6.q16 [ edit | delete | rename ]
[FILE] anytopnm [ edit | delete | rename ]
[FILE] apport-bug [ edit | delete | rename ]
[FILE] apport-cli [ edit | delete | rename ]
[FILE] apport-collect [ edit | delete | rename ]
[FILE] apport-unpack [ edit | delete | rename ]
[FILE] appstreamcli [ edit | delete | rename ]
[FILE] apropos [ edit | delete | rename ]
[FILE] apt [ edit | delete | rename ]
[FILE] apt-add-repository [ edit | delete | rename ]
[FILE] apt-cache [ edit | delete | rename ]
[FILE] apt-cdrom [ edit | delete | rename ]
[FILE] apt-config [ edit | delete | rename ]
[FILE] apt-extracttemplates [ edit | delete | rename ]
[FILE] apt-ftparchive [ edit | delete | rename ]
[FILE] apt-get [ edit | delete | rename ]
[FILE] apt-key [ edit | delete | rename ]
[FILE] apt-mark [ edit | delete | rename ]
[FILE] apt-sortpkgs [ edit | delete | rename ]
[FILE] ar [ edit | delete | rename ]
[FILE] arch [ edit | delete | rename ]
[FILE] as [ edit | delete | rename ]
[FILE] asciitopgm [ edit | delete | rename ]
[FILE] atktopbm [ edit | delete | rename ]
[FILE] autoconf [ edit | delete | rename ]
[FILE] autoheader [ edit | delete | rename ]
[FILE] autom4te [ edit | delete | rename ]
[FILE] automake [ edit | delete | rename ]
[FILE] automake-1.16 [ edit | delete | rename ]
[FILE] automat-visualize3 [ edit | delete | rename ]
[FILE] autoreconf [ edit | delete | rename ]
[FILE] autoscan [ edit | delete | rename ]
[FILE] autoupdate [ edit | delete | rename ]
[FILE] avstopam [ edit | delete | rename ]
[FILE] awk [ edit | delete | rename ]
[FILE] b2sum [ edit | delete | rename ]
[FILE] base32 [ edit | delete | rename ]
[FILE] base64 [ edit | delete | rename ]
[FILE] basename [ edit | delete | rename ]
[FILE] basenc [ edit | delete | rename ]
[FILE] bash [ edit | delete | rename ]
[FILE] bashbug [ edit | delete | rename ]
[FILE] bc [ edit | delete | rename ]
[FILE] bdftopcf [ edit | delete | rename ]
[FILE] bdftruncate [ edit | delete | rename ]
[FILE] bioradtopgm [ edit | delete | rename ]
[FILE] bison [ edit | delete | rename ]
[FILE] bison.yacc [ edit | delete | rename ]
[FILE] bmptopnm [ edit | delete | rename ]
[FILE] bmptoppm [ edit | delete | rename ]
[FILE] boltctl [ edit | delete | rename ]
[FILE] bpftrace [ edit | delete | rename ]
[FILE] bpftrace-aotrt [ edit | delete | rename ]
[FILE] broadwayd [ edit | delete | rename ]
[FILE] brushtopbm [ edit | delete | rename ]
[FILE] btrfs [ edit | delete | rename ]
[FILE] btrfs-convert [ edit | delete | rename ]
[FILE] btrfs-find-root [ edit | delete | rename ]
[FILE] btrfs-image [ edit | delete | rename ]
[FILE] btrfs-map-logical [ edit | delete | rename ]
[FILE] btrfs-select-super [ edit | delete | rename ]
[FILE] btrfsck [ edit | delete | rename ]
[FILE] btrfstune [ edit | delete | rename ]
[FILE] bunzip2 [ edit | delete | rename ]
[FILE] busctl [ edit | delete | rename ]
[FILE] busybox [ edit | delete | rename ]
[FILE] byobu [ edit | delete | rename ]
[FILE] byobu-config [ edit | delete | rename ]
[FILE] byobu-ctrl-a [ edit | delete | rename ]
[FILE] byobu-disable [ edit | delete | rename ]
[FILE] byobu-disable-prompt [ edit | delete | rename ]
[FILE] byobu-enable [ edit | delete | rename ]
[FILE] byobu-enable-prompt [ edit | delete | rename ]
[FILE] byobu-export [ edit | delete | rename ]
[FILE] byobu-janitor [ edit | delete | rename ]
[FILE] byobu-keybindings [ edit | delete | rename ]
[FILE] byobu-launch [ edit | delete | rename ]
[FILE] byobu-launcher [ edit | delete | rename ]
[FILE] byobu-launcher-install [ edit | delete | rename ]
[FILE] byobu-launcher-uninstall [ edit | delete | rename ]
[FILE] byobu-layout [ edit | delete | rename ]
[FILE] byobu-prompt [ edit | delete | rename ]
[FILE] byobu-quiet [ edit | delete | rename ]
[FILE] byobu-reconnect-sockets [ edit | delete | rename ]
[FILE] byobu-screen [ edit | delete | rename ]
[FILE] byobu-select-backend [ edit | delete | rename ]
[FILE] byobu-select-profile [ edit | delete | rename ]
[FILE] byobu-select-session [ edit | delete | rename ]
[FILE] byobu-shell [ edit | delete | rename ]
[FILE] byobu-silent [ edit | delete | rename ]
[FILE] byobu-status [ edit | delete | rename ]
[FILE] byobu-status-detail [ edit | delete | rename ]
[FILE] byobu-tmux [ edit | delete | rename ]
[FILE] byobu-ugraph [ edit | delete | rename ]
[FILE] byobu-ulevel [ edit | delete | rename ]
[FILE] bzcat [ edit | delete | rename ]
[FILE] bzcmp [ edit | delete | rename ]
[FILE] bzdiff [ edit | delete | rename ]
[FILE] bzegrep [ edit | delete | rename ]
[FILE] bzexe [ edit | delete | rename ]
[FILE] bzfgrep [ edit | delete | rename ]
[FILE] bzgrep [ edit | delete | rename ]
[FILE] bzip2 [ edit | delete | rename ]
[FILE] bzip2recover [ edit | delete | rename ]
[FILE] bzless [ edit | delete | rename ]
[FILE] bzmore [ edit | delete | rename ]
[FILE] c++ [ edit | delete | rename ]
[FILE] c++filt [ edit | delete | rename ]
[FILE] c89 [ edit | delete | rename ]
[FILE] c89-gcc [ edit | delete | rename ]
[FILE] c99 [ edit | delete | rename ]
[FILE] c99-gcc [ edit | delete | rename ]
[FILE] cameratopam [ edit | delete | rename ]
[FILE] captoinfo [ edit | delete | rename ]
[FILE] cat [ edit | delete | rename ]
[FILE] catman [ edit | delete | rename ]
[FILE] cautious-launcher [ edit | delete | rename ]
[FILE] cc [ edit | delete | rename ]
[FILE] certbot [ edit | delete | rename ]
[FILE] cftp3 [ edit | delete | rename ]
[FILE] cgi-fcgi [ edit | delete | rename ]
[FILE] chage [ edit | delete | rename ]
[FILE] chardet [ edit | delete | rename ]
[FILE] chardetect [ edit | delete | rename ]
[FILE] chattr [ edit | delete | rename ]
[FILE] chcon [ edit | delete | rename ]
[FILE] checkgid [ edit | delete | rename ]
[FILE] chfn [ edit | delete | rename ]
[FILE] chgrp [ edit | delete | rename ]
[FILE] chmod [ edit | delete | rename ]
[FILE] choom [ edit | delete | rename ]
[FILE] chown [ edit | delete | rename ]
[FILE] chrt [ edit | delete | rename ]
[FILE] chsh [ edit | delete | rename ]
[FILE] chvt [ edit | delete | rename ]
[FILE] cifsiostat [ edit | delete | rename ]
[FILE] cistopbm [ edit | delete | rename ]
[FILE] ckbcomp [ edit | delete | rename ]
[FILE] ckeygen3 [ edit | delete | rename ]
[FILE] cksum [ edit | delete | rename ]
[FILE] clambc [ edit | delete | rename ]
[FILE] clamscan [ edit | delete | rename ]
[FILE] clamsubmit [ edit | delete | rename ]
[FILE] clear [ edit | delete | rename ]
[FILE] clear_console [ edit | delete | rename ]
[FILE] cloud-id [ edit | delete | rename ]
[FILE] cloud-init [ edit | delete | rename ]
[FILE] cloud-init-per [ edit | delete | rename ]
[FILE] clusterdb [ edit | delete | rename ]
[FILE] cmake [ edit | delete | rename ]
[FILE] cmp [ edit | delete | rename ]
[FILE] cmuwmtopbm [ edit | delete | rename ]
[FILE] codepage [ edit | delete | rename ]
[FILE] col [ edit | delete | rename ]
[FILE] col1 [ edit | delete | rename ]
[FILE] col2 [ edit | delete | rename ]
[FILE] col3 [ edit | delete | rename ]
[FILE] col4 [ edit | delete | rename ]
[FILE] col5 [ edit | delete | rename ]
[FILE] col6 [ edit | delete | rename ]
[FILE] col7 [ edit | delete | rename ]
[FILE] col8 [ edit | delete | rename ]
[FILE] col9 [ edit | delete | rename ]
[FILE] colcrt [ edit | delete | rename ]
[FILE] colrm [ edit | delete | rename ]
[FILE] column [ edit | delete | rename ]
[FILE] comm [ edit | delete | rename ]
[FILE] compare [ edit | delete | rename ]
[FILE] compare-im6 [ edit | delete | rename ]
[FILE] compare-im6.q16 [ edit | delete | rename ]
[FILE] compile_et [ edit | delete | rename ]
[FILE] compose [ edit | delete | rename ]
[FILE] composite [ edit | delete | rename ]
[FILE] composite-im6 [ edit | delete | rename ]
[FILE] composite-im6.q16 [ edit | delete | rename ]
[FILE] conch3 [ edit | delete | rename ]
[FILE] conjure [ edit | delete | rename ]
[FILE] conjure-im6 [ edit | delete | rename ]
[FILE] conjure-im6.q16 [ edit | delete | rename ]
[FILE] convert [ edit | delete | rename ]
[FILE] convert-im6 [ edit | delete | rename ]
[FILE] convert-im6.q16 [ edit | delete | rename ]
[FILE] corelist [ edit | delete | rename ]
[FILE] corepack [ edit | delete | rename ]
[FILE] cp [ edit | delete | rename ]
[FILE] cpack [ edit | delete | rename ]
[FILE] cpan [ edit | delete | rename ]
[FILE] cpan5.38-x86_64-linux-gnu [ edit | delete | rename ]
[FILE] cpio [ edit | delete | rename ]
[FILE] cpp [ edit | delete | rename ]
[FILE] cpp-13 [ edit | delete | rename ]
[FILE] cpupower [ edit | delete | rename ]
[FILE] createdb [ edit | delete | rename ]
[FILE] createlang [ edit | delete | rename ]
[FILE] createuser [ edit | delete | rename ]
[FILE] crontab [ edit | delete | rename ]
[FILE] csplit [ edit | delete | rename ]
[FILE] ctail [ edit | delete | rename ]
[FILE] ctest [ edit | delete | rename ]
[FILE] ctstat [ edit | delete | rename ]
[FILE] curl [ edit | delete | rename ]
[FILE] cut [ edit | delete | rename ]
[FILE] cvtsudoers [ edit | delete | rename ]
[FILE] c_rehash [ edit | delete | rename ]
[FILE] dash [ edit | delete | rename ]
[FILE] date [ edit | delete | rename ]
[FILE] dbus-cleanup-sockets [ edit | delete | rename ]
[FILE] dbus-daemon [ edit | delete | rename ]
[FILE] dbus-monitor [ edit | delete | rename ]
[FILE] dbus-run-session [ edit | delete | rename ]
[FILE] dbus-send [ edit | delete | rename ]
[FILE] dbus-update-activation-environment [ edit | delete | rename ]
[FILE] dbus-uuidgen [ edit | delete | rename ]
[FILE] dbxtool [ edit | delete | rename ]
[FILE] dd [ edit | delete | rename ]
[FILE] ddbugtopbm [ edit | delete | rename ]
[FILE] deallocvt [ edit | delete | rename ]
[FILE] deb-systemd-helper [ edit | delete | rename ]
[FILE] deb-systemd-invoke [ edit | delete | rename ]
[FILE] debconf [ edit | delete | rename ]
[FILE] debconf-apt-progress [ edit | delete | rename ]
[FILE] debconf-communicate [ edit | delete | rename ]
[FILE] debconf-copydb [ edit | delete | rename ]
[FILE] debconf-escape [ edit | delete | rename ]
[FILE] debconf-set-selections [ edit | delete | rename ]
[FILE] debconf-show [ edit | delete | rename ]
[FILE] debian-distro-info [ edit | delete | rename ]
[FILE] decodemail [ edit | delete | rename ]
[FILE] delpart [ edit | delete | rename ]
[FILE] delv [ edit | delete | rename ]
[FILE] derb [ edit | delete | rename ]
[FILE] df [ edit | delete | rename ]
[FILE] dh_autotools-dev_restoreconfig [ edit | delete | rename ]
[FILE] dh_autotools-dev_updateconfig [ edit | delete | rename ]
[FILE] dh_bash-completion [ edit | delete | rename ]
[FILE] dh_installxmlcatalogs [ edit | delete | rename ]
[FILE] dh_perl_openssl [ edit | delete | rename ]
[FILE] diff [ edit | delete | rename ]
[FILE] diff3 [ edit | delete | rename ]
[FILE] dig [ edit | delete | rename ]
[FILE] dir [ edit | delete | rename ]
[FILE] dircolors [ edit | delete | rename ]
[FILE] dirmngr [ edit | delete | rename ]
[FILE] dirmngr-client [ edit | delete | rename ]
[FILE] dirname [ edit | delete | rename ]
[FILE] display [ edit | delete | rename ]
[FILE] display-im6 [ edit | delete | rename ]
[FILE] display-im6.q16 [ edit | delete | rename ]
[FILE] distro-info [ edit | delete | rename ]
[FILE] dmesg [ edit | delete | rename ]
[FILE] dnsdomainname [ edit | delete | rename ]
[FILE] do-release-upgrade [ edit | delete | rename ]
[FILE] domainname [ edit | delete | rename ]
[FILE] dotlock [ edit | delete | rename ]
[FILE] dotlock.mailutils [ edit | delete | rename ]
[FILE] dpkg [ edit | delete | rename ]
[FILE] dpkg-architecture [ edit | delete | rename ]
[FILE] dpkg-buildapi [ edit | delete | rename ]
[FILE] dpkg-buildflags [ edit | delete | rename ]
[FILE] dpkg-buildpackage [ edit | delete | rename ]
[FILE] dpkg-buildtree [ edit | delete | rename ]
[FILE] dpkg-checkbuilddeps [ edit | delete | rename ]
[FILE] dpkg-deb [ edit | delete | rename ]
[FILE] dpkg-distaddfile [ edit | delete | rename ]
[FILE] dpkg-divert [ edit | delete | rename ]
[FILE] dpkg-genbuildinfo [ edit | delete | rename ]
[FILE] dpkg-genchanges [ edit | delete | rename ]
[FILE] dpkg-gencontrol [ edit | delete | rename ]
[FILE] dpkg-gensymbols [ edit | delete | rename ]
[FILE] dpkg-maintscript-helper [ edit | delete | rename ]
[FILE] dpkg-mergechangelogs [ edit | delete | rename ]
[FILE] dpkg-name [ edit | delete | rename ]
[FILE] dpkg-parsechangelog [ edit | delete | rename ]
[FILE] dpkg-query [ edit | delete | rename ]
[FILE] dpkg-realpath [ edit | delete | rename ]
[FILE] dpkg-scanpackages [ edit | delete | rename ]
[FILE] dpkg-scansources [ edit | delete | rename ]
[FILE] dpkg-shlibdeps [ edit | delete | rename ]
[FILE] dpkg-source [ edit | delete | rename ]
[FILE] dpkg-split [ edit | delete | rename ]
[FILE] dpkg-statoverride [ edit | delete | rename ]
[FILE] dpkg-trigger [ edit | delete | rename ]
[FILE] dpkg-vendor [ edit | delete | rename ]
[FILE] dropdb [ edit | delete | rename ]
[FILE] droplang [ edit | delete | rename ]
[FILE] dropuser [ edit | delete | rename ]
[FILE] du [ edit | delete | rename ]
[FILE] dumpkeys [ edit | delete | rename ]
[FILE] dvipdf [ edit | delete | rename ]
[FILE] dwp [ edit | delete | rename ]
[FILE] eatmydata [ edit | delete | rename ]
[FILE] ec2metadata [ edit | delete | rename ]
[FILE] echo [ edit | delete | rename ]
[FILE] ed [ edit | delete | rename ]
[FILE] edit [ edit | delete | rename ]
[FILE] editor [ edit | delete | rename ]
[FILE] efibootdump [ edit | delete | rename ]
[FILE] efibootmgr [ edit | delete | rename ]
[FILE] egrep [ edit | delete | rename ]
[FILE] eject [ edit | delete | rename ]
[FILE] elfedit [ edit | delete | rename ]
[FILE] enc2xs [ edit | delete | rename ]
[FILE] encguess [ edit | delete | rename ]
[FILE] env [ edit | delete | rename ]
[FILE] envsubst [ edit | delete | rename ]
[FILE] eps2eps [ edit | delete | rename ]
[FILE] eqn [ edit | delete | rename ]
[FILE] escp2topbm [ edit | delete | rename ]
[FILE] ex [ edit | delete | rename ]
[FILE] expand [ edit | delete | rename ]
[FILE] expiry [ edit | delete | rename ]
[FILE] expr [ edit | delete | rename ]
[FILE] eyuvtoppm [ edit | delete | rename ]
[FILE] factor [ edit | delete | rename ]
[FILE] fail2ban-client [ edit | delete | rename ]
[FILE] fail2ban-python [ edit | delete | rename ]
[FILE] fail2ban-regex [ edit | delete | rename ]
[FILE] fail2ban-server [ edit | delete | rename ]
[FILE] fail2ban-testcases [ edit | delete | rename ]
[FILE] faillog [ edit | delete | rename ]
[FILE] faked-sysv [ edit | delete | rename ]
[FILE] faked-tcp [ edit | delete | rename ]
[FILE] fakeroot [ edit | delete | rename ]
[FILE] fakeroot-sysv [ edit | delete | rename ]
[FILE] fakeroot-tcp [ edit | delete | rename ]
[FILE] fallocate [ edit | delete | rename ]
[FILE] false [ edit | delete | rename ]
[FILE] fc-cache [ edit | delete | rename ]
[FILE] fc-cat [ edit | delete | rename ]
[FILE] fc-conflist [ edit | delete | rename ]
[FILE] fc-list [ edit | delete | rename ]
[FILE] fc-match [ edit | delete | rename ]
[FILE] fc-pattern [ edit | delete | rename ]
[FILE] fc-query [ edit | delete | rename ]
[FILE] fc-scan [ edit | delete | rename ]
[FILE] fc-validate [ edit | delete | rename ]
[FILE] fcgistarter [ edit | delete | rename ]
[FILE] ffmpeg [ edit | delete | rename ]
[FILE] ffplay [ edit | delete | rename ]
[FILE] ffprobe [ edit | delete | rename ]
[FILE] fgconsole [ edit | delete | rename ]
[FILE] fgrep [ edit | delete | rename ]
[FILE] fiascotopnm [ edit | delete | rename ]
[FILE] file [ edit | delete | rename ]
[FILE] finalrd [ edit | delete | rename ]
[FILE] find [ edit | delete | rename ]
[FILE] findmnt [ edit | delete | rename ]
[FILE] finger [ edit | delete | rename ]
[FILE] fitstopnm [ edit | delete | rename ]
[FILE] flock [ edit | delete | rename ]
[FILE] fmt [ edit | delete | rename ]
[FILE] fold [ edit | delete | rename ]
[FILE] fonttosfnt [ edit | delete | rename ]
[FILE] free [ edit | delete | rename ]
[FILE] freshclam [ edit | delete | rename ]
[FILE] frm [ edit | delete | rename ]
[FILE] frm.mailutils [ edit | delete | rename ]
[FILE] from [ edit | delete | rename ]
[FILE] from.mailutils [ edit | delete | rename ]
[FILE] fstopgm [ edit | delete | rename ]
[FILE] ftp [ edit | delete | rename ]
[FILE] funzip [ edit | delete | rename ]
[FILE] fuser [ edit | delete | rename ]
[FILE] fusermount [ edit | delete | rename ]
[FILE] fusermount3 [ edit | delete | rename ]
[FILE] fwupdmgr [ edit | delete | rename ]
[FILE] fwupdtool [ edit | delete | rename ]
[FILE] g++ [ edit | delete | rename ]
[FILE] g++-13 [ edit | delete | rename ]
[FILE] g3topbm [ edit | delete | rename ]
[FILE] gapplication [ edit | delete | rename ]
[FILE] gawk [ edit | delete | rename ]
[FILE] gawkbug [ edit | delete | rename ]
[FILE] gcc [ edit | delete | rename ]
[FILE] gcc-13 [ edit | delete | rename ]
[FILE] gcc-ar [ edit | delete | rename ]
[FILE] gcc-ar-13 [ edit | delete | rename ]
[FILE] gcc-nm [ edit | delete | rename ]
[FILE] gcc-nm-13 [ edit | delete | rename ]
[FILE] gcc-ranlib [ edit | delete | rename ]
[FILE] gcc-ranlib-13 [ edit | delete | rename ]
[FILE] gcov [ edit | delete | rename ]
[FILE] gcov-13 [ edit | delete | rename ]
[FILE] gcov-dump [ edit | delete | rename ]
[FILE] gcov-dump-13 [ edit | delete | rename ]
[FILE] gcov-tool [ edit | delete | rename ]
[FILE] gcov-tool-13 [ edit | delete | rename ]
[FILE] gdbus [ edit | delete | rename ]
[FILE] gdk-pixbuf-csource [ edit | delete | rename ]
[FILE] gdk-pixbuf-pixdata [ edit | delete | rename ]
[FILE] gdk-pixbuf-thumbnailer [ edit | delete | rename ]
[FILE] gemtopbm [ edit | delete | rename ]
[FILE] gemtopnm [ edit | delete | rename ]
[FILE] genbrk [ edit | delete | rename ]
[FILE] gencat [ edit | delete | rename ]
[FILE] gencfu [ edit | delete | rename ]
[FILE] gencnval [ edit | delete | rename ]
[FILE] gendict [ edit | delete | rename ]
[FILE] genrb [ edit | delete | rename ]
[FILE] geqn [ edit | delete | rename ]
[FILE] getconf [ edit | delete | rename ]
[FILE] getent [ edit | delete | rename ]
[FILE] getkeycodes [ edit | delete | rename ]
[FILE] getopt [ edit | delete | rename ]
[FILE] gettext [ edit | delete | rename ]
[FILE] gettext.sh [ edit | delete | rename ]
[FILE] ghostscript [ edit | delete | rename ]
[FILE] giftopnm [ edit | delete | rename ]
[FILE] ginstall-info [ edit | delete | rename ]
[FILE] gio [ edit | delete | rename ]
[FILE] gio-querymodules [ edit | delete | rename ]
[FILE] git [ edit | delete | rename ]
[FILE] git-receive-pack [ edit | delete | rename ]
[FILE] git-shell [ edit | delete | rename ]
[FILE] git-upload-archive [ edit | delete | rename ]
[FILE] git-upload-pack [ edit | delete | rename ]
[FILE] glib-compile-schemas [ edit | delete | rename ]
[FILE] gmake [ edit | delete | rename ]
[FILE] gold [ edit | delete | rename ]
[FILE] gouldtoppm [ edit | delete | rename ]
[FILE] gp-archive [ edit | delete | rename ]
[FILE] gp-collect-app [ edit | delete | rename ]
[FILE] gp-display-html [ edit | delete | rename ]
[FILE] gp-display-src [ edit | delete | rename ]
[FILE] gp-display-text [ edit | delete | rename ]
[FILE] gpasswd [ edit | delete | rename ]
[FILE] gpg [ edit | delete | rename ]
[FILE] gpg-agent [ edit | delete | rename ]
[FILE] gpg-connect-agent [ edit | delete | rename ]
[FILE] gpg-wks-client [ edit | delete | rename ]
[FILE] gpgconf [ edit | delete | rename ]
[FILE] gpgparsemail [ edit | delete | rename ]
[FILE] gpgsm [ edit | delete | rename ]
[FILE] gpgsplit [ edit | delete | rename ]
[FILE] gpgtar [ edit | delete | rename ]
[FILE] gpgv [ edit | delete | rename ]
[FILE] gpic [ edit | delete | rename ]
[FILE] gprof [ edit | delete | rename ]
[FILE] gprofng [ edit | delete | rename ]
[FILE] grep [ edit | delete | rename ]
[FILE] gresource [ edit | delete | rename ]
[FILE] groff [ edit | delete | rename ]
[FILE] grog [ edit | delete | rename ]
[FILE] grops [ edit | delete | rename ]
[FILE] grotty [ edit | delete | rename ]
[FILE] groups [ edit | delete | rename ]
[FILE] growpart [ edit | delete | rename ]
[FILE] grub-editenv [ edit | delete | rename ]
[FILE] grub-file [ edit | delete | rename ]
[FILE] grub-fstest [ edit | delete | rename ]
[FILE] grub-glue-efi [ edit | delete | rename ]
[FILE] grub-kbdcomp [ edit | delete | rename ]
[FILE] grub-menulst2cfg [ edit | delete | rename ]
[FILE] grub-mkfont [ edit | delete | rename ]
[FILE] grub-mkimage [ edit | delete | rename ]
[FILE] grub-mklayout [ edit | delete | rename ]
[FILE] grub-mknetdir [ edit | delete | rename ]
[FILE] grub-mkpasswd-pbkdf2 [ edit | delete | rename ]
[FILE] grub-mkrelpath [ edit | delete | rename ]
[FILE] grub-mkrescue [ edit | delete | rename ]
[FILE] grub-mkstandalone [ edit | delete | rename ]
[FILE] grub-mount [ edit | delete | rename ]
[FILE] grub-ntldr-img [ edit | delete | rename ]
[FILE] grub-render-label [ edit | delete | rename ]
[FILE] grub-script-check [ edit | delete | rename ]
[FILE] grub-syslinux2cfg [ edit | delete | rename ]
[FILE] gs [ edit | delete | rename ]
[FILE] gsbj [ edit | delete | rename ]
[FILE] gsdj [ edit | delete | rename ]
[FILE] gsdj500 [ edit | delete | rename ]
[FILE] gsettings [ edit | delete | rename ]
[FILE] gslj [ edit | delete | rename ]
[FILE] gslp [ edit | delete | rename ]
[FILE] gsnd [ edit | delete | rename ]
[FILE] gtbl [ edit | delete | rename ]
[FILE] gtk-builder-tool [ edit | delete | rename ]
[FILE] gtk-encode-symbolic-svg [ edit | delete | rename ]
[FILE] gtk-launch [ edit | delete | rename ]
[FILE] gtk-query-settings [ edit | delete | rename ]
[FILE] gtk-update-icon-cache [ edit | delete | rename ]
[FILE] gunzip [ edit | delete | rename ]
[FILE] gzexe [ edit | delete | rename ]
[FILE] gzip [ edit | delete | rename ]
[FILE] h2ph [ edit | delete | rename ]
[FILE] h2xs [ edit | delete | rename ]
[FILE] hardlink [ edit | delete | rename ]
[FILE] hd [ edit | delete | rename ]
[FILE] hdifftopam [ edit | delete | rename ]
[FILE] head [ edit | delete | rename ]
[FILE] helpztags [ edit | delete | rename ]
[FILE] hexdump [ edit | delete | rename ]
[FILE] hipstopgm [ edit | delete | rename ]
[FILE] host [ edit | delete | rename ]
[FILE] hostid [ edit | delete | rename ]
[FILE] hostname [ edit | delete | rename ]
[FILE] hostnamectl [ edit | delete | rename ]
[FILE] hpcdtoppm [ edit | delete | rename ]
[FILE] htcacheclean [ edit | delete | rename ]
[FILE] htdbm [ edit | delete | rename ]
[FILE] htdigest [ edit | delete | rename ]
[FILE] htop [ edit | delete | rename ]
[FILE] htpasswd [ edit | delete | rename ]
[FILE] hwe-support-status [ edit | delete | rename ]
[FILE] i386 [ edit | delete | rename ]
[FILE] ibd2sdi [ edit | delete | rename ]
[FILE] icontopbm [ edit | delete | rename ]
[FILE] iconv [ edit | delete | rename ]
[FILE] icuexportdata [ edit | delete | rename ]
[FILE] icuinfo [ edit | delete | rename ]
[FILE] id [ edit | delete | rename ]
[FILE] identify [ edit | delete | rename ]
[FILE] identify-im6 [ edit | delete | rename ]
[FILE] identify-im6.q16 [ edit | delete | rename ]
[FILE] ifnames [ edit | delete | rename ]
[FILE] ilbmtoppm [ edit | delete | rename ]
[FILE] imagetops [ edit | delete | rename ]
[FILE] imgtoppm [ edit | delete | rename ]
[FILE] import [ edit | delete | rename ]
[FILE] import-im6 [ edit | delete | rename ]
[FILE] import-im6.q16 [ edit | delete | rename ]
[FILE] inetutils-telnet [ edit | delete | rename ]
[FILE] info [ edit | delete | rename ]
[FILE] infobrowser [ edit | delete | rename ]
[FILE] infocmp [ edit | delete | rename ]
[FILE] infotocap [ edit | delete | rename ]
[FILE] infotopam [ edit | delete | rename ]
[FILE] innochecksum [ edit | delete | rename ]
[FILE] install [ edit | delete | rename ]
[FILE] install-info [ edit | delete | rename ]
[FILE] instmodsh [ edit | delete | rename ]
[FILE] ionice [ edit | delete | rename ]
[FILE] iostat [ edit | delete | rename ]
[FILE] ip [ edit | delete | rename ]
[FILE] ipcmk [ edit | delete | rename ]
[FILE] ipcrm [ edit | delete | rename ]
[FILE] ipcs [ edit | delete | rename ]
[FILE] iptables-xml [ edit | delete | rename ]
[FILE] ischroot [ edit | delete | rename ]
[FILE] iscsiadm [ edit | delete | rename ]
[FILE] jbigtopnm [ edit | delete | rename ]
[FILE] jeprof [ edit | delete | rename ]
[FILE] join [ edit | delete | rename ]
[FILE] journalctl [ edit | delete | rename ]
[FILE] jpeg2ktopam [ edit | delete | rename ]
[FILE] jpegtopnm [ edit | delete | rename ]
[FILE] jq [ edit | delete | rename ]
[FILE] json-patch-jsondiff [ edit | delete | rename ]
[FILE] jsondiff [ edit | delete | rename ]
[FILE] jsonpatch [ edit | delete | rename ]
[FILE] jsonpointer [ edit | delete | rename ]
[FILE] jsonschema [ edit | delete | rename ]
[FILE] json_pp [ edit | delete | rename ]
[FILE] json_xs [ edit | delete | rename ]
[FILE] JxrDecApp [ edit | delete | rename ]
[FILE] JxrEncApp [ edit | delete | rename ]
[FILE] kbdinfo [ edit | delete | rename ]
[FILE] kbd_mode [ edit | delete | rename ]
[FILE] kbxutil [ edit | delete | rename ]
[FILE] keep-one-running [ edit | delete | rename ]
[FILE] kernel-install [ edit | delete | rename ]
[FILE] kill [ edit | delete | rename ]
[FILE] killall [ edit | delete | rename ]
[FILE] kmod [ edit | delete | rename ]
[FILE] kmodsign [ edit | delete | rename ]
[FILE] landscape-sysinfo [ edit | delete | rename ]
[FILE] last [ edit | delete | rename ]
[FILE] lastb [ edit | delete | rename ]
[FILE] lastlog [ edit | delete | rename ]
[FILE] lcf [ edit | delete | rename ]
[FILE] ld [ edit | delete | rename ]
[FILE] ld.bfd [ edit | delete | rename ]
[FILE] ld.gold [ edit | delete | rename ]
[FILE] ld.so [ edit | delete | rename ]
[FILE] ldd [ edit | delete | rename ]
[FILE] leaftoppm [ edit | delete | rename ]
[FILE] less [ edit | delete | rename ]
[FILE] lessecho [ edit | delete | rename ]
[FILE] lessfile [ edit | delete | rename ]
[FILE] lesskey [ edit | delete | rename ]
[FILE] lesspipe [ edit | delete | rename ]
[FILE] letsencrypt [ edit | delete | rename ]
[FILE] lexgrog [ edit | delete | rename ]
[FILE] libnetcfg [ edit | delete | rename ]
[FILE] link [ edit | delete | rename ]
[FILE] linux-boot-prober [ edit | delete | rename ]
[FILE] linux-check-removal [ edit | delete | rename ]
[FILE] linux-update-symlinks [ edit | delete | rename ]
[FILE] linux-version [ edit | delete | rename ]
[FILE] linux32 [ edit | delete | rename ]
[FILE] linux64 [ edit | delete | rename ]
[FILE] lispmtopgm [ edit | delete | rename ]
[FILE] ln [ edit | delete | rename ]
[FILE] lnstat [ edit | delete | rename ]
[FILE] loadkeys [ edit | delete | rename ]
[FILE] loadunimap [ edit | delete | rename ]
[FILE] locale [ edit | delete | rename ]
[FILE] locale-check [ edit | delete | rename ]
[FILE] localectl [ edit | delete | rename ]
[FILE] localedef [ edit | delete | rename ]
[FILE] locate [ edit | delete | rename ]
[FILE] logger [ edit | delete | rename ]
[FILE] login [ edit | delete | rename ]
[FILE] loginctl [ edit | delete | rename ]
[FILE] logname [ edit | delete | rename ]
[FILE] logresolve [ edit | delete | rename ]
[FILE] look [ edit | delete | rename ]
[FILE] lowntfs-3g [ edit | delete | rename ]
[FILE] ls [ edit | delete | rename ]
[FILE] lsattr [ edit | delete | rename ]
[FILE] lsblk [ edit | delete | rename ]
[FILE] lsb_release [ edit | delete | rename ]
[FILE] lscpu [ edit | delete | rename ]
[FILE] lshw [ edit | delete | rename ]
[FILE] lsinitramfs [ edit | delete | rename ]
[FILE] lsipc [ edit | delete | rename ]
[FILE] lslocks [ edit | delete | rename ]
[FILE] lslogins [ edit | delete | rename ]
[FILE] lsmem [ edit | delete | rename ]
[FILE] lsmod [ edit | delete | rename ]
[FILE] lsns [ edit | delete | rename ]
[FILE] lsof [ edit | delete | rename ]
[FILE] lspci [ edit | delete | rename ]
[FILE] lspgpot [ edit | delete | rename ]
[FILE] lspower [ edit | delete | rename ]
[FILE] lsusb [ edit | delete | rename ]
[FILE] lto-dump [ edit | delete | rename ]
[FILE] lto-dump-13 [ edit | delete | rename ]
[FILE] lzcat [ edit | delete | rename ]
[FILE] lzcmp [ edit | delete | rename ]
[FILE] lzdiff [ edit | delete | rename ]
[FILE] lzegrep [ edit | delete | rename ]
[FILE] lzfgrep [ edit | delete | rename ]
[FILE] lzgrep [ edit | delete | rename ]
[FILE] lzless [ edit | delete | rename ]
[FILE] lzma [ edit | delete | rename ]
[FILE] lzmainfo [ edit | delete | rename ]
[FILE] lzmore [ edit | delete | rename ]
[FILE] m4 [ edit | delete | rename ]
[FILE] macptopbm [ edit | delete | rename ]
[FILE] mail [ edit | delete | rename ]
[FILE] mail.mailutils [ edit | delete | rename ]
[FILE] mailmail3 [ edit | delete | rename ]
[FILE] mailq [ edit | delete | rename ]
[FILE] mailx [ edit | delete | rename ]
[FILE] make [ edit | delete | rename ]
[FILE] make-first-existing-target [ edit | delete | rename ]
[FILE] makeconv [ edit | delete | rename ]
[FILE] man [ edit | delete | rename ]
[FILE] man-recode [ edit | delete | rename ]
[FILE] mandb [ edit | delete | rename ]
[FILE] manifest [ edit | delete | rename ]
[FILE] manpath [ edit | delete | rename ]
[FILE] mapscrn [ edit | delete | rename ]
[FILE] markdown-it [ edit | delete | rename ]
[FILE] mawk [ edit | delete | rename ]
[FILE] mbim-network [ edit | delete | rename ]
[FILE] mbimcli [ edit | delete | rename ]
[FILE] mc [ edit | delete | rename ]
[FILE] mcdiff [ edit | delete | rename ]
[FILE] mcedit [ edit | delete | rename ]
[FILE] mcookie [ edit | delete | rename ]
[FILE] mcview [ edit | delete | rename ]
[FILE] md5sum [ edit | delete | rename ]
[FILE] md5sum.textutils [ edit | delete | rename ]
[FILE] mdatopbm [ edit | delete | rename ]
[FILE] mdig [ edit | delete | rename ]
[FILE] memhog [ edit | delete | rename ]
[FILE] memusage [ edit | delete | rename ]
[FILE] memusagestat [ edit | delete | rename ]
[FILE] mesa-overlay-control.py [ edit | delete | rename ]
[FILE] mesg [ edit | delete | rename ]
[FILE] messages [ edit | delete | rename ]
[FILE] messages.mailutils [ edit | delete | rename ]
[FILE] mgrtopbm [ edit | delete | rename ]
[FILE] migrate-pubring-from-classic-gpg [ edit | delete | rename ]
[FILE] migratepages [ edit | delete | rename ]
[FILE] migspeed [ edit | delete | rename ]
[FILE] mimeview [ edit | delete | rename ]
[FILE] mkdir [ edit | delete | rename ]
[FILE] mkfifo [ edit | delete | rename ]
[FILE] mkfontdir [ edit | delete | rename ]
[FILE] mkfontscale [ edit | delete | rename ]
[FILE] mknod [ edit | delete | rename ]
[FILE] mkpasswd [ edit | delete | rename ]
[FILE] mksquashfs [ edit | delete | rename ]
[FILE] mktemp [ edit | delete | rename ]
[FILE] mk_modmap [ edit | delete | rename ]
[FILE] mmcli [ edit | delete | rename ]
[FILE] mogrify [ edit | delete | rename ]
[FILE] mogrify-im6 [ edit | delete | rename ]
[FILE] mogrify-im6.q16 [ edit | delete | rename ]
[FILE] mokutil [ edit | delete | rename ]
[FILE] monit [ edit | delete | rename ]
[FILE] montage [ edit | delete | rename ]
[FILE] montage-im6 [ edit | delete | rename ]
[FILE] montage-im6.q16 [ edit | delete | rename ]
[FILE] more [ edit | delete | rename ]
[FILE] mount [ edit | delete | rename ]
[FILE] mountpoint [ edit | delete | rename ]
[FILE] movemail [ edit | delete | rename ]
[FILE] movemail.mailutils [ edit | delete | rename ]
[FILE] mpstat [ edit | delete | rename ]
[FILE] mrftopbm [ edit | delete | rename ]
[FILE] mt [ edit | delete | rename ]
[FILE] mt-gnu [ edit | delete | rename ]
[FILE] mtr [ edit | delete | rename ]
[FILE] mtr-packet [ edit | delete | rename ]
[FILE] mtrace [ edit | delete | rename ]
[FILE] mtvtoppm [ edit | delete | rename ]
[FILE] mv [ edit | delete | rename ]
[FILE] myisamchk [ edit | delete | rename ]
[FILE] myisamlog [ edit | delete | rename ]
[FILE] myisampack [ edit | delete | rename ]
[FILE] myisam_ftdump [ edit | delete | rename ]
[FILE] mysql [ edit | delete | rename ]
[FILE] mysqladmin [ edit | delete | rename ]
[FILE] mysqlanalyze [ edit | delete | rename ]
[FILE] mysqlbinlog [ edit | delete | rename ]
[FILE] mysqlcheck [ edit | delete | rename ]
[FILE] mysqldump [ edit | delete | rename ]
[FILE] mysqldumpslow [ edit | delete | rename ]
[FILE] mysqld_multi [ edit | delete | rename ]
[FILE] mysqld_safe [ edit | delete | rename ]
[FILE] mysqlimport [ edit | delete | rename ]
[FILE] mysqloptimize [ edit | delete | rename ]
[FILE] mysqlpump [ edit | delete | rename ]
[FILE] mysqlrepair [ edit | delete | rename ]
[FILE] mysqlreport [ edit | delete | rename ]
[FILE] mysqlshow [ edit | delete | rename ]
[FILE] mysqlslap [ edit | delete | rename ]
[FILE] mysql_config [ edit | delete | rename ]
[FILE] mysql_config_editor [ edit | delete | rename ]
[FILE] mysql_migrate_keyring [ edit | delete | rename ]
[FILE] mysql_secure_installation [ edit | delete | rename ]
[FILE] mysql_ssl_rsa_setup [ edit | delete | rename ]
[FILE] mysql_tzinfo_to_sql [ edit | delete | rename ]
[FILE] mysql_upgrade [ edit | delete | rename ]
[FILE] my_print_defaults [ edit | delete | rename ]
[FILE] namei [ edit | delete | rename ]
[FILE] nano [ edit | delete | rename ]
[FILE] nawk [ edit | delete | rename ]
[FILE] nc [ edit | delete | rename ]
[FILE] nc.openbsd [ edit | delete | rename ]
[FILE] ncurses6-config [ edit | delete | rename ]
[FILE] ncursesw6-config [ edit | delete | rename ]
[FILE] neotoppm [ edit | delete | rename ]
[FILE] neqn [ edit | delete | rename ]
[FILE] netaddr [ edit | delete | rename ]
[FILE] netcat [ edit | delete | rename ]
[FILE] networkctl [ edit | delete | rename ]
[FILE] networkd-dispatcher [ edit | delete | rename ]
[FILE] newaliases [ edit | delete | rename ]
[FILE] newgrp [ edit | delete | rename ]
[FILE] NF [ edit | delete | rename ]
[FILE] ngettext [ edit | delete | rename ]
[FILE] nice [ edit | delete | rename ]
[FILE] nisdomainname [ edit | delete | rename ]
[FILE] nl [ edit | delete | rename ]
[FILE] nm [ edit | delete | rename ]
[FILE] node [ edit | delete | rename ]
[FILE] nodejs [ edit | delete | rename ]
[FILE] nohup [ edit | delete | rename ]
[FILE] npm [ edit | delete | rename ]
[FILE] nproc [ edit | delete | rename ]
[FILE] npx [ edit | delete | rename ]
[FILE] nroff [ edit | delete | rename ]
[FILE] nsenter [ edit | delete | rename ]
[FILE] nslookup [ edit | delete | rename ]
[FILE] nstat [ edit | delete | rename ]
[FILE] nsupdate [ edit | delete | rename ]
[FILE] ntfs-3g [ edit | delete | rename ]
[FILE] ntfs-3g.probe [ edit | delete | rename ]
[FILE] ntfscat [ edit | delete | rename ]
[FILE] ntfscluster [ edit | delete | rename ]
[FILE] ntfscmp [ edit | delete | rename ]
[FILE] ntfsdecrypt [ edit | delete | rename ]
[FILE] ntfsfallocate [ edit | delete | rename ]
[FILE] ntfsfix [ edit | delete | rename ]
[FILE] ntfsinfo [ edit | delete | rename ]
[FILE] ntfsls [ edit | delete | rename ]
[FILE] ntfsmove [ edit | delete | rename ]
[FILE] ntfsrecover [ edit | delete | rename ]
[FILE] ntfssecaudit [ edit | delete | rename ]
[FILE] ntfstruncate [ edit | delete | rename ]
[FILE] ntfsusermap [ edit | delete | rename ]
[FILE] ntfswipe [ edit | delete | rename ]
[FILE] numactl [ edit | delete | rename ]
[FILE] numastat [ edit | delete | rename ]
[FILE] numfmt [ edit | delete | rename ]
[FILE] objcopy [ edit | delete | rename ]
[FILE] objdump [ edit | delete | rename ]
[FILE] od [ edit | delete | rename ]
[FILE] oem-getlogs [ edit | delete | rename ]
[FILE] on_ac_power [ edit | delete | rename ]
[FILE] open [ edit | delete | rename ]
[FILE] opendkim-spam [ edit | delete | rename ]
[FILE] openssl [ edit | delete | rename ]
[FILE] openvt [ edit | delete | rename ]
[FILE] os-prober [ edit | delete | rename ]
[FILE] p7zip [ edit | delete | rename ]
[FILE] pager [ edit | delete | rename ]
[FILE] palmtopnm [ edit | delete | rename ]
[FILE] pamaddnoise [ edit | delete | rename ]
[FILE] pamaltsat [ edit | delete | rename ]
[FILE] pamarith [ edit | delete | rename ]
[FILE] pambackground [ edit | delete | rename ]
[FILE] pambayer [ edit | delete | rename ]
[FILE] pambrighten [ edit | delete | rename ]
[FILE] pamcat [ edit | delete | rename ]
[FILE] pamchannel [ edit | delete | rename ]
[FILE] pamcomp [ edit | delete | rename ]
[FILE] pamcrater [ edit | delete | rename ]
[FILE] pamcut [ edit | delete | rename ]
[FILE] pamdeinterlace [ edit | delete | rename ]
[FILE] pamdepth [ edit | delete | rename ]
[FILE] pamdice [ edit | delete | rename ]
[FILE] pamditherbw [ edit | delete | rename ]
[FILE] pamedge [ edit | delete | rename ]
[FILE] pamendian [ edit | delete | rename ]
[FILE] pamenlarge [ edit | delete | rename ]
[FILE] pamexec [ edit | delete | rename ]
[FILE] pamfile [ edit | delete | rename ]
[FILE] pamfind [ edit | delete | rename ]
[FILE] pamfix [ edit | delete | rename ]
[FILE] pamfixtrunc [ edit | delete | rename ]
[FILE] pamflip [ edit | delete | rename ]
[FILE] pamfunc [ edit | delete | rename ]
[FILE] pamgauss [ edit | delete | rename ]
[FILE] pamgetcolor [ edit | delete | rename ]
[FILE] pamgradient [ edit | delete | rename ]
[FILE] pamhomography [ edit | delete | rename ]
[FILE] pamhue [ edit | delete | rename ]
[FILE] pamlevels [ edit | delete | rename ]
[FILE] pamlookup [ edit | delete | rename ]
[FILE] pammasksharpen [ edit | delete | rename ]
[FILE] pammixinterlace [ edit | delete | rename ]
[FILE] pammixmulti [ edit | delete | rename ]
[FILE] pammosaicknit [ edit | delete | rename ]
[FILE] pamoil [ edit | delete | rename ]
[FILE] pampaintspill [ edit | delete | rename ]
[FILE] pamperspective [ edit | delete | rename ]
[FILE] pampick [ edit | delete | rename ]
[FILE] pampop9 [ edit | delete | rename ]
[FILE] pamrecolor [ edit | delete | rename ]
[FILE] pamrestack [ edit | delete | rename ]
[FILE] pamrgbatopng [ edit | delete | rename ]
[FILE] pamrubber [ edit | delete | rename ]
[FILE] pamscale [ edit | delete | rename ]
[FILE] pamseq [ edit | delete | rename ]
[FILE] pamshadedrelief [ edit | delete | rename ]
[FILE] pamsharpmap [ edit | delete | rename ]
[FILE] pamsharpness [ edit | delete | rename ]
[FILE] pamshuffle [ edit | delete | rename ]
[FILE] pamsistoaglyph [ edit | delete | rename ]
[FILE] pamslice [ edit | delete | rename ]
[FILE] pamsplit [ edit | delete | rename ]
[FILE] pamstack [ edit | delete | rename ]
[FILE] pamstereogram [ edit | delete | rename ]
[FILE] pamstretch [ edit | delete | rename ]
[FILE] pamstretch-gen [ edit | delete | rename ]
[FILE] pamsumm [ edit | delete | rename ]
[FILE] pamsummcol [ edit | delete | rename ]
[FILE] pamtable [ edit | delete | rename ]
[FILE] pamthreshold [ edit | delete | rename ]
[FILE] pamtilt [ edit | delete | rename ]
[FILE] pamtoavs [ edit | delete | rename ]
[FILE] pamtodjvurle [ edit | delete | rename ]
[FILE] pamtofits [ edit | delete | rename ]
[FILE] pamtogif [ edit | delete | rename ]
[FILE] pamtohdiff [ edit | delete | rename ]
[FILE] pamtohtmltbl [ edit | delete | rename ]
[FILE] pamtojpeg2k [ edit | delete | rename ]
[FILE] pamtompfont [ edit | delete | rename ]
[FILE] pamtooctaveimg [ edit | delete | rename ]
[FILE] pamtopam [ edit | delete | rename ]
[FILE] pamtopdbimg [ edit | delete | rename ]
[FILE] pamtopfm [ edit | delete | rename ]
[FILE] pamtopng [ edit | delete | rename ]
[FILE] pamtopnm [ edit | delete | rename ]
[FILE] pamtoqoi [ edit | delete | rename ]
[FILE] pamtosrf [ edit | delete | rename ]
[FILE] pamtosvg [ edit | delete | rename ]
[FILE] pamtotga [ edit | delete | rename ]
[FILE] pamtotiff [ edit | delete | rename ]
[FILE] pamtouil [ edit | delete | rename ]
[FILE] pamtowinicon [ edit | delete | rename ]
[FILE] pamtoxvmini [ edit | delete | rename ]
[FILE] pamtris [ edit | delete | rename ]
[FILE] pamundice [ edit | delete | rename ]
[FILE] pamunlookup [ edit | delete | rename ]
[FILE] pamvalidate [ edit | delete | rename ]
[FILE] pamwipeout [ edit | delete | rename ]
[FILE] pamx [ edit | delete | rename ]
[FILE] paperconf [ edit | delete | rename ]
[FILE] partx [ edit | delete | rename ]
[FILE] passwd [ edit | delete | rename ]
[FILE] paste [ edit | delete | rename ]
[FILE] pastebinit [ edit | delete | rename ]
[FILE] patch [ edit | delete | rename ]
[FILE] pathchk [ edit | delete | rename ]
[FILE] pbget [ edit | delete | rename ]
[FILE] pbmclean [ edit | delete | rename ]
[FILE] pbmlife [ edit | delete | rename ]
[FILE] pbmmake [ edit | delete | rename ]
[FILE] pbmmask [ edit | delete | rename ]
[FILE] pbmminkowski [ edit | delete | rename ]
[FILE] pbmnoise [ edit | delete | rename ]
[FILE] pbmpage [ edit | delete | rename ]
[FILE] pbmpscale [ edit | delete | rename ]
[FILE] pbmreduce [ edit | delete | rename ]
[FILE] pbmtext [ edit | delete | rename ]
[FILE] pbmtextps [ edit | delete | rename ]
[FILE] pbmto10x [ edit | delete | rename ]
[FILE] pbmto4425 [ edit | delete | rename ]
[FILE] pbmtoascii [ edit | delete | rename ]
[FILE] pbmtoatk [ edit | delete | rename ]
[FILE] pbmtobbnbg [ edit | delete | rename ]
[FILE] pbmtocis [ edit | delete | rename ]
[FILE] pbmtocmuwm [ edit | delete | rename ]
[FILE] pbmtodjvurle [ edit | delete | rename ]
[FILE] pbmtoepsi [ edit | delete | rename ]
[FILE] pbmtoepson [ edit | delete | rename ]
[FILE] pbmtoescp2 [ edit | delete | rename ]
[FILE] pbmtog3 [ edit | delete | rename ]
[FILE] pbmtogem [ edit | delete | rename ]
[FILE] pbmtogo [ edit | delete | rename ]
[FILE] pbmtoibm23xx [ edit | delete | rename ]
[FILE] pbmtoicon [ edit | delete | rename ]
[FILE] pbmtolj [ edit | delete | rename ]
[FILE] pbmtoln03 [ edit | delete | rename ]
[FILE] pbmtolps [ edit | delete | rename ]
[FILE] pbmtomacp [ edit | delete | rename ]
[FILE] pbmtomatrixorbital [ edit | delete | rename ]
[FILE] pbmtomda [ edit | delete | rename ]
[FILE] pbmtomgr [ edit | delete | rename ]
[FILE] pbmtomrf [ edit | delete | rename ]
[FILE] pbmtonokia [ edit | delete | rename ]
[FILE] pbmtopgm [ edit | delete | rename ]
[FILE] pbmtopi3 [ edit | delete | rename ]
[FILE] pbmtopk [ edit | delete | rename ]
[FILE] pbmtoplot [ edit | delete | rename ]
[FILE] pbmtoppa [ edit | delete | rename ]
[FILE] pbmtopsg3 [ edit | delete | rename ]
[FILE] pbmtoptx [ edit | delete | rename ]
[FILE] pbmtosunicon [ edit | delete | rename ]
[FILE] pbmtowbmp [ edit | delete | rename ]
[FILE] pbmtox10bm [ edit | delete | rename ]
[FILE] pbmtoxbm [ edit | delete | rename ]
[FILE] pbmtoybm [ edit | delete | rename ]
[FILE] pbmtozinc [ edit | delete | rename ]
[FILE] pbmupc [ edit | delete | rename ]
[FILE] pbput [ edit | delete | rename ]
[FILE] pbputs [ edit | delete | rename ]
[FILE] pc1toppm [ edit | delete | rename ]
[FILE] pcdindex [ edit | delete | rename ]
[FILE] pcdovtoppm [ edit | delete | rename ]
[FILE] pcxtoppm [ edit | delete | rename ]
[FILE] pdb3 [ edit | delete | rename ]
[FILE] pdb3.12 [ edit | delete | rename ]
[FILE] pdbimgtopam [ edit | delete | rename ]
[FILE] pdf2dsc [ edit | delete | rename ]
[FILE] pdf2ps [ edit | delete | rename ]
[FILE] pdfattach [ edit | delete | rename ]
[FILE] pdfdetach [ edit | delete | rename ]
[FILE] pdffonts [ edit | delete | rename ]
[FILE] pdfimages [ edit | delete | rename ]
[FILE] pdfinfo [ edit | delete | rename ]
[FILE] pdfseparate [ edit | delete | rename ]
[FILE] pdfsig [ edit | delete | rename ]
[FILE] pdftocairo [ edit | delete | rename ]
[FILE] pdftohtml [ edit | delete | rename ]
[FILE] pdftoppm [ edit | delete | rename ]
[FILE] pdftops [ edit | delete | rename ]
[FILE] pdftotext [ edit | delete | rename ]
[FILE] pdfunite [ edit | delete | rename ]
[FILE] peekfd [ edit | delete | rename ]
[FILE] perf [ edit | delete | rename ]
[FILE] perl [ edit | delete | rename ]
[FILE] perl5.38-x86_64-linux-gnu [ edit | delete | rename ]
[FILE] perl5.38.2 [ edit | delete | rename ]
[FILE] perlbug [ edit | delete | rename ]
[FILE] perldoc [ edit | delete | rename ]
[FILE] perlivp [ edit | delete | rename ]
[FILE] perlthanks [ edit | delete | rename ]
[FILE] perror [ edit | delete | rename ]
[FILE] pf2afm [ edit | delete | rename ]
[FILE] pfbtopfa [ edit | delete | rename ]
[FILE] pfmtopam [ edit | delete | rename ]
[FILE] pgbench [ edit | delete | rename ]
[FILE] pgmabel [ edit | delete | rename ]
[FILE] pgmbentley [ edit | delete | rename ]
[FILE] pgmcrater [ edit | delete | rename ]
[FILE] pgmdeshadow [ edit | delete | rename ]
[FILE] pgmedge [ edit | delete | rename ]
[FILE] pgmenhance [ edit | delete | rename ]
[FILE] pgmhist [ edit | delete | rename ]
[FILE] pgmkernel [ edit | delete | rename ]
[FILE] pgmmake [ edit | delete | rename ]
[FILE] pgmmedian [ edit | delete | rename ]
[FILE] pgmminkowski [ edit | delete | rename ]
[FILE] pgmmorphconv [ edit | delete | rename ]
[FILE] pgmnoise [ edit | delete | rename ]
[FILE] pgmnorm [ edit | delete | rename ]
[FILE] pgmoil [ edit | delete | rename ]
[FILE] pgmramp [ edit | delete | rename ]
[FILE] pgmslice [ edit | delete | rename ]
[FILE] pgmtexture [ edit | delete | rename ]
[FILE] pgmtofs [ edit | delete | rename ]
[FILE] pgmtolispm [ edit | delete | rename ]
[FILE] pgmtopbm [ edit | delete | rename ]
[FILE] pgmtopgm [ edit | delete | rename ]
[FILE] pgmtoppm [ edit | delete | rename ]
[FILE] pgmtosbig [ edit | delete | rename ]
[FILE] pgmtost4 [ edit | delete | rename ]
[FILE] pgrep [ edit | delete | rename ]
[FILE] pg_archivecleanup [ edit | delete | rename ]
[FILE] pg_backupcluster [ edit | delete | rename ]
[FILE] pg_basebackup [ edit | delete | rename ]
[FILE] pg_config [ edit | delete | rename ]
[FILE] pg_config.libpq-dev [ edit | delete | rename ]
[FILE] pg_conftool [ edit | delete | rename ]
[FILE] pg_createcluster [ edit | delete | rename ]
[FILE] pg_ctlcluster [ edit | delete | rename ]
[FILE] pg_dropcluster [ edit | delete | rename ]
[FILE] pg_dump [ edit | delete | rename ]
[FILE] pg_dumpall [ edit | delete | rename ]
[FILE] pg_isready [ edit | delete | rename ]
[FILE] pg_lsclusters [ edit | delete | rename ]
[FILE] pg_receivewal [ edit | delete | rename ]
[FILE] pg_receivexlog [ edit | delete | rename ]
[FILE] pg_recvlogical [ edit | delete | rename ]
[FILE] pg_renamecluster [ edit | delete | rename ]
[FILE] pg_restore [ edit | delete | rename ]
[FILE] pg_restorecluster [ edit | delete | rename ]
[FILE] pg_upgradecluster [ edit | delete | rename ]
[FILE] pg_virtualenv [ edit | delete | rename ]
[FILE] phar [ edit | delete | rename ]
[FILE] phar.phar [ edit | delete | rename ]
[FILE] phar.phar8.4 [ edit | delete | rename ]
[FILE] phar8.4 [ edit | delete | rename ]
[FILE] phar8.4.phar [ edit | delete | rename ]
[FILE] php [ edit | delete | rename ]
[FILE] php8.4 [ edit | delete | rename ]
[FILE] pi1toppm [ edit | delete | rename ]
[FILE] pi3topbm [ edit | delete | rename ]
[FILE] pic [ edit | delete | rename ]
[FILE] pico [ edit | delete | rename ]
[FILE] piconv [ edit | delete | rename ]
[FILE] pidof [ edit | delete | rename ]
[FILE] pidstat [ edit | delete | rename ]
[FILE] pidwait [ edit | delete | rename ]
[FILE] pinentry [ edit | delete | rename ]
[FILE] pinentry-curses [ edit | delete | rename ]
[FILE] ping [ edit | delete | rename ]
[FILE] ping4 [ edit | delete | rename ]
[FILE] ping6 [ edit | delete | rename ]
[FILE] pinky [ edit | delete | rename ]
[FILE] pip [ edit | delete | rename ]
[FILE] pip3 [ edit | delete | rename ]
[FILE] pip3.12 [ edit | delete | rename ]
[FILE] pjtoppm [ edit | delete | rename ]
[FILE] pkaction [ edit | delete | rename ]
[FILE] pkcheck [ edit | delete | rename ]
[FILE] pkcon [ edit | delete | rename ]
[FILE] pkg-config [ edit | delete | rename ]
[FILE] pkgconf [ edit | delete | rename ]
[FILE] pkgdata [ edit | delete | rename ]
[FILE] pkill [ edit | delete | rename ]
[FILE] pkmon [ edit | delete | rename ]
[FILE] pktopbm [ edit | delete | rename ]
[FILE] pkttyagent [ edit | delete | rename ]
[FILE] pl2pm [ edit | delete | rename ]
[FILE] pldd [ edit | delete | rename ]
[FILE] plocate [ edit | delete | rename ]
[FILE] plymouth [ edit | delete | rename ]
[FILE] pmap [ edit | delete | rename ]
[FILE] pngtopam [ edit | delete | rename ]
[FILE] pngtopnm [ edit | delete | rename ]
[FILE] pnmalias [ edit | delete | rename ]
[FILE] pnmarith [ edit | delete | rename ]
[FILE] pnmcat [ edit | delete | rename ]
[FILE] pnmcolormap [ edit | delete | rename ]
[FILE] pnmcomp [ edit | delete | rename ]
[FILE] pnmconvol [ edit | delete | rename ]
[FILE] pnmcrop [ edit | delete | rename ]
[FILE] pnmcut [ edit | delete | rename ]
[FILE] pnmdepth [ edit | delete | rename ]
[FILE] pnmenlarge [ edit | delete | rename ]
[FILE] pnmfile [ edit | delete | rename ]
[FILE] pnmflip [ edit | delete | rename ]
[FILE] pnmgamma [ edit | delete | rename ]
[FILE] pnmhisteq [ edit | delete | rename ]
[FILE] pnmhistmap [ edit | delete | rename ]
[FILE] pnmindex [ edit | delete | rename ]
[FILE] pnminterp [ edit | delete | rename ]
[FILE] pnminterp-gen [ edit | delete | rename ]
[FILE] pnminvert [ edit | delete | rename ]
[FILE] pnmmargin [ edit | delete | rename ]
[FILE] pnmmercator [ edit | delete | rename ]
[FILE] pnmmontage [ edit | delete | rename ]
[FILE] pnmnlfilt [ edit | delete | rename ]
[FILE] pnmnoraw [ edit | delete | rename ]
[FILE] pnmnorm [ edit | delete | rename ]
[FILE] pnmpad [ edit | delete | rename ]
[FILE] pnmpaste [ edit | delete | rename ]
[FILE] pnmpsnr [ edit | delete | rename ]
[FILE] pnmquant [ edit | delete | rename ]
[FILE] pnmquantall [ edit | delete | rename ]
[FILE] pnmremap [ edit | delete | rename ]
[FILE] pnmrotate [ edit | delete | rename ]
[FILE] pnmscale [ edit | delete | rename ]
[FILE] pnmscalefixed [ edit | delete | rename ]
[FILE] pnmshear [ edit | delete | rename ]
[FILE] pnmsmooth [ edit | delete | rename ]
[FILE] pnmsplit [ edit | delete | rename ]
[FILE] pnmstitch [ edit | delete | rename ]
[FILE] pnmtile [ edit | delete | rename ]
[FILE] pnmtoddif [ edit | delete | rename ]
[FILE] pnmtofiasco [ edit | delete | rename ]
[FILE] pnmtofits [ edit | delete | rename ]
[FILE] pnmtojbig [ edit | delete | rename ]
[FILE] pnmtojpeg [ edit | delete | rename ]
[FILE] pnmtopalm [ edit | delete | rename ]
[FILE] pnmtopclxl [ edit | delete | rename ]
[FILE] pnmtoplainpnm [ edit | delete | rename ]
[FILE] pnmtopng [ edit | delete | rename ]
[FILE] pnmtopnm [ edit | delete | rename ]
[FILE] pnmtops [ edit | delete | rename ]
[FILE] pnmtorast [ edit | delete | rename ]
[FILE] pnmtorle [ edit | delete | rename ]
[FILE] pnmtosgi [ edit | delete | rename ]
[FILE] pnmtosir [ edit | delete | rename ]
[FILE] pnmtotiff [ edit | delete | rename ]
[FILE] pnmtotiffcmyk [ edit | delete | rename ]
[FILE] pnmtoxwd [ edit | delete | rename ]
[FILE] pnpm [ edit | delete | rename ]
[FILE] pnpx [ edit | delete | rename ]
[FILE] pod2html [ edit | delete | rename ]
[FILE] pod2man [ edit | delete | rename ]
[FILE] pod2text [ edit | delete | rename ]
[FILE] pod2usage [ edit | delete | rename ]
[FILE] podchecker [ edit | delete | rename ]
[FILE] pollinate [ edit | delete | rename ]
[FILE] pphs [ edit | delete | rename ]
[FILE] ppm3d [ edit | delete | rename ]
[FILE] ppmbrighten [ edit | delete | rename ]
[FILE] ppmchange [ edit | delete | rename ]
[FILE] ppmcie [ edit | delete | rename ]
[FILE] ppmcolormask [ edit | delete | rename ]
[FILE] ppmcolors [ edit | delete | rename ]
[FILE] ppmdcfont [ edit | delete | rename ]
[FILE] ppmddumpfont [ edit | delete | rename ]
[FILE] ppmdim [ edit | delete | rename ]
[FILE] ppmdist [ edit | delete | rename ]
[FILE] ppmdither [ edit | delete | rename ]
[FILE] ppmdmkfont [ edit | delete | rename ]
[FILE] ppmdraw [ edit | delete | rename ]
[FILE] ppmfade [ edit | delete | rename ]
[FILE] ppmflash [ edit | delete | rename ]
[FILE] ppmforge [ edit | delete | rename ]
[FILE] ppmglobe [ edit | delete | rename ]
[FILE] ppmhist [ edit | delete | rename ]
[FILE] ppmlabel [ edit | delete | rename ]
[FILE] ppmmake [ edit | delete | rename ]
[FILE] ppmmix [ edit | delete | rename ]
[FILE] ppmnorm [ edit | delete | rename ]
[FILE] ppmntsc [ edit | delete | rename ]
[FILE] ppmpat [ edit | delete | rename ]
[FILE] ppmquant [ edit | delete | rename ]
[FILE] ppmquantall [ edit | delete | rename ]
[FILE] ppmrainbow [ edit | delete | rename ]
[FILE] ppmrelief [ edit | delete | rename ]
[FILE] ppmrough [ edit | delete | rename ]
[FILE] ppmshadow [ edit | delete | rename ]
[FILE] ppmshift [ edit | delete | rename ]
[FILE] ppmspread [ edit | delete | rename ]
[FILE] ppmtoacad [ edit | delete | rename ]
[FILE] ppmtoapplevol [ edit | delete | rename ]
[FILE] ppmtoarbtxt [ edit | delete | rename ]
[FILE] ppmtoascii [ edit | delete | rename ]
[FILE] ppmtobmp [ edit | delete | rename ]
[FILE] ppmtoeyuv [ edit | delete | rename ]
[FILE] ppmtogif [ edit | delete | rename ]
[FILE] ppmtoicr [ edit | delete | rename ]
[FILE] ppmtoilbm [ edit | delete | rename ]
[FILE] ppmtojpeg [ edit | delete | rename ]
[FILE] ppmtoleaf [ edit | delete | rename ]
[FILE] ppmtolj [ edit | delete | rename ]
[FILE] ppmtomap [ edit | delete | rename ]
[FILE] ppmtomitsu [ edit | delete | rename ]
[FILE] ppmtompeg [ edit | delete | rename ]
[FILE] ppmtoneo [ edit | delete | rename ]
[FILE] ppmtopcx [ edit | delete | rename ]
[FILE] ppmtopgm [ edit | delete | rename ]
[FILE] ppmtopi1 [ edit | delete | rename ]
[FILE] ppmtopict [ edit | delete | rename ]
[FILE] ppmtopj [ edit | delete | rename ]
[FILE] ppmtopjxl [ edit | delete | rename ]
[FILE] ppmtoppm [ edit | delete | rename ]
[FILE] ppmtopuzz [ edit | delete | rename ]
[FILE] ppmtorgb3 [ edit | delete | rename ]
[FILE] ppmtosixel [ edit | delete | rename ]
[FILE] ppmtospu [ edit | delete | rename ]
[FILE] ppmtoterm [ edit | delete | rename ]
[FILE] ppmtotga [ edit | delete | rename ]
[FILE] ppmtouil [ edit | delete | rename ]
[FILE] ppmtowinicon [ edit | delete | rename ]
[FILE] ppmtoxpm [ edit | delete | rename ]
[FILE] ppmtoyuv [ edit | delete | rename ]
[FILE] ppmtoyuvsplit [ edit | delete | rename ]
[FILE] ppmtv [ edit | delete | rename ]
[FILE] ppmwheel [ edit | delete | rename ]
[FILE] pr [ edit | delete | rename ]
[FILE] preconv [ edit | delete | rename ]
[FILE] print [ edit | delete | rename ]
[FILE] printafm [ edit | delete | rename ]
[FILE] printenv [ edit | delete | rename ]
[FILE] printf [ edit | delete | rename ]
[FILE] prlimit [ edit | delete | rename ]
[FILE] pro [ edit | delete | rename ]
[FILE] protoc [ edit | delete | rename ]
[FILE] prove [ edit | delete | rename ]
[FILE] prtstat [ edit | delete | rename ]
[FILE] ps [ edit | delete | rename ]
[FILE] ps2ascii [ edit | delete | rename ]
[FILE] ps2epsi [ edit | delete | rename ]
[FILE] ps2pdf [ edit | delete | rename ]
[FILE] ps2pdf12 [ edit | delete | rename ]
[FILE] ps2pdf13 [ edit | delete | rename ]
[FILE] ps2pdf14 [ edit | delete | rename ]
[FILE] ps2pdfwr [ edit | delete | rename ]
[FILE] ps2ps [ edit | delete | rename ]
[FILE] ps2ps2 [ edit | delete | rename ]
[FILE] ps2txt [ edit | delete | rename ]
[FILE] psfaddtable [ edit | delete | rename ]
[FILE] psfgettable [ edit | delete | rename ]
[FILE] psfstriptable [ edit | delete | rename ]
[FILE] psfxtable [ edit | delete | rename ]
[FILE] psidtopgm [ edit | delete | rename ]
[FILE] pslog [ edit | delete | rename ]
[FILE] psql [ edit | delete | rename ]
[FILE] pstopnm [ edit | delete | rename ]
[FILE] pstree [ edit | delete | rename ]
[FILE] pstree.x11 [ edit | delete | rename ]
[FILE] ptar [ edit | delete | rename ]
[FILE] ptardiff [ edit | delete | rename ]
[FILE] ptargrep [ edit | delete | rename ]
[FILE] ptx [ edit | delete | rename ]
[FILE] purge-old-kernels [ edit | delete | rename ]
[FILE] pwd [ edit | delete | rename ]
[FILE] pwdx [ edit | delete | rename ]
[FILE] py3clean [ edit | delete | rename ]
[FILE] py3compile [ edit | delete | rename ]
[FILE] py3versions [ edit | delete | rename ]
[FILE] pybabel [ edit | delete | rename ]
[FILE] pybabel-python3 [ edit | delete | rename ]
[FILE] pydoc3 [ edit | delete | rename ]
[FILE] pydoc3.12 [ edit | delete | rename ]
[FILE] pygettext3 [ edit | delete | rename ]
[FILE] pygettext3.12 [ edit | delete | rename ]
[FILE] pygmentize [ edit | delete | rename ]
[FILE] pyhtmlizer3 [ edit | delete | rename ]
[FILE] pyserial-miniterm [ edit | delete | rename ]
[FILE] pyserial-ports [ edit | delete | rename ]
[FILE] python3 [ edit | delete | rename ]
[FILE] python3-config [ edit | delete | rename ]
[FILE] python3.12 [ edit | delete | rename ]
[FILE] python3.12-config [ edit | delete | rename ]
[FILE] pzstd [ edit | delete | rename ]
[FILE] qmi-firmware-update [ edit | delete | rename ]
[FILE] qmi-network [ edit | delete | rename ]
[FILE] qmicli [ edit | delete | rename ]
[FILE] qoitopam [ edit | delete | rename ]
[FILE] qrttoppm [ edit | delete | rename ]
[FILE] qt-faststart [ edit | delete | rename ]
[FILE] ranlib [ edit | delete | rename ]
[FILE] rasttopnm [ edit | delete | rename ]
[FILE] rawtopgm [ edit | delete | rename ]
[FILE] rawtoppm [ edit | delete | rename ]
[FILE] rbash [ edit | delete | rename ]
[FILE] rdma [ edit | delete | rename ]
[FILE] readelf [ edit | delete | rename ]
[FILE] readlink [ edit | delete | rename ]
[FILE] readmsg [ edit | delete | rename ]
[FILE] readmsg.mailutils [ edit | delete | rename ]
[FILE] realpath [ edit | delete | rename ]
[FILE] red [ edit | delete | rename ]
[FILE] redis-benchmark [ edit | delete | rename ]
[FILE] redis-check-aof [ edit | delete | rename ]
[FILE] redis-check-rdb [ edit | delete | rename ]
[FILE] redis-cli [ edit | delete | rename ]
[FILE] redis-server [ edit | delete | rename ]
[FILE] reindexdb [ edit | delete | rename ]
[FILE] rename.ul [ edit | delete | rename ]
[FILE] renice [ edit | delete | rename ]
[FILE] rescan-scsi-bus.sh [ edit | delete | rename ]
[FILE] reset [ edit | delete | rename ]
[FILE] resizecons [ edit | delete | rename ]
[FILE] resizepart [ edit | delete | rename ]
[FILE] resolvectl [ edit | delete | rename ]
[FILE] rev [ edit | delete | rename ]
[FILE] rgb3toppm [ edit | delete | rename ]
[FILE] rgrep [ edit | delete | rename ]
[FILE] rlatopam [ edit | delete | rename ]
[FILE] rletopnm [ edit | delete | rename ]
[FILE] rm [ edit | delete | rename ]
[FILE] rmail [ edit | delete | rename ]
[FILE] rmdir [ edit | delete | rename ]
[FILE] rnano [ edit | delete | rename ]
[FILE] rotatelogs [ edit | delete | rename ]
[FILE] routel [ edit | delete | rename ]
[FILE] rpcgen [ edit | delete | rename ]
[FILE] rrsync [ edit | delete | rename ]
[FILE] rsync [ edit | delete | rename ]
[FILE] rsync-ssl [ edit | delete | rename ]
[FILE] rtla [ edit | delete | rename ]
[FILE] rtstat [ edit | delete | rename ]
[FILE] run-mailcap [ edit | delete | rename ]
[FILE] run-one [ edit | delete | rename ]
[FILE] run-one-constantly [ edit | delete | rename ]
[FILE] run-one-until-failure [ edit | delete | rename ]
[FILE] run-one-until-success [ edit | delete | rename ]
[FILE] run-parts [ edit | delete | rename ]
[FILE] run-this-one [ edit | delete | rename ]
[FILE] runcon [ edit | delete | rename ]
[FILE] rview [ edit | delete | rename ]
[FILE] rvim [ edit | delete | rename ]
[FILE] sadf [ edit | delete | rename ]
[FILE] sar [ edit | delete | rename ]
[FILE] sar.sysstat [ edit | delete | rename ]
[FILE] savelog [ edit | delete | rename ]
[FILE] sbattach [ edit | delete | rename ]
[FILE] sbigtopgm [ edit | delete | rename ]
[FILE] sbkeysync [ edit | delete | rename ]
[FILE] sbsiglist [ edit | delete | rename ]
[FILE] sbsign [ edit | delete | rename ]
[FILE] sbvarsign [ edit | delete | rename ]
[FILE] sbverify [ edit | delete | rename ]
[FILE] scalar [ edit | delete | rename ]
[FILE] scandeps [ edit | delete | rename ]
[FILE] scp [ edit | delete | rename ]
[FILE] screen [ edit | delete | rename ]
[FILE] screendump [ edit | delete | rename ]
[FILE] script [ edit | delete | rename ]
[FILE] scriptlive [ edit | delete | rename ]
[FILE] scriptreplay [ edit | delete | rename ]
[FILE] scsi_logging_level [ edit | delete | rename ]
[FILE] scsi_mandat [ edit | delete | rename ]
[FILE] scsi_readcap [ edit | delete | rename ]
[FILE] scsi_ready [ edit | delete | rename ]
[FILE] scsi_satl [ edit | delete | rename ]
[FILE] scsi_start [ edit | delete | rename ]
[FILE] scsi_stop [ edit | delete | rename ]
[FILE] scsi_temperature [ edit | delete | rename ]
[FILE] sdiff [ edit | delete | rename ]
[FILE] sed [ edit | delete | rename ]
[FILE] see [ edit | delete | rename ]
[FILE] select-editor [ edit | delete | rename ]
[FILE] sensible-browser [ edit | delete | rename ]
[FILE] sensible-editor [ edit | delete | rename ]
[FILE] sensible-pager [ edit | delete | rename ]
[FILE] sensible-terminal [ edit | delete | rename ]
[FILE] seq [ edit | delete | rename ]
[FILE] session-migration [ edit | delete | rename ]
[FILE] setarch [ edit | delete | rename ]
[FILE] setfont [ edit | delete | rename ]
[FILE] setkeycodes [ edit | delete | rename ]
[FILE] setleds [ edit | delete | rename ]
[FILE] setlogcons [ edit | delete | rename ]
[FILE] setmetamode [ edit | delete | rename ]
[FILE] setpci [ edit | delete | rename ]
[FILE] setpriv [ edit | delete | rename ]
[FILE] setsid [ edit | delete | rename ]
[FILE] setterm [ edit | delete | rename ]
[FILE] setupcon [ edit | delete | rename ]
[FILE] sftp [ edit | delete | rename ]
[FILE] sg [ edit | delete | rename ]
[FILE] sginfo [ edit | delete | rename ]
[FILE] sgitopnm [ edit | delete | rename ]
[FILE] sgm_dd [ edit | delete | rename ]
[FILE] sgp_dd [ edit | delete | rename ]
[FILE] sg_bg_ctl [ edit | delete | rename ]
[FILE] sg_compare_and_write [ edit | delete | rename ]
[FILE] sg_copy_results [ edit | delete | rename ]
[FILE] sg_dd [ edit | delete | rename ]
[FILE] sg_decode_sense [ edit | delete | rename ]
[FILE] sg_emc_trespass [ edit | delete | rename ]
[FILE] sg_format [ edit | delete | rename ]
[FILE] sg_get_config [ edit | delete | rename ]
[FILE] sg_get_elem_status [ edit | delete | rename ]
[FILE] sg_get_lba_status [ edit | delete | rename ]
[FILE] sg_ident [ edit | delete | rename ]
[FILE] sg_inq [ edit | delete | rename ]
[FILE] sg_logs [ edit | delete | rename ]
[FILE] sg_luns [ edit | delete | rename ]
[FILE] sg_map [ edit | delete | rename ]
[FILE] sg_map26 [ edit | delete | rename ]
[FILE] sg_modes [ edit | delete | rename ]
[FILE] sg_opcodes [ edit | delete | rename ]
[FILE] sg_persist [ edit | delete | rename ]
[FILE] sg_prevent [ edit | delete | rename ]
[FILE] sg_raw [ edit | delete | rename ]
[FILE] sg_rbuf [ edit | delete | rename ]
[FILE] sg_rdac [ edit | delete | rename ]
[FILE] sg_read [ edit | delete | rename ]
[FILE] sg_readcap [ edit | delete | rename ]
[FILE] sg_read_attr [ edit | delete | rename ]
[FILE] sg_read_block_limits [ edit | delete | rename ]
[FILE] sg_read_buffer [ edit | delete | rename ]
[FILE] sg_read_long [ edit | delete | rename ]
[FILE] sg_reassign [ edit | delete | rename ]
[FILE] sg_referrals [ edit | delete | rename ]
[FILE] sg_rep_pip [ edit | delete | rename ]
[FILE] sg_rep_zones [ edit | delete | rename ]
[FILE] sg_requests [ edit | delete | rename ]
[FILE] sg_reset [ edit | delete | rename ]
[FILE] sg_reset_wp [ edit | delete | rename ]
[FILE] sg_rmsn [ edit | delete | rename ]
[FILE] sg_rtpg [ edit | delete | rename ]
[FILE] sg_safte [ edit | delete | rename ]
[FILE] sg_sanitize [ edit | delete | rename ]
[FILE] sg_sat_identify [ edit | delete | rename ]
[FILE] sg_sat_phy_event [ edit | delete | rename ]
[FILE] sg_sat_read_gplog [ edit | delete | rename ]
[FILE] sg_sat_set_features [ edit | delete | rename ]
[FILE] sg_scan [ edit | delete | rename ]
[FILE] sg_seek [ edit | delete | rename ]
[FILE] sg_senddiag [ edit | delete | rename ]
[FILE] sg_ses [ edit | delete | rename ]
[FILE] sg_ses_microcode [ edit | delete | rename ]
[FILE] sg_start [ edit | delete | rename ]
[FILE] sg_stpg [ edit | delete | rename ]
[FILE] sg_stream_ctl [ edit | delete | rename ]
[FILE] sg_sync [ edit | delete | rename ]
[FILE] sg_test_rwbuf [ edit | delete | rename ]
[FILE] sg_timestamp [ edit | delete | rename ]
[FILE] sg_turs [ edit | delete | rename ]
[FILE] sg_unmap [ edit | delete | rename ]
[FILE] sg_verify [ edit | delete | rename ]
[FILE] sg_vpd [ edit | delete | rename ]
[FILE] sg_write_buffer [ edit | delete | rename ]
[FILE] sg_write_long [ edit | delete | rename ]
[FILE] sg_write_same [ edit | delete | rename ]
[FILE] sg_write_verify [ edit | delete | rename ]
[FILE] sg_write_x [ edit | delete | rename ]
[FILE] sg_wr_mode [ edit | delete | rename ]
[FILE] sg_xcopy [ edit | delete | rename ]
[FILE] sg_zone [ edit | delete | rename ]
[FILE] sh [ edit | delete | rename ]
[FILE] sha1sum [ edit | delete | rename ]
[FILE] sha224sum [ edit | delete | rename ]
[FILE] sha256sum [ edit | delete | rename ]
[FILE] sha384sum [ edit | delete | rename ]
[FILE] sha512sum [ edit | delete | rename ]
[FILE] shasum [ edit | delete | rename ]
[FILE] showconsolefont [ edit | delete | rename ]
[FILE] showkey [ edit | delete | rename ]
[FILE] shred [ edit | delete | rename ]
[FILE] shuf [ edit | delete | rename ]
[FILE] sieve [ edit | delete | rename ]
[FILE] sigtool [ edit | delete | rename ]
[FILE] sirtopnm [ edit | delete | rename ]
[FILE] size [ edit | delete | rename ]
[FILE] skill [ edit | delete | rename ]
[FILE] slabtop [ edit | delete | rename ]
[FILE] sldtoppm [ edit | delete | rename ]
[FILE] sleep [ edit | delete | rename ]
[FILE] slogin [ edit | delete | rename ]
[FILE] snap [ edit | delete | rename ]
[FILE] snapctl [ edit | delete | rename ]
[FILE] snapfuse [ edit | delete | rename ]
[FILE] snice [ edit | delete | rename ]
[FILE] soelim [ edit | delete | rename ]
[FILE] sort [ edit | delete | rename ]
[FILE] sos [ edit | delete | rename ]
[FILE] sos-collector [ edit | delete | rename ]
[FILE] sosreport [ edit | delete | rename ]
[FILE] sotruss [ edit | delete | rename ]
[FILE] spctoppm [ edit | delete | rename ]
[FILE] splain [ edit | delete | rename ]
[FILE] split [ edit | delete | rename ]
[FILE] splitfont [ edit | delete | rename ]
[FILE] spottopgm [ edit | delete | rename ]
[FILE] sprof [ edit | delete | rename ]
[FILE] sputoppm [ edit | delete | rename ]
[FILE] sqfscat [ edit | delete | rename ]
[FILE] sqfstar [ edit | delete | rename ]
[FILE] srftopam [ edit | delete | rename ]
[FILE] ss [ edit | delete | rename ]
[FILE] ssh [ edit | delete | rename ]
[FILE] ssh-add [ edit | delete | rename ]
[FILE] ssh-agent [ edit | delete | rename ]
[FILE] ssh-argv0 [ edit | delete | rename ]
[FILE] ssh-copy-id [ edit | delete | rename ]
[FILE] ssh-import-id [ edit | delete | rename ]
[FILE] ssh-import-id-gh [ edit | delete | rename ]
[FILE] ssh-import-id-lp [ edit | delete | rename ]
[FILE] ssh-keygen [ edit | delete | rename ]
[FILE] ssh-keyscan [ edit | delete | rename ]
[FILE] st4topgm [ edit | delete | rename ]
[FILE] stat [ edit | delete | rename ]
[FILE] static-sh [ edit | delete | rename ]
[FILE] stdbuf [ edit | delete | rename ]
[FILE] strace [ edit | delete | rename ]
[FILE] strace-log-merge [ edit | delete | rename ]
[FILE] stream [ edit | delete | rename ]
[FILE] stream-im6 [ edit | delete | rename ]
[FILE] stream-im6.q16 [ edit | delete | rename ]
[FILE] streamzip [ edit | delete | rename ]
[FILE] strings [ edit | delete | rename ]
[FILE] strip [ edit | delete | rename ]
[FILE] stty [ edit | delete | rename ]
[FILE] su [ edit | delete | rename ]
[FILE] sudo [ edit | delete | rename ]
[FILE] sudoedit [ edit | delete | rename ]
[FILE] sudoreplay [ edit | delete | rename ]
[FILE] sum [ edit | delete | rename ]
[FILE] sunicontopnm [ edit | delete | rename ]
[FILE] svgtopam [ edit | delete | rename ]
[FILE] swaks [ edit | delete | rename ]
[FILE] sync [ edit | delete | rename ]
[FILE] systemctl [ edit | delete | rename ]
[FILE] systemd [ edit | delete | rename ]
[FILE] systemd-ac-power [ edit | delete | rename ]
[FILE] systemd-analyze [ edit | delete | rename ]
[FILE] systemd-ask-password [ edit | delete | rename ]
[FILE] systemd-cat [ edit | delete | rename ]
[FILE] systemd-cgls [ edit | delete | rename ]
[FILE] systemd-cgtop [ edit | delete | rename ]
[FILE] systemd-confext [ edit | delete | rename ]
[FILE] systemd-creds [ edit | delete | rename ]
[FILE] systemd-cryptenroll [ edit | delete | rename ]
[FILE] systemd-cryptsetup [ edit | delete | rename ]
[FILE] systemd-delta [ edit | delete | rename ]
[FILE] systemd-detect-virt [ edit | delete | rename ]
[FILE] systemd-escape [ edit | delete | rename ]
[FILE] systemd-firstboot [ edit | delete | rename ]
[FILE] systemd-hwdb [ edit | delete | rename ]
[FILE] systemd-id128 [ edit | delete | rename ]
[FILE] systemd-inhibit [ edit | delete | rename ]
[FILE] systemd-machine-id-setup [ edit | delete | rename ]
[FILE] systemd-mount [ edit | delete | rename ]
[FILE] systemd-notify [ edit | delete | rename ]
[FILE] systemd-path [ edit | delete | rename ]
[FILE] systemd-repart [ edit | delete | rename ]
[FILE] systemd-run [ edit | delete | rename ]
[FILE] systemd-socket-activate [ edit | delete | rename ]
[FILE] systemd-stdio-bridge [ edit | delete | rename ]
[FILE] systemd-sysext [ edit | delete | rename ]
[FILE] systemd-sysusers [ edit | delete | rename ]
[FILE] systemd-tmpfiles [ edit | delete | rename ]
[FILE] systemd-tty-ask-password-agent [ edit | delete | rename ]
[FILE] systemd-umount [ edit | delete | rename ]
[FILE] tabs [ edit | delete | rename ]
[FILE] tac [ edit | delete | rename ]
[FILE] tail [ edit | delete | rename ]
[FILE] tapestat [ edit | delete | rename ]
[FILE] tar [ edit | delete | rename ]
[FILE] taskset [ edit | delete | rename ]
[FILE] tbl [ edit | delete | rename ]
[FILE] tclsh [ edit | delete | rename ]
[FILE] tclsh8.6 [ edit | delete | rename ]
[FILE] tcpdump [ edit | delete | rename ]
[FILE] tee [ edit | delete | rename ]
[FILE] telnet [ edit | delete | rename ]
[FILE] tempfile [ edit | delete | rename ]
[FILE] test [ edit | delete | rename ]
[FILE] tgatoppm [ edit | delete | rename ]
[FILE] thinkjettopbm [ edit | delete | rename ]
[FILE] tic [ edit | delete | rename ]
[FILE] tifftopnm [ edit | delete | rename ]
[FILE] time [ edit | delete | rename ]
[FILE] timedatectl [ edit | delete | rename ]
[FILE] timeout [ edit | delete | rename ]
[FILE] tkconch3 [ edit | delete | rename ]
[FILE] tload [ edit | delete | rename ]
[FILE] tmux [ edit | delete | rename ]
[FILE] tnftp [ edit | delete | rename ]
[FILE] toe [ edit | delete | rename ]
[FILE] top [ edit | delete | rename ]
[FILE] touch [ edit | delete | rename ]
[FILE] tput [ edit | delete | rename ]
[FILE] tr [ edit | delete | rename ]
[FILE] trace-cmd [ edit | delete | rename ]
[FILE] tracepath [ edit | delete | rename ]
[FILE] trial3 [ edit | delete | rename ]
[FILE] troff [ edit | delete | rename ]
[FILE] true [ edit | delete | rename ]
[FILE] truncate [ edit | delete | rename ]
[FILE] tset [ edit | delete | rename ]
[FILE] tsort [ edit | delete | rename ]
[FILE] tty [ edit | delete | rename ]
[FILE] turbostat [ edit | delete | rename ]
[FILE] twist3 [ edit | delete | rename ]
[FILE] twistd3 [ edit | delete | rename ]
[FILE] tzselect [ edit | delete | rename ]
[FILE] ua [ edit | delete | rename ]
[FILE] ubuntu-advantage [ edit | delete | rename ]
[FILE] ubuntu-bug [ edit | delete | rename ]
[FILE] ubuntu-distro-info [ edit | delete | rename ]
[FILE] ubuntu-security-status [ edit | delete | rename ]
[FILE] ucf [ edit | delete | rename ]
[FILE] ucfq [ edit | delete | rename ]
[FILE] ucfr [ edit | delete | rename ]
[FILE] uclampset [ edit | delete | rename ]
[FILE] uconv [ edit | delete | rename ]
[FILE] ucs2any [ edit | delete | rename ]
[FILE] udevadm [ edit | delete | rename ]
[FILE] udisksctl [ edit | delete | rename ]
[FILE] ul [ edit | delete | rename ]
[FILE] umount [ edit | delete | rename ]
[FILE] uname [ edit | delete | rename ]
[FILE] unattended-upgrade [ edit | delete | rename ]
[FILE] unattended-upgrades [ edit | delete | rename ]
[FILE] uncompress [ edit | delete | rename ]
[FILE] unexpand [ edit | delete | rename ]
[FILE] unicode_start [ edit | delete | rename ]
[FILE] unicode_stop [ edit | delete | rename ]
[FILE] uniq [ edit | delete | rename ]
[FILE] unlink [ edit | delete | rename ]
[FILE] unlzma [ edit | delete | rename ]
[FILE] unmkinitramfs [ edit | delete | rename ]
[FILE] unshare [ edit | delete | rename ]
[FILE] unsquashfs [ edit | delete | rename ]
[FILE] unxz [ edit | delete | rename ]
[FILE] unzip [ edit | delete | rename ]
[FILE] unzipsfx [ edit | delete | rename ]
[FILE] unzstd [ edit | delete | rename ]
[FILE] update-alternatives [ edit | delete | rename ]
[FILE] update-mime-database [ edit | delete | rename ]
[FILE] updatedb [ edit | delete | rename ]
[FILE] uptime [ edit | delete | rename ]
[FILE] usb-devices [ edit | delete | rename ]
[FILE] usbhid-dump [ edit | delete | rename ]
[FILE] usbip [ edit | delete | rename ]
[FILE] usbipd [ edit | delete | rename ]
[FILE] usbreset [ edit | delete | rename ]
[FILE] users [ edit | delete | rename ]
[FILE] utmpdump [ edit | delete | rename ]
[FILE] uuidgen [ edit | delete | rename ]
[FILE] uuidparse [ edit | delete | rename ]
[FILE] vacuumdb [ edit | delete | rename ]
[FILE] vacuumlo [ edit | delete | rename ]
[FILE] varlinkctl [ edit | delete | rename ]
[FILE] vcs-run [ edit | delete | rename ]
[FILE] vdir [ edit | delete | rename ]
[FILE] VGAuthService [ edit | delete | rename ]
[FILE] vi [ edit | delete | rename ]
[FILE] view [ edit | delete | rename ]
[FILE] vigpg [ edit | delete | rename ]
[FILE] vim [ edit | delete | rename ]
[FILE] vim.basic [ edit | delete | rename ]
[FILE] vim.tiny [ edit | delete | rename ]
[FILE] vimdiff [ edit | delete | rename ]
[FILE] vimtutor [ edit | delete | rename ]
[FILE] vips [ edit | delete | rename ]
[FILE] vipsedit [ edit | delete | rename ]
[FILE] vipsheader [ edit | delete | rename ]
[FILE] vipsprofile [ edit | delete | rename ]
[FILE] vipsthumbnail [ edit | delete | rename ]
[FILE] vm-support [ edit | delete | rename ]
[FILE] vmhgfs-fuse [ edit | delete | rename ]
[FILE] vmstat [ edit | delete | rename ]
[FILE] vmtoolsd [ edit | delete | rename ]
[FILE] vmware-alias-import [ edit | delete | rename ]
[FILE] vmware-checkvm [ edit | delete | rename ]
[FILE] vmware-hgfsclient [ edit | delete | rename ]
[FILE] vmware-namespace-cmd [ edit | delete | rename ]
[FILE] vmware-rpctool [ edit | delete | rename ]
[FILE] vmware-toolbox-cmd [ edit | delete | rename ]
[FILE] vmware-vgauth-cmd [ edit | delete | rename ]
[FILE] vmware-vmblock-fuse [ edit | delete | rename ]
[FILE] vmware-xferlogs [ edit | delete | rename ]
[FILE] w [ edit | delete | rename ]
[FILE] wall [ edit | delete | rename ]
[FILE] watch [ edit | delete | rename ]
[FILE] watchgnupg [ edit | delete | rename ]
[FILE] wbmptopbm [ edit | delete | rename ]
[FILE] wc [ edit | delete | rename ]
[FILE] wdctl [ edit | delete | rename ]
[FILE] wget [ edit | delete | rename ]
[FILE] whatis [ edit | delete | rename ]
[FILE] whereis [ edit | delete | rename ]
[FILE] which [ edit | delete | rename ]
[FILE] which.debianutils [ edit | delete | rename ]
[FILE] whiptail [ edit | delete | rename ]
[FILE] who [ edit | delete | rename ]
[FILE] whoami [ edit | delete | rename ]
[FILE] whois [ edit | delete | rename ]
[FILE] wifi-status [ edit | delete | rename ]
[FILE] winicontopam [ edit | delete | rename ]
[FILE] winicontoppm [ edit | delete | rename ]
[FILE] write [ edit | delete | rename ]
[FILE] x86_64 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-addr2line [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-ar [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-as [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-c++filt [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-cpp [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-cpp-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-dwp [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-elfedit [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-g++ [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-g++-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-ar [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-ar-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-nm [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-nm-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-ranlib [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcc-ranlib-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov-dump [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov-dump-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov-tool [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gcov-tool-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gold [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gp-archive [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gp-collect-app [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gp-display-html [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gp-display-src [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gp-display-text [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gprof [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-gprofng [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-ld [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-ld.bfd [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-ld.gold [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-lto-dump [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-lto-dump-13 [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-nm [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-objcopy [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-objdump [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-pkg-config [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-pkgconf [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-python3-config [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-python3.12-config [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-ranlib [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-readelf [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-size [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-strings [ edit | delete | rename ]
[FILE] x86_64-linux-gnu-strip [ edit | delete | rename ]
[FILE] x86_energy_perf_policy [ edit | delete | rename ]
[FILE] xargs [ edit | delete | rename ]
[FILE] xauth [ edit | delete | rename ]
[FILE] xbmtopbm [ edit | delete | rename ]
[FILE] xdg-user-dir [ edit | delete | rename ]
[FILE] xdg-user-dirs-update [ edit | delete | rename ]
[FILE] ximtoppm [ edit | delete | rename ]
[FILE] xml2-config [ edit | delete | rename ]
[FILE] xpmtoppm [ edit | delete | rename ]
[FILE] xslt-config [ edit | delete | rename ]
[FILE] xsubpp [ edit | delete | rename ]
[FILE] xvminitoppm [ edit | delete | rename ]
[FILE] xwdtopnm [ edit | delete | rename ]
[FILE] xxd [ edit | delete | rename ]
[FILE] xz [ edit | delete | rename ]
[FILE] xzcat [ edit | delete | rename ]
[FILE] xzcmp [ edit | delete | rename ]
[FILE] xzdiff [ edit | delete | rename ]
[FILE] xzegrep [ edit | delete | rename ]
[FILE] xzfgrep [ edit | delete | rename ]
[FILE] xzgrep [ edit | delete | rename ]
[FILE] xzless [ edit | delete | rename ]
[FILE] xzmore [ edit | delete | rename ]
[FILE] yacc [ edit | delete | rename ]
[FILE] yarn [ edit | delete | rename ]
[FILE] yarnpkg [ edit | delete | rename ]
[FILE] ybmtopbm [ edit | delete | rename ]
[FILE] yes [ edit | delete | rename ]
[FILE] ypdomainname [ edit | delete | rename ]
[FILE] yuvsplittoppm [ edit | delete | rename ]
[FILE] yuvtoppm [ edit | delete | rename ]
[FILE] yuy2topam [ edit | delete | rename ]
[FILE] zcat [ edit | delete | rename ]
[FILE] zcmp [ edit | delete | rename ]
[FILE] zdiff [ edit | delete | rename ]
[FILE] zdump [ edit | delete | rename ]
[FILE] zegrep [ edit | delete | rename ]
[FILE] zeisstopnm [ edit | delete | rename ]
[FILE] zfgrep [ edit | delete | rename ]
[FILE] zforce [ edit | delete | rename ]
[FILE] zgrep [ edit | delete | rename ]
[FILE] zip [ edit | delete | rename ]
[FILE] zipcloak [ edit | delete | rename ]
[FILE] zipdetails [ edit | delete | rename ]
[FILE] zipgrep [ edit | delete | rename ]
[FILE] zipinfo [ edit | delete | rename ]
[FILE] zipnote [ edit | delete | rename ]
[FILE] zipsplit [ edit | delete | rename ]
[FILE] zless [ edit | delete | rename ]
[FILE] zmore [ edit | delete | rename ]
[FILE] znew [ edit | delete | rename ]
[FILE] zstd [ edit | delete | rename ]
[FILE] zstdcat [ edit | delete | rename ]
[FILE] zstdgrep [ edit | delete | rename ]
[FILE] zstdless [ edit | delete | rename ]
[FILE] zstdmt [ edit | delete | rename ]
[FILE] [ [ edit | delete | rename ]
Viewing: /usr/bin/ckbcomp
#!/usr/bin/perl
# ckbcomp -- translate XKB layout to loadkeys or kbdcontrol format
# Copyright © 2005,2006 Anton Zinoviev <anton@lml.bas.bg>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# If you have not received a copy of the GNU General Public License
# along with this program, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use warnings 'all';
use strict;
my $debug_flag = 1;
sub debug {
if ($debug_flag) {
print STDERR "@_";
}
}
sub warning {
print STDERR "WARNING: @_";
}
########### ARGUMENTS ###############################################
my $charmap;
my $compose_charmap;
my $acm;
my $verbosity = 0;
my $installdir=$0;
$installdir =~ s|/[^/]*$||g;
if ($installdir =~ m|/bin$|) {
$installdir =~ s|/bin$||;
} else {
$installdir .= "/..";
}
if ( $installdir eq '' || ! -d "$installdir/bin") {
$installdir = '/usr';
}
my @xdirs = ('/etc/console-setup/ckb',
"$installdir/etc/console-setup/ckb",
'/usr/local/share/X11/xkb',
'/usr/share/X11/xkb',
'/etc/X11/xkb');
my $keycodes;
my $symbols;
my $rules;
my $model;
my @layouts;
my @variants = ();
my @options = ();
my $compact = 0;
my $backspace = '';
my $freebsd = 0;
while (@ARGV) {
$_ = shift @ARGV;
if (s/^-//) {
if (/^charmap$/) {
if ($charmap) {
die "$0: No more than one -charmap option is allowed\n";
}
$charmap = $ARGV[0];
shift @ARGV;
} elsif (/^ccharmap$/) {
if ($compose_charmap) {
die "$0: No more than one -ccharmap option is allowed\n";
}
$compose_charmap = $ARGV[0];
shift @ARGV;
} elsif (/^v(erbose)?$/) {
if ($verbosity) {
die "$0: No more than one -verbose option is allowed\n";
}
if ($ARGV[0] =~ /^[0-9]|10$/) {
$verbosity = $ARGV[0];
shift @ARGV;
} else {
$verbosity = 5;
}
} elsif (/^I(.*)$/) {
@xdirs = ($1, @xdirs);
} elsif (/^keycodes$/) {
if ($keycodes) {
die "$0: No more than one -keycodes option is allowed\n";
}
$keycodes = $ARGV[0];
shift @ARGV;
} elsif (/^symbols$/) {
if ($symbols) {
die "$0: No more than one -symbols option is allowed\n";
}
$symbols = $ARGV[0];
shift @ARGV;
} elsif (/^rules$/) {
if ($rules) {
die "$0: No more than one -rules option is allowed\n";
}
$rules = $ARGV[0];
shift @ARGV;
} elsif (/^model$/) {
if ($model) {
die "$0: No more than one -model option is allowed\n";
}
$model = $ARGV[0];
$model =~ s/[[:space:]]//g;
shift @ARGV;
} elsif (/^layout$/) {
if (@layouts) {
die "$0: No more than one -layout option is allowed\n";
}
$ARGV[0] =~ s/[[:space:]]//g;
@layouts = split (/,/, $ARGV[0], -1);
shift @ARGV;
} elsif (/^variant$/) {
if (@variants) {
die "$0: No more than one -variant option is allowed\n";
}
$ARGV[0] =~ s/[[:space:]]//g;
@variants = split (/,/, $ARGV[0], -1);
shift @ARGV;
} elsif (/^option$/) {
$ARGV[0] =~ s/[[:space:]]//g;
@options = (@options, split (/,/, $ARGV[0], -1));
shift @ARGV;
} elsif (/^help$|^-help$|^\?$/) {
print <<EOT;
Usage: ckbcomp [args] [<layout> [<variant> [<option> ... ]]]
Where legal args are:
-?,-help Print this message
-charmap <name> Specifies the encoding to use
-ccharmap <name> Specifies the encoding to use for compose sequences
-I<dir> Add <dir> to list of directories to be used
-keycodes <name> Specifies keycodes component name
-symbols <name> Specifies symbols component name
-rules <name> Name of rules file to use
-model <name> Specifies model used to choose component names
-layout <name> Specifies layout used to choose component names
-variant <name> Specifies layout variant used to choose component names
-option <name> Adds an option used to choose component names
-v[erbose] [<lvl>] Sets verbosity (1..10). Higher values yield
more messages
-compact Generate compact keymap
-freebsd Generate keymap for FreeBSD
-backspace bs|del Backspace is BS (^h) or DEL (^?)
EOT
exit 0;
} elsif (/^compact$/) {
$compact = 1;
} elsif (/^freebsd$/) {
$freebsd = 1;
} elsif (/^backspace$/) {
$backspace = $ARGV[0];
if ($backspace ne 'del' && $backspace ne 'bs') {
die "$0: Option -backspace accepts either del or bs\n";
}
shift @ARGV;
} else {
die "$0: Unknown option -$_\n";
}
} else {
if (! @layouts) {
$_ =~ s/[[:space:]]//g;
@layouts = split (/,/, $_, -1);
@layouts = ('us') if (! @layouts);
} elsif (! @variants) {
$_ =~ s/[[:space:]]//g;
@variants = split (/,/, $_, -1);
@variants = ('') if (! @variants);
} else {
$_ =~ s/[[:space:]]//g;
@options = (@options, split (/,/, $_, -1));
}
}
}
$rules = 'base' if (! $rules);
$model = 'pc104' if (! $model);
$backspace = $freebsd ? 'bs' : 'del' if (! $backspace);
########### GLOBAL VARIABLES #########################################
my %rules_variables = (); # The variables defined in the rules file
my $arch = 'at'; # The name of a mapping between X key codes and kernel
# keycodes
my %acmtable; # Unicode -> legacy code (defined only when -charmap is given)
my $KEYMAP = ''; # This variable contains the generated keymap
my $broken_caps = 0; # In unicode mode Caps_Lock doesn't work for non-ASCII
# letters. 1 = the keymap contains non-ascii letters.
# See http://bugzilla.kernel.org/show_bug.cgi?id=7746#c21
my %keycodes_table; # x keysym -> x key code
my %aliases; # x keysym -> x keysym
my %symbols_table; # x key code -> [[symbols for group0,...],
# [symbols for group1,...], ...]
my %types_table; # x key code -> key type (i.e. "TWO_LEVEL")
my $augment_method = 1; # Constants for different XKB include methods
my $override_method = 2;
my $replace_method = 3;
my $alternate_method = 4;
my $ignore_method = 5; # This is not a XKB method and means "don't include"
my $filename; # The name of the currently read file
my $stream = ''; # The contents of $filename that still has not been parsed
my $method = $override_method; # The current method (by default "override")
my $base_group = 0; # The base group to include in (for "symbols" files only)
my %kernel_modifiers = ( # Linux
'Shift' => 0x01,
'Shift_Lock' => 0x01,
'AltGr' => 0x02,
'AltGr_Lock' => 0x02,
'Control' => 0x04,
'Control_Lock' => 0x04,
'Alt' => 0x08,
'Alt_Lock' => 0x08,
'ShiftL' => 0x10,
'ShiftL_Lock' => 0x10,
'ShiftR' => 0x20,
'ShiftR_Lock' => 0x20,
'CtrlL' => 0x40,
'CtrlL_Lock' => 0x40,
'CtrlR' => 0x80,
'CtrlR_Lock' => 0x80,
# FreeBSD
'lshift' => 0x01,
'rshift' => 0x01,
'shifta' => 0x01, # is this correct ?
'lshifta' => 0x01, # is this correct ?
'rshifta' => 0x01, # is this correct ?
'alt' => 0x02,
'lalt' => 0x02,
'ralt' => 0x02,
'alta' => 0x02, # is this correct ?
'lalta' => 0x02, # is this correct ?
'ralta' => 0x02, # is this correct ?
'ctrl' => 0x04,
'lctrl' => 0x04,
'rctrl' => 0x04,
'ctrla' => 0x04, # is this correct ?
'lctrla' => 0x04, # is this correct ?
'rctrla' => 0x04, # is this correct ?
'alock' => 0x10,
'ashift' => 0x10,
);
my @modifier_combinations = ('plain',
'shift',
'altgr',
'altgr shift',
'control',
'control shift',
'control altgr',
'control altgr shift',
'alt',
'alt shift',
'alt altgr',
'alt altgr shift',
'alt control',
'alt control shift',
'alt control altgr',
'alt control altgr shift',
'shiftl',
'shiftl shift',
'shiftl altgr',
'shiftl altgr shift',
'shiftl control',
'shiftl control shift',
'shiftl control altgr',
'shiftl control altgr shift',
'shiftl alt',
'shiftl alt shift',
'shiftl alt altgr',
'shiftl alt altgr shift',
'shiftl alt control',
'shiftl alt control shift',
'shiftl alt control altgr',
'shiftl alt control altgr shift',
'shiftr',
'shiftr shift',
'shiftr altgr',
'shiftr altgr shift',
'shiftr control',
'shiftr control shift',
'shiftr control altgr',
'shiftr control altgr shift',
'shiftr alt',
'shiftr alt shift',
'shiftr alt altgr',
'shiftr alt altgr shift',
'shiftr alt control',
'shiftr alt control shift',
'shiftr alt control altgr',
'shiftr alt control altgr shift',
'shiftr shiftl',
'shiftr shiftl shift',
'shiftr shiftl altgr',
'shiftr shiftl altgr shift',
'shiftr shiftl control',
'shiftr shiftl control shift',
'shiftr shiftl control altgr',
'shiftr shiftl control altgr shift',
'shiftr shiftl alt',
'shiftr shiftl alt shift',
'shiftr shiftl alt altgr',
'shiftr shiftl alt altgr shift',
'shiftr shiftl alt control',
'shiftr shiftl alt control shift',
'shiftr shiftl alt control altgr',
'shiftr shiftl alt control altgr shift',
'ctrll',
'ctrll shift',
'ctrll altgr',
'ctrll altgr shift',
'ctrll control',
'ctrll control shift',
'ctrll control altgr',
'ctrll control altgr shift',
'ctrll alt',
'ctrll alt shift',
'ctrll alt altgr',
'ctrll alt altgr shift',
'ctrll alt control',
'ctrll alt control shift',
'ctrll alt control altgr',
'ctrll alt control altgr shift',
'ctrll shiftl',
'ctrll shiftl shift',
'ctrll shiftl altgr',
'ctrll shiftl altgr shift',
'ctrll shiftl control',
'ctrll shiftl control shift',
'ctrll shiftl control altgr',
'ctrll shiftl control altgr shift',
'ctrll shiftl alt',
'ctrll shiftl alt shift',
'ctrll shiftl alt altgr',
'ctrll shiftl alt altgr shift',
'ctrll shiftl alt control',
'ctrll shiftl alt control shift',
'ctrll shiftl alt control altgr',
'ctrll shiftl alt control altgr shift',
'ctrll shiftr',
'ctrll shiftr shift',
'ctrll shiftr altgr',
'ctrll shiftr altgr shift',
'ctrll shiftr control',
'ctrll shiftr control shift',
'ctrll shiftr control altgr',
'ctrll shiftr control altgr shift',
'ctrll shiftr alt',
'ctrll shiftr alt shift',
'ctrll shiftr alt altgr',
'ctrll shiftr alt altgr shift',
'ctrll shiftr alt control',
'ctrll shiftr alt control shift',
'ctrll shiftr alt control altgr',
'ctrll shiftr alt control altgr shift',
'ctrll shiftr shiftl',
'ctrll shiftr shiftl shift',
'ctrll shiftr shiftl altgr',
'ctrll shiftr shiftl altgr shift',
'ctrll shiftr shiftl control',
'ctrll shiftr shiftl control shift',
'ctrll shiftr shiftl control altgr',
'ctrll shiftr shiftl control altgr shift',
'ctrll shiftr shiftl alt',
'ctrll shiftr shiftl alt shift',
'ctrll shiftr shiftl alt altgr',
'ctrll shiftr shiftl alt altgr shift',
'ctrll shiftr shiftl alt control',
'ctrll shiftr shiftl alt control shift',
'ctrll shiftr shiftl alt control altgr',
'ctrll shiftr shiftl alt control altgr shift',
);
# Some Unicodes cause the kernel/loadkeys to issue "Segmentation fault"
# kbd 1.15-1 (deliberately) fails on anything in the range 0xf000..0xffff;
# see http://bugs.debian.org/500116.
my %forbidden;
{
for my $i (0xf000..0xffff) {
$forbidden{$i} = 1;
}
}
my %xkbsym_table = (
'space' => '0020',
'exclam' => '0021',
'quotedbl' => '0022',
'numbersign' => '0023',
'dollar' => '0024',
'percent' => '0025',
'ampersand' => '0026',
'apostrophe' => '0027',
'quoteright' => '0027',
'parenleft' => '0028',
'parenlef' => '0028', # Is this recognised by X ? (speling error)
'parenright' => '0029',
'asterisk' => '002a',
'asterix' => '002a', # Is this recognised by X ? (speling error)
'plus' => '002b',
'comma' => '002c',
'minus' => '002d',
'period' => '002e',
'slash' => '002f',
'0' => '0030',
'1' => '0031',
'2' => '0032',
'3' => '0033',
'4' => '0034',
'5' => '0035',
'6' => '0036',
'7' => '0037',
'8' => '0038',
'9' => '0039',
'colon' => '003a',
'semicolon' => '003b',
'less' => '003c',
'equal' => '003d',
'greater' => '003e',
'question' => '003f',
'at' => '0040',
'A' => '0041',
'B' => '0042',
'C' => '0043',
'D' => '0044',
'E' => '0045',
'F' => '0046',
'G' => '0047',
'H' => '0048',
'I' => '0049',
'J' => '004a',
'K' => '004b',
'L' => '004c',
'M' => '004d',
'N' => '004e',
'O' => '004f',
'P' => '0050',
'Q' => '0051',
'R' => '0052',
'S' => '0053',
'T' => '0054',
'U' => '0055',
'V' => '0056',
'W' => '0057',
'X' => '0058',
'Y' => '0059',
'Z' => '005a',
'bracketleft' => '005b',
'backslash' => '005c',
'backlash' => '005c', # Is this recognised by X ? (speling error)
'bracketright' => '005d',
'circumflex' => '005e',
'asciicircum' => '005e',
'underscore' => '005f',
'grave' => '0060',
'quoteleft' => '0060',
'a' => '0061',
'b' => '0062',
'c' => '0063',
'd' => '0064',
'e' => '0065',
'f' => '0066',
'g' => '0067',
'h' => '0068',
'i' => '0069',
'j' => '006a',
'k' => '006b',
'l' => '006c',
'm' => '006d',
'n' => '006e',
'o' => '006f',
'p' => '0070',
'q' => '0071',
'r' => '0072',
's' => '0073',
't' => '0074',
'u' => '0075',
'v' => '0076',
'w' => '0077',
'x' => '0078',
'y' => '0079',
'z' => '007a',
'braceleft' => '007b',
'pipe' => '007c', # Is this recognised by X ?
'bar' => '007c',
'braceright' => '007d',
'asciitilde' => '007e',
'nobreakspace' => '00a0',
'exclamdown' => '00a1',
'cent' => '00a2',
'sterling' => '00a3',
'currency' => '00a4',
'yen' => '00a5',
'brokenbar' => '00a6',
'section' => '00a7',
'diaeresis' => '00a8',
'copyright' => '00a9',
'ordfeminine' => '00aa',
'guillemotleft' => '00ab',
'notsign' => '00ac',
'hyphen' => '00ad',
'registered' => '00ae',
'macron' => '00af',
'overbar' => '00af',
'degree' => '00b0',
'plusminus' => '00b1',
'twosuperior' => '00b2',
'threesuperior' => '00b3',
'acute' => '0027', # APOSTROPHE instead of ACUTE ACCENT
'mu' => '00b5',
'paragraph' => '00b6',
'periodcentered' => '00b7',
'cedilla' => '00b8',
'onesuperior' => '00b9',
'masculine' => '00ba',
'guillemotright' => '00bb',
'onequarter' => '00bc',
'onehalf' => '00bd',
'threequarters' => '00be',
'questiondown' => '00bf',
'Agrave' => '00c0',
'Aacute' => '00c1',
'Acircumflex' => '00c2',
'Atilde' => '00c3',
'Adiaeresis' => '00c4',
'Aring' => '00c5',
'AE' => '00c6',
'Ccedilla' => '00c7',
'Egrave' => '00c8',
'Eacute' => '00c9',
'Ecircumflex' => '00ca',
'Ediaeresis' => '00cb',
'Igrave' => '00cc',
'Iacute' => '00cd',
'Icircumflex' => '00ce',
'Idiaeresis' => '00cf',
'ETH' => '00d0',
'Eth' => '00d0',
'Ntilde' => '00d1',
'Ograve' => '00d2',
'Oacute' => '00d3',
'Ocircumflex' => '00d4',
'Otilde' => '00d5',
'Odiaeresis' => '00d6',
'multiply' => '00d7',
'Ooblique' => '00d8',
'Oslash' => '00d8',
'Ugrave' => '00d9',
'Uacute' => '00da',
'Ucircumflex' => '00db',
'Udiaeresis' => '00dc',
'Yacute' => '00dd',
'THORN' => '00de',
'Thorn' => '00de',
'ssharp' => '00df',
'agrave' => '00e0',
'aacute' => '00e1',
'acircumflex' => '00e2',
'atilde' => '00e3',
'adiaeresis' => '00e4',
'aring' => '00e5',
'ae' => '00e6',
'ccedilla' => '00e7',
'egrave' => '00e8',
'eacute' => '00e9',
'ecircumflex' => '00ea',
'ediaeresis' => '00eb',
'igrave' => '00ec',
'iacute' => '00ed',
'icircumflex' => '00ee',
'idiaeresis' => '00ef',
'eth' => '00f0',
'ntilde' => '00f1',
'ograve' => '00f2',
'oacute' => '00f3',
'ocircumflex' => '00f4',
'otilde' => '00f5',
'odiaeresis' => '00f6',
'division' => '00f7',
'oslash' => '00f8',
'ooblique' => '00f8',
'ugrave' => '00f9',
'uacute' => '00fa',
'ucircumflex' => '00fb',
'udiaeresis' => '00fc',
'yacute' => '00fd',
'thorn' => '00fe',
'ydiaeresis' => '00ff',
'Amacron' => '0100',
'amacron' => '0101',
'Abreve' => '0102',
'abreve' => '0103',
'Aogonek' => '0104',
'aogonek' => '0105',
'Cacute' => '0106',
'cacute' => '0107',
'Ccircumflex' => '0108',
'ccircumflex' => '0109',
'Cabovedot' => '010a',
'cabovedot' => '010b',
'Ccaron' => '010c',
'ccaron' => '010d',
'Dcaron' => '010e',
'dcaron' => '010f',
'Dstroke' => '0110',
'dstroke' => '0111',
'Emacron' => '0112',
'emacron' => '0113',
'Eabovedot' => '0116',
'eabovedot' => '0117',
'Eogonek' => '0118',
'eogonek' => '0119',
'Ecaron' => '011a',
'ecaron' => '011b',
'Gcircumflex' => '011c',
'gcircumflex' => '011d',
'Gbreve' => '011e',
'gbreve' => '011f',
'Gabovedot' => '0120',
'gabovedot' => '0121',
'Gcedilla' => '0122',
'gcedilla' => '0123',
'Hcircumflex' => '0124',
'hcircumflex' => '0125',
'Hstroke' => '0126',
'hstroke' => '0127',
'Itilde' => '0128',
'itilde' => '0129',
'Imacron' => '012a',
'imacron' => '012b',
'Ibreve' => '012c',
'ibreve' => '012d',
'Iogonek' => '012e',
'iogonek' => '012f',
'Iabovedot' => '0130',
'idotless' => '0131',
'Jcircumflex' => '0134',
'jcircumflex' => '0135',
'Kcedilla' => '0136',
'kcedilla' => '0137',
'kra' => '0138',
'Lacute' => '0139',
'lacute' => '013a',
'Lcedilla' => '013b',
'lcedilla' => '013c',
'Lcaron' => '013d',
'lcaron' => '013e',
'Lstroke' => '0141',
'lstroke' => '0142',
'Nacute' => '0143',
'nacute' => '0144',
'Ncedilla' => '0145',
'ncedilla' => '0146',
'Ncaron' => '0147',
'ncaron' => '0148',
'ENG' => '014a',
'eng' => '014b',
'Omacron' => '014c',
'omacron' => '014d',
'Odoubleacute' => '0150',
'odoubleacute' => '0151',
'OE' => '0152',
'oe' => '0153',
'Racute' => '0154',
'racute' => '0155',
'Rcedilla' => '0156',
'rcedilla' => '0157',
'Rcaron' => '0158',
'rcaron' => '0159',
'Sacute' => '015a',
'sacute' => '015b',
'Scircumflex' => '015c',
'scircumflex' => '015d',
'Scedilla' => '015e',
'scedilla' => '015f',
'Scaron' => '0160',
'scaron' => '0161',
'Tcedilla' => '0162',
'tcedilla' => '0163',
'Tcaron' => '0164',
'tcaron' => '0165',
'Tslash' => '0166',
'tslash' => '0167',
'Utilde' => '0168',
'utilde' => '0169',
'Umacron' => '016a',
'umacron' => '016b',
'Ubreve' => '016c',
'ubreve' => '016d',
'Uring' => '016e',
'uring' => '016f',
'Udoubleacute' => '0170',
'udoubleacute' => '0171',
'Uogonek' => '0172',
'uogonek' => '0173',
'Wcircumflex' => '0174',
'wcircumflex' => '0175',
'Ycircumflex' => '0176',
'ycircumflex' => '0177',
'Ydiaeresis' => '0178',
'Zacute' => '0179',
'zacute' => '017a',
'Zabovedot' => '017b',
'zabovedot' => '017c',
'Zcaron' => '017d',
'zcaron' => '017e',
'SCHWA' => '018f',
'Schwa' => '018f', # Is this recognised by X ?
'function' => '0192',
'Obarred' => '019f',
'Ohorn' => '01a0', # Is this recognised by X ?
'ohorn' => '01a1', # Is this recognised by X ?
'Uhorn' => '01af',
'uhorn' => '01b0',
'Zstroke' => '01b5',
'zstroke' => '01b6',
'EZH' => '01b7',
'Ezh' => '01b7',
'Ocaron' => '01d1',
'ocaron' => '01d2',
'Gcaron' => '01e6', # Is this recognised by X ?
'gcaron' => '01e7', # Is this recognised by X ?
'schwa' => '0259', # Is this recognised by X ?
'obarred' => '0275',
'ezh' => '0292',
'caron' => '02c7',
'breve' => '02d8',
'abovedot' => '02d9',
'ogonek' => '02db',
'doubleacute' => '02dd',
'Greek_accentdieresis' => '0385',
'Greek_ALPHAaccent' => '0386',
'Greek_EPSILONaccent' => '0388',
'Greek_ETAaccent' => '0389',
'Greek_IOTAaccent' => '038a',
'Greek_OMICRONaccent' => '038c',
'Greek_UPSILONaccent' => '038e',
'Greek_OMEGAaccent' => '038f',
'Greek_iotaaccentdieresis' => '0390',
'Greek_ALPHA' => '0391',
'Greek_BETA' => '0392',
'Greek_GAMMA' => '0393',
'Greek_DELTA' => '0394',
'Greek_EPSILON' => '0395',
'Greek_ZETA' => '0396',
'Greek_ETA' => '0397',
'Greek_THETA' => '0398',
'Greek_IOTA' => '0399',
'Greek_KAPPA' => '039a',
'Greek_LAMBDA' => '039b',
'Greek_LAMDA' => '039b', # Is this recognised by X ? (speling error)
'Greek_MU' => '039c',
'Greek_NU' => '039d',
'Greek_XI' => '039e',
'Greek_OMICRON' => '039f',
'Greek_PI' => '03a0',
'Greek_RHO' => '03a1',
'Greek_SIGMA' => '03a3',
'Greek_TAU' => '03a4',
'Greek_UPSILON' => '03a5',
'Greek_PHI' => '03a6',
'Greek_CHI' => '03a7',
'Greek_PSI' => '03a8',
'Greek_OMEGA' => '03a9',
'Greek_IOTAdiaeresis' => '03aa',
'Greek_UPSILONdieresis' => '03ab',
'Greek_alphaaccent' => '03ac',
'Greek_epsilonaccent' => '03ad',
'Greek_etaaccent' => '03ae',
'Greek_iotaaccent' => '03af',
'Greek_upsilonaccentdieresis' => '03b0',
'Greek_alpha' => '03b1',
'Greek_beta' => '03b2',
'Greek_gamma' => '03b3',
'Greek_delta' => '03b4',
'Greek_epsilon' => '03b5',
'Greek_zeta' => '03b6',
'Greek_eta' => '03b7',
'Greek_theta' => '03b8',
'Greek_iota' => '03b9',
'Greek_kappa' => '03ba',
'Greek_lambda' => '03bb',
'Greek_lamda' => '03bb', # Is this recognised by X ? (speling error)
'Greek_mu' => '03bc',
'Greek_nu' => '03bd',
'Greek_xi' => '03be',
'Greek_omicron' => '03bf',
'Greek_pi' => '03c0',
'Greek_rho' => '03c1',
'Greek_finalsmallsigma' => '03c2',
'Greek_sigma' => '03c3',
'Greek_tau' => '03c4',
'Greek_upsilon' => '03c5',
'Greek_phi' => '03c6',
'Greek_chi' => '03c7',
'Greek_psi' => '03c8',
'Greek_omega' => '03c9',
'Greek_iotadieresis' => '03ca',
'Greek_upsilondieresis' => '03cb',
'Greek_omicronaccent' => '03cc',
'Greek_upsilonaccent' => '03cd',
'Greek_omegaaccent' => '03ce',
'Cyrillic_IO' => '0401',
'Serbian_DJE' => '0402',
'Macedonia_GJE' => '0403',
'Ukrainian_IE' => '0404',
'Macedonia_DSE' => '0405',
'Ukrainian_I' => '0406',
'Ukrainian_YI' => '0407',
'Cyrillic_JE' => '0408',
'Cyrillic_LJE' => '0409',
'Cyrillic_NJE' => '040a',
'Serbian_TSHE' => '040b',
'Macedonia_KJE' => '040c',
'Byelorussian_SHORTU' => '040e',
'Cyrillic_DZHE' => '040f',
'Cyrillic_A' => '0410',
'Cyrillic_BE' => '0411',
'Cyrillic_VE' => '0412',
'Cyrillic_GHE' => '0413',
'Cyrillic_DE' => '0414',
'Cyrillic_IE' => '0415',
'Cyrillic_ZHE' => '0416',
'Cyrillic_ZH' => '0416',
'Cyrillic_ZE' => '0417',
'Cyrillic_I' => '0418',
'Cyrillic_SHORTI' => '0419',
'Cyrillic_KA' => '041a',
'Cyrillic_EL' => '041b',
'Cyrillic_EM' => '041c',
'Cyrillic_EN' => '041d',
'Cyrillic_N' => '041d',
'Cyrillic_O' => '041e',
'Cyrillic_PE' => '041f',
'Cyrillic_ER' => '0420',
'Cyrillic_ES' => '0421',
'Cyrillic_TE' => '0422',
'Cyrillic_U' => '0423',
'Cyrillic_EF' => '0424',
'Cyrillic_F' => '0424',
'Cyrillic_HA' => '0425',
'Cyrillic_TSE' => '0426',
'Cyrillic_CHE' => '0427',
'Cyrillic_SHA' => '0428',
'Cyrillic_SHCHA' => '0429',
'Cyrillic_HARDSIGN' => '042a',
'Cyrillic_YERU' => '042b',
'Cyrillic_UI' => '042b',
'Cyrillic_SOFTSIGN' => '042c',
'Cyrillic_E' => '042d',
'Cyrillic_YU' => '042e',
'Cyrillic_YA' => '042f',
'Cyrillic_a' => '0430',
'Cyrillic_be' => '0431',
'Cyrillic_ve' => '0432',
'Cyrillic_ghe' => '0433',
'Cyrillic_de' => '0434',
'Cyrillic_ie' => '0435',
'Cyrillic_zhe' => '0436',
'Cyrillic_zh' => '0436',
'Cyrillic_ze' => '0437',
'Cyrillic_i' => '0438',
'Cyrillic_shorti' => '0439',
'Cyrillic_ka' => '043a',
'Cyrillic_el' => '043b',
'Cyrillic_em' => '043c',
'Cyrillic_en' => '043d',
'Cyrillic_n' => '043d',
'Cyrillic_o' => '043e',
'Cyrillic_pe' => '043f',
'Cyrillic_er' => '0440',
'Cyrillic_es' => '0441',
'Cyrillic_te' => '0442',
'Cyrillic_u' => '0443',
'Cyrillic_ef' => '0444',
'Cyrillic_f' => '0444',
'Cyrillic_ha' => '0445',
'Cyrillic_tse' => '0446',
'Cyrillic_che' => '0447',
'Cyrillic_sha' => '0448',
'Cyrillic_shcha' => '0449',
'Cyrillic_hardsign' => '044a',
'Cyrillic_yeru' => '044b',
'Cyrillic_ui' => '044b',
'Cyrillic_softsign' => '044c',
'Cyrillic_e' => '044d',
'Cyrillic_yu' => '044e',
'Cyrillic_ya' => '044f',
'Cyrillic_io' => '0451',
'Serbian_dje' => '0452',
'Macedonia_gje' => '0453',
'Ukrainian_ie' => '0454',
'Macedonia_dse' => '0455',
'Ukrainian_i' => '0456',
'Ukrainian_yi' => '0457',
'Cyrillic_je' => '0458',
'Cyrillic_lje' => '0459',
'Cyrillic_nje' => '045a',
'Serbian_tshe' => '045b',
'Macedonia_kje' => '045c',
'Byelorussian_shortu' => '045e',
'Cyrillic_dzhe' => '045f',
'Ukrainian_GHE_WITH_UPTURN' => '0490', # Is this recognised by X ?
'Ukrainian_ghe_with_upturn' => '0491', # Is this recognised by X ?
'Cyrillic_GHE_bar' => '0492', # Is this recognised by X ?
'Cyrillic_ghe_bar' => '0493', # Is this recognised by X ?
'Cyrillic_ZHE_descender' => '0496',
'Cyrillic_zhe_descender' => '0497',
'Cyrillic_KA_descender' => '049a', # Is this recognised by X ?
'Cyrillic_ka_descender' => '049b', # Is this recognised by X ?
'Cyrillic_KA_vertstroke' => '049c', # Is this recognised by X ?
'Cyrillic_ka_vertstroke' => '049d', # Is this recognised by X ?
'Cyrillic_EN_descender' => '04a2', # Is this recognised by X ?
'Cyrillic_en_descender' => '04a3', # Is this recognised by X ?
'Cyrillic_U_straight' => '04ae', # Is this recognised by X ?
'Cyrillic_u_straight' => '04af', # Is this recognised by X ?
'Cyrillic_U_straight_bar' => '04b0', # Is this recognised by X ?
'Cyrillic_u_straight_bar' => '04b1', # Is this recognised by X ?
'Cyrillic_HA_descender' => '04b2', # Is this recognised by X ?
'Cyrillic_ha_descender' => '04b3', # Is this recognised by X ?
'Cyrillic_CHE_descender' => '04b6',
'Cyrillic_che_descender' => '04b7',
'Cyrillic_CHE_vertstroke' => '04b8', # Is this recognised by X ?
'Cyrillic_che_vertstroke' => '04b9', # Is this recognised by X ?
'Cyrillic_SHHA' => '04ba', # Is this recognised by X ?
'Cyrillic_shha' => '04bb', # Is this recognised by X ?
'Cyrillic_SCHWA' => '04d8', # Is this recognised by X ?
'Cyrillic_schwa' => '04d9', # Is this recognised by X ?
'Cyrillic_I_macron' => '04e2',
'Cyrillic_i_macron' => '04e3',
'Cyrillic_O_bar' => '04e8', # Is this recognised by X ?
'Cyrillic_o_bar' => '04e9', # Is this recognised by X ?
'Cyrillic_U_macron' => '04ee',
'Cyrillic_u_macron' => '04ef',
'Armenian_AYB' => '0531',
'Armenian_BEN' => '0532',
'Armenian_GIM' => '0533',
'Armenian_DA' => '0534',
'Armenian_YECH' => '0535',
'Armenian_ZA' => '0536',
'Armenian_E' => '0537',
'Armenian_AT' => '0538',
'Armenian_TO' => '0539',
'Armenian_ZHE' => '053a',
'Armenian_INI' => '053b',
'Armenian_LYUN' => '053c',
'Armenian_KHE' => '053d',
'Armenian_TSA' => '053e',
'Armenian_KEN' => '053f',
'Armenian_HO' => '0540',
'Armenian_DZA' => '0541',
'Armenian_GHAT' => '0542',
'Armenian_TCHE' => '0543',
'Armenian_MEN' => '0544',
'Armenian_HI' => '0545',
'Armenian_NU' => '0546',
'Armenian_SHA' => '0547',
'Armenian_VO' => '0548',
'Armenian_CHA' => '0549',
'Armenian_PE' => '054a',
'Armenian_JE' => '054b',
'Armenian_RA' => '054c',
'Armenian_SE' => '054d',
'Armenian_VEV' => '054e',
'Armenian_TYUN' => '054f',
'Armenian_RE' => '0550',
'Armenian_TSO' => '0551',
'Armenian_VYUN' => '0552',
'Armenian_PYUR' => '0553',
'Armenian_KE' => '0554',
'Armenian_O' => '0555',
'Armenian_FE' => '0556',
'Armenian_apostrophe' => '055a',
'Armenian_accent' => '055b',
'Armenian_shesht' => '055b',
'Armenian_amanak' => '055c',
'Armenian_exclam' => '055c',
'Armenian_but' => '055d',
'Armenian_separation_mark' => '055d',
'Armenian_paruyk' => '055e',
'Armenian_question' => '055e',
'Armenian_ayb' => '0561',
'Armenian_ben' => '0562',
'Armenian_gim' => '0563',
'Armenian_da' => '0564',
'Armenian_yech' => '0565',
'Armenian_za' => '0566',
'Armenian_e' => '0567',
'Armenian_at' => '0568',
'Armenian_to' => '0569',
'Armenian_zhe' => '056a',
'Armenian_ini' => '056b',
'Armenian_lyun' => '056c',
'Armenian_khe' => '056d',
'Armenian_tsa' => '056e',
'Armenian_ken' => '056f',
'Armenian_ho' => '0570',
'Armenian_dza' => '0571',
'Armenian_ghat' => '0572',
'Armenian_tche' => '0573',
'Armenian_men' => '0574',
'Armenian_hi' => '0575',
'Armenian_nu' => '0576',
'Armenian_sha' => '0577',
'Armenian_vo' => '0578',
'Armenian_cha' => '0579',
'Armenian_pe' => '057a',
'Armenian_je' => '057b',
'Armenian_ra' => '057c',
'Armenian_se' => '057d',
'Armenian_vev' => '057e',
'Armenian_tyun' => '057f',
'Armenian_re' => '0580',
'Armenian_tso' => '0581',
'Armenian_vyun' => '0582',
'Armenian_pyur' => '0583',
'Armenian_ke' => '0584',
'Armenian_o' => '0585',
'Armenian_fe' => '0586',
'Armenian_ligature_ew' => '0587',
'Armenian_full_stop' => '0589',
'Armenian_verjaket' => '0589',
'Armenian_hyphen' => '058a',
'Armenian_yentamna' => '058a',
'hebrew_aleph' => '05d0',
'hebrew_bet' => '05d1',
'hebrew_gimel' => '05d2',
'hebrew_dalet' => '05d3',
'hebrew_he' => '05d4',
'hebrew_waw' => '05d5',
'hebrew_zain' => '05d6',
'hebrew_chet' => '05d7',
'hebrew_tet' => '05d8',
'hebrew_yod' => '05d9',
'hebrew_finalkaph' => '05da',
'hebrew_kaph' => '05db',
'hebrew_lamed' => '05dc',
'hebrew_finalmem' => '05dd',
'hebrew_mem' => '05de',
'hebrew_finalnun' => '05df',
'hebrew_nun' => '05e0',
'hebrew_samech' => '05e1',
'hebrew_ayin' => '05e2',
'hebrew_finalpe' => '05e3',
'hebrew_pe' => '05e4',
'hebrew_finalzade' => '05e5',
'hebrew_zade' => '05e6',
'hebrew_qoph' => '05e7',
'hebrew_resh' => '05e8',
'hebrew_shin' => '05e9',
'hebrew_taw' => '05ea',
'Arabic_comma' => '060c',
'Arabic_semicolon' => '061b',
'Arabic_question_mark' => '061f',
'Arabic_hamza' => '0621',
'Arabic_maddaonalef' => '0622',
'Arabic_hamzaonalef' => '0623',
'Arabic_hamzaonwaw' => '0624',
'Arabic_hamzaunderalef' => '0625',
'Arabic_hamzaonyeh' => '0626',
'Arabic_alef' => '0627',
'Arabic_beh' => '0628',
'Arabic_tehmarbuta' => '0629',
'Arabic_teh' => '062a',
'Arabic_theh' => '062b',
'Arabic_jeem' => '062c',
'Arabic_hah' => '062d',
'Arabic_khah' => '062e',
'Arabic_dal' => '062f',
'Arabic_thal' => '0630',
'Arabic_ra' => '0631',
'Arabic_zain' => '0632',
'Arabic_seen' => '0633',
'Arabic_sheen' => '0634',
'Arabic_sad' => '0635',
'Arabic_dad' => '0636',
'Arabic_tah' => '0637',
'Arabic_zah' => '0638',
'Arabic_ain' => '0639',
'Arabic_ghain' => '063a',
'Arabic_tatweel' => '0640',
'Arabic_feh' => '0641',
'Arabic_qaf' => '0642',
'Arabic_kaf' => '0643',
'Arabic_lam' => '0644',
'Arabic_meem' => '0645',
'Arabic_noon' => '0646',
'Arabic_ha' => '0647',
'Arabic_heh' => '0647', # Is this recognised by X ?
'Arabic_waw' => '0648',
'Arabic_alefmaksura' => '0649',
'Arabic_yeh' => '064a',
'Arabic_fathatan' => '064b',
'Arabic_dammatan' => '064c',
'Arabic_kasratan' => '064d',
'Arabic_fatha' => '064e',
'Arabic_damma' => '064f',
'Arabic_kasra' => '0650',
'Arabic_shadda' => '0651',
'Arabic_sukun' => '0652',
'Arabic_madda_above' => '0653', # Is this recognised by X ?
'Arabic_hamza_above' => '0654', # Is this recognised by X ?
'Arabic_hamza_below' => '0655', # Is this recognised by X ?
'Arabic_0' => '0660',
'Arabic_1' => '0661',
'Arabic_2' => '0662',
'Arabic_3' => '0663',
'Arabic_4' => '0664',
'Arabic_5' => '0665',
'Arabic_6' => '0666',
'Arabic_7' => '0667',
'Arabic_8' => '0668',
'Arabic_9' => '0669',
'Arabic_percent' => '066a',
'Arabic_superscript_alef' => '0670', # Is this recognised by X ?
'Arabic_tteh' => '0679',
'Arabic_peh' => '067e',
'Arabic_tcheh' => '0686',
'Arabic_ddal' => '0688',
'Arabic_rreh' => '0691',
'Arabic_jeh' => '0698',
'Arabic_veh' => '06a4',
'Arabic_keheh' => '06a9',
'Arabic_gaf' => '06af',
'Arabic_noon_ghunna' => '06ba',
'Arabic_heh_doachashmee' => '06be',
'Arabic_heh_goal' => '06c1',
'Arabic_farsi_yeh' => '06cc',
'Farsi_yeh' => '06cc',
'Arabic_yeh_baree' => '06d2',
'Arabic_fullstop' => '06d4',
'Farsi_0' => '06f0',
'Farsi_1' => '06f1',
'Farsi_2' => '06f2',
'Farsi_3' => '06f3',
'Farsi_4' => '06f4',
'Farsi_5' => '06f5',
'Farsi_6' => '06f6',
'Farsi_7' => '06f7',
'Farsi_8' => '06f8',
'Farsi_9' => '06f9',
'Sinh_ng' => '0d82',
'Sinh_h2' => '0d83',
'Sinh_a' => '0d85',
'Sinh_aa' => '0d86',
'Sinh_ae' => '0d87',
'Sinh_aee' => '0d88',
'Sinh_i' => '0d89',
'Sinh_ii' => '0d8a',
'Sinh_u' => '0d8b',
'Sinh_uu' => '0d8c',
'Sinh_ri' => '0d8d',
'Sinh_rii' => '0d8e',
'Sinh_lu' => '0d8f',
'Sinh_luu' => '0d90',
'Sinh_e' => '0d91',
'Sinh_ee' => '0d92',
'Sinh_ai' => '0d93',
'Sinh_o' => '0d94',
'Sinh_oo' => '0d95',
'Sinh_au' => '0d96',
'Sinh_ka' => '0d9a',
'Sinh_kha' => '0d9b',
'Sinh_ga' => '0d9c',
'Sinh_gha' => '0d9d',
'Sinh_ng2' => '0d9e',
'Sinh_nga' => '0d9f',
'Sinh_ca' => '0da0',
'Sinh_cha' => '0da1',
'Sinh_ja' => '0da2',
'Sinh_jha' => '0da3',
'Sinh_nya' => '0da4',
'Sinh_jnya' => '0da5',
'Sinh_nja' => '0da6',
'Sinh_tta' => '0da7',
'Sinh_ttha' => '0da8',
'Sinh_dda' => '0da9',
'Sinh_ddha' => '0daa',
'Sinh_nna' => '0dab',
'Sinh_ndda' => '0dac',
'Sinh_tha' => '0dad',
'Sinh_thha' => '0dae',
'Sinh_dha' => '0daf',
'Sinh_dhha' => '0db0',
'Sinh_na' => '0db1',
'Sinh_ndha' => '0db3',
'Sinh_pa' => '0db4',
'Sinh_pha' => '0db5',
'Sinh_ba' => '0db6',
'Sinh_bha' => '0db7',
'Sinh_ma' => '0db8',
'Sinh_mba' => '0db9',
'Sinh_ya' => '0dba',
'Sinh_ra' => '0dbb',
'Sinh_la' => '0dbd',
'Sinh_va' => '0dc0',
'Sinh_sha' => '0dc1',
'Sinh_ssha' => '0dc2',
'Sinh_sa' => '0dc3',
'Sinh_ha' => '0dc4',
'Sinh_lla' => '0dc5',
'Sinh_fa' => '0dc6',
'Sinh_al' => '0dca',
'Sinh_aa2' => '0dcf',
'Sinh_ae2' => '0dd0',
'Sinh_aee2' => '0dd1',
'Sinh_i2' => '0dd2',
'Sinh_ii2' => '0dd3',
'Sinh_u2' => '0dd4',
'Sinh_uu2' => '0dd6',
'Sinh_ru2' => '0dd8',
'Sinh_e2' => '0dd9',
'Sinh_ee2' => '0dda',
'Sinh_ai2' => '0ddb',
'Sinh_o2' => '0ddc',
'Sinh_oo2' => '0ddd',
'Sinh_au2' => '0dde',
'Sinh_lu2' => '0ddf',
'Sinh_ruu2' => '0df2',
'Sinh_luu2' => '0df3',
'Thai_kokai' => '0e01',
'Thai_khokhai' => '0e02',
'Thai_khokhuat' => '0e03',
'Thai_khokhwai' => '0e04',
'Thai_khokhon' => '0e05',
'Thai_khorakhang' => '0e06',
'Thai_ngongu' => '0e07',
'Thai_chochan' => '0e08',
'Thai_choching' => '0e09',
'Thai_chochang' => '0e0a',
'Thai_soso' => '0e0b',
'Thai_chochoe' => '0e0c',
'Thai_yoying' => '0e0d',
'Thai_dochada' => '0e0e',
'Thai_topatak' => '0e0f',
'Thai_thothan' => '0e10',
'Thai_thonangmontho' => '0e11',
'Thai_thophuthao' => '0e12',
'Thai_nonen' => '0e13',
'Thai_dodek' => '0e14',
'Thai_totao' => '0e15',
'Thai_thothung' => '0e16',
'Thai_thothahan' => '0e17',
'Thai_thothong' => '0e18',
'Thai_nonu' => '0e19',
'Thai_bobaimai' => '0e1a',
'Thai_popla' => '0e1b',
'Thai_phophung' => '0e1c',
'Thai_fofa' => '0e1d',
'Thai_phophan' => '0e1e',
'Thai_fofan' => '0e1f',
'Thai_phosamphao' => '0e20',
'Thai_moma' => '0e21',
'Thai_yoyak' => '0e22',
'Thai_rorua' => '0e23',
'Thai_ru' => '0e24',
'Thai_loling' => '0e25',
'Thai_lu' => '0e26',
'Thai_wowaen' => '0e27',
'Thai_sosala' => '0e28',
'Thai_sorusi' => '0e29',
'Thai_sosua' => '0e2a',
'Thai_hohip' => '0e2b',
'Thai_lochula' => '0e2c',
'Thai_oang' => '0e2d',
'Thai_honokhuk' => '0e2e',
'Thai_paiyannoi' => '0e2f',
'Thai_saraa' => '0e30',
'Thai_maihanakat' => '0e31',
'Thai_saraaa' => '0e32',
'Thai_saraam' => '0e33',
'Thai_sarai' => '0e34',
'Thai_saraii' => '0e35',
'Thai_saraue' => '0e36',
'Thai_sarauee' => '0e37',
'Thai_sarau' => '0e38',
'Thai_sarauu' => '0e39',
'Thai_phinthu' => '0e3a',
'Thai_baht' => '0e3f',
'Thai_sarae' => '0e40',
'Thai_saraae' => '0e41',
'Thai_sarao' => '0e42',
'Thai_saraaimaimuan' => '0e43',
'Thai_saraaimaimalai' => '0e44',
'Thai_lakkhangyao' => '0e45',
'Thai_maiyamok' => '0e46',
'Thai_maitaikhu' => '0e47',
'Thai_maiek' => '0e48',
'Thai_maitho' => '0e49',
'Thai_maitri' => '0e4a',
'Thai_maichattawa' => '0e4b',
'Thai_thanthakhat' => '0e4c',
'Thai_nikhahit' => '0e4d',
'Thai_leksun' => '0e50',
'Thai_leknung' => '0e51',
'Thai_leksong' => '0e52',
'Thai_leksam' => '0e53',
'Thai_leksi' => '0e54',
'Thai_lekha' => '0e55',
'Thai_lekhok' => '0e56',
'Thai_lekchet' => '0e57',
'Thai_lekpaet' => '0e58',
'Thai_lekkao' => '0e59',
'Georgian_an' => '10d0',
'Georgian_ban' => '10d1',
'Georgian_gan' => '10d2',
'Georgian_don' => '10d3',
'Georgian_en' => '10d4',
'Georgian_vin' => '10d5',
'Georgian_zen' => '10d6',
'Georgian_tan' => '10d7',
'Georgian_in' => '10d8',
'Georgian_kan' => '10d9',
'Georgian_las' => '10da',
'Georgian_man' => '10db',
'Georgian_nar' => '10dc',
'Georgian_on' => '10dd',
'Georgian_par' => '10de',
'Georgian_zhar' => '10df',
'Georgian_rae' => '10e0',
'Georgian_san' => '10e1',
'Georgian_tar' => '10e2',
'Georgian_un' => '10e3',
'Georgian_phar' => '10e4',
'Georgian_khar' => '10e5',
'Georgian_ghan' => '10e6',
'Georgian_qar' => '10e7',
'Georgian_shin' => '10e8',
'Georgian_chin' => '10e9',
'Georgian_can' => '10ea',
'Georgian_jil' => '10eb',
'Georgian_cil' => '10ec',
'Georgian_char' => '10ed',
'Georgian_xan' => '10ee',
'Georgian_jhan' => '10ef',
'Georgian_hae' => '10f0',
'Georgian_he' => '10f1',
'Georgian_hie' => '10f2',
'Georgian_we' => '10f3',
'Georgian_har' => '10f4',
'Georgian_hoe' => '10f5',
'Georgian_fi' => '10f6',
'Hangul_J_Kiyeog' => '11a8',
'Hangul_J_SsangKiyeog' => '11a9',
'Hangul_J_KiyeogSios' => '11aa',
'Hangul_J_Nieun' => '11ab',
'Hangul_J_NieunJieuj' => '11ac',
'Hangul_J_NieunHieuh' => '11ad',
'Hangul_J_Dikeud' => '11ae',
'Hangul_J_Rieul' => '11af',
'Hangul_J_RieulKiyeog' => '11b0',
'Hangul_J_RieulMieum' => '11b1',
'Hangul_J_RieulPieub' => '11b2',
'Hangul_J_RieulSios' => '11b3',
'Hangul_J_RieulTieut' => '11b4',
'Hangul_J_RieulPhieuf' => '11b5',
'Hangul_J_RieulHieuh' => '11b6',
'Hangul_J_Mieum' => '11b7',
'Hangul_J_Pieub' => '11b8',
'Hangul_J_PieubSios' => '11b9',
'Hangul_J_Sios' => '11ba',
'Hangul_J_SsangSios' => '11bb',
'Hangul_J_Ieung' => '11bc',
'Hangul_J_Jieuj' => '11bd',
'Hangul_J_Cieuc' => '11be',
'Hangul_J_Khieuq' => '11bf',
'Hangul_J_Tieut' => '11c0',
'Hangul_J_Phieuf' => '11c1',
'Hangul_J_Hieuh' => '11c2',
'Hangul_J_PanSios' => '11eb',
'Hangul_J_KkogjiDalrinIeung' => '11f0',
'Hangul_J_YeorinHieuh' => '11f9',
'Babovedot' => '1e02', # Is this recognised by X ?
'babovedot' => '1e03', # Is this recognised by X ?
'Dabovedot' => '1e0a', # Is this recognised by X ?
'dabovedot' => '1e0b', # Is this recognised by X ?
'Fabovedot' => '1e1e', # Is this recognised by X ?
'fabovedot' => '1e1f', # Is this recognised by X ?
'Lbelowdot' => '1e36',
'lbelowdot' => '1e37',
'Mabovedot' => '1e40', # Is this recognised by X ?
'mabovedot' => '1e41', # Is this recognised by X ?
'Pabovedot' => '1e56', # Is this recognised by X ?
'pabovedot' => '1e57', # Is this recognised by X ?
'Sabovedot' => '1e60', # Is this recognised by X ?
'sabovedot' => '1e61', # Is this recognised by X ?
'Tabovedot' => '1e6a', # Is this recognised by X ?
'tabovedot' => '1e6b', # Is this recognised by X ?
'Wgrave' => '1e80',
'wgrave' => '1e81',
'Wacute' => '1e82',
'wacute' => '1e83',
'Wdiaeresis' => '1e84',
'wdiaeresis' => '1e85',
'Xabovedot' => '1e8a',
'xabovedot' => '1e8b',
'Abelowdot' => '1ea0',
'abelowdot' => '1ea1',
'Ahook' => '1ea2',
'ahook' => '1ea3',
'Acircumflexacute' => '1ea4',
'acircumflexacute' => '1ea5',
'Acircumflexgrave' => '1ea6',
'acircumflexgrave' => '1ea7',
'Acircumflexhook' => '1ea8',
'acircumflexhook' => '1ea9',
'Acircumflextilde' => '1eaa',
'acircumflextilde' => '1eab',
'Acircumflexbelowdot' => '1eac',
'acircumflexbelowdot' => '1ead',
'Abreveacute' => '1eae',
'abreveacute' => '1eaf',
'Abrevegrave' => '1eb0',
'abrevegrave' => '1eb1',
'Abrevehook' => '1eb2',
'abrevehook' => '1eb3',
'Abrevetilde' => '1eb4',
'abrevetilde' => '1eb5',
'Abrevebelowdot' => '1eb6',
'abrevebelowdot' => '1eb7',
'Ebelowdot' => '1eb8',
'ebelowdot' => '1eb9',
'Ehook' => '1eba',
'ehook' => '1ebb',
'Etilde' => '1ebc',
'etilde' => '1ebd',
'Ecircumflexacute' => '1ebe',
'ecircumflexacute' => '1ebf',
'Ecircumflexgrave' => '1ec0',
'ecircumflexgrave' => '1ec1',
'Ecircumflexhook' => '1ec2',
'ecircumflexhook' => '1ec3',
'Ecircumflextilde' => '1ec4',
'ecircumflextilde' => '1ec5',
'Ecircumflexbelowdot' => '1ec6',
'ecircumflexbelowdot' => '1ec7',
'Ihook' => '1ec8',
'ihook' => '1ec9',
'Ibelowdot' => '1eca',
'ibelowdot' => '1ecb',
'Obelowdot' => '1ecc',
'obelowdot' => '1ecd',
'Ohook' => '1ece',
'ohook' => '1ecf',
'Ocircumflexacute' => '1ed0',
'ocircumflexacute' => '1ed1',
'Ocircumflexgrave' => '1ed2',
'ocircumflexgrave' => '1ed3',
'Ocircumflexhook' => '1ed4',
'ocircumflexhook' => '1ed5',
'Ocircumflextilde' => '1ed6',
'ocircumflextilde' => '1ed7',
'Ocircumflexbelowdot' => '1ed8',
'ocircumflexbelowdot' => '1ed9',
'Ohornacute' => '1eda',
'ohornacute' => '1edb',
'Ohorngrave' => '1edc',
'ohorngrave' => '1edd',
'Ohornhook' => '1ede',
'ohornhook' => '1edf',
'Ohorntilde' => '1ee0',
'ohorntilde' => '1ee1',
'Ohornbelowdot' => '1ee2',
'ohornbelowdot' => '1ee3',
'Ubelowdot' => '1ee4',
'ubelowdot' => '1ee5',
'Uhook' => '1ee6',
'uhook' => '1ee7',
'Uhornacute' => '1ee8',
'uhornacute' => '1ee9',
'Uhorngrave' => '1eea',
'uhorngrave' => '1eeb',
'Uhornhook' => '1eec',
'uhornhook' => '1eed',
'Uhorntilde' => '1eee',
'uhorntilde' => '1eef',
'Uhornbelowdot' => '1ef0',
'uhornbelowdot' => '1ef1',
'Ygrave' => '1ef2',
'ygrave' => '1ef3',
'Ybelowdot' => '1ef4',
'ybelowdot' => '1ef5',
'Yhook' => '1ef6',
'yhook' => '1ef7',
'Ytilde' => '1ef8',
'ytilde' => '1ef9',
'enspace' => '2002',
'emspace' => '2003',
'em3space' => '2004',
'em4space' => '2005',
'digitspace' => '2007',
'punctspace' => '2008',
'thinspace' => '2009',
'hairspace' => '200a',
'figdash' => '2012',
'endash' => '2013',
'emdash' => '2014',
'Greek_horizbar' => '2015',
'hebrew_doublelowline' => '2017',
'leftsinglequotemark' => '2018',
'rightsinglequotemark' => '2019',
'singlelowquotemark' => '201a',
'leftdoublequotemark' => '201c',
'rightdoublequotemark' => '201d',
'doublelowquotemark' => '201e',
'dagger' => '2020',
'doubledagger' => '2021',
'enfilledcircbullet' => '2022',
'doubbaselinedot' => '2025',
'ellipsis' => '2026',
'permille' => '2030',
'minutes' => '2032',
'seconds' => '2033',
'caret' => '2038',
'guilsinglleft' => '2039',
'guilsinglright' => '203a',
'overline' => '203e',
'zerosuperior' => '2070',
'foursuperior' => '2074',
'fivesuperior' => '2075',
'sixsuperior' => '2076',
'sevensuperior' => '2077',
'eightsuperior' => '2078',
'ninesuperior' => '2079',
'zerosubscript' => '2080',
'onesubscript' => '2081',
'twosubscript' => '2082',
'threesubscript' => '2083',
'foursubscript' => '2084',
'fivesubscript' => '2085',
'sixsubscript' => '2086',
'sevensubscript' => '2087',
'eightsubscript' => '2088',
'ninesubscript' => '2089',
'EcuSign' => '20a0',
'ColonSign' => '20a1',
'CruzeiroSign' => '20a2',
'FFrancSign' => '20a3',
'LiraSign' => '20a4',
'MillSign' => '20a5',
'NairaSign' => '20a6',
'PesetaSign' => '20a7',
'RupeeSign' => '20a8',
'WonSign' => '20a9',
'Korean_Won' => '20a9',
'NewSheqelSign' => '20aa',
'DongSign' => '20ab', # Is this recognised by X ?
'EuroSign' => '20ac',
'Euro' => '20ac',
'careof' => '2105',
'numerosign' => '2116',
'phonographcopyright' => '2117',
'prescription' => '211e',
'trademark' => '2122',
'onethird' => '2153',
'twothirds' => '2154',
'onefifth' => '2155',
'twofifths' => '2156',
'threefifths' => '2157',
'fourfifths' => '2158',
'onesixth' => '2159',
'fivesixths' => '215a',
'oneeighth' => '215b',
'threeeighths' => '215c',
'fiveeighths' => '215d',
'seveneighths' => '215e',
'leftarrow' => '2190',
'uparrow' => '2191',
'rightarrow' => '2192',
'downarrow' => '2193',
'implies' => '21d2',
'ifonlyif' => '21d4',
'partialderivative' => '2202',
'partdifferential' => '2202',
'emptyset' => '2205',
'nabla' => '2207',
'elementof' => '2208',
'notelementof' => '2209',
'containsas' => '220B',
'jot' => '2218',
'radical' => '221a',
'squareroot' => '221a',
'cuberoot' => '221b',
'fourthroot' => '221c',
'variation' => '221d',
'infinity' => '221e',
'logicaland' => '2227',
'upcaret' => '2227',
'downcaret' => '2228',
'logicalor' => '2228',
'intersection' => '2229',
'upshoe' => '2229',
'downshoe' => '222a',
'union' => '222a',
'integral' => '222b',
'dintegral' => '222c',
'tintegral' => '222d',
'therefore' => '2234',
'because' => '2235',
'approximate' => '223c',
'similarequal' => '2243',
'notapproxeq' => '2247',
'approxeq' => '2248',
'notidentical' => '2262',
'notequal' => '2260',
'identical' => '2261',
'stricteq' => '2263',
'lessthanequal' => '2264',
'greaterthanequal' => '2265',
'includedin' => '2282',
'leftshoe' => '2282',
'includes' => '2283',
'rightshoe' => '2283',
'lefttack' => '22a2',
'righttack' => '22a3',
'uptack' => '22a4',
'downtack' => '22a5',
'upstile' => '2308',
'downstile' => '230a',
'telephonerecorder' => '2315',
'topintegral' => '2320',
'botintegral' => '2321',
'leftanglebracket' => '2329',
'rightanglebracket' => '232a',
'quad' => '2395',
'topleftparens' => '239b',
'botleftparens' => '239d',
'toprightparens' => '239e',
'botrightparens' => '23a0',
'topleftsqbracket' => '23a1',
'botleftsqbracket' => '23a3',
'toprightsqbracket' => '23a4',
'botrightsqbracket' => '23a6',
'leftmiddlecurlybrace' => '23a8',
'rightmiddlecurlybrace' => '23ac',
'leftradical' => '23b7',
'horizlinescan1' => '23ba',
'horizlinescan3' => '23bb',
'horizlinescan7' => '23bc',
'horizlinescan9' => '23bd',
'ht' => '2409',
'lf' => '240a',
'vt' => '240b',
'ff' => '240c',
'cr' => '240d',
'nl' => '2424',
'horizconnector' => '2500',
'horizlinescan5' => '2500',
'vertbar' => '2502',
'vertconnector' => '2502',
'topleftradical' => '250c',
'upleftcorner' => '250c',
'uprightcorner' => '2510',
'lowleftcorner' => '2514',
'lowrightcorner' => '2518',
'leftt' => '251c',
'rightt' => '2524',
'topt' => '252c',
'bott' => '2534',
'crossinglines' => '253c',
'checkerboard' => '2592',
'enfilledsqbullet' => '25aa',
'enopensquarebullet' => '25ab',
'filledrectbullet' => '25ac',
'openrectbullet' => '25ad',
'emfilledrect' => '25ae',
'emopenrectangle' => '25af',
'filledtribulletup' => '25b2',
'opentribulletup' => '25b3',
'filledrighttribullet' => '25b6',
'rightopentriangle' => '25b7',
'filledtribulletdown' => '25bc',
'opentribulletdown' => '25bd',
'filledlefttribullet' => '25c0',
'leftopentriangle' => '25c1',
'soliddiamond' => '25c6',
'circle' => '25cb',
'emopencircle' => '25cb',
'emfilledcircle' => '25cf',
'enopencircbullet' => '25e6',
'openstar' => '2606',
'telephone' => '260e',
'signaturemark' => '2613',
'leftpointer' => '261c',
'rightpointer' => '261e',
'femalesymbol' => '2640',
'malesymbol' => '2642',
'club' => '2663',
'heart' => '2665',
'diamond' => '2666',
'musicalflat' => '266d',
'musicalsharp' => '266f',
'checkmark' => '2713',
'ballotcross' => '2717',
'latincross' => '271d',
'maltesecross' => '2720',
'braille_dots_1' => '2801',
'braille_dots_2' => '2802',
'braille_dots_12' => '2803',
'braille_dots_3' => '2804',
'braille_dots_13' => '2805',
'braille_dots_23' => '2806',
'braille_dots_123' => '2807',
'braille_dots_4' => '2808',
'braille_dots_14' => '2809',
'braille_dots_24' => '280a',
'braille_dots_124' => '280b',
'braille_dots_34' => '280c',
'braille_dots_134' => '280d',
'braille_dots_234' => '280e',
'braille_dots_1234' => '280f',
'braille_dots_5' => '2810',
'braille_dots_15' => '2811',
'braille_dots_25' => '2812',
'braille_dots_125' => '2813',
'braille_dots_35' => '2814',
'braille_dots_135' => '2815',
'braille_dots_235' => '2816',
'braille_dots_1235' => '2817',
'braille_dots_45' => '2818',
'braille_dots_145' => '2819',
'braille_dots_245' => '281a',
'braille_dots_1245' => '281b',
'braille_dots_345' => '281c',
'braille_dots_1345' => '281d',
'braille_dots_2345' => '281e',
'braille_dots_12345' => '281f',
'braille_dots_6' => '2820',
'braille_dots_16' => '2821',
'braille_dots_26' => '2822',
'braille_dots_126' => '2823',
'braille_dots_36' => '2824',
'braille_dots_136' => '2825',
'braille_dots_236' => '2826',
'braille_dots_1236' => '2827',
'braille_dots_46' => '2828',
'braille_dots_146' => '2829',
'braille_dots_246' => '282a',
'braille_dots_1246' => '282b',
'braille_dots_346' => '282c',
'braille_dots_1346' => '282d',
'braille_dots_2346' => '282e',
'braille_dots_12346' => '282f',
'braille_dots_56' => '2830',
'braille_dots_156' => '2831',
'braille_dots_256' => '2832',
'braille_dots_1256' => '2833',
'braille_dots_356' => '2834',
'braille_dots_1356' => '2835',
'braille_dots_2356' => '2836',
'braille_dots_12356' => '2837',
'braille_dots_456' => '2838',
'braille_dots_1456' => '2839',
'braille_dots_2456' => '283a',
'braille_dots_12456' => '283b',
'braille_dots_3456' => '283c',
'braille_dots_13456' => '283d',
'braille_dots_23456' => '283e',
'braille_dots_123456' => '283f',
'braille_dots_7' => '2840',
'braille_dots_17' => '2841',
'braille_dots_27' => '2842',
'braille_dots_127' => '2843',
'braille_dots_37' => '2844',
'braille_dots_137' => '2845',
'braille_dots_237' => '2846',
'braille_dots_1237' => '2847',
'braille_dots_47' => '2848',
'braille_dots_147' => '2849',
'braille_dots_247' => '284a',
'braille_dots_1247' => '284b',
'braille_dots_347' => '284c',
'braille_dots_1347' => '284d',
'braille_dots_2347' => '284e',
'braille_dots_12347' => '284f',
'braille_dots_57' => '2850',
'braille_dots_157' => '2851',
'braille_dots_257' => '2852',
'braille_dots_1257' => '2853',
'braille_dots_357' => '2854',
'braille_dots_1357' => '2855',
'braille_dots_2357' => '2856',
'braille_dots_12357' => '2857',
'braille_dots_457' => '2858',
'braille_dots_1457' => '2859',
'braille_dots_2457' => '285a',
'braille_dots_12457' => '285b',
'braille_dots_3457' => '285c',
'braille_dots_13457' => '285d',
'braille_dots_23457' => '285e',
'braille_dots_123457' => '285f',
'braille_dots_67' => '2860',
'braille_dots_167' => '2861',
'braille_dots_267' => '2862',
'braille_dots_1267' => '2863',
'braille_dots_367' => '2864',
'braille_dots_1367' => '2865',
'braille_dots_2367' => '2866',
'braille_dots_12367' => '2867',
'braille_dots_467' => '2868',
'braille_dots_1467' => '2869',
'braille_dots_2467' => '286a',
'braille_dots_12467' => '286b',
'braille_dots_3467' => '286c',
'braille_dots_13467' => '286d',
'braille_dots_23467' => '286e',
'braille_dots_123467' => '286f',
'braille_dots_567' => '2870',
'braille_dots_1567' => '2871',
'braille_dots_2567' => '2872',
'braille_dots_12567' => '2873',
'braille_dots_3567' => '2874',
'braille_dots_13567' => '2875',
'braille_dots_23567' => '2876',
'braille_dots_123567' => '2877',
'braille_dots_4567' => '2878',
'braille_dots_14567' => '2879',
'braille_dots_24567' => '287a',
'braille_dots_124567' => '287b',
'braille_dots_34567' => '287c',
'braille_dots_134567' => '287d',
'braille_dots_234567' => '287e',
'braille_dots_1234567' => '287f',
'braille_dots_8' => '2880',
'braille_dots_18' => '2881',
'braille_dots_28' => '2882',
'braille_dots_128' => '2883',
'braille_dots_38' => '2884',
'braille_dots_138' => '2885',
'braille_dots_238' => '2886',
'braille_dots_1238' => '2887',
'braille_dots_48' => '2888',
'braille_dots_148' => '2889',
'braille_dots_248' => '288a',
'braille_dots_1248' => '288b',
'braille_dots_348' => '288c',
'braille_dots_1348' => '288d',
'braille_dots_2348' => '288e',
'braille_dots_12348' => '288f',
'braille_dots_58' => '2890',
'braille_dots_158' => '2891',
'braille_dots_258' => '2892',
'braille_dots_1258' => '2893',
'braille_dots_358' => '2894',
'braille_dots_1358' => '2895',
'braille_dots_2358' => '2896',
'braille_dots_12358' => '2897',
'braille_dots_458' => '2898',
'braille_dots_1458' => '2899',
'braille_dots_2458' => '289a',
'braille_dots_12458' => '289b',
'braille_dots_3458' => '289c',
'braille_dots_13458' => '289d',
'braille_dots_23458' => '289e',
'braille_dots_123458' => '289f',
'braille_dots_68' => '28a0',
'braille_dots_168' => '28a1',
'braille_dots_268' => '28a2',
'braille_dots_1268' => '28a3',
'braille_dots_368' => '28a4',
'braille_dots_1368' => '28a5',
'braille_dots_2368' => '28a6',
'braille_dots_12368' => '28a7',
'braille_dots_468' => '28a8',
'braille_dots_1468' => '28a9',
'braille_dots_2468' => '28aa',
'braille_dots_12468' => '28ab',
'braille_dots_3468' => '28ac',
'braille_dots_13468' => '28ad',
'braille_dots_23468' => '28ae',
'braille_dots_123468' => '28af',
'braille_dots_568' => '28b0',
'braille_dots_1568' => '28b1',
'braille_dots_2568' => '28b2',
'braille_dots_12568' => '28b3',
'braille_dots_3568' => '28b4',
'braille_dots_13568' => '28b5',
'braille_dots_23568' => '28b6',
'braille_dots_123568' => '28b7',
'braille_dots_4568' => '28b8',
'braille_dots_14568' => '28b9',
'braille_dots_24568' => '28ba',
'braille_dots_124568' => '28bb',
'braille_dots_34568' => '28bc',
'braille_dots_134568' => '28bd',
'braille_dots_234568' => '28be',
'braille_dots_1234568' => '28bf',
'braille_dots_78' => '28c0',
'braille_dots_178' => '28c1',
'braille_dots_278' => '28c2',
'braille_dots_1278' => '28c3',
'braille_dots_378' => '28c4',
'braille_dots_1378' => '28c5',
'braille_dots_2378' => '28c6',
'braille_dots_12378' => '28c7',
'braille_dots_478' => '28c8',
'braille_dots_1478' => '28c9',
'braille_dots_2478' => '28ca',
'braille_dots_12478' => '28cb',
'braille_dots_3478' => '28cc',
'braille_dots_13478' => '28cd',
'braille_dots_23478' => '28ce',
'braille_dots_123478' => '28cf',
'braille_dots_578' => '28d0',
'braille_dots_1578' => '28d1',
'braille_dots_2578' => '28d2',
'braille_dots_12578' => '28d3',
'braille_dots_3578' => '28d4',
'braille_dots_13578' => '28d5',
'braille_dots_23578' => '28d6',
'braille_dots_123578' => '28d7',
'braille_dots_4578' => '28d8',
'braille_dots_14578' => '28d9',
'braille_dots_24578' => '28da',
'braille_dots_124578' => '28db',
'braille_dots_34578' => '28dc',
'braille_dots_134578' => '28dd',
'braille_dots_234578' => '28de',
'braille_dots_1234578' => '28df',
'braille_dots_678' => '28e0',
'braille_dots_1678' => '28e1',
'braille_dots_2678' => '28e2',
'braille_dots_12678' => '28e3',
'braille_dots_3678' => '28e4',
'braille_dots_13678' => '28e5',
'braille_dots_23678' => '28e6',
'braille_dots_123678' => '28e7',
'braille_dots_4678' => '28e8',
'braille_dots_14678' => '28e9',
'braille_dots_24678' => '28ea',
'braille_dots_124678' => '28eb',
'braille_dots_34678' => '28ec',
'braille_dots_134678' => '28ed',
'braille_dots_234678' => '28ee',
'braille_dots_1234678' => '28ef',
'braille_dots_5678' => '28f0',
'braille_dots_15678' => '28f1',
'braille_dots_25678' => '28f2',
'braille_dots_125678' => '28f3',
'braille_dots_35678' => '28f4',
'braille_dots_135678' => '28f5',
'braille_dots_235678' => '28f6',
'braille_dots_1235678' => '28f7',
'braille_dots_45678' => '28f8',
'braille_dots_145678' => '28f9',
'braille_dots_245678' => '28fa',
'braille_dots_1245678' => '28fb',
'braille_dots_345678' => '28fc',
'braille_dots_1345678' => '28fd',
'braille_dots_2345678' => '28fe',
'braille_dots_12345678' => '28ff',
'kana_comma' => '3001',
'kana_fullstop' => '3002',
'kana_openingbracket' => '300c',
'kana_closingbracket' => '300d',
'voicedsound' => '309b',
'semivoicedsound' => '309c',
'kana_a' => '30a1',
'kana_A' => '30a2',
'kana_i' => '30a3',
'kana_I' => '30a4',
'kana_u' => '30a5',
'kana_U' => '30a6',
'kana_e' => '30a7',
'kana_E' => '30a8',
'kana_o' => '30a9',
'kana_O' => '30aa',
'kana_KA' => '30ab',
'kana_KI' => '30ad',
'kana_KU' => '30af',
'kana_KE' => '30b1',
'kana_KO' => '30b3',
'kana_SA' => '30b5',
'kana_SHI' => '30b7',
'kana_SU' => '30b9',
'kana_SE' => '30bb',
'kana_SO' => '30bd',
'kana_TA' => '30bf',
'kana_CHI' => '30c1',
'kana_tsu' => '30c3',
'kana_TSU' => '30c4',
'kana_TE' => '30c6',
'kana_TO' => '30c8',
'kana_NA' => '30ca',
'kana_NI' => '30cb',
'kana_NU' => '30cc',
'kana_NE' => '30cd',
'kana_NO' => '30ce',
'kana_HA' => '30cf',
'kana_HI' => '30d2',
'kana_FU' => '30d5',
'kana_HE' => '30d8',
'kana_HO' => '30db',
'kana_MA' => '30de',
'kana_MI' => '30df',
'kana_MU' => '30e0',
'kana_ME' => '30e1',
'kana_MO' => '30e2',
'kana_ya' => '30e3',
'kana_YA' => '30e4',
'kana_yu' => '30e5',
'kana_YU' => '30e6',
'kana_yo' => '30e7',
'kana_YO' => '30e8',
'kana_RA' => '30e9',
'kana_RI' => '30ea',
'kana_RU' => '30eb',
'kana_RE' => '30ec',
'kana_RO' => '30ed',
'kana_WA' => '30ef',
'kana_WO' => '30f2',
'kana_N' => '30f3',
'kana_conjunctive' => '30fb',
'kana_middledot' => '30fb', # Is this recognised by X ?
'prolongedsound' => '30fc',
'Hangul_Kiyeog' => '3131',
'Hangul_SsangKiyeog' => '3132',
'Hangul_KiyeogSios' => '3133',
'Hangul_Nieun' => '3134',
'Hangul_NieunJieuj' => '3135',
'Hangul_NieunHieuh' => '3136',
'Hangul_Dikeud' => '3137',
'Hangul_SsangDikeud' => '3138',
'Hangul_Rieul' => '3139',
'Hangul_RieulKiyeog' => '313a',
'Hangul_RieulMieum' => '313b',
'Hangul_RieulPieub' => '313c',
'Hangul_RieulSios' => '313d',
'Hangul_RieulTieut' => '313e',
'Hangul_RieulPhieuf' => '313f',
'Hangul_RieulHieuh' => '3140',
'Hangul_Mieum' => '3141',
'Hangul_Pieub' => '3142',
'Hangul_SsangPieub' => '3143',
'Hangul_PieubSios' => '3144',
'Hangul_Sios' => '3145',
'Hangul_SsangSios' => '3146',
'Hangul_Ieung' => '3147',
'Hangul_Jieuj' => '3148',
'Hangul_SsangJieuj' => '3149',
'Hangul_Cieuc' => '314a',
'Hangul_Khieuq' => '314b',
'Hangul_Tieut' => '314c',
'Hangul_Phieuf' => '314d',
'Hangul_Hieuh' => '314e',
'Hangul_A' => '314f',
'Hangul_AE' => '3150',
'Hangul_YA' => '3151',
'Hangul_YAE' => '3152',
'Hangul_EO' => '3153',
'Hangul_E' => '3154',
'Hangul_YEO' => '3155',
'Hangul_YE' => '3156',
'Hangul_O' => '3157',
'Hangul_WA' => '3158',
'Hangul_WAE' => '3159',
'Hangul_OE' => '315a',
'Hangul_YO' => '315b',
'Hangul_U' => '315c',
'Hangul_WEO' => '315d',
'Hangul_WE' => '315e',
'Hangul_WI' => '315f',
'Hangul_YU' => '3160',
'Hangul_EU' => '3161',
'Hangul_YI' => '3162',
'Hangul_I' => '3163',
'Hangul_RieulYeorinHieuh' => '316d',
'Hangul_SunkyeongeumMieum' => '3171',
'Hangul_SunkyeongeumPieub' => '3178',
'Hangul_PanSios' => '317f',
'Hangul_KkogjiDalrinIeung' => '3181',
'Hangul_SunkyeongeumPhieuf' => '3184',
'Hangul_YeorinHieuh' => '3186',
'Hangul_AraeA' => '318d',
'Hangul_AraeAE' => '318e',
);
if ($freebsd) {
%xkbsym_table =
(%xkbsym_table,
# Control symbols
'BackSpace' => 'bs', # 0008
'Tab' => 'ht', # 0009
'Linefeed' => 'nl', # 000a
'Return' => 'cr', # 000d
'Escape' => 'esc', # 001b
# Keypad keys
'KP_Multiply' => '\'*\'',
'KP_Add' => 'fkey56',
'KP_Seprator' => '\',\'', # Is this recognised by X ?
'KP_Separator' => '\',\'',
'KP_Subtract' => 'fkey52',
'KP_Decimal' => '\'.\'',
'KP_Divide' => '\'/\'',
'KP_0' => '\'0\'',
'KP_1' => '\'1\'',
'KP_2' => '\'2\'',
'KP_3' => '\'3\'',
'KP_4' => '\'4\'',
'KP_5' => '\'5\'',
'KP_6' => '\'6\'',
'KP_7' => '\'7\'',
'KP_8' => '\'8\'',
'KP_9' => '\'9\'',
'KP_Enter' => 'cr',
'KP_Home' => 'fkey49',
'KP_Left' => 'fkey53',
'KP_Up' => 'fkey50',
'KP_Right' => 'fkey55',
'KP_Down' => 'fkey58',
'KP_Prior' => 'fkey51',
'KP_Page_Up' => 'fkey51',
'KP_Next' => 'fkey59',
'KP_Page_Down' => 'fkey59',
'KP_End' => 'fkey57',
'KP_Begin' => 'fkey54',
'KP_Insert' => 'fkey60',
'KP_Delete' => 'del',
'KP_Space' => 'sp',
'KP_Equal' => '\'=\'',
'KP_Tab' => 'ht',
'KP_F1' => 'fkey01',
'KP_F2' => 'fkey02',
'KP_F3' => 'fkey03',
'KP_F4' => 'fkey04',
# Dead symbols
'dead_grave' => 'dgra',
'SunFA_Grave' => 'dgra_grave', # Is this recognised by X ?
'dead_acute' => 'dacu',
'SunFA_Acute' => 'dacu', # Is this recognised by X ?
'dead_circumflex' => 'dcir',
'SunFA_Circum' => 'dcir', # Is this recognised by X ?
'dead_tilde' => 'dtil',
'SunFA_Tilde' => 'dtil',
'dead_breve' => 'dbre',
'dead_diaeresis' => 'ddia',
'SunFA_Diaeresis' => 'ddia', # Is this recognised by X ?
'dead_doubleacute' => 'ddac',
'dead_caron' => 'dcar',
'dead_V' => 'dcar', # Is this correct?
'dead_cedilla' => 'dced',
'SunFA_Cedilla' => 'dced', # Is this recognised by X ?
'dead_ogonek' => 'dogo',
'dead_macron' => 'dmac',
'dead_abovedot' => 'ddot',
'dead_abovering' => 'drin',
'dead_stroke' => 'nop',
'dead_belowdot' => '0323', # ???? Vietnamese
'dead_hook' => 'dsla', # ???? Vietnamese
'dead_belowcomma' => 'nop',
'dead_currency' => 'nop',
'dead_doublegrave' => 'nop',
'dead_invertedbreve' => 'nop',
'dead_iota' => '03b9', # ???? Greek
'dead_horn' => '031b', # ???? Greek
'dead_psili' => 'nop', # ???? Greek
'dead_dasia' => 'nop', # ???? Greek
'dead_greek' => 'fe8c',
# Modifiers
'Multi_key' => 'nop',
'Mode_switch' => 'ashift',
'script_switch' => 'nop',
'Shift_L' => 'lshift',
'Shift_R' => 'rshift',
'Control_L' => 'lctrl',
'Control_R' => 'rctrl',
'Caps_Lock' => 'clock',
'Shift_Lock' => 'clock',
'Meta_L' => 'meta',
'Meta_R' => 'meta',
'Alt_L' => 'lalt',
'Alt_R' => 'ralt',
'Super_L' => 'fkey62',
'Super_R' => 'fkey63',
'Hyper_L' => 'meta',
'Hyper_R' => 'meta',
'ISO_Lock' => 'clock',
'ISO_Level2_Latch' => 'lshift',
'ISO_Level3_Shift' => 'alt',
'ISO_Level3_Latch' => 'alt',
'ISO_Level3_Lock' => 'alta',
'ISO_Level5_Shift' => 'alt',
'ISO_Level5_Latch' => 'alt',
'ISO_Level5_Lock' => 'alta',
'ISO_Group_Shift' => 'ashift',
'ISO_Group_Latch' => 'ashift',
'ISO_Group_Lock' => 'alock',
'ISO_Next_Group' => 'alock',
'ISO_Next_Group_Lock' => 'alock',
'ISO_Prev_Group' => 'alock',
'ISO_Prev_Group_Lock' => 'alock',
'ISO_First_Group' => 'alock',
'ISO_First_Group_Lock' => 'alock',
'ISO_Last_Group' => 'alock',
'ISO_Last_Group_Lock' => 'alock',
# Other symbols
'NoAction' => 'NoSymbol', # Is this recognised by X ?
'nosymbol' => 'NoSymbol', # Is this recognised by X ?
'Nosymbol' => 'NoSymbol', # Is this recognised by X ?
'noSymbol' => 'NoSymbol', # Is this recognised by X ?
'NoSymbol' => 'NoSymbol',
'any' => 'NoSymbol', # Is this recognised by X ?
'VoidSymbol' => 'nop',
'voidsymbol' => 'nop', # Is this recognised by X ?
'ISO_Left_Tab' => 'ht',
'Clear' => 'nop',
'Pause' => 'saver',
'Scroll_Lock' => 'slock',
'Sys_Req' => 'nop',
'Delete' => 'fkey61',
'Codeinput' => 'nop',
'SingleCandidate' => 'nop',
'MultipleCandidate' => 'nop',
'PreviousCandidate' => 'nop',
'Home' => 'fkey49',
'Left' => 'fkey53',
'Up' => 'fkey50',
'Right' => 'fkey55',
'Down' => 'fkey58',
'Prior' => 'fkey51',
'Page_Up' => 'fkey51',
'Next' => 'fkey59',
'Page_Down' => 'fkey59',
'End' => 'fkey57',
'Begin' => 'fkey54',
'Select' => 'fkey57',
'Print' => 'nscr',
'Execute' => 'nop',
'Insert' => 'fkey60',
'Undo' => 'nop',
'Redo' => 'nop',
'Menu' => 'fkey64',
'Find' => 'fkey49',
'Cancel' => 'nop',
'Help' => 'slock', # Is this correct?
'Break' => 'nop',
'Num_Lock' => 'nlock',
'F1' => 'fkey01',
'F2' => 'fkey02',
'F3' => 'fkey03',
'F4' => 'fkey04',
'F5' => 'fkey05',
'F6' => 'fkey06',
'F7' => 'fkey07',
'F8' => 'fkey08',
'F9' => 'fkey09',
'F10' => 'fkey10',
'F11' => 'fkey11',
'L1' => 'fkey11',
'F12' => 'fkey12',
'L2' => 'fkey12',
'F13' => 'fkey13',
'L3' => 'fkey13',
'F14' => 'fkey14',
'L4' => 'fkey14',
'F15' => 'fkey15',
'L5' => 'fkey15',
'F16' => 'fkey16',
'L6' => 'fkey16',
'F17' => 'fkey17',
'L7' => 'fkey17',
'F18' => 'fkey18',
'L8' => 'fkey18',
'F19' => 'fkey19',
'L9' => 'fkey19',
'F20' => 'fkey20',
'L10' => 'fkey20',
'F21' => 'fkey21',
'R1' => 'fkey21',
'F22' => 'fkey22',
'R2' => 'fkey22',
'F23' => 'fkey23',
'R3' => 'fkey23',
'F24' => 'fkey24',
'R4' => 'fkey24',
'F25' => 'fkey25',
'R5' => 'fkey25',
'F26' => 'fkey26',
'R6' => 'fkey26',
'F27' => 'fkey27',
'R7' => 'fkey27',
'F28' => 'fkey28',
'R8' => 'fkey28',
'F29' => 'fkey29',
'R9' => 'fkey29',
'F30' => 'fkey30',
'R10' => 'fkey30',
'F31' => 'fkey31',
'R11' => 'fkey31',
'F32' => 'fkey32',
'R12' => 'fkey32',
'F33' => 'fkey33',
'R13' => 'fkey33',
'F34' => 'fkey34',
'R14' => 'fkey34',
'F35' => 'fkey35',
'R15' => 'fkey35',
'Terminate_Server' => 'nop',
'Pointer_EnableKeys' => 'nop',
'XF86_Switch_VT_1' => 'scr01',
'XF86_Switch_VT_2' => 'scr02',
'XF86_Switch_VT_3' => 'scr03',
'XF86_Switch_VT_4' => 'scr04',
'XF86_Switch_VT_5' => 'scr05',
'XF86_Switch_VT_6' => 'scr06',
'XF86_Switch_VT_7' => 'scr07',
'XF86_Switch_VT_8' => 'scr08',
'XF86_Switch_VT_9' => 'scr09',
'XF86_Switch_VT_10' => 'scr10',
'XF86_Switch_VT_11' => 'scr11',
'XF86_Switch_VT_12' => 'scr12',
'XF86_ClearGrab' => 'nop',
'XF86_Ungrab' => 'nop',
'XF86_Next_VMode' => 'nop',
'XF86_Prev_VMode' => 'nop',
'XF86Copy' => 'nop',
'XF86Cut' => 'nop',
'XF86Paste' => 'nop',
'XF86AudioLowerVolume' => 'nop',
'XF86AudioRaiseVolume' => 'nop',
'XF86AudioMute' => 'nop',
'XF86PowerOff' => 'nop',
'XF86AudioForward' => 'nop',
'XF86AudioMedia' => 'nop',
'XF86AudioNext' => 'nop',
'XF86AudioPause' => 'nop',
'XF86AudioPlay' => 'nop',
'XF86AudioPrev' => 'nop',
'XF86AudioRecord' => 'nop',
'XF86AudioRewind' => 'nop',
'XF86AudioStop' => 'nop',
'XF86Back' => 'nop',
'XF86Battery' => 'nop',
'XF86Bluetooth' => 'nop',
'XF86Calculator' => 'nop',
'XF86Close' => 'nop',
'XF86Display' => 'nop',
'XF86Documents' => 'nop',
'XF86DOS' => 'nop',
'XF86Eject' => 'nop',
'XF86Explorer' => 'nop',
'XF86Favorites' => 'nop',
'XF86Finance' => 'nop',
'XF86Forward' => 'nop',
'XF86HomePage' => 'nop',
'XF86KbdBrightnessDown' => 'nop',
'XF86KbdBrightnessUp' => 'nop',
'XF86KbdLightOnOff' => 'nop',
'XF86Launch1' => 'nop',
'XF86Launch2' => 'nop',
'XF86Launch3' => 'nop',
'XF86Launch4' => 'nop',
'XF86Mail' => 'nop',
'XF86MailForward' => 'nop',
'XF86MenuKB' => 'nop',
'XF86MonBrightnessDown' => 'nop',
'XF86MonBrightnessUp' => 'nop',
'XF86MyComputer' => 'nop',
'XF86New' => 'nop',
'XF86Phone' => 'nop',
'XF86Reload' => 'nop',
'XF86Reply' => 'nop',
'XF86RotateWindows' => 'nop',
'XF86Save' => 'nop',
'XF86ScreenSaver' => 'nop',
'XF86ScrollDown' => 'nop',
'XF86ScrollUp' => 'nop',
'XF86Search' => 'nop',
'XF86Send' => 'nop',
'XF86Shop' => 'nop',
'XF86Sleep' => 'nop',
'XF86Suspend' => 'nop',
'XF86Tools' => 'nop',
'XF86TouchpadToggle' => 'nop',
'XF86WakeUp' => 'nop',
'XF86WebCam' => 'nop',
'XF86WLAN' => 'nop',
'XF86WWW' => 'nop',
'XF86Xfer' => 'nop',
'braille_blank' => '2800', # What does correspond to these?
'braille_dot_1' => 'nop',
'braille_dot_2' => 'nop',
'braille_dot_3' => 'nop',
'braille_dot_4' => 'nop',
'braille_dot_5' => 'nop',
'braille_dot_6' => 'nop',
'braille_dot_7' => 'nop',
'braille_dot_8' => 'nop',
'braille_dot_9' => 'nop',
'braille_dot_10' => 'nop',
# I do not know the Unicodes of these
'0x1000' => 'nop', # Special symbol for X or syntax error?
'0x13a4' => 'nop', # Special symbol for X or syntax error?
'0xfe11' => 'nop', # Special symbol for X or syntax error?
'leftcaret' => 'nop', # Is this recognised by X ?
'guj_rra' => 'nop', # Is this recognised by X ?
'guj_nnna' => 'nop', # Is this recognised by X ?
'guj_llla' => 'nop', # Is this recognised by X ?
'gur_visarga' => 'nop', # Is this recognised by X ?
'gur_v_r' => 'nop', # Is this recognised by X ?
'gur_v_r_s' => 'nop', # Is this recognised by X ?
'Eisu_toggle' => 'nop', # Is this recognised by X ?
'Zenkaku_Hankaku' => 'nop', # Is this recognised by X ?
'Kanji' => 'nop', # Is this recognised by X ?
'Hangul' => 'nop', # Is this recognised by X ?
'Hangul_Hanja' => 'nop', # Is this recognised by X ?
'Henkan' => 'nop',
'Hiragana' => 'nop',
'Hiragana_Katakana' => 'nop',
'Katakana' => 'nop',
'Muhenkan' => 'nop',
# XFree86 does not recognise these
'SunAudioLowerVolume' => 'nop',
'SunAudioRaiseVolume' => 'nop',
'SunAudioMute' => 'nop',
'SunCopy' => 'nop',
'SunCut' => 'nop',
'SunPaste' => 'nop',
'SunAgain' => 'nop',
'SunUndo' => 'nop',
'SunFind' => 'nop',
'SunStop' => 'nop',
'SunF36' => 'nop',
'SunF37' => 'nop',
'SunFront' => 'nop',
'SunOpen' => 'nop',
'SunPowerSwitch' => 'nop',
'SunPowerSwitchShift' => 'nop',
'SunProps' => 'nop',
'SunSys_Req' => 'nop',
'SunVideoDegauss' => 'nop',
'SunVideoLowerBrightness' => 'nop',
'SunVideoRaiseBrightness' => 'nop',
);
if ($backspace eq 'del') {
$xkbsym_table{'BackSpace'} = 'del';
$xkbsym_table{'Delete'} = 'fkey70';
$xkbsym_table{'KP_Delete'} = 'fkey70';
}
} else {
%xkbsym_table =
(%xkbsym_table,
# Control symbols
'BackSpace' => 'Delete', # 0008
'Tab' => 'Tab', # 0009
'Linefeed' => 'Linefeed', # 000a
'Return' => 'Return', # 000d
'Escape' => 'Escape', # 001b
# Keypad keys
'KP_Multiply' => 'KP_Multiply',
'KP_Add' => 'KP_Add',
'KP_Seprator' => 'KP_Comma', # Is this recognised by X ?
'KP_Separator' => 'KP_Comma',
'KP_Subtract' => 'KP_Subtract',
'KP_Decimal' => 'KP_Period',
'KP_Divide' => 'KP_Divide',
'KP_0' => 'KP_0',
'KP_1' => 'KP_1',
'KP_2' => 'KP_2',
'KP_3' => 'KP_3',
'KP_4' => 'KP_4',
'KP_5' => 'KP_5',
'KP_6' => 'KP_6',
'KP_7' => 'KP_7',
'KP_8' => 'KP_8',
'KP_9' => 'KP_9',
'KP_Enter' => 'KP_Enter',
# Keypad keys (alternate level)
'KP_Home' => 'KP_7',
'KP_Left' => 'KP_4',
'KP_Up' => 'KP_8',
'KP_Right' => 'KP_6',
'KP_Down' => 'KP_2',
'KP_Prior' => 'KP_9',
'KP_Page_Up' => 'KP_9',
'KP_Next' => 'KP_3',
'KP_Page_Down' => 'KP_3',
'KP_End' => 'KP_1',
'KP_Begin' => 'VoidSymbol', # What does correspond to this?
'KP_Insert' => 'KP_0',
'KP_Delete' => 'VoidSymbol', # has to be 'KP_Period' or 'KP_Decimal'
# Keypad keys with missing support in the kernel
'KP_Space' => 'space',
'KP_Equal' => 'equal',
'KP_Tab' => 'Tab',
'KP_F1' => 'F1',
'KP_F2' => 'F2',
'KP_F3' => 'F3',
'KP_F4' => 'F4',
# Dead symbols
'dead_grave' => 'dead_grave',
'SunFA_Grave' => 'dead_grave', # Is this recognised by X ?
'dead_acute' => 'dead_acute',
'SunFA_Acute' => 'dead_acute', # Is this recognised by X ?
'dead_circumflex' => 'dead_circumflex',
'SunFA_Circum' => 'dead_circumflex', # Is this recognised by X ?
'dead_tilde' => 'dead_tilde',
'SunFA_Tilde' => 'dead_tilde',
'dead_breve' => 'dead_kbreve',
'dead_diaeresis' => 'dead_diaeresis',
'SunFA_Diaeresis' => 'dead_diaeresis', # Is this recognised by X ?
'dead_doubleacute' => 'dead_kdoubleacute',
'dead_caron' => 'dead_kcaron',
'dead_V' => 'dead_caron', # Is this correct?
'dead_cedilla' => 'dead_cedilla',
'SunFA_Cedilla' => 'dead_cedilla', # Is this recognised by X ?
'dead_ogonek' => 'dead_kogonek',
'dead_macron' => 'dead_macron',
'dead_abovedot' => 'dead_abovedot',
'dead_abovering' => 'dead_abovering',
'dead_stroke' => 'dead_stroke',
'dead_belowdot' => 'dead_belowdot',
'dead_hook' => 'dead_hook',
'dead_belowcomma' => 'dead_belowcomma',
'dead_currency' => 'dead_currency',
'dead_doublegrave' => 'dead_doublegrave',
'dead_invertedbreve' => 'dead_invertedbreve',
'dead_iota' => 'dead_iota',
'dead_horn' => 'dead_horn',
# Dead symbols with no support in the kernel
'dead_psili' => 'VoidSymbol', # ???? Greek
'dead_dasia' => 'VoidSymbol', # ???? Greek
# Modifiers
'Multi_key' => 'Compose',
'Mode_switch' => 'ShiftL',
'script_switch' => 'VoidSymbol',
'Shift_L' => 'Shift',
'Shift_R' => 'Shift',
'Control_L' => 'Control',
'Control_R' => 'Control',
'Caps_Lock' => 'Caps_Lock',
'Shift_Lock' => 'Shift_Lock',
'Meta_L' => 'Alt',
'Meta_R' => 'Alt',
'Alt_L' => 'Alt',
'Alt_R' => 'Alt',
'Super_L' => 'Alt',
'Super_R' => 'Alt',
'Hyper_L' => 'Alt',
'Hyper_R' => 'Alt',
'ISO_Lock' => 'Caps_Lock',
'ISO_Level2_Latch' => 'Shift',
'ISO_Level3_Shift' => 'AltGr',
'ISO_Level3_Latch' => 'AltGr',
'ISO_Level3_Lock' => 'AltGr_Lock',
'ISO_Level5_Shift' => 'AltGr',
'ISO_Level5_Latch' => 'AltGr',
'ISO_Level5_Lock' => 'AltGr_Lock',
'ISO_Group_Shift' => 'ShiftL',
'ISO_Group_Latch' => 'ShiftL',
'ISO_Group_Lock' => 'ShiftL_Lock',
'ISO_Next_Group' => 'ShiftL_Lock',
'ISO_Next_Group_Lock' => 'ShiftL_Lock',
'ISO_Prev_Group' => 'ShiftL_Lock',
'ISO_Prev_Group_Lock' => 'ShiftL_Lock',
'ISO_First_Group' => 'ShiftL_Lock',
'ISO_First_Group_Lock' => 'ShiftL_Lock',
'ISO_Last_Group' => 'ShiftL_Lock',
'ISO_Last_Group_Lock' => 'ShiftL_Lock',
# Other symbols
'NoAction' => 'NoSymbol', # Is this recognised by X ?
'nosymbol' => 'NoSymbol', # Is this recognised by X ?
'Nosymbol' => 'NoSymbol', # Is this recognised by X ?
'noSymbol' => 'NoSymbol', # Is this recognised by X ?
'NoSymbol' => 'NoSymbol',
'any' => 'NoSymbol', # Is this recognised by X ?
'VoidSymbol' => 'VoidSymbol',
'voidsymbol' => 'VoidSymbol', # Is this recognised by X ?
'ISO_Left_Tab' => 'Meta_Tab',
'Clear' => 'VoidSymbol',
'Pause' => 'Pause',
'Scroll_Lock' => 'Scroll_Lock',
'Sys_Req' => 'Last_Console',
'Delete' => 'Remove',
'Codeinput' => 'VoidSymbol',
'SingleCandidate' => 'VoidSymbol',
'MultipleCandidate' => 'VoidSymbol',
'PreviousCandidate' => 'VoidSymbol',
'Home' => 'Home',
'Left' => 'Left',
'Up' => 'Up',
'Right' => 'Right',
'Down' => 'Down',
'Prior' => 'Prior',
'Page_Up' => 'PageUp',
'Next' => 'Next',
'Page_Down' => 'PageDown',
'End' => 'End',
'Begin' => 'VoidSymbol',
'Select' => 'Select',
'Print' => 'Control_backslash',
'Execute' => 'VoidSymbol',
'Insert' => 'Insert',
'Undo' => 'VoidSymbol',
'Redo' => 'VoidSymbol',
'Menu' => 'VoidSymbol',
'Find' => 'Find',
'Cancel' => 'VoidSymbol',
'Help' => 'Help',
'Break' => 'Break',
'Num_Lock' => 'Num_Lock',
'F1' => 'F1',
'F2' => 'F2',
'F3' => 'F3',
'F4' => 'F4',
'F5' => 'F5',
'F6' => 'F6',
'F7' => 'F7',
'F8' => 'F8',
'F9' => 'F9',
'F10' => 'F10',
'F11' => 'F11',
'L1' => 'F11',
'F12' => 'F12',
'L2' => 'F12',
'F13' => 'F13',
'L3' => 'F13',
'F14' => 'F14',
'L4' => 'F14',
'F15' => 'F15',
'L5' => 'F15',
'F16' => 'F16',
'L6' => 'F16',
'F17' => 'F17',
'L7' => 'F17',
'F18' => 'F18',
'L8' => 'F18',
'F19' => 'F19',
'L9' => 'F19',
'F20' => 'F20',
'L10' => 'F20',
'F21' => 'F21',
'R1' => 'F21',
'F22' => 'F22',
'R2' => 'F22',
'F23' => 'F23',
'R3' => 'F23',
'F24' => 'F24',
'R4' => 'F24',
'F25' => 'F25',
'R5' => 'F25',
'F26' => 'F26',
'R6' => 'F26',
'F27' => 'F27',
'R7' => 'F27',
'F28' => 'F28',
'R8' => 'F28',
'F29' => 'F29',
'R9' => 'F29',
'F30' => 'F30',
'R10' => 'F30',
'F31' => 'F31',
'R11' => 'F31',
'F32' => 'F32',
'R12' => 'F32',
'F33' => 'F33',
'R13' => 'F33',
'F34' => 'F34',
'R14' => 'F34',
'F35' => 'F35',
'R15' => 'F35',
'Terminate_Server' => 'VoidSymbol',
'Pointer_EnableKeys' => 'VoidSymbol',
'XF86_Switch_VT_1' => 'Console_1',
'XF86_Switch_VT_2' => 'Console_2',
'XF86_Switch_VT_3' => 'Console_3',
'XF86_Switch_VT_4' => 'Console_4',
'XF86_Switch_VT_5' => 'Console_5',
'XF86_Switch_VT_6' => 'Console_6',
'XF86_Switch_VT_7' => 'Console_7',
'XF86_Switch_VT_8' => 'Console_8',
'XF86_Switch_VT_9' => 'Console_9',
'XF86_Switch_VT_10' => 'Console_10',
'XF86_Switch_VT_11' => 'Console_11',
'XF86_Switch_VT_12' => 'Console_12',
'XF86_ClearGrab' => 'VoidSymbol',
'XF86_Ungrab' => 'VoidSymbol',
'XF86_Next_VMode' => 'VoidSymbol',
'XF86_Prev_VMode' => 'VoidSymbol',
'XF86Copy' => 'VoidSymbol',
'XF86Cut' => 'VoidSymbol',
'XF86Paste' => 'VoidSymbol',
'XF86AudioLowerVolume' => 'VoidSymbol',
'XF86AudioRaiseVolume' => 'VoidSymbol',
'XF86AudioMute' => 'VoidSymbol',
'XF86PowerOff' => 'VoidSymbol',
'XF86AudioForward' => 'VoidSymbol',
'XF86AudioMedia' => 'VoidSymbol',
'XF86AudioNext' => 'VoidSymbol',
'XF86AudioPause' => 'VoidSymbol',
'XF86AudioPlay' => 'VoidSymbol',
'XF86AudioPrev' => 'VoidSymbol',
'XF86AudioRecord' => 'VoidSymbol',
'XF86AudioRewind' => 'VoidSymbol',
'XF86AudioStop' => 'VoidSymbol',
'XF86Back' => 'VoidSymbol',
'XF86Battery' => 'VoidSymbol',
'XF86Bluetooth' => 'VoidSymbol',
'XF86Calculator' => 'VoidSymbol',
'XF86Close' => 'VoidSymbol',
'XF86Display' => 'VoidSymbol',
'XF86Documents' => 'VoidSymbol',
'XF86DOS' => 'VoidSymbol',
'XF86Eject' => 'VoidSymbol',
'XF86Explorer' => 'VoidSymbol',
'XF86Favorites' => 'VoidSymbol',
'XF86Finance' => 'VoidSymbol',
'XF86Forward' => 'VoidSymbol',
'XF86HomePage' => 'VoidSymbol',
'XF86KbdBrightnessDown' => 'VoidSymbol',
'XF86KbdBrightnessUp' => 'VoidSymbol',
'XF86KbdLightOnOff' => 'VoidSymbol',
'XF86Launch1' => 'VoidSymbol',
'XF86Launch2' => 'VoidSymbol',
'XF86Launch3' => 'VoidSymbol',
'XF86Launch4' => 'VoidSymbol',
'XF86Mail' => 'VoidSymbol',
'XF86MailForward' => 'VoidSymbol',
'XF86MenuKB' => 'VoidSymbol',
'XF86MonBrightnessDown' => 'VoidSymbol',
'XF86MonBrightnessUp' => 'VoidSymbol',
'XF86MyComputer' => 'VoidSymbol',
'XF86New' => 'VoidSymbol',
'XF86Phone' => 'VoidSymbol',
'XF86Reload' => 'VoidSymbol',
'XF86Reply' => 'VoidSymbol',
'XF86RotateWindows' => 'VoidSymbol',
'XF86Save' => 'VoidSymbol',
'XF86ScreenSaver' => 'VoidSymbol',
'XF86ScrollDown' => 'VoidSymbol',
'XF86ScrollUp' => 'VoidSymbol',
'XF86Search' => 'VoidSymbol',
'XF86Send' => 'VoidSymbol',
'XF86Shop' => 'VoidSymbol',
'XF86Sleep' => 'VoidSymbol',
'XF86Suspend' => 'VoidSymbol',
'XF86Tools' => 'VoidSymbol',
'XF86TouchpadToggle' => 'VoidSymbol',
'XF86WakeUp' => 'VoidSymbol',
'XF86WebCam' => 'VoidSymbol',
'XF86WLAN' => 'VoidSymbol',
'XF86WWW' => 'VoidSymbol',
'XF86Xfer' => 'VoidSymbol',
'braille_blank' => 'Brl_blank',
'braille_dot_1' => 'Brl_dot1',
'braille_dot_2' => 'Brl_dot2',
'braille_dot_3' => 'Brl_dot3',
'braille_dot_4' => 'Brl_dot4',
'braille_dot_5' => 'Brl_dot5',
'braille_dot_6' => 'Brl_dot6',
'braille_dot_7' => 'Brl_dot7',
'braille_dot_8' => 'Brl_dot8',
'braille_dot_9' => 'Brl_dot9',
'braille_dot_10' => 'Brl_dot10',
# I do not know the Unicodes of these
'0x1000' => 'VoidSymbol', # Special symbol for X or syntax error?
'0x13a4' => 'VoidSymbol', # Special symbol for X or syntax error?
'0xfe11' => 'VoidSymbol', # Special symbol for X or syntax error?
'leftcaret' => 'VoidSymbol', # Is this recognised by X ?
'guj_rra' => 'VoidSymbol', # Is this recognised by X ?
'guj_nnna' => 'VoidSymbol', # Is this recognised by X ?
'guj_llla' => 'VoidSymbol', # Is this recognised by X ?
'gur_visarga' => 'VoidSymbol', # Is this recognised by X ?
'gur_v_r' => 'VoidSymbol', # Is this recognised by X ?
'gur_v_r_s' => 'VoidSymbol', # Is this recognised by X ?
'Eisu_toggle' => 'VoidSymbol', # Is this recognised by X ?
'Zenkaku_Hankaku' => 'VoidSymbol', # Is this recognised by X ?
'Kanji' => 'VoidSymbol', # Is this recognised by X ?
'Hangul' => 'VoidSymbol', # Is this recognised by X ?
'Hangul_Hanja' => 'VoidSymbol', # Is this recognised by X ?
'Henkan' => 'VoidSymbol',
'Hiragana' => 'VoidSymbol',
'Hiragana_Katakana' => 'VoidSymbol',
'Katakana' => 'VoidSymbol',
'Muhenkan' => 'VoidSymbol',
# XFree86 does not recognise these
'SunAudioLowerVolume' => 'VoidSymbol',
'SunAudioRaiseVolume' => 'VoidSymbol',
'SunAudioMute' => 'VoidSymbol',
'SunCopy' => 'VoidSymbol',
'SunCut' => 'VoidSymbol',
'SunPaste' => 'VoidSymbol',
'SunAgain' => 'VoidSymbol',
'SunUndo' => 'VoidSymbol',
'SunFind' => 'VoidSymbol',
'SunStop' => 'VoidSymbol',
'SunF36' => 'VoidSymbol',
'SunF37' => 'VoidSymbol',
'SunFront' => 'VoidSymbol',
'SunOpen' => 'VoidSymbol',
'SunPowerSwitch' => 'VoidSymbol',
'SunPowerSwitchShift' => 'VoidSymbol',
'SunProps' => 'VoidSymbol',
'SunSys_Req' => 'VoidSymbol',
'SunVideoDegauss' => 'VoidSymbol',
'SunVideoLowerBrightness' => 'VoidSymbol',
'SunVideoRaiseBrightness' => 'VoidSymbol',
);
if ($compact) {
$xkbsym_table{'Mode_switch'} = 'AltGr';
$xkbsym_table{'ISO_Group_Shift'} = 'AltGr';
$xkbsym_table{'ISO_Group_Latch'} = 'AltGr';
$xkbsym_table{'ISO_Group_Lock'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Next_Group'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Next_Group_Lock'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Prev_Group'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Prev_Group_Lock'} = 'AltGr_Lock';
$xkbsym_table{'ISO_First_Group'} = 'AltGr_Lock';
$xkbsym_table{'ISO_First_Group_Lock'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Last_Group'} = 'AltGr_Lock';
$xkbsym_table{'ISO_Last_Group_Lock'} = 'AltGr_Lock';
}
if ($backspace eq 'bs') {
$xkbsym_table{'BackSpace'} = 'BackSpace';
$xkbsym_table{'Delete'} = 'Delete';
}
}
my $voidsymbol = $freebsd ? 'nop' : 'VoidSymbol';
my @controlsyms;
my @metasyms;
my @metacontrolsyms;
my %controlsyms_hash;
{
if ($freebsd) {
%controlsyms_hash = (
'nul' => 0x00,
'soh' => 0x01,
'stx' => 0x02,
'etx' => 0x03,
'eot' => 0x04,
'enq' => 0x05,
'ack' => 0x06,
'bel' => 0x07,
'bs' => 0x08,
'ht' => 0x09,
'nl' => 0x0a,
'vt' => 0x0b,
'ff' => 0x0c,
'cr' => 0x0d,
'so' => 0x0e,
'si' => 0x0f,
'dle' => 0x10,
'dc1' => 0x11,
'dc2' => 0x12,
'dc3' => 0x13,
'dc4' => 0x14,
'nak' => 0x15,
'syn' => 0x16,
'etb' => 0x17,
'can' => 0x18,
'em' => 0x19,
'sub' => 0x1a,
'esc' => 0x1b,
'fs' => 0x1c,
'gs' => 0x1d,
'rs' => 0x1e,
'us' => 0x1f,
'del' => 0x7f,
);
} else {
%controlsyms_hash = (
'nul' => 0x00,
'Control_a' => 0x01,
'Control_b' => 0x02,
'Control_c' => 0x03,
'Control_d' => 0x04,
'Control_e' => 0x05,
'Control_f' => 0x06,
'Control_g' => 0x07,
'BackSpace' => 0x08,
'Tab' => 0x09,
'Linefeed' => 0x0a,
'Control_k' => 0x0b,
'Control_l' => 0x0c,
'Return' => 0x0d,
'Control_n' => 0x0e,
'Control_o' => 0x0f,
'Control_p' => 0x10,
'Control_q' => 0x11,
'Control_r' => 0x12,
'Control_s' => 0x13,
'Control_t' => 0x14,
'Control_u' => 0x15,
'Control_v' => 0x16,
'Control_w' => 0x17,
'Control_x' => 0x18,
'Control_y' => 0x19,
'Control_z' => 0x1a,
'Escape' => 0x1b,
'Control_backslash' => 0x1c,
'Control_bracketright' => 0x1d,
'Control_asciicircum' => 0x1e,
'Control_underscore' => 0x1f,
'Delete' => 0x7f,
);
}
for my $special (keys %controlsyms_hash) {
$controlsyms[$controlsyms_hash{$special}] = $special;
}
for my $code (0 .. 255) {
if (! defined $controlsyms[$code]) {
if ($code >= 64 && $code <= 127
&& defined (my $special = $controlsyms[$code % 32])) {
$controlsyms[$code] = $special;
} else {
$controlsyms[$code] = $voidsymbol;
}
}
}
# Ctrl + BS = DEL, Ctrl + DEL = BS
if ($freebsd) {
$controlsyms[0x08] = 'del';
$controlsyms[0x7f] = 'bs';
} else {
$controlsyms[0x08] = 'Delete';
$controlsyms[0x7f] = 'BackSpace';
}
# Some particularities of FreeBSD and Linux
if ($freebsd) {
$controlsyms[0x0d] = 'nl'; # Ctrl+m = ^J
$controlsyms[0x20] = 'nul'; # Ctrl+space = ^@
$controlsyms[0x3f] = 'del'; # Ctrl+? = ^?
} else {
$controlsyms[0x0d] = 'Control_m'; # I don't know
$controlsyms[0x20] = 'nul'; # Ctrl+space = ^@
$controlsyms[0x2e] = 'Compose'; # Ctrl+. = Compose
$controlsyms[0x3f] = 'Delete'; # Ctrl+? = ^?
# I suppose these are not necessary:
# $controlsyms[0x27] = 'Control_g'; # Ctrl+' = ^G
# $controlsyms[0x32] = 'nul'; # 2
# $controlsyms[0x33] = 'Escape'; # 3
# $controlsyms[0x34] = 'Control_backslash'; # 4
# $controlsyms[0x35] = 'Control_bracketright'; # 5
# $controlsyms[0x36] = 'Control_asciicircum'; # 6
# $controlsyms[0x37] = 'Control_underscore'; # 7
# $controlsyms[0x38] = 'Delete'; # 8
}
my %metasyms_hash = (
' ' => 'space',
'`' => 'grave',
'^' => 'asciicircum',
'~' => 'asciitilde',
'<' => 'less',
'=' => 'equal',
'>' => 'greater',
'|' => 'bar',
'_' => 'underscore',
'-' => 'minus',
',' => 'comma',
';' => 'semicolon',
':' => 'colon',
'!' => 'exclam',
'?' => 'question',
'/' => 'slash',
'.' => 'period',
'\'' => 'apostrophe',
'"' => 'quotedbl',
'(' => 'parenleft',
')' => 'parenright',
'[' => 'bracketleft',
']' => 'bracketright',
'{' => 'braceleft',
'}' => 'braceright',
'@' => 'at',
'$' => 'dollar',
'*' => 'asterisk',
'\\' => 'backslash',
'&' => 'ampersand',
'#' => 'numbersign',
'%' => 'percent',
'+' => 'plus',
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
'4' => 'four',
'5' => 'five',
'6' => 'six',
'7' => 'seven',
'8' => 'eight',
'9' => 'nine',
chr(0x08) => 'BackSpace',
chr(0x09) => 'Tab',
chr(0x0a) => 'Linefeed',
chr(0x0d) => 'Control_m',
chr(0x1b) => 'Escape',
chr(0x1c) => 'Control_backslash',
chr(0x7f) => 'Delete',
);
for my $code (0 .. 255) {
my $sym = chr($code);
if (defined (my $special = $metasyms_hash{$sym})) {
$sym = $special;
}
$metasyms[$code] = "Meta_". $sym;
}
for my $code (0 .. 255) {
my $control = $controlsyms[$code];
if ($control eq 'Compose') {
$metacontrolsyms[$code] = 'Compose';
} elsif ($control eq 'Return') {
$metacontrolsyms[$code] = 'Meta_Control_m';
} elsif ($control eq 'NoSymbol') {
$metacontrolsyms[$code] = 'NoSymbol';
} elsif ($control eq 'VoidSymbol') {
$metacontrolsyms[$code] = 'VoidSymbol';
} else {
$metacontrolsyms[$code] = 'Meta_'. $control;
}
}
}
############ GLOBAL FUNCTIONS #########################################
# Looks for $_[0] in the known directories and returns ready to use
# file name
sub xfilename {
my $file = $_[0];
(my $base = $file) =~ s/.*\/(.+)/$1/;
for my $dir (@xdirs) {
if (-f "$dir/$file") {
return "$dir/$file";
}
if (-f "$dir/$base") {
return "$dir/$base";
}
}
die "$0: Can not find file \"$file\" in any known directory\n";
}
########### READ THE RULES FILE #######################################
# The string $_[0] matches the pattern $_[1].
# The pattern may be "*", a variable name, or a plain string.
# If the string is 'OPTIONS' then match the pattern against any of the
# options from @options.
sub matches_pattern {
my ($string, $pattern) = @_;
if ($string eq 'OPTIONS') {
for my $option (@options) {
next if ($option eq '');
if ($pattern eq $option) {
return 1;
}
}
} else {
if ($pattern eq '*') {
return $string ne '';
}
if ($pattern =~ /^\$([a-zA-Z0-9_]+)$/) {
for my $member (@{$rules_variables{$1}}) {
if ($string eq $member) {
return 1;
}
}
return 0;
}
if ($string eq $pattern) {
return 1;
}
}
return 0;
}
if (@layouts) {
for my $i (0 .. $#layouts) {
if (! defined $variants[$i]) {
$variants[$i] = '';
}
}
my $rules_keycodes;
my $rules_symbols;
open (RULES, xfilename ("rules/$rules"))
or die "$0: ". xfilename ("rules/$rules") .": $!\n";
my $oldline = '';
my @antecedents;
my @consequents;
my $match_found = 0;
while (<RULES>) {
next if (/^\s*\/\//);
next if (/^\s*$/);
chomp;
s/^\s*//;
s/\s+/ /g;
if ($oldline) {
$_ = $oldline . $_;
$oldline = '';
}
if (s/\\$/ /) {
$oldline = $_;
next;
}
if (/^! ?\$([a-zA-Z0-9_]+) ?= ?(.+)$/) {
$rules_variables{$1} = [ split ' ', $2 ];
next;
}
if (/^! ?(.+)= ?(.+)$/) {
@antecedents = split ' ', $1;
@consequents = split ' ', $2;
foreach my $i (0 .. $#antecedents) {
if ($antecedents[$i] eq 'model') {
$antecedents[$i] = $model;
} elsif ($antecedents[$i] eq 'layout' && @layouts == 1) {
$antecedents[$i] = $layouts[0];
} elsif ($antecedents[$i] =~ /layout\[([1-4])\]/) {
if (@layouts > 1) {
$antecedents[$i] = $layouts[$1 - 1];
} else {
$antecedents[$i] = '';
}
} elsif ($antecedents[$i] eq 'variant' && @variants == 1) {
$antecedents[$i] = $variants[0];
} elsif ($antecedents[$i] =~ /variant\[([1-4])\]/) {
if (@variants > 1) {
$antecedents[$i] = $variants[$1 - 1];
} else {
$antecedents[$i] = '';
}
} elsif ($antecedents[$i] eq 'option') {
$antecedents[$i] = 'OPTIONS';
} elsif ($antecedents[$i] eq 'layout'
|| $antecedents[$i] eq 'variant') {
$antecedents[$i] = '';
} else {
warning "Unknown name \"$antecedents[$i]\" in the following line in \"rules/$rules\":\n";
warning "$_\n";
$antecedents[$i] = '';
}
if (! defined $antecedents[$i]) {
$antecedents[$i] = '';
}
}
$match_found = 0;
next;
}
if (/^(.+)= ?(.+)$/) {
next if ($match_found);
my @antecedent_patterns = split ' ', $1;
my $consequent_str = $2;
if (@antecedent_patterns != @antecedents ) {
warning "Bad number of antecedents in the following line in \"rules/$rules\":\n";
warning "$_\n";
next;
}
my $matches = 1;
for my $i (0 .. $#antecedents) {
if (! matches_pattern ($antecedents[$i],
$antecedent_patterns[$i])) {
$matches = 0;
last;
}
}
if ($matches) {
$match_found = $antecedents[0] ne 'OPTIONS';
my @consequent_values = split ' ', $2;
if (@consequent_values != @consequents) {
warning "Bad number of consequents in the following line in \"rules/$rules\":\n";
warning "$_\n";
}
for my $i (0 .. $#consequents) {
# The purpose of the semicolons is to make %(v) and %_v
# empty strings if %v is an empty string
$consequent_values[$i] =~ s/%\(/\(;%/g;
$consequent_values[$i] =~ s/%_/_;%/g;
$consequent_values[$i] =~ s/(%[lvm](\[[1-4]\])?)/$1;/g;
$consequent_values[$i] =~ s/%m/$model/g;
$consequent_values[$i] =~ s/%l\[1\]/$layouts[0]/g;
$consequent_values[$i] =~ s/%l\[2\]/$layouts[1]/g;
$consequent_values[$i] =~ s/%l\[3\]/$layouts[2]/g;
$consequent_values[$i] =~ s/%l\[4\]/$layouts[3]/g;
$consequent_values[$i] =~ s/%l/$layouts[0]/g;
$consequent_values[$i] =~ s/%v\[1\]/$variants[0]/g;
$consequent_values[$i] =~ s/%v\[2\]/$variants[1]/g;
$consequent_values[$i] =~ s/%v\[3\]/$variants[2]/g;
$consequent_values[$i] =~ s/%v\[4\]/$variants[3]/g;
$consequent_values[$i] =~ s/%v/$variants[0]/g;
$consequent_values[$i] =~ s/\(;;\)//g;
$consequent_values[$i] =~ s/_;;//g;
$consequent_values[$i] =~ s/;//g;
if ($consequent_values[$i] =~ /^\+/) {
if ($consequents[$i] eq 'keycodes') {
$rules_keycodes = $rules_keycodes .
$consequent_values[$i];
} elsif ($consequents[$i] eq 'symbols') {
$rules_symbols = $rules_symbols .
$consequent_values[$i];
}
} else {
if ($consequents[$i] eq 'keycodes') {
if (! $rules_keycodes) {
$rules_keycodes = $consequent_values[$i];
}
} elsif ($consequents[$i] eq 'symbols') {
if (! $rules_symbols) {
$rules_symbols = $consequent_values[$i];
}
}
}
}
}
next;
}
warning "Syntax error in the following line in \"rules/$rules\":\n";
warning "$_\n";
die;
}
close RULES;
if ($verbosity >= 1) {
print STDERR "Acording to the rules file:\n"
." keycodes = $rules_keycodes\n"
." symbols = $rules_symbols\n";
}
if (! $keycodes) {
$keycodes = $rules_keycodes;
}
if (! $symbols) {
$symbols = $rules_symbols;
}
}
if (! $keycodes) {
die "$0: No keycodes, nor layout specified\n";
}
if (! $symbols) {
die "$0: No symbols, nor layout specified\n";
}
########### COMPUTE ARCH ###########################################
if ($keycodes =~ /(^|\+|\|)ataritt(\([^\)]*\))?($|\+|\|)/) {
$arch = 'ataritt';
} elsif ($keycodes =~ /(^|\+|\|)amiga(\([^\)]*\))?($|\+|\|)/) {
$arch = 'amiga';
} elsif ($keycodes =~ /(^|\+|\|)sun(\(type[45][^\)]*\))?($|\+|\|)/) {
$arch = 'sun';
} elsif ($keycodes =~ /(^|\+|\|)evdev(\([^\)]*\))?($|\+|\|)/) {
$arch = 'evdev';
}
########### READ ACM ###############################################
if ($charmap) {
for my $acmfile ("$installdir/share/consoletrans/${charmap}",
"$installdir/share/consoletrans/${charmap}.gz",
"$installdir/share/consoletrans/${charmap}.acm",
"$installdir/share/consoletrans/${charmap}.acm.gz",
"/usr/share/consoletrans/${charmap}",
"/usr/share/consoletrans/${charmap}.gz",
"/usr/share/consoletrans/${charmap}.acm",
"/usr/share/consoletrans/${charmap}.acm.gz",
"${charmap}") {
if (-f $acmfile) {
$acm = $acmfile;
last;
}
}
(-f $acm) or die "$0: no ACM for ${charmap} exists\n";
if ($acm =~ /gz$/) {
open (ACM, '-|:utf8', "zcat $acm") or die "$0: $acm: $!\n";
} else {
open (ACM, '<:utf8', $acm) or die "$0: $acm: $!\n";
}
while (<ACM>) {
s/\#.*//;
chomp;
next unless (/[^\s]/);
if (/^\s*0x([0-9a-fA-F]{1,2})\s+\'([^\']+)\'\s*$/) {
my $uni = ord ($2);
my $c = hex ($1);
$acmtable{$uni} = $c;
} else {
die "$0: Syntax error in ACM file: $_\n";
}
}
close ACM;
}
########### PARSING ###############################################
# Report a syntax error in $filename. $_[0] should describe what was
# expected at $stream.
sub syntax_error {
die "$0: instead of \"". (substr ($stream, 0, 50))
."\" in $filename expected $_[0].\n";
}
# Opens the text file $_[0], reads it and saves its contents in $stream
# The comments are removed, all new lines are replaced by spaces and
# all redundant spaces are removed.
sub file_to_string {
my $file = $_[0];
my $string = '';
open (FILE, "$file") or die "$0: $file: $!\n";
while (<FILE>) {
chomp;
s{//.*}{};
s{\#.*}{};
$string = $string . $_ .' ';
}
close FILE;
my $normalized = '';
my $final_letter = 0;
while ($string) {
if ($string =~ s/^\s+// && $final_letter && $string =~ /^[a-zA-Z0-9_]/) {
$normalized = $normalized .' ';
$final_letter = 0;
}
if ($string =~ s/^([^\"\s]+)//) {
$normalized = $normalized . $1;
$final_letter = ($1 =~ /[a-zA-Z0-9_]$/);
next;
}
if ($string =~ s/^(\"[^\"]*(\"|$))//) {
$normalized = $normalized . $1;
$final_letter = 0;
if ($2 ne '"') {
die "$0: missing quote in ". (substr ($1, 0, 50)) ."...\n";
}
next;
}
(! $string ) or die "Internal error";
}
$stream = $normalized;
}
# removes from $stream initial sequence of xkb flags (default, partial,
# hidden, etc.) Returns true if the "default" flag was among them.
sub xkb_flags {
my $default = 0;
while ($stream =~ s/^(default|partial|hidden
|alphanumeric_keys|modifier_keys
|keypad_keys|function_keys
|alternate_group)\s?(.*)/$2/ix) {
$default = 1 if ($1 =~ /default/i);
}
return $default;
}
# Removes and returns identifier from $stream.
sub xkb_identifier {
if ($stream =~ s/^([a-zA-Z0-1_]+) ?(.*)/$2/) {
return $1;
} else {
syntax_error "identifier";
}
}
# Removes and returns a string from $stream.
sub xkb_string {
if ($stream =~ /^\"([^\"]*)\"(.*)/) {
$stream = $2;
return $1;
} else {
syntax_error "string";
}
}
# Removes an include method name from $stream and returns $alternate_method,
# $augment_method, $replace_method, or $override_method. If $stream
# does not start with a method name, return the default method (i.e. $method)
sub xkb_method {
if ($stream =~ s/^alternate ?(.*)/$1/i) {
return $alternate_method;
} elsif ($stream =~ s/^augment ?(.*)/$1/i) {
return $augment_method;
} elsif ($stream =~ s/^replace ?(.*)/$1/i) {
return $replace_method;
} elsif ($stream =~ s/^override ?(.*)/$1/i) {
return $override_method;
} else {
return $method;
}
}
# If $stream starts with an include statement - process it and return true.
# Otherwise return false. $_[0] is the file type ("symbols" or "keycodes")
sub xkb_include {
my $file_type = $_[0];
if ($stream =~ s/^(include|replace|augment|override)\"([^\"]*)\";?
(.*)/$3/ix) {
my $method_name = $1;
my $include_request = $2;
if ($method != $ignore_method) {
my $oldmethod = $method;
if ($method_name =~ /replace/i) {
$method = $replace_method;
} elsif ($method_name =~ /augment/i) {
$method = $augment_method;
} elsif ($method_name =~ /override/i) {
$method = $override_method;
}
&include_xkb_file ($file_type, $include_request);
$method = $oldmethod;
}
return 1;
} else {
return 0;
}
}
sub xkb_keycodes_definitions {
my $oldmethod = $method;
while ($stream) {
$method = $oldmethod;
if (xkb_include ('keycodes')) {
next;
}
$method = xkb_method ();
if ($stream =~ (s/^(minimum|maximum|indicator|virtual\sindicator)
[^;]*;(.*)/$2/ix)) {
next;
}
if ($stream =~ /^<([^>]*)>=/) {
$stream =~ s/^<([^>]+)>=([0-9]*);(.*)/$3/
or syntax_error "keycode definition";
my $key = $1;
my $code = $2;
if ($method == $replace_method
|| $method == $override_method
|| ($method == $augment_method
&& ! defined $keycodes_table{$key})) {
$keycodes_table{$key} = [ $code ];
delete $aliases{$key};
} elsif ($method == $alternate_method) {
push @{$keycodes_table{$key}}, $code;
}
next;
}
if ($stream =~ /^alias/) {
$stream =~ s/^alias<([^>]+)>=<([^>]+)>;(.*)/$3/
or syntax_error "alias definition";
my $alias = $1;
my $key = $2;
if ($method == $replace_method
|| $method == $override_method
|| ($method == $augment_method
&& ! defined $keycodes_table{$alias})) {
$keycodes_table{$alias} = [];
$aliases{$alias} = $key;
}
next;
}
last;
}
$method = $oldmethod;
}
# Fill @{$symbols_table{$code}[$group]} with symbols
sub symbols_for_group {
my $code = shift;
my $group = shift;
if ($method == $replace_method
|| ($method == $override_method
&& (@_ || ! defined $symbols_table{$code}[$group]))
|| ($method == $augment_method &&
! defined $symbols_table{$code})) {
my $level = 0;
for my $symbol (@_) {
if ($symbol !~ /\(/ && $symbol =~ /./
&& (! defined $xkbsym_table{$symbol}
|| $xkbsym_table{$symbol} ne 'NoSymbol'
|| ! defined $symbols_table{$code}[$group][$level])) {
$symbols_table{$code}[$group][$level] = $symbol;
}
$level++;
}
}
}
sub xkb_key {
my $default_key_type = $_[0];
if ($stream =~ /^key</i) {
$stream =~ s/^key<([^>]+)>\{([^\}]*?)\};(.*)/$3/i
or syntax_error "key definition";
my $key = $1;
my $list = $2 .",";
if ($verbosity >= 4 && ! defined $keycodes_table{$key}) {
warning "No scan code for <$key> is defined.\n";
}
for my $code (@{$keycodes_table{$key}}) {
if ($method == $replace_method) {
$symbols_table{$code} = [];
}
my $group = $base_group;
while ($list =~ /[^ ]/) {
# [ X1, X2, ... ]
if ($list =~ s/^\[([^\]]*?)\],(.*)/$2/) {
(my $symbols = $1) =~ s/,/ /g;
my @groupsymbols = split ' ', $symbols;
symbols_for_group $code, $group, @groupsymbols;
$group++;
next;
}
# symbols[GroupN] = [ X1, X2, ... ]
if ($list =~ (s/^symbols\[Group([1-4])\]
=\[([^\]]*?)\],(.*)/$3/x)) {
my $group = $1 - 1 + $base_group;
(my $symbols = $2) =~ s/,/ /g;
my @groupsymbols = split ' ', $symbols;
symbols_for_group $code, $group, @groupsymbols;
next;
}
# type = "...."
if ($list =~ (s/^type(?:\[Group1\])?
=\"([^\"]+)\",(.*)/$2/x)) {
if ($method == $replace_method
|| $method == $override_method
|| ($method == $augment_method
&& ! defined $types_table{$code})) {
$types_table{$code} = $1;
}
next;
}
# virtualMods = AltGr
# overlay1=<KO7>
next if ($list =~ s/^[a-zA-Z0-9_]+(=[a-zA-Z0-9_<>]+)?,
(.*)/$2/x);
# type = "CTRL+ALT"
next if ($list =~ s/^[a-zA-Z0-9_]+=\"[^\"]+\",(.*)/$1/);
# type[...] = "..."
next if ($list =~ s/^type\[[a-zA-Z0-9_]+\]=\"[^\"]+\",
(.*)/$1/x);
# actions[...] = [ ... ]
next if ($list =~ s/^actions\[[a-zA-Z0-9_]+\]=\[[^\]]*?\],
(.*)/$1/x);
die "$0: garbage in a key definition: \"$list\""
." in $filename.\n";
}
if (! defined $types_table{$code}
|| $types_table{$code} eq 'DEFAULT') {
$types_table{$code} = $default_key_type;
}
}
return 1;
} else {
return 0;
}
}
sub xkb_symbols_definitions {
my $oldmethod = $method;
my $default_key_type = 'DEFAULT';
while ($stream) {
$method = $oldmethod;
if (xkb_include ('symbols')) {
next;
}
$method = xkb_method ();
if ($stream =~ /^name/i) {
$stream =~ s/^name\[[a-zA-Z0-9_]+\]=\"[^\"]*\";(.*)/$1/i
or syntax_error "group name";
next;
}
if ($stream =~ (s/^key\.type(?:\[Group1\])?=\"([^\"]+)\";(.*)/$2/)) {
$default_key_type = $1;
next;
}
if ($stream =~ s/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+=.*?;(.*)/$1/i) {
next;
}
if ($stream =~ s/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\[[a-zA-Z0-9_]+\]
=.*?;(.*)/$1/ix) {
next;
}
if (xkb_key $default_key_type) {
next;
}
if ($stream =~ /^(modifier_map|modmap|mod_map)/i) {
$stream =~ (s/^(modifier_map|modmap|mod_map)\s?[a-zA-Z0-9_]+
\{[^\}]*\};(.*)/$2/ix)
or syntax_error "modifier_map";
next;
}
if ($stream =~ /^virtual_modifiers/i) {
$stream =~ (s/^virtual_modifiers\s?[a-zA-Z0-9_,]+;(.*)/$1/ix)
or syntax_error "virtual_modifiers";
next;
}
last;
}
$method = $oldmethod;
}
sub xkb_definitions {
my $file_type = $_[0];
if ($file_type eq 'symbols') {
xkb_symbols_definitions();
} elsif ($file_type eq 'keycodes') {
xkb_keycodes_definitions();
} else {
die "$0: Bad xkb file type $file_type\n";
}
}
# Remove from $stream the characters up to the first unmatched "}"
sub skip_to_brace {
while ($stream && ($stream =~ s/^[^\}\{]*\{//)) {
&skip_to_brace;
}
$stream =~ s/^[^\}\{]*(\}|$)//;
}
sub xkb_block_list {
my $file_type = $_[0];
my $block = $_[1];
my $first = 1;
my $ok = 0;
my $mystream = $stream;
while ($stream) {
my $default = xkb_flags();
xkb_identifier() eq "xkb_". $file_type
or syntax_error "xkb_". $file_type;
my $name = xkb_string();
my $structured;
if ($stream =~ s/^\{//) {
$structured = 1;
} else {
$structured = 0;
}
if ($name eq $block || ($first && ! $block)) {
xkb_definitions ($file_type);
if ($structured) {
$stream =~ s/^\};.*// or syntax_error "};";
} else {
$stream = '';
}
$ok = 1;
} else {
if ($structured) {
skip_to_brace;
$stream =~ s/^;// or syntax_error ";";
} else {
last;
}
}
$first = 0;
}
if (! $ok) {
$stream = $mystream;
}
return $ok;
}
sub include_xkb_file {
my $file_type = $_[0];
my $include_list = '^'. $_[1];
my $oldmethod = $method;
my $oldbase_group = $base_group;
while ($include_list) {
my $file;
my $block;
if ($include_list =~ (s/^(\^|\+|\|)([^\(\|\+]+)\(([^\)]+)\)
:([1234])(.*)/$5/x)) {
if ($1 eq '+') {
$method = $override_method;
} elsif ($1 eq '|') {
$method = $augment_method;
}
$file = $2;
$block = $3;
$base_group = $4 - 1 + $base_group;
} elsif ($include_list =~ (s/^(\^|\+|\|)([^\(\|\+]+)\(([^\)]+)\)
(.*)/$4/x)) {
if ($1 eq '+') {
$method = $override_method;
} elsif ($1 eq '|') {
$method = $augment_method;
}
$file = $2;
$block = $3;
} elsif ($include_list =~ s/^(\^|\+|\|)([^\(\|\+]+):([1234])(.*)/$4/) {
if ($1 eq '+') {
$method = $override_method;
} elsif ($1 eq '|') {
$method = $augment_method;
}
$file = $2;
$block = '';
$base_group = $3 - 1 + $base_group;
} elsif ($include_list =~ s/^(\^|\+|\|)([^\(\|\+]+)(.*)/$3/) {
if ($1 eq '+') {
$method = $override_method;
} elsif ($1 eq '|') {
$method = $augment_method;
}
$file = $2;
$block = '';
} else {
die "$0: bad include list $include_list.\n";
}
my $oldstream = $stream;
if ($file =~ /^\.?\//) {
$stream = file_to_string ("$file");
} else {
$stream = file_to_string (xfilename "$file_type/$file");
}
my $oldfilename = $filename;
$filename = $file;
if (!xkb_block_list ($file_type, $block)) {
warning "Can not find \"$block\" in \"$file\".\n";
xkb_block_list ($file_type, '');
}
# Patch the Greek symbols. See Bug#1026986 and http://kbdlayout.info/kbdhe :
# - xkb-data makes shift-w a SIGMA, which is not that useful.
# - On the other hand, the kernel doesn't support double-dead-keys, and it
# is common usage to make shift-w a dead-acute-diaeresis (here encoded
# as dead_breve)
if ($file eq "gr") {
my $code = $keycodes_table{'AD02'}[0];
if (defined $code) {
my $symbol = $symbols_table{$code}[$base_group][1];
if ($symbol eq "Greek_SIGMA") {
$symbols_table{$code}[$base_group][1] = "dead_breve";
}
}
}
$stream = $oldstream;
$filename = $oldfilename;
$method = $oldmethod;
$base_group = $oldbase_group;
}
}
include_xkb_file 'keycodes', $keycodes;
foreach my $alias (keys %aliases) {
if (! defined $keycodes_table{$aliases{$alias}}) {
die "$0: undefined keyname $aliases{$alias} in ".
"an keycode alias definition in $filename.\n";
}
$keycodes_table{$alias} = [ @{$keycodes_table{$alias}},
@{$keycodes_table{$aliases{$alias}}} ];
}
include_xkb_file 'symbols', $symbols;
if ($arch eq 'at' || $arch eq 'evdev') {
# Pause - 110, Break - 114, PrintScreen - 111, SysRq - 92
for my $group (0 .. 3) {
# no separate Break key on AT keyboards. Break = Ctrl+Pause
if (defined $symbols_table{110}[$group][1]) {
$symbols_table{114}[$group] = [$symbols_table{110}[$group][1]];
}
# no separate SysRq key on AT keyboards. SysRq = Alt+PrintScreen
if (defined $symbols_table{111}[$group][1]) {
$symbols_table{92}[$group] = [$symbols_table{111}[$group][1]];
}
}
}
foreach my $key (keys %symbols_table) {
foreach my $group (0 .. $#{$symbols_table{$key}}) {
if (! defined $symbols_table{$key}[$group]) {
$symbols_table{$key}[$group] = [];
} else {
foreach my $level (0 .. $#{$symbols_table{$key}[$group]}) {
if (! defined $symbols_table{$key}[$group][$level]) {
$symbols_table{$key}[$group][$level] = 'NoSymbol';
}
}
}
}
if (! defined $types_table{$key}) {
$types_table{$key} = 'DEFAULT';
}
}
sub uni_to_legacy {
my $uni = $_[0];
if ($acm) {
if ($uni <= 0x7f) {
if ($freebsd && $uni >= 0x20 && $uni <= 0x7e) {
return sprintf "\'%c\'", $uni;
} else {
return sprintf "0x%02x", $uni;
}
} elsif (defined $acmtable{$uni}) {
if ($freebsd) {
return sprintf "%i", $acmtable{$uni};
} else {
return sprintf "0x%02x", $acmtable{$uni};
}
} else {
if ($verbosity >= 8) {
warning sprintf ("Unicode U+%04x does not exist "
."in the legacy encoding\n", $uni);
}
return $voidsymbol;
}
} else {
return 'U+'. sprintf ("%04x", $uni);
}
}
sub x_to_kernelsym {
my $xkeysym = $_[0];
my $kernelkeysym = $xkbsym_table{$xkeysym};
if (defined $kernelkeysym) {
if ($kernelkeysym !~ /^[0-9][0-9a-fA-F]{3}$/) {
return $kernelkeysym;
}
} else {
$kernelkeysym = ($xkeysym =~ /^0x0*(100)?([0-9a-fA-F]{4})$/
? $2
: ($xkeysym =~ /^U([0-9a-fA-F]+)$/
? $1
: undef));
}
if (defined $kernelkeysym) {
my $uni = hex ($kernelkeysym);
if ($uni > 0xFFFF || defined $forbidden{$uni}) {
if ($verbosity >= 8) {
warning "Forbidden Unicode \"U+$kernelkeysym\"\n";
}
return $voidsymbol;
} else {
if (pack("U", $uni) =~ /\p{IsAlpha}/) {
my $legacy = uni_to_legacy ($uni);
if ($legacy ne $voidsymbol) {
return '+'. $legacy; # further processed for FreeBSD
} else {
return $legacy;
}
} elsif ($uni <= 0x1f) {
return $controlsyms[$uni];
} else {
return uni_to_legacy ($uni);
}
}
} else {
warning "Unknown X keysym \"$xkeysym\"\n";
return $voidsymbol;
}
}
sub x_to_ascii {
my $xkeysym = $_[0];
my $kernelkeysym = $xkbsym_table{$xkeysym};
if (defined $kernelkeysym) {
if (defined $controlsyms_hash{$kernelkeysym}) {
return $controlsyms_hash{$kernelkeysym};
} elsif ($kernelkeysym !~ /^[0-9][0-9a-fA-F]{3}$/) {
return undef;
}
} else {
$kernelkeysym = ($xkeysym =~ /^0x0*(100)?([0-9a-fA-F]{4})$/
? $2
: ($xkeysym =~ /^U([0-9a-fA-F]+)$/
? $1
: undef));
}
if (defined $kernelkeysym) {
my $uni = hex ($kernelkeysym);
if (0x00 <= $uni && 0x7f >= $uni) {
return $uni;
}
}
return undef;
}
# A vector of symbol codes for a key
my @vector;
# $numlockable[group] -> whether the group is numlockable
my @numlockable;
# A vector with same length as @vector. Measures how well each element of
# @vector represents the xkb symbol for the particular key. Bigger values
# mean lower quality.
my @quality;
sub approximate {
my ($coord, $new_sym, $new_quality) = @_;
# $new_sym represents the xkb symbol for position $coord in @vector
# with quality $new_quality
if ((! defined $quality[$coord] || $quality[$coord] > $new_quality)
&& $new_sym ne $voidsymbol) {
$vector[$coord] = $new_sym;
$quality[$coord] = $new_quality;
}
}
# Fill @vector with data for key number $_[0]
sub flatten {
# Kernel X
# -----------------------------------------
# 1 Shift level 2 (Shift)
# 2 AltGr levels 3 and 4 (AltGr)
# 4 Control Control
# 8 Alt Alt
# 0 Group1
# 16 ShiftL Group2
# 32 ShiftR Group4
# 48 ShiftL+ShiftR Group3
my $key = $_[0];
@vector = ();
@quality = ();
@numlockable = (0,0,0,0);
my @real_group_table = ([-1, -1, -1, -1],
[0, 0, 0, 0], # gr1 -> gr1 -> gr1 -> gr1
[0, 1, 1, 0], # gr1 -> gr2 -> gr1 -> gr2
[0, 1, 2, 0], # gr1 -> gr2 -> gr1 -> gr3
[0, 1, 3, 2]);# gr1 -> gr2 -> gr3 -> gr4
for my $group (0..3) {
my $real_group = $real_group_table[1+$#{$symbols_table{$key}}][$group];
my $last_level;
while ($real_group >= 0
&& ($last_level = $#{$symbols_table{$key}[$real_group]}) < 0) {
$real_group = $real_group - 1;
}
next if ($real_group < 0);
for my $level (0..3) {
my $real_level = $level;
if ($types_table{$key} eq 'ONE_LEVEL') {
$real_level = 0;
} elsif ($types_table{$key} eq 'TWO_LEVEL') {
$real_level = $real_level % 2;
} elsif ($types_table{$key} eq 'THREE_LEVEL') {
if ($real_level > 2) {
$real_level = 2;
}
}
if ($last_level == -1) {
next;
} elsif ($last_level == 0) {
$real_level = 0;
} elsif ($last_level == 1) {
$real_level = $real_level % 2;
} elsif ($last_level == 2 && $real_level == 3) {
$real_level = 2;
} elsif ($real_level > $last_level) {
$real_level = $last_level;
}
my $coord;
for ($types_table{$key}) {
if (/^(DEFAULT|ONE_LEVEL|TWO_LEVEL
|THREE_LEVEL|ALPHABETIC
|EIGHT_LEVEL|EIGHT_LEVEL_ALPHABETIC
|EIGHT_LEVEL_SEMIALPHABETIC
|FOUR_LEVEL|FOUR_LEVEL_ALPHABETIC
|FOUR_LEVEL_SEMIALPHABETIC
|SEPARATE_CAPS_AND_SHIFT_ALPHABETIC
|KEYPAD|FOUR_LEVEL_X|FOUR_LEVEL_MIXED_KEYPAD
|FOUR_LEVEL_KEYPAD|LOCAL_EIGHT_LEVEL
|FOUR_LEVEL_PLUS_LOCK
)$/x) {
# Level0: plain
# Level1: shift
# Level2: altgr
# Level3: shift+altgr
$coord = ($group << 4) + $level;
} elsif (/^(PC_BREAK|PC_CONTROL_LEVEL2
|PC_LCONTROL_LEVEL2|PC_RCONTROL_LEVEL2)$/x) {
# Level0: plain
# Level1: control
if ($level == 0 || $level == 2) {
$coord = ($group << 4) + $level;
} else {
$coord = ($group << 4) + $level + 3;
}
} elsif (/^(PC_SYSRQ|PC_ALT_LEVEL2
|PC_LALT_LEVEL2|PC_RALT_LEVEL2)$/x) {
# Level0: plain
# Level1: alt
if ($level == 0 || $level == 2) {
$coord = ($group << 4) + $level;
} else {
# notice that $level is 1 or 3
$coord = ($group << 4) + $level + 7;
}
} elsif (/^SHIFT\+ALT$/) {
# Level0: plain
# Level1: shift+alt
if ($level == 0 || $level == 2) {
$coord = ($group << 4) + $level;
} else {
$coord = ($group << 4) + $level + 8;
}
} elsif (/^CTRL\+ALT$/) {
# Level0: plain
# Level1: control+alt
if ($level == 0 || $level == 2) {
$coord = ($group << 4) + $level;
} else {
$coord = ($group << 4) + $level + 11;
}
} elsif (/^PC_FN_LEVEL2$/) {
# Level0: plain
# Level1: altgr
$coord = ($group << 4) + ($level << 1);
} else {
warning "Unknown key type $types_table{$key}\n";
$coord = ($group << 4) + $level;
}
}
my $xkeysym = $symbols_table{$key}[$real_group][$real_level];
if ($xkeysym =~ /^KP_/) {
$numlockable[$group] = 1;
}
my $is_special = ($xkeysym !~ /^U[0-9a-fA-F]+$/
&& defined $xkbsym_table{$xkeysym}
&& ($xkbsym_table{$xkeysym}
!~ /^[0-9][0-9a-fA-F]{3}$/));
my $kernelkeysym = x_to_kernelsym ($xkeysym);
approximate ($coord, $kernelkeysym, 0);
if (defined (my $ascii = x_to_ascii ($xkeysym))) {
approximate (($coord | 0x08), $metasyms[$ascii], 1);
approximate (($coord | 0x04), $controlsyms[$ascii], 1);
approximate (($coord | 0x0c), $metacontrolsyms[$ascii], 1);
}
}
}
for my $x (0..1) {
my $mask = 1 << $x;
for my $coord (0..63) {
next if (! defined $vector[$coord]);
approximate($coord ^ $mask, $vector[$coord],
$quality[$coord] + $mask << 2);
}
}
for my $x (2..3) {
my $mask = 1 << $x;
for my $coord (0..63) {
next if (! defined $vector[$coord]);
approximate($coord | $mask, $vector[$coord],
$quality[$coord] + $mask << 2);
}
}
for my $coord (0..16) {
next if (! defined $vector[$coord]);
for my $mask (1<<4, 2<<4, 3<<4) {
approximate($coord | $mask, $vector[$coord],
$quality[$coord] + 1 << 6);
}
}
for my $coord (0 .. 63) {
if (! defined $vector[$coord]) {
$vector[$coord] = $voidsymbol;
}
}
for my $coord (0 .. 63) {
next if ($coord & 0x0c); # next if Control and/or Alt
my $mask = $kernel_modifiers{$vector[$coord]};
next unless (defined $mask);
for my $mod (4, 8, 12) {
if ($vector[$coord + $mod] eq $voidsymbol
&& ($vector[($coord + $mod) ^ $mask] eq $voidsymbol)) {
$vector[$coord + $mod] = $vector[$coord];
}
}
}
# Without this it would be possible to lock permanently
# a modifier key such as Control or Alt
for my $coord (0 .. 63) {
my $mask = $kernel_modifiers{$vector[$coord]};
if (defined $mask) {
$vector[$coord ^ $mask] = $vector[$coord];
if ($compact && ! $freebsd) {
# In non-Latin layouts AltGr=ShiftL
# AltGr = 0x02, ShiftL = 0x10
if (($mask & 0x02) && ($mask & 0x10)) {
$vector[$coord ^ $mask ^ 0x02] = $vector[$coord];
$vector[$coord ^ $mask ^ 0x10] = $vector[$coord];
} elsif ($mask & 0x02) {
$vector[$coord ^ $mask ^ 0x10] = $vector[$coord];
$vector[$coord ^ $mask ^ 0x10 ^ 0x02] = $vector[$coord];
} elsif ($mask & 0x10) {
$vector[$coord ^ $mask ^ 0x02] = $vector[$coord];
$vector[$coord ^ $mask ^ 0x02 ^ 0x10] = $vector[$coord];
}
}
}
}
if ($freebsd || ! $compact) {
for my $coord (16 .. 63) {
if ($vector[$coord] =~ /^(ShiftL|ShiftL_Lock|ashift|alock)$/) {
$vector[$coord] = $voidsymbol;
}
}
for my $coord (0 .. 15) {
if ($vector[$coord] eq 'ShiftL_Lock') { # 0 => 16
$vector[$coord + 16] = 'ShiftR_Lock'; # 16 => 48
$vector[$coord + 32] = 'ShiftR_Lock'; # 32 => 0
$vector[$coord + 48] = 'ShiftL_Lock'; # 48 => 32
} elsif ($vector[$coord] =~ /^(ShiftL|ashift|alock)$/) {
$vector[$coord + 16] = $vector[$coord];
$vector[$coord + 32] = $vector[$coord];
$vector[$coord + 48] = $vector[$coord];
}
}
} else {
for my $coord (16 .. 63) {
if ($vector[$coord] =~ /^(AltGr|AltGr_Lock)$/) {
$vector[$coord] = $voidsymbol;
}
}
for my $coord (0 .. 15) {
if ($vector[$coord] =~ /^(AltGr_Lock|AltGr)$/) {
$vector[$coord + 16] = $vector[$coord];
$vector[$coord + 32] = $vector[$coord];
$vector[$coord + 48] = $vector[$coord];
}
}
}
for my $group (0 .. 3) {
my $kp = undef;
for my $x (0 .. 15) {
my $coord = 16 * $group + $x;
if ($vector[$coord] =~ /^KP_/) {
$kp = $vector[$coord];
last;
}
}
if ($types_table{$key} =~ /^(KEYPAD|FOUR_LEVEL_X
|FOUR_LEVEL_MIXED_KEYPAD
|FOUR_LEVEL_KEYPAD)$/x
&& ! defined $kp) {
$kp = 'VoidSymbol';
$numlockable[$group] = 1;
}
if ($kp && ! $freebsd) {
for my $x (0 .. 15) {
my $coord = 16 * $group + $x;
for ($vector[$coord]) {
if (/^VoidSymbol$/) {
# KP_Begin and KP_Delete are mapped to VoidSymbol
$vector[$coord] = $kp;
} elsif (/$xkbsym_table{'plus'}/) {# not anchored match!
$vector[$coord] = 'KP_Add';
} elsif (/$xkbsym_table{'minus'}/) {
$vector[$coord] = 'KP_Subtract';
} elsif (/$xkbsym_table{'asterisk'}/) {
$vector[$coord] = 'KP_Multiply';
} elsif (/$xkbsym_table{'slash'}/) {
$vector[$coord] = 'KP_Divide';
} elsif (/$xkbsym_table{'comma'}/) {
$vector[$coord] = 'KP_Comma';
} elsif (/$xkbsym_table{'period'}/) {
$vector[$coord] = 'KP_Period';
} elsif (/$xkbsym_table{'0'}/) {
$vector[$coord] = 'KP_0';
} elsif (/$xkbsym_table{'1'}/) {
$vector[$coord] = 'KP_1';
} elsif (/$xkbsym_table{'2'}/) {
$vector[$coord] = 'KP_2';
} elsif (/$xkbsym_table{'3'}/) {
$vector[$coord] = 'KP_3';
} elsif (/$xkbsym_table{'4'}/) {
$vector[$coord] = 'KP_4';
} elsif (/$xkbsym_table{'5'}/) {
$vector[$coord] = 'KP_5';
} elsif (/$xkbsym_table{'6'}/) {
$vector[$coord] = 'KP_6';
} elsif (/$xkbsym_table{'7'}/) {
$vector[$coord] = 'KP_7';
} elsif (/$xkbsym_table{'8'}/) {
$vector[$coord] = 'KP_8';
} elsif (/$xkbsym_table{'9'}/) {
$vector[$coord] = 'KP_9';
} elsif (/^(Return|Enter)$/) {
$vector[$coord] = 'KP_Enter';
} elsif (/^Home$/) {
$vector[$coord] = 'KP_7';
} elsif (/^Left$/) {
$vector[$coord] = 'KP_4';
} elsif (/^Up$/) {
$vector[$coord] = 'KP_8';
} elsif (/^Right$/) {
$vector[$coord] = 'KP_6';
} elsif (/^Down$/) {
$vector[$coord] = 'KP_2';
} elsif (/^Prior$/) {
$vector[$coord] = 'KP_9';
} elsif (/^Next$/) {
$vector[$coord] = 'KP_3';
} elsif (/^End$/) {
$vector[$coord] = 'KP_1';
} elsif (/^Insert$/) {
$vector[$coord] = 'KP_0';
}
}
}
}
}
for my $group (0 .. 3) {
my $coord = $group << 4;
my $mainsym = $vector[$coord];
if ($mainsym =~ /^fkey([0-9]+)$/) {
my $num = $1;
if (1 <= $num && $num <= 12) {
$vector[$coord + 1] = 'fkey'. ($num+12); # shift
$vector[$coord + 4] = 'fkey'. ($num+24); # control
$vector[$coord + 5] = 'fkey'. ($num+36); # control + shift
$vector[$coord + 2] = 'scr'. sprintf("%02i", $num); #altgr
my $x = sprintf("%02i", ($num <= 6) ? $num+10 : $num);
$vector[$coord + 3] = 'scr'. $x; # altgr + shift
$vector[$coord + 6] = 'scr'. sprintf("%02i", $num); # altgr+ctrl
$vector[$coord + 7] = 'scr'. $x; # altgr + control + shift
} elsif ($num == 52 || $num == 56) {
my $sym = $num == 52 ? '\'-\'' : '\'+\'';
for my $i ($coord .. $coord+15) {
if ($vector[$i] eq $mainsym && $vector[$i^1] eq $mainsym) {
$vector[$i | 1] = $sym;
}
}
} elsif ($num == 60 && $vector[$coord + 1] eq 'fkey60') {
$vector[$coord + 1] = 'paste';
}
} elsif ($mainsym =~ /^esc$/) {
$vector[$coord + 6] = 'debug';
$vector[$coord + 7] = 'debug';
} elsif ($mainsym =~ /^saver$/) { # 'Pause' key
$vector[$coord] = 'slock';
$vector[$coord + 1] = 'saver'; # shift
$vector[$coord + 2] = 'susp'; # altgr
$vector[$coord + 3] = 'susp'; # altgr + shift
$vector[$coord + 4] = 'slock'; # ctrl
$vector[$coord + 5] = 'saver'; # ctrl + shift
$vector[$coord + 6] = 'susp'; # ctrl + altgr
$vector[$coord + 7] = 'susp'; # ctrl + altgr + shift
} elsif ($freebsd && $mainsym =~ /^\' \'$/) {
$vector[$coord + 6] = 'susp';
$vector[$coord + 7] = 'susp';
} elsif ($mainsym =~ /^ht$/) {
for my $i ($coord .. $coord+15) {
if ($vector[$i] eq 'ht' && $vector[$i ^ 1] eq 'ht') {
$vector[$i | 1] = 'btab';
}
}
} elsif ($mainsym =~ /^nscr$/) {
for my $i ($coord .. $coord+15) {
if ($vector[$i] eq 'nscr' && $vector[$i ^ 1] eq 'nscr') {
$vector[$i | 1] = 'pscr';
}
}
$vector[$coord + 4] = 'debug';
$vector[$coord + 5] = 'debug';
} elsif ($mainsym =~ /^F([0-9]+)$/) {
my $num = $1;
$vector[$coord + 1] = 'F'. ($num + 12); # shift
$vector[$coord + 2] = 'Console_'. ($num + 12); # altgr
$vector[$coord + 3] = 'Console_'. ($num + 24); # altgr + shift
$vector[$coord + 4] = 'F'. ($num + 24); # control
$vector[$coord + 5] = 'F'. ($num + 36); # control + shift
$vector[$coord + 6] = 'Console_'. ($num + 12); # control + altgr
$vector[$coord + 7] = 'Console_'. ($num + 24); # control+altgr+shift
$vector[$coord + 8] = 'Console_'. $num; # alt
$vector[$coord + 9] = 'Console_'. ($num + 12); # alt + shift
$vector[$coord + 12] = 'Console_'. $num; # control + alt
$vector[$coord + 13] = 'Console_'. ($num + 12); # control+alt+shift
} elsif ($mainsym eq 'Scroll_Lock' || $mainsym eq 'Help') {
$vector[$coord + 1] = 'Show_Memory';
$vector[$coord + 2] = 'Show_Registers';
$vector[$coord + 4] = 'Show_State';
$vector[$coord + 8] = 'Show_Registers';
} elsif ($mainsym =~ /^KP_([0-9])$/) {
my $num = $1;
$vector[$coord + 2] = 'Hex_'. $num;
$vector[$coord + 9] = 'Hex_'. $num;
$vector[$coord + 8] = 'Ascii_'. $num;
} elsif ($mainsym eq 'Num_Lock') {
$vector[$coord + 2] = 'Hex_A';
$vector[$coord + 9] = 'Hex_A';
} elsif ($mainsym eq 'KP_Divide') {
$vector[$coord + 2] = 'Hex_B';
$vector[$coord + 9] = 'Hex_B';
} elsif ($mainsym eq 'KP_Multiply') {
$vector[$coord + 2] = 'Hex_C';
$vector[$coord + 9] = 'Hex_C';
} elsif ($mainsym eq 'KP_Subtract') {
$vector[$coord + 2] = 'Hex_D';
$vector[$coord + 9] = 'Hex_D';
} elsif ($mainsym eq 'KP_Add') {
$vector[$coord + 2] = 'Hex_E';
$vector[$coord + 9] = 'Hex_E';
} elsif ($mainsym eq 'KP_Enter') {
$vector[$coord + 2] = 'Hex_F';
$vector[$coord + 9] = 'Hex_F';
} elsif ($mainsym eq 'Prior' || $mainsym eq 'PageUp') {
$vector[$coord + 1] = 'Scroll_Backward';
} elsif ($mainsym eq 'Next' || $mainsym eq 'PageDown') {
$vector[$coord + 1] = 'Scroll_Forward';
} elsif ($mainsym eq 'Left') {
$vector[$coord + 8] = 'Decr_Console';
} elsif ($mainsym eq 'Right') {
$vector[$coord + 8] = 'Incr_Console';
} elsif ($mainsym eq 'Up') {
$vector[$coord + 8] = 'KeyboardSignal';
}
}
return @vector;
}
sub print_vector {
my $kernel_code = $_[0];
my $only_VoidSymbol = 1;
my $no_NoSymbol = 1;
for my $mask (0 .. 63) {
if ($vector[$mask] ne $voidsymbol && $vector[$mask] ne 'NoSymbol') {
$only_VoidSymbol = 0;
last;
}
}
return if ($only_VoidSymbol && $compact);
for my $mask (0 .. 63) {
if ($vector[$mask] eq 'NoSymbol') {
$no_NoSymbol = 0;
last;
}
}
if ($freebsd) {
my @capslockable = (0,0,0,0);
for my $group (0 .. 3) {
if ($vector[$group * 16] =~ /^\+/) {
$capslockable[$group] = 1;
last;
}
}
for my $mask (0 .. 63) {
$vector[$mask] =~ s/^\+//;
$vector[$mask] =~ s/^NoSymbol$/nop/;
}
for my $group (0 .. 1) {
next if ($group && $symbols !~ /:2/);
my $lockstate = ($capslockable[$group] ?
($numlockable[$group] ? 'B' : 'C')
: ($numlockable[$group] ? 'N' : 'O'));
$KEYMAP .= sprintf " %03i ", $kernel_code + 128*$group;
for my $mask (0, 1, 4, 5, 2, 3, 6, 7) {
$KEYMAP .= sprintf "%-6s ", $vector[$mask + 16*$group];
}
$KEYMAP .= " $lockstate\n";
}
} elsif ($compact) {
my $line = ($symbols =~ /:2/ # true if the keymap is non-latin
? "@vector[0, 1, 16, 17, 4, 20, 8, 24, 12, 28]"
: "@vector[0, 1, 2, 3, 4, 6, 8, 10, 12, 14]");
$line =~ s/NoSymbol/VoidSymbol/g;
$KEYMAP .= "keycode $kernel_code = $line\n";
} else {
my @capsvector = @vector;
for my $mask (0 .. 63) {
if ($capsvector[$mask] =~ /^(\+?)U\+([0-9a-fA-F]+)$/) {
my $v = hex ($2);
my $l = ord (lc (pack ("U", $v)));
my $u = ord (uc (pack ("U", $v)));
my $c = ($v == $l ? $u : $l);
$capsvector[$mask] = $1 ."U+". sprintf ("%04x", $c);
if ($v != $c && $v > 0x7f) {
$broken_caps = 1;
}
}
}
if ($no_NoSymbol) {
$KEYMAP .= "keycode $kernel_code = @vector @capsvector\n";
} else {
for my $mask (0 .. 63) {
if ($vector[$mask] ne 'NoSymbol') {
$KEYMAP .= "$modifier_combinations[$mask]"
." keycode $kernel_code = $vector[$mask]\n";
if ($modifier_combinations[$mask] =~ /plain/) {
$KEYMAP .= "ctrll"
." keycode $kernel_code = $capsvector[$mask]\n";
} else {
$KEYMAP .= "ctrll $modifier_combinations[$mask]"
." keycode $kernel_code = $capsvector[$mask]\n";
}
}
}
}
}
}
my %at_scancodes = (
9 => 1,
10 => 2,
11 => 3,
12 => 4,
13 => 5,
14 => 6,
15 => 7,
16 => 8,
17 => 9,
18 => 10,
19 => 11,
20 => 12,
21 => 13,
22 => 14,
23 => 15,
24 => 16,
25 => 17,
26 => 18,
27 => 19,
28 => 20,
29 => 21,
30 => 22,
31 => 23,
32 => 24,
33 => 25,
34 => 26,
35 => 27,
36 => 28,
37 => 29,
38 => 30,
39 => 31,
40 => 32,
41 => 33,
42 => 34,
43 => 35,
44 => 36,
45 => 37,
46 => 38,
47 => 39,
48 => 40,
49 => 41,
50 => 42,
51 => 43,
52 => 44,
53 => 45,
54 => 46,
55 => 47,
56 => 48,
57 => 49,
58 => 50,
59 => 51,
60 => 52,
61 => 53,
62 => 54,
63 => 55,
64 => 56,
65 => 57,
66 => 58,
67 => 59,
68 => 60,
69 => 61,
70 => 62,
71 => 63,
72 => 64,
73 => 65,
74 => 66,
75 => 67,
76 => 68,
77 => 69,
78 => 70,
79 => 71,
80 => 72,
81 => 73,
82 => 74,
83 => 75,
84 => 76,
85 => 77,
86 => 78,
87 => 79,
88 => 80,
89 => 81,
90 => 82,
91 => 83,
92 => 84,
93 => -1, # fake key (KP_Equal)
94 => 86,
95 => 87,
96 => 88,
97 => 102,
98 => 103,
99 => 104,
100 => 105,
102 => 106,
103 => 107,
104 => 108,
105 => 109,
106 => 110,
107 => 111,
108 => 96,
109 => 97,
110 => 119,
111 => 99,
112 => 98,
113 => 100,
114 => 101,
115 => 125,
116 => 126,
117 => 127,
118 => -1, # Japanese
119 => -1, # Japanese
120 => -1, # Japanese
123 => -1,
124 => -1, # fake key
125 => -1, # fake key
126 => -1, # fake key
127 => -1, # fake key
128 => -1, # fake key
129 => -1, # Japanese
131 => -1, # Japanese
133 => 124, # Japanese
134 => 121, # Brasilian ABNT2
144 => -1, # Japanese
156 => -1, # fake key
208 => -1, # Japanese
209 => -1, # Korean
210 => -1, # Korean
211 => 89, # Brasilian ABNT2, Japanese
214 => -1, # alternate between internal and multimedia display
215 => -1, # turn light on/of
216 => -1, # brightness down
217 => -1, # brightness up
);
my %freebsd_scancodes = (
9 => 1,
10 => 2,
11 => 3,
12 => 4,
13 => 5,
14 => 6,
15 => 7,
16 => 8,
17 => 9,
18 => 10,
19 => 11,
20 => 12,
21 => 13,
22 => 14,
23 => 15,
24 => 16,
25 => 17,
26 => 18,
27 => 19,
28 => 20,
29 => 21,
30 => 22,
31 => 23,
32 => 24,
33 => 25,
34 => 26,
35 => 27,
36 => 28,
37 => 29,
38 => 30,
39 => 31,
40 => 32,
41 => 33,
42 => 34,
43 => 35,
44 => 36,
45 => 37,
46 => 38,
47 => 39,
48 => 40,
49 => 41,
50 => 42,
51 => 43,
52 => 44,
53 => 45,
54 => 46,
55 => 47,
56 => 48,
57 => 49,
58 => 50,
59 => 51,
60 => 52,
61 => 53,
62 => 54,
63 => 55,
64 => 56,
65 => 57,
66 => 58,
67 => 59,
68 => 60,
69 => 61,
70 => 62,
71 => 63,
72 => 64,
73 => 65,
74 => 66,
75 => 67,
76 => 68,
77 => 69,
78 => 70,
79 => 71,
80 => 72,
81 => 73,
82 => 74,
83 => 75,
84 => 76,
85 => 77,
86 => 78,
87 => 79,
88 => 80,
89 => 81,
90 => 82,
91 => 83,
92 => 84,
93 => -1, # fake key (KP_Equal)
94 => 86,
95 => 87,
96 => 88,
97 => 94,
98 => 95,
99 => 96,
100 => 97,
102 => 98,
103 => 99,
104 => 100,
105 => 101,
106 => 102,
107 => 103,
108 => 89,
109 => 90,
110 => 104,
111 => 92,
112 => 91,
113 => 93,
114 => 108,
115 => 105,
116 => 106,
117 => 107,
118 => -1, # Japanese
119 => -1, # Japanese
120 => -1, # Japanese
123 => -1,
124 => -1, # fake key
125 => -1, # fake key
126 => -1, # fake key
127 => -1, # fake key
128 => -1, # fake key
129 => -1, # Japanese
131 => -1, # Japanese
133 => 125, # Japanese
134 => 126, # Brasilian ABNT2
144 => -1, # Japanese
156 => -1, # fake key
208 => -1, # Japanese
209 => -1, # Korean
210 => -1, # Korean
211 => 115, # Brasilian ABNT2, Japanese
214 => -1, # alternate between internal and multimedia display
215 => -1, # turn light on/of
216 => -1, # brightness down
217 => -1, # brightness up
);
if ($freebsd) {
$KEYMAP .=
"# alt\n".
"# scan cntrl alt alt cntrl lock\n".
"# code base shift cntrl shift alt shift cntrl shift state\n".
"# ------------------------------------------------------------------\n";
#" 000 nop nop nop nop nop nop nop nop O\n";
} elsif ($compact) {
$KEYMAP .= "keymaps 0-4,6,8,10,12,14\n";
} else {
$KEYMAP .= "keymaps 0-127\n";
}
if ($freebsd) {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = $freebsd_scancodes{$key};
next if (! defined $kernel_code || $kernel_code < 0);
@vector = flatten ($key);
if ($kernel_code == 83 || $kernel_code == 103) {
for my $coord (0+6, 0+7, 16+6, 16+7, 32+6, 32+7, 48+6, 48+7,) {
$vector[$coord] = 'boot';
}
}
print_vector $kernel_code;
}
} elsif ($arch eq 'at' || $arch eq 'evdev') {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = (($arch eq 'at') ? $at_scancodes{$key} : $key - 8);
next if (! defined $kernel_code || $kernel_code < 0);
@vector = flatten ($key);
if ($kernel_code == 99) {
for my $coord (0, 1, 16, 17, 32, 33, 48, 49) {
$vector[$coord] = 'VoidSymbol';
}
} elsif ($kernel_code == 83 || $kernel_code == 111) {
for my $coord (0+6, 0+12, 0+14,
16+6, 16+12, 16+14,
32+6, 32+12, 32+14,
48+6, 48+12, 48+14) {
$vector[$coord] = 'Boot';
}
}
print_vector $kernel_code;
}
} elsif ($arch eq 'macintosh') {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = $key - 8;
@vector = flatten ($key);
print_vector $kernel_code;
}
$KEYMAP .= '\
keycode 127 =
shift control keycode 127 = Boot
'
} elsif ($arch eq 'ataritt') {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = $key - 8;
if ($kernel_code == 97) {
@vector = ('F246', 'Break', 'F246', 'F246',
'F246', 'F246', 'F246', 'F246',
'Last_Console', 'F246', 'F246', 'F246',
'F246', 'F246', 'F246', 'F246') x 4;
} else {
@vector = flatten ($key);
}
if ($kernel_code == 83 || $kernel_code == 113) {
for my $coord (0+6, 0+12, 0+14,
16+6, 16+12, 16+14,
32+6, 32+12, 32+14,
48+6, 48+12, 48+14) {
$vector[$coord] = 'Boot';
}
}
print_vector $kernel_code;
}
} elsif ($arch eq 'amiga') {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = $key - 8;
@vector = flatten ($key);
if ($kernel_code == 60) {
for my $coord (0+6, 0+12, 0+14,
16+6, 16+12, 16+14,
32+6, 32+12, 32+14,
48+6, 48+12, 48+14) {
$vector[$coord] = 'Boot';
}
}
print_vector $kernel_code;
}
} elsif ($arch eq 'sun') {
foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
my $kernel_code = $key - 7;
@vector = flatten ($key);
if ($kernel_code == 50) {
for my $coord (0+6, 0+12, 0+14,
16+6, 16+12, 16+14,
32+6, 32+12, 32+14,
48+6, 48+12, 48+14) {
$vector[$coord] = 'Boot';
}
}
print_vector $kernel_code;
}
} else {
die "$0: Unsupported keyboard type $arch\n";
}
if ($broken_caps) {
$KEYMAP =~ s/Caps_Lock/CtrlL_Lock/g;
}
print $KEYMAP;
if (!$compose_charmap && $charmap) {
$compose_charmap = $charmap;
}
if ($freebsd) {
if ($compose_charmap) {
my $file1 = "/etc/console-setup/dkey.${compose_charmap}.inc";
my $file2 = "$installdir/etc/console-setup/dkey.${compose_charmap}.inc";
if (-f $file1) {
system("cat", $file1);
} elsif (-f $file2) {
system("cat", $file2);
}
}
} else {
print "strings as usual\n";
if ($compose_charmap) {
my $file1 = "/etc/console-setup/compose.${compose_charmap}.inc";
my $file2 = "$installdir/etc/console-setup/compose.${compose_charmap}.inc";
if (-f $file1) {
system("cat", $file1);
} elsif (-f $file2) {
system("cat", $file2);
}
}
}
my $file1 = "/etc/console-setup/remap.inc";
my $file2 = "$installdir/etc/console-setup/remap.inc";
if (-f $file1) {
system("cat", $file1);
} elsif (-f $file2) {
system("cat", $file2);
}
exit 0;