Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5062516
  • 博文数量: 553
  • 博客积分: 13864
  • 博客等级: 上将
  • 技术积分: 11041
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-28 21:25
个人简介

个人Blog: hhktony.com

文章分类

全部博文(553)

文章存档

2015年(1)

2014年(2)

2013年(12)

2012年(384)

2011年(154)

分类: LINUX

2012-04-05 12:50:46

NCURSES库简介
1、 介绍

在那个广泛使用电传打字机的年代,电传打字机作为中央电脑的输出终端,通过电缆和中央电脑连接。用户要向终端程序发送一系列特定的控 制命令,才可以控制终端屏幕的输出。比如要在改变光标在屏幕上的位置,清除屏幕某一区域的内容,卷动屏幕,切换显示模式,给文字添加下划线,改变字符的外 观、颜色、亮度等等。这些控制都是通过一种叫做转义序列(escape sequence)的字符串实现的。被叫做转义序列是因为这些连续字节都是以一个"0x1B"字符,即转义字符(按下ESC键所输入的字符)作为字符串的 开头。即使在现在,我们也可以通过向终端仿真程序输入转义序列得到与当年电传打字终端同样的输出效果。

如果你想在终端(或者终端仿真程序) 屏幕输出一段背景是彩色的文字,可以将以下这段转义序列输入到你的命令行提示符:
echo "^[[0;31;40mIn Color"

在 这里 "^[" 就是所谓的转义字符。(注意:在这里 "^[" 是一个字符。不是依次键入"^"和"["字符。要打印出这个字符,你必须先按下Ctrl+V,然后按下ESC键。)执行以上的命令后。你应该可以看 见"In Color"的背景变为红色了。从此以后显示的文本信息都是以这样的方式输出的。

如果想终止这种方式并回到原来的显示方式可以使 用以下的命令:
echo "^[[0;37;40m"

现在知道这些字符(转移序列)的作用了吗?(译者注:更改分号之间的参数,看 看会有什么结果。)也许会和自己想像的不一样?可能是因为终端环境不同,终端环境取决于终端或操作系统的不同。(译者注:你不可能让一个黑白终端显示出彩 色字符吧?)

为了避免这种不兼容情况,能够在不同的终端上输出统一的结果。UNIX的设计者发明了一种叫做 termcap的机制。termcap实际上是一个随同转义序列共同发布的文件。这个文件罗列出当前终端可以正确执行的所有转义序列,使转义序列的执行结 果符合这个文件中的规定。但是,在这种机制发明后的几年中,一种叫做terminfo的机制逐渐取代termcap。从此用户在编程时不用翻阅繁琐的 termcap中的转义序列规定,仅通过访问terminfo的数据库就可以控制屏幕的输出了。
2、NCURSES是什么?

你 可能被以上的术语搅和的晕头转向了。假设在使用terminfo的情况下,让所有的应用程序访问terminfo数据库控制输出(比如发送控制字符同时卷 动屏幕)。不久这些调用代码将会使整个程序变得难以控制和管理。这些问题的出现导致了CURSES的诞生。CURSES的命名是来自一个叫做 "cursor optimization"(光标最优化)的双关语。CURSES库通过对终端原始控制代码(转义序列)的封装,向用户提供了一个灵活高效的API(应用 程序接口)。它提供了一套控制光标,建立窗口,改变前景背景颜色以及处理鼠标操作的函数。使用户在字符终端下编写应用程序时绕过了那些恼人的底层机制。
NCURSES 是一个从System V Release 4.0 (SVr4) 中CURSES的克隆。这是一个可自由配置的库,完全兼容旧版本的CURSES。简而言之,他是一个可以使应用程序直接控制终端屏幕显示的库。当后面提到 CURSES库的时候,同时也是指代NCURSES库。

NCURSES包由Pavel Curtis发起,Zeyd Ben-Halim 和 Eric S. Raymond 是最初的维护人员,他们在1.8.1及以后版本中增加了很多的新功能。Jürgen Pfeifer< juergen.pfeifer@gmx.net >撰写了菜单库和面板库。使菜单和面板机制同Ada95中捆绑的一样好。Thomas Dickey和 Jürgen Pfeifer进行着NCURSES的维护工作。Florian La Roche 持有NCURSES的版权,他在自由软件 基金会(GNU)中担任NCURSES的维护工作。如果要联系现在的NCURSES的维护者请发电子邮件至bug-ncurses@gnu.org。
3、 NCURSES可以做什么?

NCURSES不仅仅只是封装了底层的终端功能,而且提供了一个相当稳固的工作框架(Framework)用 以产生漂亮的界面。它包含了一些创建窗口的函数。而它的姊妹库 Menu、Panel和Form则是对CURSES基础库的扩展。这些库一般都随同CURSES一起发行。我们可以建立一个同时包含多窗口 (multiple windows)、菜单(menus)、面板(panels)和表单(forms)的应用程序。窗口可以被独立管理,例如让它卷动 (scrollability)或者隐藏。

 菜单(Menus)可以让用户建立命令选项,从而方便执行命令。而窗体(Forms)允许用户 建立一些简单的数据输入和显示的窗口。面板(Panels)是NCURSES窗口管理功能的扩展,可以用它覆盖或堆积窗口。

 以上这些就是 NCURSES的一些基本介绍。在以后的章节里,我们将详细的介绍NCURSES库。
4、在哪能得到它(Where to get it?)

 你现在应该知道NCURSES可以做什么了。在你使用之前必须先下载它。你在安装操作系统时(Linux)应 该已经附带了。万一如果你的操作系统还没有安装NCURSES库,可以通过以下的途径可以下载得到:

下载并编译安装文件包:
你可以 通过ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz免 费下载NCURSES。

包裹文件中的README和INSTALL文件是安装 NCURSES库的最主要资料。
通常是这样安装NCURSES的:

tar zxvf  ncurses.tar.gz  #解压缩并且释放 文件包
cd ncurses     #进入解压缩的目录(注意版本)
./configure                        #按照你的系统环境制作安装配置文件
make                                 #编译源代码并且编译NCURSES库
su root                              #切换到root用户环境
make install                    #安装编译好的NCURSES库

1.4 本文档的写作意图和涵盖范围

这份文档是一份完整描述NCURSES库以及 其姊妹库(sister libraries)的编程参考。在这份文档中我们将以一个用NCURSES库编写的"Hello, World!"程序作为起点。循序渐进的讲解NCURSES库中更多更复杂的操作。所以在撰写这份文档的时候假定读者不了解NCURSES库。

1.5 关于文档中出现的程序(About the Programs)

 这份文档中用到的所有程序已经被压缩成一个tar.gz的文件(需要 相关软件解压缩)。可以通过http://www.linuxdoc.org/HOWTO/NCURSES-Programming-HOWTO/ncurses_programs.tar.gz 下载到。以下是这个压缩包解压缩后的目录结构:
ncurses
|
|----> JustForFun      -- just for fun 部分的程序
|----> basics              -- 一些基础部分的程序
|----> demo                -- make 之后的程序
|          |
|          |----> exe        -- 一些已编译的可执行示例程序
|----> forms               -- 和form 库相关的程序
|----> menus             -- 和menus 库相关的程序
|----> panels            -- 和 panels 库相关的程序
|----> Makefile           -- 一级目录的下的 Makefile
|----> README            -- 一级目录下的 README 文件包含程序说明。
|----> COPYING             -- 程序版权信息文档。

这些目录下包扩以下的文件:
JustForFun
|
|----> hanoi.c       -- 汉诺塔示例
|----> life.c            -- 生命演示游戏
|----> magic.c       -- 一个魔方程序
|----> queens.c      -- 八皇后问题
|----> shuffle.c     -- 一个非常有意思的程序,只要你有时间去……
|----> tt.c                -- 一个非常简单的打字练习程序

  basics
|
|----> acs_vars.c            -- 可选字符(ACS)变量示例
|----> hello_world.c          -- 简单的"Hello, World!"程序
|----> init_func_example.c    -- 初始化函数示例
|----> key_code.c             -- 显示键盘字符代码的程序
|----> mouse_menu.c         -- 一个可以使用鼠标访问的菜单
|----> other_border.c       -- 展示与box()函数不同的显示边框的其它函数
|----> printw_example.c       -- 一个非常简单的使用printw()函数的例子
|----> scanw_example.c       -- 一个非常简单的使用getstr()函数的例子
|----> simple_attr.c          -- 一个在屏幕上打印C源程序注释的例子
|----> simple_color.c         -- 一个简单的演示颜色的例子
|----> simple_key.c           -- 一个可以用方向键访问的菜单的例子
|----> temp_leave.c           -- 一个演示临时离开CURSES模式的例子
|----> win_border.c           -- 展示窗口和边框的例子
|----> with_chgat.c           -- chgat()函数使用的例子

  forms
|
|----> form_attrib.c       -- 展示field属性的用法
|----> form_options.c      -- 展示field选项的用法
|----> form_simple.c       -- 一个简单的表单例子
|----> form_win.c          -- 一个简单的窗口和表单联合使用的例子

  menus
|
|----> menu_attrib.c                -- 展示菜单属性的用法
|----> menu_item_data.c        -- 展示 item_name() 等等函数的用法
|----> menu_multi_column.c   -- 建立多列菜单
|----> menu_scroll.c                 -- 展示菜单滚动的示例
|----> menu_simple.c               -- 一个用方向键控制菜单的例子
|----> menu_toggle.c               -- 建立多值菜单和解释 REQ_TOGGLE_ITEM
|----> menu_userptr.c             -- 用户指针的用法
|----> menu_win.c                  -- 菜单和窗口结合的演示例子

panels
|
|----> panel_browse.c      -- 通过 tab 浏览展示用户指针的用法
|----> panel_hide.c        -- 隐藏和取消隐藏面板的例子
|----> panel_resize.c      -- 移动和改变面板大小的例子
|----> panel_simple.c      -- 一个简单的面板使用例子

Makefile 包含在一级主目录里。它将会把所有的程序编译成可执行的文件。并把这些文件存在demo/exec目录下面。你也可以选择将其编译到别的目录下。每个目录 下都有一个README文件详细描述了每个目录下的C源程序的内容。

对于每一个示例,我都给出了这些程序调用NCURSES目录下相关文件 的路径名。
如果你希望在线阅读这些程序中某个单独的程序,可以通过浏览器访问一下网址:http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ncurses_programs/
所有以上发布的程序都遵照GPL许可协议发行,你可以在许可协议允许的范围内任意处置程序。
阅读(2098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~