免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hlm5097
打印 上一主题 下一主题

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2002-11-22 10:56 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

to honghegu:
   不好意思,本人不熟悉ACE,但在shell中可实现英文字母与数字之间的转换:
while true
do
        read ch
        [ "$ch" = "0" ]&&break
        num=`echo $ch|tr "abcdefghij" "0123456789"`
        echo $num
done

论坛徽章:
0
22 [报告]
发表于 2002-11-22 12:39 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

hlm5097大侠你好,对你的这个菜单程序我非常感兴趣,但函数v_line、v_box应怎样写可以在
主屏上画线或框,请赐教......谢谢!!!!!!

论坛徽章:
0
23 [报告]
发表于 2002-11-22 15:58 |只看该作者

[原创]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&#59;%dH",27,x,y
}
$1==$3||$2==$4{x1=$1&#59;y1=$2&#59;x2=$3&#59;y2=$4
if(x1==y1&&x1==x2&&x1==y2)exit(0)
if(x1==x2&amp;&amp;y1<y2)
{
v_xy(x1,y1)
for(i=y1&#59;i<=y2&#59;i=i+2)printf &quot;─&quot;
}
else
{
for(i=x1&#59;i<=x2&#59;i++)
{
v_xy(i,y1)
printf &quot;│&quot;
}
}
}'&#59;&#59;
*)#在终端上
echo &quot;$1 $2 $3 $4&quot;|awk 'function v_xy(x,y)
{
printf &quot;%c[%d&#59;%dH&quot;,27,x,y
}
function v_graph(v)
{
if(v==1)printf &quot;%c(0&quot;,27
else if(v==0)printf &quot;%c(B&quot;,27
}
BEGIN{v_graph(1)}
$1==$3||$2==$4{x1=$1&#59;y1=$2&#59;x2=$3&#59;y2=$4
if(x1==y1&amp;&amp;x1==x2&amp;&amp;x1==y2)exit(0)
if(x1==x2&amp;&amp;y1<y2)
{
v_xy(x1,y1)
for(i=y1&#59;i<=y2&#59;i++)printf &quot;q&quot;
}
else
{
for(i=x1&#59;i<=x2&#59;i++)
{
v_xy(i,y1)
printf &quot;x&quot;
}
}
}
END{v_graph(0)}'&#59;&#59;
esac
}
v_box()
{
case $TTY in
/dev/tty[0-1][0-9])      #在主屏上
echo &quot;$1 $2 $3 $4&quot;|awk 'function v_xy(x,y)
{
printf &quot;%c[%d&#59;%dH&quot;,27,x,y
}
($1+1)<$3&amp;&amp;($2+1)<$4{x1=$1&#59;y1=$2&#59;x2=$3&#59;y2=$4
v_xy(x1,y1)&#59;printf &quot;┌&quot;&#59;i=y1+2
while(i<(y2-1))
{printf &quot;─&quot;&#59;i=i+2}
printf &quot;┐&quot;&#59;i=x1+1
while(i<x2)
{v_xy(i,y1)&#59;printf &quot;│&quot;&#59;v_xy(i,(y2-1))&#59;printf &quot;│&quot;&#59;i++}
v_xy(x2,y1)&#59;printf &quot;└&quot;&#59;i=y1+2
while(i<(y2-1))
{printf &quot;─&quot;&#59;i=i+2}
printf &quot;┘&quot;
}'&#59;&#59;
*)                #在终端上
echo &quot;$1 $2 $3 $4&quot;|awk 'function v_xy(x,y)
{
printf &quot;%c[%d&#59;%dH&quot;,27,x,y
}
function v_graph(v)
{
if(v==1)printf &quot;%c(0&quot;,27
else if(v==0)printf &quot;%c(B&quot;,27
}
BEGIN{v_graph(1)}
$1<$3&amp;&amp;$2<$4{x1=$1&#59;y1=$2&#59;x2=$3&#59;y2=$4
v_xy(x1,y1)&#59;printf &quot;l&quot;&#59;i=y1+1
while(i<y2)
{printf &quot;q&quot;&#59;i++}
printf &quot;k&quot;&#59;i=x1+1
while(i<x2)
{v_xy(i,y1)&#59;printf &quot;x&quot;&#59;v_xy(i,y2)&#59;printf &quot;x&quot;&#59;i++}
v_xy(x2,y1)&#59;printf &quot;m&quot;&#59;i=y1+1
while(i<y2)
{printf &quot;q&quot;&#59;i++}
printf &quot;j&quot;
}
END{v_graph(0)}'&#59;&#59;
esac
}

论坛徽章:
0
24 [报告]
发表于 2002-11-22 16:47 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

我的运行qtyj时,老出现:
./qtyj: syntax error at line 110:'^'unexpected

这是为什么?

论坛徽章:
0
25 [报告]
发表于 2002-11-22 17:06 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

请看上一页GM的回复。

论坛徽章:
0
26 [报告]
发表于 2002-11-22 17:21 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

不知道,有点看不懂。具体点。

论坛徽章:
0
27 [报告]
发表于 2002-11-23 09:52 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

hlm5097大侠你好,你的程序对我受益匪浅,谢谢!!!!
但我还有两个问题:
问题1:
你说在主屏上的线和框所用到的特殊字符为:┌ ,┐,─,│,└ ,┘。每个字符占用两个字母位置(在终端的图形方式下,只占用一个字母位置).所以根据TTY的值判断本屏是终端还是主屏,然后再做相应的处理.
但我试了一下,不用判断本屏是终端还是主屏,可以通用新编的主屏方式.,只是主屏和终端的
竖线不连贯.不过我还有一个建议,可以把┌ ,┐,─,│,└ ,┘,换成┏,┓,┃,━,┗,
┛,画出来的框是不是会好看一点呢?
问题2:如果,用终端方式的显框程序,能不能,也能显出粗框线呢?


论坛徽章:
0
28 [报告]
发表于 2002-11-23 09:59 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

请看第一页我的首帖中函数i_chr中特殊键值的定义和如何输入。

论坛徽章:
0
29 [报告]
发表于 2002-11-24 17:15 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

hlm5097:你好!,为何不回答我的问题呢?
               是不是没见到吗?

论坛徽章:
0
30 [报告]
发表于 2002-11-24 18:18 |只看该作者

[原创]SCO UNIX 5.0.5下通用菜单程序(用bsh制作,含源码)

to GM:
    不管在主屏还是在终端,把┌ ,┐,─,│,└ ,┘,换成┏,┓,┃,━,┗,┛,效果是一样的,即竖线不连贯。而终端的图形方式则没有这个问题。请看程序中函数v_graph的定义和含义;函数v_box、v_line中,在终端的图形方式下,字母l,q,k,x,m,j的显示效果。可以看出明显的差别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP