diff options
author | jkh <jkh@FreeBSD.org> | 1995-03-24 00:52:28 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-03-24 00:52:28 +0000 |
commit | 499fee9f1f4ad68f3b4cfc317aeff48fdcf07b81 (patch) | |
tree | d7c4715b7ad3eff829a21aa9618475d7be39c10d /usr.sbin/kbdmap | |
parent | 863dd5c6bc1d0c635354d3036b87d00387cec3a3 (diff) | |
download | FreeBSD-src-499fee9f1f4ad68f3b4cfc317aeff48fdcf07b81.zip FreeBSD-src-499fee9f1f4ad68f3b4cfc317aeff48fdcf07b81.tar.gz |
Bring in the kbdmap/kbdfont utilities from Wolfram Schneider.
Renamed them to make them more consistent with kbdcontrol/fdcontrol/etc.
Diffstat (limited to 'usr.sbin/kbdmap')
-rw-r--r-- | usr.sbin/kbdmap/Makefile | 14 | ||||
-rw-r--r-- | usr.sbin/kbdmap/kbdmap.pl | 191 |
2 files changed, 205 insertions, 0 deletions
diff --git a/usr.sbin/kbdmap/Makefile b/usr.sbin/kbdmap/Makefile new file mode 100644 index 0000000..d638155 --- /dev/null +++ b/usr.sbin/kbdmap/Makefile @@ -0,0 +1,14 @@ +# Makefile for kbdmap / kbdfont +# $Id$ + +SCRIPT= ${.CURDIR}/kbdmap.pl +LINKS= ${DESTDIR}${BINDIR}/kbdmap ${DESTDIR}${BINDIR}/kbdfont + +all: + @echo -n + +beforeinstall: + install -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ + ${SCRIPT} ${DESTDIR}${BINDIR}/kbdmap + +.include <bsd.prog.mk> diff --git a/usr.sbin/kbdmap/kbdmap.pl b/usr.sbin/kbdmap/kbdmap.pl new file mode 100644 index 0000000..8146da7 --- /dev/null +++ b/usr.sbin/kbdmap/kbdmap.pl @@ -0,0 +1,191 @@ +#!/usr/bin/perl +# +# Copyright (c) March 1995 Wolfram Schneider. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Wolfram Schneider +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +# +# kbdmap/kbdfont - front end for syscons +# +# E-Mail: Wolfram Schneider <wosch@cs.tu-berlin.de> +# + +system("kbdcontrol -d >/dev/null"); +die "You are on a virtual console?\n" . + "This program does not work with X11\n" if $?; + +sub variables_static { + $lang = $ENV{'LANG'}; # use standard enviroment variable $LANG + $lang = "en" unless $lang; + $lang_default = "en"; + $program = $0; $program =~ s|.*/||; + $keymapdir = "/usr/share/syscons/keymaps"; + $fontdir = "/usr/share/syscons/fonts"; + $index = "INDEX"; # Keyboard language database + $verbose = 0; + + # menu + $menu_map{en} = "Choise your keyboard language"; + $menu_map{de} = "Wähle Deine Tastaturbelegung"; + $menu_font{en} = "Choise your keyboard font"; + $menu_font{de} = "Wähle Deine Schrift"; + + %keymap = ''; +} + +sub variables_dynamic { + if ($program eq "kbdmap") { + $menu = $menu_map{$lang}; + $dir = $keymapdir; + } else { + $menu = $menu_font{$lang}; + $dir = $fontdir; + } + + $dialog = "/usr/bin/dialog \\ +--clear \\ +--title \"Keyboard Menu\" \\ +--menu \"$menu\" \\ +-1 -1 8"; +} + +sub menu_read { + local($e,@a,$mark,$ext); + local($keym, $lg, $desc); + + $ext = $dir; $ext =~ s|.*/||; + # read index database + open(I, "$dir/$index.$ext") || warn "$dir/$index.$ext: $!\n"; + while(<I>) { + chop; + /^#/ && next; + + ($keym, $lg, $desc) = split(/:/); + if (! -r "$keym" && ! -r "$dir/$keym") { + warn "$keym not found!\n" if $verbose; + next; + } + + # set empty language to default language + $lg = $lang_default if $lg eq ""; + + # ----> 1) your choise if exist + # --> 2) default language if exist and not 1) + # -> 3) unknown language if 1) and 2) not exist + if ($lg eq $lang) { + # found your favorite language :-) + $keymap{$keym} = $desc; + } elsif (!$keymap{$keym}) { + # found a language, but not your + # set mark if unknown language + $mark{$keym} = 1 if ($lg ne $lang_default); + $keymap{$keym} = $desc; + } elsif ($lg eq $lang_default && $mark{$keym}) { + # overwrite unknown language with default language + $keymap{$keym} = $desc; + } + } + close I; + + # look for keymaps which are not in database + opendir(D, "$dir") || warn "$dir: $!\n"; + foreach $e (readdir(D)) { + if ($e =~ /^[a-z].*(kbd|fnt)$/ && !$keymap{$e}) { + warn "$e not in database\n" if $verbose; + $keymap{$e} = $e; + $keymap{$e} =~ s/\.(kbd|fnt)$//; + } + } + closedir D; + + # sort menu + foreach $e (sort(keys %keymap)) { + push(@a, "\"$keymap{$e}\" \"\""); + } + @a = sort @a; + @a; +} + +sub dialog { + local(@argv) = @_; + local($tmp) = "/tmp/_kbd_lang$$"; + + # start dialog + system("$dialog @argv 2> $tmp"); + + if (!$?) { + $choise = `cat $tmp`; + foreach $e (keys %keymap) { + if ($keymap{$e} eq $choise) { + if ($program eq "kbdmap") { + system("kbdcontrol -l $dir/$e\n"); + print "keymap=$e", "\n"; + } else { + $f = $e; $f =~ s/\.fnt$//; $f =~ s/.*-//; + system("vidcontrol -f $f $dir/$e\n"); + $_ = $e; + if (/^.*\-(.*)\.fnt/) { + $font=$1 + } else { $font="unknown" } + print "font$font=$e", "\n"; + } + last; + } + } + } + unlink $tmp; + exit($?); +} + +sub usage { + warn <<EOF; +usage: $program [-v|-verbose] [-h|-help] [-l|-lang language] +EOF + exit 1; +} + +# Argumente lesen +sub parse { + local(@argv) = @_; + + while($_ = $argv[0], /^-/) { + shift @argv; + last if /^--$/; + if (/^--?(h|help|\?)$/) { &usage; } + elsif (/^--?(v|verbose)$/) { $verbose = 1; } + elsif (/^--?(l|lang)$/) { $lang = $argv[0]; shift @argv; } + else { &usage } + } +} + +# main +&variables_static; # read variables +&parse(@ARGV); # parse arguments +&variables_dynamic; # read variable after parsing +&dialog(&menu_read); # start dialog and kbdcontrol/vidcontrol + |