SHA256
1
0
forked from pool/ncurses
ncurses/cursescheck

334 lines
6.0 KiB
Bash

#!/bin/bash
# Test ACS Line Graphics and REP capability of a terminal line
# Author: Werner Fink <werner@suse.de>
typeset -i rep=0 line=0 color=0
for s in 0 1 2
do
test -c /proc/$$/fd/$s || { echo "Missing /proc/$$/fd/$s" 1>&2; exit 1; }
done
for d in null tty
do
test -c /dev/$d || { echo "Missing /dev/$d" 1>&2; exit 1; }
done
for d in pts fd
do
test -d /dev/$d || { echo "Missing /dev/$d/" 1>&2; exit 1; }
done
for p in tput infocmp tty grep od
do
type -p $p 1> /dev/null 2>&1 || { echo "Missing $p in path" 1>&2; exit 1; }
done
typeset -r tty=$(tty) || { echo "Not on a terminal line" 1>&2; exit 1; }
typeset -i width=$(tput cols) || { echo "No terminal size" 1>&2; exit 1; }
typeset -i height=$(tput lines) || { echo "No terminal size" 1>&2; exit 1; }
#
# There are terminal type which uses non printable characters for
# Line Graphic. Therefore store them as numbers or sequences within
# arrays used later on.
#
typeset -i c
typeset -A acsc acsn
typeset -a tmp="($(tput acsc | od -A none -tx1))"
for ((c=0;c<${#tmp[@]};c+=2))
do
acsc[0x${tmp[c]}]="0x${tmp[c+1]}"
acsn[0x${tmp[c]}]=\\x${tmp[c+1]}
done
unset tmp c
#
# Init terminal
#
tput init || { echo "Not a terminal" 1>&2; exit 1; }
if test -n "$(infocmp -T $TERM -1 | grep "colors#")"
then
let color++
fi
#
# Restore screen at exit
#
trap 'tput cup 0 0; tput sgr0; tput cvvis; tput rmcup; exit' EXIT HUP INT TERM
#
# Save screen, make curse invisible, and goto upper left
#
tput smcup
tput civis
tput cup 0 0
if ((color > 0))
then
tput setab 4
tput setaf 7
fi
tput ed
echo Checking for Line Graphics on $tty with TERM=$TERM
let line++
smacs="$(tput enacs;tput smacs)"
rmacs="$(tput rmacs)"
echo Found ${#acsc[@]} ACSC characters, check used Font and its Mapping
let line++
tput cup $((line + 2)) 0
typeset -i row=$((line+2)) col=4
for sub in ${!acsc[@]}
do
tput cup $row $col
printf "$sub\t\x${sub//0x/}\t${smacs}${acsn[$sub]}${rmacs}"
if ((row++ > height-4))
then
let col=width/2-4
let row=line+2
fi
done
unset sub smacs rmacs
tput cup $line 0
tput cvvis
echo -n "OK> "
read -t 5 yesno
#
# Could use clear
#
tput -S <<-!
civis
cup 0 0
ed
!
let line=0
echo Checking for UTF-8 Line Graphics on $tty with TERM=$TERM
let line++
smacs="$(tput enacs;tput smacs)"
rmacs="$(tput rmacs)"
echo Use U+2500 upto U+25FF glyps, check used Font and its Mapping
let line++
tput cup $((line+2)) 0
typeset -i row=$((line+2)) col=4
for x in 94 95 96 97
do
x=\\x$x
for ((c=128;c<=191;c++))
do
y=\\x$(printf '%x\n' $c)
tput cup $row $col
printf "\xe2${x}${y}"
if ((row++ > height-4))
then
let col+=2
let row=line+2
fi
done
done
unset sub smacs rmacs
tput cup $line 0
tput cvvis
echo -n "OK> "
read -t 5 yesno
#
# Could use clear
#
tput -S <<-!
civis
cup 0 0
ed
!
let line=0
if ((${#acsc[@]} > 0))
then
echo Terminal TERM=$TERM has ASC Line Graphics
let line++
echo Use them to draw a simple box
let line++
let row=height/2-4
let col=8
tput cup $row $col
tput -S <<-!
enacs
smacs
!
echo -ne ${acsn[0x6c]}
for ((c=0;c<20;c++)); do echo -ne ${acsn[0x71]}; done
echo -ne ${acsn[0x6b]}
tput cup $((row+1)) $col
echo -ne ${acsn[0x78]}
tput hpa $((col+21))
echo -ne ${acsn[0x78]}
tput cup $((row+2)) $col
echo -ne ${acsn[0x78]}
tput hpa $((col+21))
echo -ne ${acsn[0x78]}
tput cup $((row+3)) $col
echo -ne ${acsn[0x78]}
tput hpa $((col+21))
echo -ne ${acsn[0x78]}
tput cup $((row+4)) $col
echo -ne ${acsn[0x6d]}
for ((c=0;c<20;c++)); do echo -ne ${acsn[0x71]}; done
echo -ne ${acsn[0x6a]}
tput -S <<-!
rmacs
!
tput cup $line 0
tput cvvis
echo -n "OK> "
read -t 5 yesno
else
echo Terminal TERM=$TERM has no ASC Line Graphics. Done
tput -S <<-!
cup 0 0
sgr0
ed
rmcup
!
exit 0
fi
#
# Could use clear
#
tput -S <<-!
civis
cup 0 0
ed
!
let line=0
if ((1))
then
ul=\\xe2\\x94\\x8c
ur=\\xe2\\x94\\x90
hl=\\xe2\\x94\\x80
vl=\\xe2\\x94\\x82
dl=\\xe2\\x94\\x94
dr=\\xe2\\x94\\x98
echo Terminal TERM=$TERM with UTF-8 Line Graphics
let line++
echo Use them to draw a simple box
let line++
let row=height/2-4
let col=8
tput cup $row $col
tput enacs
echo -ne ${ul}
for ((c=0;c<20;c++)); do echo -ne ${hl}; done
echo -ne ${ur}
tput cup $((row+1)) $col
echo -ne ${vl}
tput hpa $((col+21))
echo -ne ${vl}
tput cup $((row+2)) $col
echo -ne ${vl}
tput hpa $((col+21))
echo -ne ${vl}
tput cup $((row+3)) $col
echo -ne ${vl}
tput hpa $((col+21))
echo -ne ${vl}
tput cup $((row+4)) $col
echo -ne ${dl}
for ((c=0;c<20;c++)); do echo -ne ${hl}; done
echo -ne ${dr}
tput cup $line 0
tput cvvis
echo -n "OK> "
read -t 5 yesno
else
echo Terminal TERM=$TERM has no ASC Line Graphics. Done
tput -S <<-!
cup 0 0
sgr0
ed
rmcup
!
exit 0
fi
#
# Could use clear
#
tput -S <<-!
civis
cup 0 0
ed
!
let line=0
if test -n "$(infocmp -T $TERM -1 | grep rep=)"
then
echo Found rep capability in terminfo database for TERM=$TERM
let rep++
let line++
else
echo No rep capability given in terminfo database for TERM=$TERM
tput cvvis
echo -n "OK> "
read -t 5 yesno
tput -S <<-!
cup 0 0
sgr0
ed
rmcup
!
exit 0
fi
if ((rep > 0))
then
echo Testing rep capability of TERM=$TERM
let line++
let row=height/2-4
let col=8
tput -S <<-!
civis
enacs
smacs
bold
cup $row $col
rep ${acsc[0x6c]} 0
rep ${acsc[0x71]} 20
rep ${acsc[0x6b]} 0
cup $((row+1)) $col
rep ${acsc[0x78]} 0
hpa $((col+21))
rep ${acsc[0x78]} 0
cup $((row+2)) $col
rep ${acsc[0x78]} 0
hpa $((col+21))
rep ${acsc[0x78]} 0
cup $((row+3)) $col
rep ${acsc[0x78]} 0
hpa $((col+21))
rep ${acsc[0x78]} 0
cup $((row+4)) $col
rep ${acsc[0x6d]} 0
rep ${acsc[0x71]} 20
rep ${acsc[0x6a]} 0
sgr0
rmacs
!
if ((color > 0))
then
tput setab 4
tput setaf 7
fi
tput cup $line 0
tput cvvis
echo -n "OK> "
read -t 5 yesno
fi