中终端图形编程库库使用教程.docxVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中终端图形编程库库使用教程

1.1什么是curses curses实际上是一个函数开发包,专门用来进行UNIX下终端环境下的屏幕界面处理以及I/O处理。通过这些函数库,C和C++程序就可以控制终端的视频显示以及输入输出。使用curses包中的函数,用户可以非常方便的创建和操作窗口,使用菜单以及表单,而且最为重要的一点是使用curses包编写的程序将独立于各种具体的终端,这样的一个直接的好处就是程序具有良好的移植性。这一点在网络上显得尤其重要,因为你面对的可能是上百种终端,如果为每一个终端都专门重新编写一套新的程序,那么复杂程度出乎想象,而且几乎不可能。为了能够达到这样的目的,curses包使用了终端描述数据库(Terminal Description Databases)terminfo(TERMinal INFOrmation database)或者termcap(TERMinal CAPabilitie database),这两个数据库里存放了不同终端的操作控制码和转义序列以及其余相关信息,这样当使用每一个终端的时候,curses将首先在终端描述数据库中查找是否存在该类型的终端描述信息,如果找到则进行适当的处理。如果数据库中没有这种终端信息,则程序无法在该终端上运行,除非用户自己增加新的终端描述。具体的如何在终端描述数据库中增加自定义终端在第八章“terminfo数据库”中有详细的介绍。?1.1.1 curses发展历史curses是怎么来的?curses的名称起源于“cursor optimization”,即光标优化的意思。它最早是由巴克利大学的Bill Joy和Ken Arnold发展而来,主要是处理游戏rogue的屏幕界面。rogue是一个古老的基于文本的的冒险类游戏。在当时,仅仅控制游戏屏幕的外观显示就需要编写大量的代码,因为它们使用的是古老的termios甚至是tty接口。巨大的工作量迫使Bill Joy和Ken Arnold将rogue游戏中的所有的屏幕处理和光标移动的函数汇集到一个函数库中。这就形成了最早的也是最简单的curses处理库的雏形。它最终随着BSD UNIX的早期版本发行开来。在这个版本中使用的是当时业已存在的termcap数据库来描述终端信息。?后来贝尔实验室的Mark Horton在System III UNIX中重新编写了curses。它相对以前的版本有了很大的扩展和提高,增加了一些非常新的特性。它首先将termcap数据库改进为 terminfo数据库。terminfo数据库完全由Horton开发编写,它是从termcap发展而来,而且更为中要重要的是其中引进了参数化性能的概念,这样使得描述多视频属性以及彩色终端成为可能。在后来的ATT System V 版本中,curses就扩展了更多功能和性能,包括了对窗体、菜单、面板、表单等组件以及对鼠标的支持。这时候的curses内容以及设计与最初的BSD版本的 curses在功能和复杂性上已经相去甚远。1.1.2 curses包内容本书的curses以System V UNIX的版本为主,curses包主要包括下面的四个开发库,如表1.1所示。在后面的章节中我们会针对每一个库进行详细深入的探讨。表1.1 curses包内容库名描述curses最早的curses包只包含这一部分,主要控制屏幕的输入和输出,光标的操作,窗口的创建和操作等。panel类似于窗口堆栈,不同的窗口可以存放于其中,并且可以在其中进行移动。menu新增的部分,主要包括创建菜单并且与之交互的函数,主要用来接受用户的选择。form包括创建表单以及与之进行交互的函数,主要用来接受用户数据输入?1.1.3 curses包移植性正如前言部分我们曾经提到过,使用curses包与使用低层终端函数编写的程序最主要的差别在于curses程序是独立于具体终端的,也就是说在某个终端上编写的程序可以完整的移植到另外的终端上而不需要进行任何改动。curses包的可移植性是curses包的最大特性。curses包的这种终端独立性归根于终端描述数据库terminfo和termcap。terminfo 和termcap数据库中包含了所有终端的描述信息。termcap数据库是在最早的的BSD UNIX中使用,在后来的System III中则使用terminfo数据库。terminfo数据库是从termcap数据库发展而来,组织方式相对于termcap来说有了进一步的优化,而且描述的终端信息有了进一步的增加。需要使用的数据库可以在程序编译的时候通过cc命令指定,具体的细节在这一章的末尾会有探讨。?正如前面所说,curses正是通过使用terminfo数据库使得程序可以在不同的终端上可以移植,那么系统是如何做到这一点的呢??从第一章的图0.

文档评论(0)

laideman + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档