欢迎来到天天文库
浏览记录
ID:10804731
大小:105.50 KB
页数:17页
时间:2018-07-08
《curses开发包简介》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、17第1章curses开发包简介第1章curses开发包简介1.1curses概述curses实际上是一个函数开发包,专门用来进行UNIX终端环境下的屏幕界面处理以及I/O处理。通过这些函数库,C和C++程序就可以控制终端的视频显示以及输入/输出。使用curses包中的函数,用户可以非常方便地创建和操作窗口,使用菜单以及表单,而且最为重要的一点是使用curses包编写的程序将独立于各种具体的终端,这样的一个直接的好处就是程序具有良好的移植性。这一点在网络上显得尤其重要,因为面对的可能是上百种终端,如果为每一个终端都专
2、门重新编写一套新的程序,那么复杂程度出乎想象,而且几乎不可能。为了能够达到这样的目的,curses包使用了终端描述数据库(TerminalDescriptionDatabases)terminfo(TERMinalINFOrmationdatabase)或者termcap(TERMinalCAPabilitiedatabase),这两个数据库里存放了不同终端的操作控制码和转义序列以及其余相关信息,这样当使用每一个终端的时候,curses将首先在终端描述数据库中查找是否存在该类型的终端描述信息,如果找到则进行适当的处理
3、。如果数据库中没有这种终端信息,则程序无法在该终端上运行,除非用户自己增加新的终端描述。如何具体地在终端描述数据库中增加自定义终端,在第8章“terminfo数据库与curses移植性”中有详细的介绍。1.1.1curses发展历史curses是怎么来的?curses的名称起源于“cursor17第1章curses开发包简介optimization”,即光标优化的意思。它最早是由巴克利大学的BillJoy和KenArnold发展而来,主要是处理游戏rogue的屏幕界面。rogue是一个古老的基于文本的的冒险类游戏。在
4、当时,仅仅控制游戏屏幕的外观显示就需要编写大量的代码,因为它们使用的是古老的termios甚至是tty接口。巨大的工作量迫使BillJoy和KenArnold将rogue游戏中的所有屏幕处理和光标移动的函数汇集到一个函数库中。这就形成了最早的也是最简单的curses处理库的雏形。它最终随着BSDUNIX的早期版本发行开来。在这个版本中使用的是当时业已存在的termcap数据库来描述终端信息。后来贝尔实验室的MarkHorton在SystemIIIUNIX中重新编写了curses。它相对以前的版本有了很大的扩展和提高,
5、增加了一些非常新的特性。它首先将termcap数据库改进为terminfo数据库。terminfo数据库完全由Horton开发编写,它是从termcap发展而来,而且更为重要的是其中引进了参数化性能的概念,这样使得描述多视频属性以及彩色终端成为可能。在后来的AT&TSystemV版本中,curses就扩展了更多功能和性能,包括了对窗体、菜单、面板、表单等组件以及对鼠标的支持。这时候的curses内容以及设计与最初BSD版本的curses在功能和复杂性上已经相去甚远。1.1.2curses包内容本书的curses以Sy
6、stemVUNIX的版本为主,curses包主要包括4个开发库,如表1.1所示。在后面的章节中我们会针对每一个库进行详细深入的探讨。表1.1curses包内容库名描述curses17第1章curses开发包简介最早的curses包只包含这一部分,主要控制屏幕的输入和输出,光标的操作,窗口的创建和操作等panel类似于窗口堆栈,不同的窗口可以存放于其中,并且可以在其中进行移动menu新增的部分,主要包括创建菜单并且与之交互的函数,主要用来接受用户的选择form包括创建表单以及与之进行交互的函数,主要用来接受用户数据输入
7、1.1.3curses包移植性正如前言部分我们曾经提到过,使用curses包与使用低层终端函数编写的程序最主要的差别在于curses程序是独立于具体终端的,也就是说在某个终端上编写的程序可以完整的移植到另外的终端上而不需要进行任何改动。curses包的可移植性是curses包的最大特性。curses包的这种终端独立性归根于终端描述数据库terminfo和termcap。terminfo和termcap数据库中包含了所有终端的描述信息。termcap数据库是在最早的BSDUNIX中使用,在后来的SystemIII中则使
8、用terminfo数据库。terminfo数据库是从termcap数据库发展而来,组织方式相对于termcap来说有了进一步的优化,而且描述的终端信息有了进一步的增加。需要使用的数据库可以在程序编译的时候通过cc命令指定,具体的细节在这一章的末尾会有探讨。正如前面所说,curses正是通过使用terminfo数据库使得程序可以在不同的终端上可以
此文档下载收益归作者所有