西格玛向量™

神奇的字符进度条

作者: 西玛哒   分类: C/C++   标签: , ,    评论: 1

好久不写文章了,刚刚去FPGA的世界打了一圈酱油,回头发现自己的嵌入式C快要挂掉了,攒点人品学点儿习吧。

为了一个清凉的环境,觉得需要Emerge -auvDN world一下(不良嗜好),看着刷屏休息一下,忽然一样东西吸引了我:

真相:
4708398212 78803d6dcc 神奇的字符进度条

a quickr pickr post

一根旋转的小棍让人有了盼头,起码知道自己的机器没有挂掉哇,早先在Fedora下也见过这个东东。忽然想到,这东西既然是程序写的,就可以用程序重现嘛,为什么不自己写一个玩玩呢?
分析一下这个旋转小棍,其实原理很简单,就是一个字符位在不同字符上来回变化{- / | – …..} 问题在于,如何实现同一位上的变化呢?在字符系统中,有如下一些转移字符可以来用(引用:百度百科):

a 响铃(BEL) 007
b 退格(BS) 008
f 换页(FF) 012
n 换行(LF) 010
r 回车(CR) 013
t 水平制表(HT) 009
v 垂直制表(VT) 011
\ 反斜杠 092
? 问号字符 063
' 单引号字符 039
" 双引号字符 034
 空字符(NULL) 000
ddd 任意字符 三位八进制
xhh 任意字符 二位十六进制

其中退格和回车都可以用以实现要求,退格嘛就是删除前面的字符,那么回车呢?正常我们说的“回车”其实是回车+换行,单独的“回车”作用是将光标移动到本行的行首,而其后的输出会将原有的内容删除。
那么如此便简单了,只要一个计数器和case选择就可以实现我们的要求,首先给出Shell脚本~

#rotate_line.sh
#!/bin/sh
function rotate_line #实现旋转线的函数
{
TCOUNT=0         #声明一个计数器
TSLEEP=1         #间隔时间
while true
do
TCOUNT=`expr $TCOUNT + 1`      #计数器+1 注意格式 有空格 反单引号
echo -e "Waitingc "
case $TCOUNT in                #用CASE 语句选择状态
"1") echo -e '-'"rc "    #-e 表示转义,
sleep $TSLEEP;;
"2") echo -e '\'"rc "   #r表示回到行首
sleep $TSLEEP;;
"3") echo -e '|'"rc "    #c表示不换行
sleep $TSLEEP;;
"4") echo -e '/'"rc "
sleep $TSLEEP
TCOUNT=0;;            #回到初始状态
"*") ;;
esac
done
}
rotate_line    #使用测试函数

4707929181 232a0267a4 神奇的字符进度条

a quickr pickr post

脚本很小,但是基本功能有了,归功于echo的c转义结合经典的r b 使用,上面个的代码中r 与b产生的效果应该是一样的,但是实现方式不同,如果延时较长看的就比较明显了。
<待续>

anyShare分享到: 神奇的字符进度条
          
06-17
2010
loading...