- 论坛徽章:
- 0
|
[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)
to GM:
在主屏上的线和框所用到的特殊字符为:┌ ,┐,─,│,└ ,┘。每个字符占用两个字母位置(在终端的图形方式下,只占用一个字母位置)。为了兼容两种图形方式,应修改函数v_line和v_box。如下:
TTY=`tty`
v_line()
{
case $TTY in
/dev/tty[0-1][0-9]) #在主屏上
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
$1==$3||$2==$4{x1=$1;y1=$2;x2=$3;y2=$4
if(x1==y1&&x1==x2&&x1==y2)exit(0)
if(x1==x2&&y1<y2)
{
v_xy(x1,y1)
for(i=y1;i<=y2;i=i+2)printf "─"
}
else
{
for(i=x1;i<=x2;i++)
{
v_xy(i,y1)
printf "│"
}
}
}';;
*)#在终端上
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
function v_graph(v)
{
if(v==1)printf "%c(0",27
else if(v==0)printf "%c(B",27
}
BEGIN{v_graph(1)}
$1==$3||$2==$4{x1=$1;y1=$2;x2=$3;y2=$4
if(x1==y1&&x1==x2&&x1==y2)exit(0)
if(x1==x2&&y1<y2)
{
v_xy(x1,y1)
for(i=y1;i<=y2;i++)printf "q"
}
else
{
for(i=x1;i<=x2;i++)
{
v_xy(i,y1)
printf "x"
}
}
}
END{v_graph(0)}';;
esac
}
v_box()
{
case $TTY in
/dev/tty[0-1][0-9]) #在主屏上
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
($1+1)<$3&&($2+1)<$4{x1=$1;y1=$2;x2=$3;y2=$4
v_xy(x1,y1);printf "┌";i=y1+2
while(i<(y2-1))
{printf "─";i=i+2}
printf "┐";i=x1+1
while(i<x2)
{v_xy(i,y1);printf "│";v_xy(i,(y2-1));printf "│";i++}
v_xy(x2,y1);printf "└";i=y1+2
while(i<(y2-1))
{printf "─";i=i+2}
printf "┘"
}';;
*) #在终端上
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
function v_graph(v)
{
if(v==1)printf "%c(0",27
else if(v==0)printf "%c(B",27
}
BEGIN{v_graph(1)}
$1<$3&&$2<$4{x1=$1;y1=$2;x2=$3;y2=$4
v_xy(x1,y1);printf "l";i=y1+1
while(i<y2)
{printf "q";i++}
printf "k";i=x1+1
while(i<x2)
{v_xy(i,y1);printf "x";v_xy(i,y2);printf "x";i++}
v_xy(x2,y1);printf "m";i=y1+1
while(i<y2)
{printf "q";i++}
printf "j"
}
END{v_graph(0)}';;
esac
}
|
|