NCURSES庫簡介 序列詳見最後面的轉自

第一章 NCURSES庫簡介
在使用電傳終端作爲計算機輸出設備的那個年代,電傳終端是和計算機分開放置的,並通過串行電纜連接。終端的配置通過發送一系列字節完成。所有的終端控制操作:改變光標在屏幕上的位置,清除屏幕某一區域的內容,屏幕滾動,切換顯示模式,給文字添加下劃線,改變字符的外觀、顏色、亮度等等,也是通過這樣一系列字節實現的。由於這些連續的控制字節以一個轉義字符“0x1B”(即ESC鍵)作爲起始字節,所以這種控制序列叫做轉義序列。即使在當今,我們也可以向終端仿真程序發送轉義序列,得到和當年電傳打字終端相同的顯示效果。

假設你想在終端(或終端仿真窗口)輸出一段彩色的文字,可以將以下這段轉義序列輸入到你的字符控制檯(或控制檯窗口):
echo "^[[0;31;40mIn Color"

在這裏 “^[” 就是所謂的轉義字符。(注意:“^[” 是一個字符,不是依次鍵入“^”和“[”字符。要輸出“^[”,必須按下Ctrl-V再按下ESC鍵)執行以上的命令,就應該可以看見“In Color”變爲紅色了(譯者注:試更改轉義字符各分號間的參數,看看會有什麼結果)。以後輸出的文本信息都是這樣的效果。 如果想返回原來的顏色設置可以使用以下的命令:
echo "^[[0;37;40m"

現在體會到這些神奇字符(轉移序列)的作用了嗎?然而這些奇怪的字符是不是很難理解呢?並且有時相同的轉義序列在不同的終端上會有不同的顯示結果。因此,UNIX的設計者發明了一種叫做 termcap的機制。
termcap是一個列出特定終端的所有功能的文本文件,並且給出了實現對應功能的轉義序列。然而在這種機制發明後的幾年中,逐漸被terminfo機制取代。程序員使用terminfo時不用花過多的時間查閱termcap。只需讓程序查詢terminfo的數據庫就可得到控制字符,並將其發送到終端或終端仿真程序。
1.1 NCURSES是什麼?
你可能會疑惑,引入的這些技術術語是什麼。假設在使用termcap或者terminfo的情況下,每個應用程序都在訪問terminfo數據庫並且做一些必要的處理(比如發送控制字符等等)。不久這些操作的複雜度將會變得難以控制。於是,curses誕生了。curses 的命名是來自一個叫做 “cursor optimization”(光標最優化)的雙關語(譯者注:curses本身有詛咒的意思)。curses構成了一個工作在底層終端代碼之上的封裝,並向用戶提供了一個靈活高效的API(Application Programming Interface 應用程序接口)。它提供了移動光標,建立窗口,產生顏色,處理鼠標操作等功能。使程序員編寫應用程序不需要關心那些底層的終端操作。

那麼ncurses又是什麼?ncurses是最早的System V Release 4.0 (SVr4)中 CURSES的一個克隆。這是一個可自由配置的庫,完全兼容舊版本的curses。簡而言之,它是一個管理應用程序在字符終端顯示的函數庫。當後面提到curses的時候,同時也可以和NCURSES互換。
關於ncurses詳細的更新歷史可以查閱ncurses源代碼分發包中的NEWS文件。Thomas Dickey是目前的維護人員。你可以通過[email protected]聯繫維護人員
1.2 我們可以用NCURSES做什麼?
ncurses不僅僅封裝了底層終端功能,而且提供了一個相當穩固的工作框架(Framework)可以在字符模式下產生美觀的界面。它提供了一些創建窗口的函數。而它的姊妹庫 Menu、Panel和Form則對curses基礎庫及進行了擴展。這些擴展庫通常都隨同curses一起發行。我們可以建立一個同時包含多個窗口(multiple windows)、菜單(menus)、面板(panels)和表單(forms)的應用程序。窗口可以被獨立管理,例如讓它滾動或者隱藏。

菜單(Menus)可以讓用戶建立命令選項,方便用戶執行命令。而表單(Forms)允許用戶建立一些簡單的數據輸入和輸出的窗口。面板(Panels)是ncurses窗口管理功能的擴展,可以用它覆蓋或堆積窗口。

以上這些就是ncurses的簡單介紹。在以後的章節裏,我們將詳細的介紹這些庫。
1.3在哪能得到它
現在你知道你可以用ncurses做什麼了吧。使用ncurses之前你必須先安裝它,通常在安裝操作系統(Unix/Linux)時它已被安裝。如果你的操作系統裏沒有ncurses,你可以通過以下的途徑安裝:

編譯ncurses包:
ncurses可以從ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz獲得。也可以通過GNU的FTP目錄:http://www.gnu.org/order/ftp.html 找到提供免費下載ncurses的站點。最新發布的穩定版本爲:5.2 20001021.(譯者翻譯時已經有5.4版本的ncurses下載了)

tar文件包中的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模式下使用以下的命令安裝:
rpm –i <下載的RPM文件>
1.4 本文檔的寫作意圖和涵蓋範圍
這部文檔的寫作目的是要成爲一份ncurses以及子函數庫的綜合編程指南。我們將從一個簡單的“Hello World”程序開始,循序漸進的學習掌握ncurses各方面更復雜、高級的內容。因此假定讀者在此之前沒有使用ncurses庫的經驗。

1.5 關於文檔中出現的程序
這份文檔中用到的所有程序已經被打包並壓縮成一個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 -- 一個簡單的面板使用例子

perl
|---->01-10.pl --前10個例子的perl語言版

Makefile包含在一級主目錄裏。它將會把所有的程序編譯成可執行的文件。並把這些文件存在demo/exec目錄下面。你也可以選擇將其編譯到別的目錄下。每個目錄下都有一個README文件詳細描述了每個目錄下的C源程序的內容。

對於每一個示例,我都給出了這些程序調用NCURSES目錄下相關文件的路徑名。

如果你希望在線閱讀這些程序中某個單獨的程序,可以通過瀏覽器訪問一下網址:http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ncurses_programs/
所有以上發佈的程序都遵照和NCURSES相同的許可協議(MIT-Style), 這個協議使你可以做除了得到他們以外更多的事情。你可以更自由的使用它們。

1.6 關於此文檔的其他文件發佈格式
這份HOWTO文檔還有很多其它的文件發佈格式,可以在tldp.org 下載到。以下是關於這份文檔其它格式的下載鏈接:
1.6.1可以從從tldp.org得到的格式:
Acrobat PDF 格式
PostScript格式
多頁的HTML文檔
單頁的HTML文檔
1.6.2從源代碼編譯
如果以上鍊接出現問題,或者你想自己使用sgml進行實驗,請遵循以下步驟:
1、從以下兩個地址下載源代碼包和tar.gz的示例程序壓縮包:
http://cvsview.tldp.org/index.cgi/ldp/howto/docbook/ncurses-howto/NCURSES-Programming-HOWTO.sgml
http://cvsview.tldp.org/index.cgi/LDP/howto/docbook/NCURSESHOWTO/ncurses_programs.tar.gz
2、解壓縮示例程序包:
tar zxvf ncurses_programs.tar.gz

3、用jade程序建立各種各式的文檔,如果你想創建多頁的HTML文檔:
jade -t sgml -i html -d 風格樣式表文件 NCURSES-Programming-HOWTO.sgml

如果需要PDF格式,首先要建立單頁的HTML文檔:
jade -t sgml -i html -d風格樣式表文件 -V nochunks NCURSES-Programming-HOWTO.sgml > NCURSES-ONE-BIG-FILE.html

然後利用這份文檔和htmldoc工具創建PDF文檔:
htmldoc --size universal -t pdf --firstpage p1 -f 輸出的.pdf文件全名 NCURSES-ONE-BIG-FILE.html

也可以用來生成PS文檔:
htmldoc --size universal -t ps --firstpage p1 -f 輸出的.ps文件全名NCURSES-ONE-BIG-FILE.html

詳細信息請訪問LDP Author Guide (LDP 作者指南)可以獲得更多信息,如果都失敗了,請和作者[email protected]聯繫,也可以聯繫譯者[email protected]

1.7 原文貢獻者
感謝Sharath([email protected])和Emre Akbas編寫了其中的一些段落。簡介部分最初由Sharath寫成。當重新寫這部分的時候飲用了他最初完成的部分。Emre幫忙編寫了printw()函數和scanw()函數部分。

Perl語言版示例程序的提供者Anuradha Ratnaweera([email protected])。

然後是Ravi Parimi([email protected])。他是這個項目最初的實現者。在撰寫這份文檔時,他對這份文檔提供了很多的意見。並且在文章撰寫完畢後耐心的校對了整份文檔。他還在Linux和Solaris平臺上檢查過文中使用的每一個程序。你可以從他的註記中發現你的問題。

1.8遠景規劃
下面是正在進行或者將要進行的項目。如果你有新的項目或者想加入某個項目。請和Padala聯繫。
給最後講述form庫的一章增加更多的示例程序。(這個項目Padala正在進行)
準備一個演示程序展示文檔中所有的示例。同時允許用戶通過程序描述展示這些示例。
讓用戶親自編譯並且察看這些程序。一個有對話框的用戶界面更好。(這個項目N.N.Ashok正在進行)
加入Debug信息,使用 _trace,_tarcemouse 。
通過NCURSES庫中的函數訪問termcap或tremios
使用戶可以同時在兩個終端上工作。 在“其它特色”章節(Miscellaneous features)中增加一些東西。








1.9 版權聲明
Copyright ?2001 by Pradeep Padala.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.

NCURSES Programming HOWTO 中文版(第二版)版權聲明
此HOWTO文檔的譯文由Byron完成,在LDP許可協議下可以您可以自由發佈或修改。因爲時間緊迫,也受能力所限,有翻譯不當之處請批評指正,有任何意見或建議請聯繫[email protected]

如果有需要轉載,請註明出處。

轉載自:http://blog.csdn.net/byronm/article/details/1029261

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章