Chinaunix首页 | 论坛 | 博客
  • 博客访问: 321492
  • 博文数量: 85
  • 博客积分: 3433
  • 博客等级: 中校
  • 技术积分: 844
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-29 01:11
文章分类

全部博文(85)

文章存档

2013年(1)

2012年(12)

2011年(13)

2010年(59)

我的朋友

分类: LINUX

2010-09-13 14:23:22



   VT100是一个古老的终端定义,后面出现的终端几乎都兼容这种终端。VT100控制码是用来在终端扩展显示的代码。比如果终端上任意坐标用不同的颜色显示字符。有时又称为ANSI Escape Sequence.
  这样想做一个跨平台的小游戏用空上再合适不过。
 
  所有的VT100控制符是 \033打头(即ESC的ASCII码)用输出字符语句来输出。可以在命令行用echo -ne 命令,或者在C程序中用printf来输出VT100的控制字符。
 
具体格式有两种,
  •   一种数字形式, \033[<数字>m .

   如 \33[40m ,表示让后面字符输出用背景黑色输出 \33[0m表示取消前面的设置。
其中前景(字符颜色)/背景颜色需要同时输出。 
  •  另一种是控制字符形式。即最后一个字符不是m,而是控制字符。

 \033[K 清除从光标到行尾的内容
  \033[nC 光标右移n行
 

VT100控制码
 
VT100控制码归类如下。
    \33[nA 光标上移n行
  \33[nB 光标下移n行
  \33[nC 光标右移n行
  \33[nD 光标左移n行
  \33[y;xH设置光标位置
  \33[2J 清屏
  \33[K 清除从光标到行尾的内容
  \33[s 保存光标位置
  \33[u 恢复光标位置
  \33[?25l 隐藏光标
  \33[?25h 显示光标
 
VT100数字型控制码
 
   \33[0m 关闭所有属性
  \33[1m 设置高亮度
  \33[4m 下划线
  \33[5m 闪烁
  \33[7m 反显
  \33[8m 消隐
  \33[30m -- \33[37m 设置前景色
  \33[40m -- \33[47m 设置背景色

 
 
VT100关于颜色的说明.
 
  VT100的颜色输出分为,注意要同时输出前景的字符颜色和背景颜色。
 
  背景颜色范围:40----49
  40:黑
  41:深红
  42:绿
  43:黄色
  44:蓝色
  45:紫色
  46:深绿
  47:白色
  前景字符颜色:30-----------39
  30:黑
  31:红
  32:绿
  33:黄
  34:蓝色
  35:紫色
  36:深绿
  37:白色 

这样输出一个字符串比较完整如下
   echo -ne "\033[字背景颜色;字体颜色m字符串\033[0m" 
例:
   echo -ne "\033[41;36m something here \033[0m"
 
常见样例
 
echo -ne "\033[2J" #清屏
echo -ne "\033[47;30m Andrew Huang \033[0m" #黑底白字输出Andrew Huang
echo -ne "033[5;10H \033[42;33m abc \033[0m" #(10,5)输出绿底黄字。
 
 
关于VT100控制码编码
 
VT100只要printf打印相应的字符串即可支持相应功能,但是因为输出控制符虚列太多于难记,因此可通用一些宏来简化其操作。
 
 
 参考资料:
   ~ckhung/b/mi/textmode.php
制作一个小光标:
  1 #include
  2 #include
  3
  4 int main(void)
  5 {
  6         char *s = "abcdefg";
  7         char array[100];
  8         int l,j,k;
  9         memset(array,' ',sizeof(array));
 10         l = strlen(s);
 11         strcpy(array,s);
 12         while(1)
 13         {
 14         if (array[l] == ' ')
 15            array[l] = '_';
 16         else
 17            array[l] = ' ';
 18          array[l+1] = '\0';
 19          usleep(500000);
 20          printf("\033[10;1H");
 21          printf("array = %s,n = %d\n",array,strlen(array));
 22         }
 23         return 1;
 24
 25 }
~
阅读(3710) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-13 22:18:24

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com