《NCURSES Programming HOWTO 中文版(简体中文)》译稿节选

类别:编程语言 点击:0 评论:0 推荐:
第一章:NCURSES库简介(Introduction)

1、介绍(Introduction

在电传打字机终端被广泛使用的那个年代,电传打字机终端是通过电缆和中央电脑相互连接的。通过向终端发送一系列特定的字符串,用户可以设置终端屏幕的显示情况。

。比如:移动光标到屏幕的任意位置,清除屏幕的任意一部分,滚动屏幕,切换模式,加入下划线,改变外观、颜色、亮度等等。这些控制功能的实现都是通过一种被叫做转义序列(escape sequence)的连续序列字符所控制的。被叫做转义序列是因为这些连续字节的开头都是以一个“0x1B”字符(即ESC键所输入的字符)开始的。即使在现在,我们也可以通过向终端仿真程序输入转义序列得到与电传打字终端同样的显示结果。

 

假使你想在终端(或者终端仿真程序)屏幕输出一段背景是彩色的文字,试着将以下这段转义序列输入到你的控制台:

echo "^[[0;31;40mIn Color"

 

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

 

如果想终止这种模式回到原来的模式可以使用下面的命令:

echo "^[[0;37;40m"

 

现在知道这些字符的意思了吗?(译者注:更改分号之间的参数,看看会有什么结果。)和自己想像的不一样?那可能是因为在不同的操作系统终端下有不同的终端环境配置。为了避免这种情况的发生,统一输出的结果。UNIX的设计者发明了一种机制叫做 termcap。那是一个随同转义序列的文件。这个文件罗列出所有当前终端的可用的功能及相应的转义序列,使当前的终端上执行转义序列后显示的结果符合这个文件中规定。在这种机制发明后的几年中,termcap逐渐被一种叫做terminfo的机制取代了。这种机制不像termcap那样,在使用时不需要了解太多转义序列的详细内容。terminfo机制是通过使应用程序访问terminfo数据库从而将这些控制字符发送到终端或者终端仿真程序。

 

2、什么是NCURSES?(What is 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 <[email protected]>和Eric S. Raymond <[email protected]>是最初的维护人员,他们在1.8.1及以后版本中增加了很多的新功能。Jürgen Pfeifer< [email protected] >撰写了菜单库和面板库。使菜单和面板的机制和Ada95中捆绑的库一样好。Thomas Dickey<[email protected]>和Jürgen Pfeifer进行着NCURSES的维护工作。Florian La Roche <[email protected]>持有NCURSES的版权,他在自由软件基金会(GNU)中担任NCURSES的维护工作。如果要联系现在的NCURSES的维护者请发电子邮件至[email protected]

 

3、我们可以用NCURSES做什么?(What we can do with 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。也可以通过GNU的FTP目录:http://www.gnu.org/order/ftp.html 找到提供免费下载NCURSES文件包(后面还有几个一样的错误要改)的站点。最新发布的稳定版本为:5.2 20001021.(译者翻译时已经有5.3版本的NCURSES下载了)

 

阅读包裹文件中的README和INSTALL文件可以得到如何安装NCURSES库的详细资料。安装NCURSES通常包括以下操作:

tar zxvf  ncurses<version>.tar.gz        #解压缩并且释放                     

cd ncurses<version>                                  #进入目录                                

./configure                                                   #依照你的系统环境制作安装配置文件    

make                                                             #编译源代码并且建立NCURSES库        

su root                                                          #切换到root用户环境                           

make install                                           #安装编译好的NCURSES库                   

 

使用RPM安装文件:

可以在http://rpmfind.net 找到NCURSES的RPM安装包。可以在root模式下使用以下的命令安装:(以5.2版本为例)

rpm –vih 下载的RPM文件

 

1.4 本文档的写作意图和涵盖范围(Purpose/Scope of the document

这份文档是一份完整的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(http://www.gnu.org/copyleft/gpl.txt)许可协议发行,你可以在许可协议允许的范围内任意处置程序。

1.6关于此文档的其他文件发布格式(Other Formats of the document)

这份HOWTO文档还有很多其它的文件发布格式,可以在tldp.org 下载到。以下是关于这份文档其它格式的下载链接:

 

1.6.1tldp.org上的已发布格式链接:

Acrobat PDF格式

PostScript 格式

多级HTML文档

只有一页的HTML文档

 

1.7原文贡献者 Credits

感谢Sharath([email protected])和Emre Akbas编写了其中的一些段落。简介部分最初由Sharath写成。当重新写这部分的时候饮用了他最初完成的部分。Emre帮忙编写了printw()函数和scanw()函数部分。

 

然后是Ravi Parimi([email protected])。他是这个项目最初的实现者。在撰写这份文档时,他对这份文档提供了很多的意见。并且在文章撰写完毕后耐心的校对了整份文档。他还在Linux和Solaris平台上检查过文中使用的每一个程序。你可以从他的注记中发现你的问题。

 

1.8远景规划(Wish List

这些是正在进行或者将要进行的项目。如果你有项目或者想加入某个项目。请和Padala联系。

l         给最后讲述form库的一章增加更多的示例程序。(这个项目Padala正在进行)

l         准备一个演示程序展示文档中所有的示例。同时允许用户通过程序描述展示这些示例。让用户亲自编译并且察看这些程序。一个有对话框的用户界面更好。(这个项目N.N.Ashok正在进行)

l         加入Debug信息,使用 _trace,_tarcemouse 。

l         通过NCURSES库中的函数访问termcap或tremios

l         使用户可以同时在两个终端上工作。

l         在“其它特色”章节(Miscellaneous features)中增加一些东西。

 

 

1.9关于著作权(Copyright

Copyright (c) 2001 by Pradeep Padala. This document may be distributed under the terms set forth in the LDP license at linuxdoc.org/COPYRIGHT.html.

 

This HOWTO is free documentation; you can redistribute it and/or modify it under the terms of the LDP license. This document is distributed in the hope that it will be useful, but without any warranty, without even the implied warranty of merchantability or fitness for a particular purpose. See the LDP license for more details.

本文地址:http://com.8s8s.com/it/it24492.htm