84 lines
2.1 KiB
Bash
84 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
tmp1=$(mktemp ${TMPDIR:-/tmp}/${0##*/}.XXXXXX) || exit 1
|
|
trap "rm -f $tmp1; exit" EXIT SIGPIPE SIGTERM SIGINT
|
|
tmp2=$(mktemp ${TMPDIR:-/tmp}/${0##*/}.XXXXXX) || exit 1
|
|
trap "rm -f $tmp1 $tmp2; exit" EXIT SIGPIPE SIGTERM SIGINT
|
|
|
|
: ${TERMCAP:=/etc/termcap}
|
|
: ${TERMINFO:=/usr/share/terminfo}
|
|
acsc=
|
|
sgr=
|
|
mpch=
|
|
new=
|
|
ed=
|
|
declare -i line=0
|
|
|
|
if test -r run_cmd.sh ; then
|
|
function tc { sh run_cmd.sh tic -U -C -r ${1+"$@"}; }
|
|
function ic { sh run_cmd.sh infocmp -A $TERMINFO ${1+"$@"}; }
|
|
else
|
|
function tc { tic -U -C -r ${1+"$@"}; }
|
|
function ic { infocmp -A $TERMINFO ${1+"$@"}; }
|
|
fi
|
|
|
|
cp $TERMCAP ${TERMCAP##*/}.new
|
|
set -o noglob
|
|
OIFS="$IFS"
|
|
IFS='
|
|
'
|
|
for l in $(grep '^linux' $TERMCAP); do
|
|
[[ $l =~ linux-vt* ]] && continue
|
|
[[ $l =~ linux-basic* ]] && continue
|
|
ic -1 -T ${l%%|*} > $tmp2
|
|
|
|
grep -E '^linux|acsc=' < $tmp2 > $tmp1
|
|
acsc="$(tc $tmp1 | grep -v '^linux')"
|
|
|
|
grep -E '^linux|sgr=' < $tmp2 > $tmp1
|
|
sgr="$(tc $tmp1 | grep -v '^linux')"
|
|
|
|
grep -E '^linux|(smpch|rmpch)=' < $tmp2 > $tmp1
|
|
mpch="$(tc $tmp1 | grep -v '^linux')"
|
|
|
|
entry="$(tc $tmp2 | grep -v '^#')"
|
|
|
|
new=$(echo "$entry" | sed -e '/:a[el]=.*/a\
|
|
:ac=' | sed -e "s/\t:ac=/${acsc//\\/\\\\}\\\\/")
|
|
new=$(echo "$new" | sed -e '/:a[el]=.*/i\
|
|
:S2=' | sed -e "s/\t:S2=/${mpch//\\/\\\\}\\\\/")
|
|
new=$(echo "$new" | sed -e '/:s.=.*/i\
|
|
:\.\.sa=' | sed -e "s/\t:\.\.sa=/${sgr//\\/\\\\}\\\\/")
|
|
|
|
if test "${#new}" -gt 1024 ; then
|
|
new=$(echo "$entry" | sed -e '/\t:a[el]=.*/a\
|
|
:ac=' | sed -e "s/\t:ac=/${acsc//\\/\\\\}\\\\/")
|
|
new=$(echo "$new" | sed -e '/\t:a[el]=.*/i\
|
|
:S2=' | sed -e "s/\t:S2=/${mpch//\\/\\\\}\\\\/")
|
|
fi
|
|
|
|
if test "${#new}" -gt 1024 ; then
|
|
new=$(echo "$entry" | sed -e '/\t:a[el]=.*/i\
|
|
:S2=' | sed -e "s/\t:S2=/${mpch//\\/\\\\}\\\\/")
|
|
fi
|
|
|
|
if test "${#new}" -gt 1024 ; then
|
|
new="$entry"
|
|
fi
|
|
|
|
line=$(grep -n "${l//\\/\\\\}" ${TERMCAP##*/}.new| sed 's/:.*//')
|
|
: $((line--))
|
|
echo "$entry" > $tmp1
|
|
echo "$new" > $tmp2
|
|
|
|
ed=$(diff -e $tmp1 $tmp2| sed "s/^\([0-9]\+a\)/$line\n+\1/")
|
|
|
|
ed ${TERMCAP##*/}.new &> /dev/null <<-EOF
|
|
${ed}
|
|
w
|
|
q
|
|
EOF
|
|
done
|
|
IFS="$OIFS"
|
|
unset entry acsc sgr mpch
|