#!/bin/sh
model=pc105
layout=''
variant=''
options=''
charmap=''
freebsd=''
verbose_option=no
installdir=${0%/*}
case "$installdir" in
*/bin) installdir=${installdir%/bin} ;;
*) installdir=$installdir/.. ;;
esac
datadir=$installdir/share/console-setup
[ -d "$datadir" ] || datadir=/usr/share/console-setup
which () {
local IFS
IFS=:
for i in $PATH; do
if [ -x "$i/$1" ]; then
echo "$i/$1"
return 0
fi
done
return 1
}
while [ "$*" ]; do
case "$1" in
-I*)
datadir=${1#-I}
;;
-model)
shift
model="$1"
;;
-layout)
shift
layout=">$1"
;;
-variant)
shift
variant=">$1"
;;
-option)
shift
options=$(echo $options $1 | sed 's/,/ /g')
;;
-charmap)
shift
charmap=`echo "$1"|sed 's/-//g'`
;;
-backspace)
shift
;;
-freebsd)
freebsd=yes
;;
-\?|-help)
cat >&2 <<EOF
Usage: ckbcomp-mini [args] [<layout> [<variant> [<option> ... ]]]
Where legal args are:
-?,-help            Print this message
-charmap <charmap>  Ignored
-I<dir>             Search for ekmaps in <dir>
-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
-freebsd            Generate a keymap for FreeBSD
-backspace <type>   Ignored
EOF
exit 0
;;
-*)
echo "ckbcomp-mini: Unrecognised option $1" >&2
exit 1
;;
*)
if [ -z "$layout" ]; then
layout=">$1"
elif [ -z "$variant" ]; then
variant=">$1"
else
options=$(echo $options $1 | sed 's/,/ /g')
fi
esac
shift
done
layout=${layout#>}
variant=${variant#>}
case "$model" in
amiga|ataritt|pc105|sun4|sun5)
;;
*)
model=pc105
;;
esac
if [ -z "$layout" ]; then
layout=us
fi
if [ "$freebsd" ]; then
ekmap=$datadir/$model.ekbd.gz
else
ekmap=$datadir/$model.ekmap.gz
fi
if [ ! -f $ekmap ]; then
echo "ckbcomp-mini: $ekmap does not exist" >&2
exit 1
fi
layout=${layout#*,}
variant=${variant#*,}
ckbcomp_rec () {
local kmap
kmap="$1"
zcat $ekmap \
| grep "^$kmap::" \
| sed "s/^$kmap:://" \
| {
while read line; do
case "$line" in
?include*)
ckbcomp_rec "${line##* }"
;;
*)
echo "$line"
;;
esac
done
}
}
utf_keymap () {
if [ -z "$freebsd" ]; then
echo 'keymaps 0-4,6,8,10,12,14'
fi
ckbcomp_rec "$layout:$variant"
for option in $options; do
zcat $ekmap \
| grep "^$option::" \
| sed "s/^$option:://"
done
if [ -n "$freebsd" -a -n "$charmap" ]; then
file1="/etc/console-setup/dkey.${charmap}.inc"
file2="$installdir/etc/console-setup/dkey.${charmap}.inc"
if [ -f "$file1" ]; then
cat "$file1"
elif [ -f "$file2" ]; then
cat "$file2"
fi
fi
if [ -z "$freebsd" ]; then
echo 'strings as usual'
if [ "$charmap" ]; then
file1="/etc/console-setup/compose.${charmap}.inc"
file2="$installdir/etc/console-setup/compose.${charmap}.inc"
if [ -f "$file1" ]; then
cat "$file1"
elif [ -f "$file2" ]; then
cat "$file2"
fi
fi
fi
}
if [ "$charmap" ]; then
if [ -f $datadir/charmap_functions.sh ]; then
. $datadir/charmap_functions.sh
else
echo $charmap is not supported >&2
exit 1
fi
utf_keymap \
| while read x; do
line=''
for i in $x; do
case $i in
+U+????) line="$line+`to_$charmap ${i#+U+}` " ;;
U+????) line="$line`to_$charmap ${i#U+}` " ;;
*) line="$line$i " ;;
esac
done
echo $line
done
else
utf_keymap
fi
