欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Linux curses庫使用

系統(tǒng) 2268 0
?相信您在網(wǎng)路上一定用過如 tin,elm 等工具, 這些軟體有項共同的特色, 即他們能利用上下左右等方向鍵來控制游標的位置. 除此之外, 這些程式的畫面也較為美觀. 對Programming 有興趣的朋友一定對此感到好奇, 或許他能在 PC上用Turbo C輕易地寫出相似的程式, 然而, 但當他將同樣的程式一字不變地移到工作站上來編譯時, 卻出現(xiàn)一堆抓也抓不完的錯誤. 事實上, 原因非常easy, 他使用的函式庫可能在 UNIX 上是未定義的. 有些在 Turbo-C 上被廣泛使用的一些函式, 可能在 UNIX 上是不被定義的. 為了因應(yīng)網(wǎng)路上各式各樣的終端機形態(tài) (terminal), UNIX 上特別發(fā)展出一套函式庫, 專門用來處理 UNIX 上游標移動及螢?zāi)坏娘@示. 這就是本篇文章要為您介紹的 - curses.h 函式庫. 利用這個函式庫, 您也能夠?qū)懗鱿?elm 般利用方向鍵來移動光棒位置的程式.

?

?

1. curses 的歷史與版本號:

??? cureses 最早是由柏克萊大學的 Bill Joy 及 Ken Arnold 所發(fā)展出來的. 當時發(fā)展此一函式庫主要原因是為了提高程式對不同終端機的相容性而設(shè)計的. 因此, 利用 curses 發(fā)展出來的程式將和您所使用的終端機無關(guān). 也就是說, 您不必操心您的程式由于換了一部終端機而無法使用. 這對程式設(shè)計師而言, 尤其是網(wǎng)路上程式的撰寫, 是件相當重要的一件事. curses之所以能對上百種以上的終端機工作, 是由于它將全部終端機的資料, 存放在一個叫 termcap 的資料庫, ( 而在第二版的 System V 系統(tǒng)中, 新版的 curses 以 terminfo 代替原來的 termcap).

??? 有了這些記錄, 程式就行知道遇到哪一種終端機時, 須送什麼字元才干移動游標的位置, 送什麼字元才干清除整個螢?zāi)磺宄? (* 注一)

另外, 本文的介紹 以 System V 的 curses 版本號為主.

?

2. 怎樣在您的程式使用 curses:

在您的 C 程式的檔頭將 <cureses.h>include 進來.當您引進 curses.h 這個函式庫後, 系統(tǒng)會自己主動將 <stdio.h>和 <unctl.h>一并 include 進來.

另外, 在 System V 版本號中, <terminfo.h>這個函式庫也將一并include進來.

#include <curses.h>

main()

{

: :

: :

}

?

3. 怎樣編譯(compile):

當您編輯好您的程式, 在 UNIX 提示符號下鍵入:

gcc [file.c] -lcurses

gcc [file.c] -lcurses -ltermlib(*注二)

?

4. 怎樣開始我的第一個 curses 程式:

在開始使用 curses 的一切命令之前, 您必須先利用 initscr()這個函式來開啟 curses 模式.

相對的, 在結(jié)束 curses 模式前 ( 通常在您結(jié)束程式前 ) 也必須以endwin()來關(guān)閉 curses 模式.

#include? < curses.h >

main()
{
????initscr();
????:?:
????:?:?
????:?:
????endwin();
}
?

這是一般 curses 程式標準的模式.

此外, 您能夠就您程式所須, 而做不同的設(shè)定. 當然, 您能夠不做設(shè)定,而僅僅是呼叫 initscr(). 您能夠自己寫一個函式來存放全部您所需要的設(shè)定. 尋常使用時, 僅僅要呼叫這個函式就可以啟動 curses 并完畢一切設(shè)定. 以下的樣例, 即是筆者將尋常較經(jīng)常使用的一些設(shè)定放在一個叫 initial()的函式內(nèi).

void ?initial()
{
????initscr();
????cbreak();
????nonl();
????noecho();
????intrflush(stdscr,FALSE);
????keypad(stdscr,TRUE);
????refresh();
}


?各函式分別介紹例如以下:

  • initscr(): initscr() 是一般 curses 程式必須先呼叫的函數(shù), 一但這個函數(shù)被呼叫之後, 系統(tǒng)將依據(jù)終端機的形態(tài)并啟動 curses 模式.
  • endwin(): curses 通常以呼叫 endwin() 來結(jié)束程式. endwin() 可用來關(guān)閉curses 模式, 或是臨時的跳離 curses 模式. 假設(shè)您在程式中需要call shell ( 如呼叫 system() 函式 ) 或是需要做 system call, 就必須先以 endwin() 臨時跳離 curses 模式. 最後再以wrefresh() doupdate() 來重返 curses 模式.
  • cbreak() and nocbreak(): 當 cbreak 模式被開啟後, 除了 DELETE 或 CTRL 等仍被視為特殊控制字元外一切輸入的字元將立馬被一一讀取.當處於 nocbreak 模式時, 從鍵盤輸入的字元將被儲存在 buffer 里直到輸入 RETURN或 NEWLINE.在較舊版的 curses 須呼叫 crmode(),nocrmode() 來代替 cbreak(),nocbreak()?
  • nl() and?nonl(): 用來決定當輸入資料時, 按下 RETURN 鍵是否被相應(yīng)為 NEWLINE 字元 ( 如 /n ). 而輸出資料時, NEWLINE 字元是否被相應(yīng)為 RETURN 和 LINDFEED系統(tǒng)預(yù)設(shè)是開啟的.
  • echo() and noecho(): 此函式用來控制從鍵盤輸入字元時是否將字元顯示在終端機上.系統(tǒng)預(yù)設(shè)是開啟的.
  • intrflush(win,bf): 呼叫 intrflush 時須傳入兩個值, win 為一 WINDOW 型態(tài)指標, 通常傳入標準輸出入螢?zāi)?stdscr. bf 為 TRUE 或 FALSE. 當 bf 為 true 時, 當輸入中斷字元 ( 如 break) 時, 中斷的反應(yīng)將較為高速.但可能會造成螢?zāi)坏腻e亂.?
  • keypad(win,bf): 呼叫 keypad 時須傳入兩個值, win 為一 WINDOW 型態(tài)指標, 通常傳入標準輸出入螢?zāi)?stdscr. bf 為 TRUE 或 FALSE. 當開啟 keypad 後, 能夠使用鍵盤上的一些特殊字元, 如上下左右>等方向鍵, curses 會將這些特殊字元轉(zhuǎn)換成 curses.h 內(nèi)定義的一些特殊鍵. 這些定義的特殊鍵通常以 KEY_ 開頭.
  • refresh(): refresh() 為 curses 最常呼叫的一個函式. curses 為了使螢?zāi)惠敵鋈脒_最佳化, 當您呼叫螢?zāi)惠敵龊狡髨D改變螢?zāi)簧系漠嬅鏁r, curses 并不會立馬對螢?zāi)蛔龈淖? 而是等到refresh() 呼叫後, 才將剛才所做的變動一次完畢. 其馀的資料將維持不變. 以盡可能送最少的字元至螢?zāi)簧? 降低螢?zāi)恢乩L的時間.假設(shè)是 initscr() 後第一次呼叫 refresh(), curses 將做清除螢?zāi)坏墓ぷ??

?

5. 游標的控制:

  • move(y,x): 將游標移動至 x,y 的位置.
  • getyx(win,y,x): 得到眼下游標的位置. (請注意! 是 y,x 而不是&y,&x )

?

6. 有關(guān)清除螢?zāi)坏暮?

clear() and erase(): 將整個螢?zāi)磺宄? (請注意配合refresh() 使用)

?

7. 怎樣在螢?zāi)簧巷@示字元:

  • echochar(ch): 顯示某個字元.
  • addch(ch): 顯示某個字元.
  • mvaddch(y,x,ch): 在(x,y) 上顯示某個字元. 相當於呼叫move(y,x);addch(ch);
  • addstr(str): 顯示一串字串.
  • mvaddstr(y,x,str): 在(x,y) 上顯示一串字串. 相當於呼叫move(y,x);addstr(str);
  • printw(format,str): 相似 printf() , 以一定的格式輸出至螢?zāi)?
  • mvprintw(y,x,format,str): 在(x,y) 位置上做 printw 的工作. 相當於呼叫move(y,x);printw(format,str);

?

8. 怎樣從鍵盤上讀取字元:

  • getch(): 從鍵盤讀取一個字元. (注意! 傳回的是整數(shù)值)
  • getstr(): 從鍵盤讀取一串字元.
  • scanw(format,&arg1,&arg2...): 如同 scanf, 從鍵盤讀取一串字元.

例:

int ?ch;
char ?string1[ 80 ];? /* ?請注意!?不可宣告為?char?*string1;? */
char ?string2[ 80 ];
echo();?
/* ?開啟?echo?模式,?使輸入立馬顯示在螢?zāi)簧? */
ch
= getch();
string1
= getstr();
scanw(
" %s " ,string2);
mvprintw(
10 , 10 , " String1=%s " ,string1);
mvprintw(
11 , 10 , " String2=%s " ,string2);

?

?9. 怎樣利用方向鍵:

??? curses 將一些如方向鍵等特殊控制字元, 以 KEY_ 為開頭定義在 curses.h這個檔案里頭.

??? 如 KEY_UP 即代表方向鍵的 " ↑ ". 但, 假設(shè)您想使用curses.h 所為您定義的這些特殊鍵的話, 您就必須將 keypad 設(shè)定為TRUE. 否則, 您就必須自己為全部的特殊鍵定義了. curses.h 為一些特殊鍵的定義例如以下:

  • KEY_UP 0403 ↑
  • KEY_DOWN 0402 ↓
  • KEY_LEFT 0404 ←
  • KEY_RIGHT 0405 →
  • KEY_HOME 0406 Home key (upward+left arrow)
  • KEY_BACKSPACE 0407 backspace (unreliable)
  • KEY_F0 0410 Function keys.
  • KEY_F(n) (KEY_F0+(n)) formula for f .
  • KEY_NPAGE 0522 Next page
  • KEY_PPAGE 0523 Previous page

以上僅列出筆者較常使用的一些控制鍵, 至於其它控制鍵的定義, 請自行參閱 man curses (* 注三).

一并為您列出其它經(jīng)常使用的一些特殊字元:

  • [TAB] /t
  • [ENTER] /r
  • [ESC] 27
  • [BACKSPACE] 127

??

10. 怎樣改變螢?zāi)伙@示字元的屬性:

??? 為了使輸出的螢?zāi)划嬅娓鼮樯鷦悠? 我們常需要在螢?zāi)簧献鲆恍┤绶窗? 閃爍等變化. curses 定義了一些特殊的屬性, 透過這些定義, 我們也能夠在 curses 程式控制螢?zāi)坏妮敵鲎兓?

  • attron(mod): 開啟屬性.
  • attroff(mod): 關(guān)閉屬性.

curses.h 里頭定義了一些屬性, 如:

  • A_UNDERLINE: 加底線.
  • A_REVERSE: 反白.
  • A_BLINK: 閃爍.
  • A_BOLD: 高亮度.
  • A_NORMAL: 標準模式(僅僅能配合 attrset() 使用)

??? 當使用 attron() 開啟某一種特殊屬性模式後, 接下來在螢?zāi)坏妮敵龆紩栽摲N屬性出現(xiàn). 直到您呼叫 attroff() 將此模式關(guān)閉. 請注意, 當您欲 attron() 開啟還有一種屬性時, 請記得利用attroff()先關(guān)閉原來的屬性, 或直接以attrset(A_NORMAL) 將全部特殊屬性關(guān)閉.否則, curses 會將兩種屬性做重疊處理.

例:

attrset(A_NORMAL); /* 先將屬性設(shè)定為正常模式 */

attron(A_UNDERLINE); /* 加底線 */

mvaddstr(9,10,"加底線"); /* 加底線輸出一串字元 */

attroff(A_UNDERLINE); /* 關(guān)閉加底線模式, 恢復(fù)正常模式 */

attron(A_REVERSE); /* 開啟反白模式 */

mvaddstr(10,10,"反白"); /* 輸出一串反白字元 */

attroff(A_REVERSE); /* 關(guān)閉反白模式, 恢復(fù)正常模式 */

attron(A_BLINK); /* 開啟閃爍模式 */

mvaddstr(11,10,"閃爍"); /* 輸出一串閃爍字元 */

attroff(A_BLINK); /* 關(guān)閉閃爍模式, 恢復(fù)正常模式 */

attron(A_BOLD); /* 開啟高亮度模式 */

mvaddstr(12,10,"高亮度"); /* 輸出一串高亮度字元 */

attroff(A_BOLD); /* 關(guān)閉高亮度模式, 恢復(fù)正常模式 */

?

11. 其它一些函數(shù):

  • beep(): 發(fā)出一聲嗶聲.
  • box(win,ch1,ch2): 自己主動畫方框.
    • ch1: 畫方框時垂直方向所用字元.
    • ch2: 畫方框時水平方向所用字元.
    • example: box(stdscr,'|','-'); 將以 | 及 - 圍成一個方框.

??

12. 應(yīng)用完整例:

??? 以下所舉的樣例, 即全然利用剛剛所介紹的含式來完畢.這個程式可將從鍵盤上讀取的字元顯示在螢?zāi)簧? 而且能夠上下左右方向鍵來控制游標的位置, 當按下 [ESC] 後, 程式即結(jié)束. 您有沒有發(fā)現(xiàn), 這不就是一個簡單全螢?zāi)痪庉嬈鞯碾r形嗎?

實例1:

#include <curses.h>
#include <stdio.h>
#define StartX 1
#define StartY 1
void initial();
main()
{
?? int x = StartX;
?? int y = StartY;
?? int ch;
?? initial();
?? box(stdscr,'|','-');
?? attron(A_REVERSE);
?? mvaddstr(0,20,"curses program");
?? attroff(A_REVERSE);
?? move(x,y);
?? do{
????? ch = getch();
????? switch(ch)
????? {
??????? case KEY_UP:
?????????? --y;
?????????? break;
??????????? case KEY_DOWN:
??????????????? ++y;
??????????????? break;
??????????? case KEY_RIGHT:
??????????????? ++x;
??????????????? break;
??????????? case KEY_LEFT:
??????????????? --x;
??????????????? break;
??????????? case ' ':
??????????????? ++y;
??????????????? x=0;
??????????????? break;
??????????? case '/t':
??????????????? x+=7;
??????????????? break;
??????????? case KEY_BACKSPACE:
??????????????? mvaddch(y,--x,' ');
??????????????? break;
??????????? case 27:
??????????????? endwin();
??????????????? exit(1);
??????????? default:
??????????????? addch(ch);
??????????????? x++;
?????????????? break;
????? }
????? move(y,x);
?? }while(1);
}

void initial()
{
?initscr();
?cbreak();
?notnl();
?noecho();
?intrflush(stdscr,false);
?keypad(stdscr,true);
?refresh();
}

?

實例2:

#include <curses.h>

int main()
{
?initscr();

?box(stdscr, '|', '-');? /*draw a box*/
?move(LINES/2, COLS/2);????????????? /*move the cursor to the center*/
?waddstr(stdscr, "Hello, world!");?
?refresh();
?getch();
?
?endwin();
?return 0;
}

curses庫函數(shù)說明 ??

--------------------------------------------------------?
INDDW*curscr:當前屏幕
WINDOW?*stdscr:標準屏幕
int?LINES:終端上的行數(shù)
int?COLS:終端上的列數(shù)
bool?TRUE:真標志,1
bool?FALSE:假標志,0
int?ERR:錯誤標志,-1
int?OK:OK標志,0
---------------------------------------------
win:WINDOW?*
bf:bool
ch:chty?pe
str:char?*
chstr:chty?pe*
fmt:char?*
否則:int?
---------------------------------------------
初始化
WINDOW?*initscr()
SCREEN*newterm(char?*type,?FILE?*outfd,?FILE?*infd)
對用戶訪問的每一個終端都應(yīng)該調(diào)用newterm
t?y?p?e是終端的名稱,包括在$?T?E?R?M中(如ansi,?xterm,?vt100等等)
SCREEN*set_term(SCREEN?*new)
用戶能夠切換當前終端。全部的函數(shù)都將在設(shè)置的當前終端上起作用。
int?endwin()
退出程序之前,關(guān)閉全部打開的窗體。
之后還能夠調(diào)用refresh(),
int?isendwin()
ifendwin()->;refresh(),TRUE,|FALSE。
-----------------------
WINDOW?*newwin(nlines,ncols,begy,begx)
begy和begx是窗體左上角的坐標。nlines是一個整數(shù),
存放著行的數(shù)目,而ncols,存放著列的數(shù)目。
全部的參數(shù)設(shè)置為零,則打開的窗體的大小將與屏幕的大小同樣。
int?delwin(win)
它刪除窗體win。假設(shè)存在子窗體,曾經(jīng)先要刪除這些子窗體。這個函數(shù)將
釋放win所占領(lǐng)的全部資源。在調(diào)用endwin()之前用戶應(yīng)該刪除全部的窗體
int?mvwin(win,by,bx)
它將把窗體移到坐標(by,bx)處。假設(shè)把窗體移出屏幕邊界的范圍,則ERR
WINDOW?*subwin(origwin,nlines,ncols,begy,begx)
它返回一個位于origwin窗體中間的子窗體。假設(shè)用戶改變這兩個窗體
(origwin或者那個新窗體)中的一個,則這樣的改變將會同一時候反映到這兩
個窗體上。在下一次調(diào)用refresh()之前,先要調(diào)用touchwin(origwin)
begx和begy是相對于屏幕的,而不是相對于origwin的。
WINDOW?*derwin(origwin,nlines,ncols,begy,begx)
此函數(shù)與subwin(.)同樣,僅僅只是這里的begx和begy是相對于origwin的,而不是相對于屏幕的。
mvderwin(win,y,x)
此函數(shù)將把win移到父窗體內(nèi)。(注意:此函數(shù)尚未實現(xiàn))。
WINDOW?*dupwin(win)
此函數(shù)復(fù)制窗體win。
int?overlay(win1,win2)
將把win1中的全部文本復(fù)制到win2中,可是不拷貝空格。
int?overwrite(win1,win2)
也是做文本拷貝工作的函數(shù),但它拷貝空格。
int?copywin(win1,win2,sminrow,smincol,dminrow,
dmincol,dmaxrow,dmaxcol,overlay)
它所做的工作與overlay(.)和overwrite(.)類似,可是該函數(shù)還能夠讓程序猿選擇拷貝窗體的哪個區(qū)域。
int?addch(ch)
int?waddch(win,ch)
int?mvaddch(y,x,ch)
int?mvwaddch(win,y,x,ch)
----------------
int?addstr(str)
int?addnstr(str,n)
int?waddstr(win,str)
int?waddnstr(win,str,n)
int?mvaddstr(y,x,str)
int?mvaddnstr(y,x,str,n)
int?mvwaddstr(win,y,x,str)
int?mvwaddnstr(win,y,x,str,n)
-----------------------------
int?addchstr(chstr)
int?addchnsrtr(chstr,n)
int?waddchstr(win,chstr)
int?waddchnstr(win,chstr,n)
int?mvaddchstr(y,x,chstr)
int?mvaddchnstr(y,x,chstr,n)
int?mvwaddchstr(win,y,x,chstr)
int?mvwaddchnstr(win,y,x,chstr,n)
*****chstr是指向ch?type數(shù)組的一個指針。*****
---------------------------
int?echochar?(ch)
int?wechochar?(win,ch)
---------------------------
int?printw(fmt,..)
int?wprintw(win.fmt,....)
int?mvprintw(y,x,fmt,...)
int?mvwprntw(win,y,x,fmt,..)
---------------------------
int?insch(c)
int?winsch(win,c)
int?mvinsch(y,x,c)
int?mvwinsch9win,y,x,c)
這些函數(shù)把字符ch插入到光標的左邊,
光標后面的全部字符則向右移動一個位置。
在這一行最右端的字符可能會丟失。
---------------------------
int?insert()
int?winsert(win)
在當前行的上方插入一個空行(最底下的一行將被丟失)。
---------------------------
int?insdelin(n)
int?winsdelln(win,n)
假設(shè)n為正數(shù),則這些函數(shù)將在適當?shù)拇绑w的當前光標上方插入n行
(這樣一來最底下的n行將丟失);假設(shè)n為負數(shù),則光標以下的n行將被刪除,
余下的行將上升,頂替它們的位置。這些函數(shù)將在當前光標的左邊插入str
(字符的個數(shù)不能超過一行的限度)。在光標右邊的字符將右移,假設(shè)到達行
尾,則字符將丟失,光標位置不變。y和x是指在插入str曾經(jīng)先要把光標移動
到的坐標,n是要插入的字符的數(shù)目(假設(shè)n為0則插入整個字符串)。
---------------------------
int?insstr(str)
int?insnstr(str,n)
int?winsstr(win,str)
int?winsnstr(win,str,n)
int?mvinsstr9y,x,str)
int?mvinsnstr(y,x,str,n)
int?mvwinsstr(win,y,x,str)
int?mvwinsnstr(win,y,x,str,n)
這些函數(shù)將在當前光標的左邊插入str(字符的個數(shù)不能超過一行的限度)。
在光標右邊的字符將右移,假設(shè)到達行尾,則字符將丟失,光標位置不變。
y和x是指在插入str曾經(jīng)先要把光標移動到的坐標,n是要插入的字符的數(shù)目
(假設(shè)n為0則插入整個字符串)。
---------------------------
int?delch()
int?wdelch(win)
int?mvdelch(y,x)
int?mvwdelch(win,y,x)
刪除光標左邊的字符,并把光標右邊余下的字符向左移動一個位置。
y和x是在進行刪除操作曾經(jīng)要把光標移動到的坐標。
int?deleteln()
int?wdeleteln(win)
刪除光標以下的一行,并把以下全部的其它行都向上移動一個位置。
此外,屏幕最底下的一行將被清除。
-----------------------------
方框和直線

int?border(ls,rs,ts,bs,tl,tr,bl,br)
int?wborder(win,ls,rs,ts,bs,tl,tr,bl,br)
int?box(win,vert,hor)
這些函數(shù)在窗體的邊界(或者win的邊界)畫上方框。在以下的表格中,
讀者將能夠看到字符,以及它們的默認值。當用零去調(diào)用box(.)時將
會用到這些默認值。在以下的圖中讀者能夠看到方框中字符的位置
-------------
int?vline9ch,n)
int?wvline(win,ch,n)
int?hline(ch,n)
int?whline(win,ch,n)
這些函數(shù)將從當前光標位置開始畫一條水平線或者垂直線。
ch是畫線所使用的字符,n是要畫的字符的個數(shù),光標位置并不移動。
--------------------------
void?bkgdset(ch)
void?wbkgdset(win,ch)
這兩個函數(shù)設(shè)置窗體或者屏幕的背景字符和屬性。ch的屬性將和窗體中
全部非空格的字符的屬性進行OR操作。背景是窗體的一部分,
將不會隨著滾動、輸入或輸出而改變
int?bkgd(ch)
int?wbkgd(win,ch)
---------------------------------
int?getch()
int?wgetch()
int?mvgetch(y,x)
int?mvwgetch(win,y,x)
getch()將從終端讀取輸入,讀取的方式取決于是否設(shè)置了延遲模式。
假設(shè)設(shè)置了延遲模式,則getch()將一直等待,直到用戶按下一個鍵為止;
假設(shè)沒有設(shè)置延遲模式,則它將返回輸入緩沖區(qū)中的數(shù)據(jù),假設(shè)輸入緩沖區(qū)
為空,則它將返回ERR。mvgetch(.)和mvwgetch(.)首先把光標移動到位置
(y,x)上。名稱中有w字母的函數(shù)將從與窗體win相關(guān)的終端讀取輸入,
getch()和mvgetch(.)則從屏幕相關(guān)的終端讀取。假設(shè)使能了keypad(.)
在用戶按下某個功能鍵時,getch()將返回一個代碼,該代碼在.h頭文件里被
定義為KEY_*宏。假設(shè)用戶按下Esc鍵(它可能會是某個組合功能鍵的第
一個鍵),則ncurses將啟動一個否則就返回功能鍵的值。(假設(shè)須要的話,
能夠使用notimeout()來關(guān)閉第二個定時器
int?ungetch()
這個函數(shù)將把字符ch送回輸入緩沖區(qū)。
---------------------
int?getstr(str)
int?wgetstr(win,str)
int?mvgetstr(y,x,str)
int?mvwgetstr(win,y,x,str)
int?wgetnstr(win,str,n)
這些函數(shù)的作用相當于對getch()進行一系列的調(diào)用,直到接收到一個新行。
行中的字符存放在str中(所以,在調(diào)用getstr(.)之前,不要忘記給字符指針
分配內(nèi)存)。假設(shè)打開了回送,則字符串將被顯示出來(使用noecho()能夠關(guān)
閉回送)而用戶的刪除字符以及其它特殊字符也會被解釋出來
-----------------
chty?peinch(0
chty?pewinch(win)
chty?pemvinch(y,x)
chty?pemvwinch(win,y,x)
這些函數(shù)從屏幕或窗體返回一個字符,由于返回值的類型是chty?pe,
所以還包括了屬性信息。這一信息能夠使用常量A_*從字符中擴展得到。
-------------------
int?scanw(fmt,...)
int?wscanw(win,fmt,...)
int?mvscanw(y,x,fmt,...)
int?mvwscanw(win,y,x,fmt,...)
int?vwscanw(win,fmt,va_list.)
----------------------------
輸出選項
int?idlok9win,bf)
void?fdcok(win.bf)
這兩個函數(shù)為窗體使能或者關(guān)閉終端的insert/delete特征(idlok(.)針對一
行,而idcok(.)則針對字符)。(注:idcok(.)尚未實現(xiàn))
void?immedok(win,bf)
bf設(shè)置為TRUE,則對窗體win的每一次改變都將導(dǎo)致物理屏幕的一次刷新。
這將使程序的性能減少,所以默認的值是FALSE。(注:此函數(shù)尚未實現(xiàn))
int?clearok(win,bf)
假設(shè)bf值為TRUE,則下一次調(diào)用wrefresh(win)時將會清除屏幕,
并全然地把它又一次畫一遍(就像用戶在編輯器vi中按下Ctrl+L一樣)。
int?leaveok(win,bf)
默認的行為是,ncurses讓物理光標停留在上次刷新窗體時的同一個位置上。
不使用光標的程序能夠把leaveok(.)設(shè)置為TRUE,這樣一般能夠節(jié)省光標
移動所須要的時間。此外,ncurses將試圖使終端光標不可見。
int?nl()
int?nonl()
這兩個函數(shù)控制新行的平移。使用nl()能夠打開平移,這樣在回車時就會
平移到新的一行,在輸出時就會走行。而nonl()能夠把平移關(guān)上。
關(guān)上平移之后,ncurses做光標移動操作時速度就會快一些。
------------------------------
輸入選項

int?keypad(win,bf)
bf為TRUE,函數(shù)在等待輸入時會使能用戶終端的鍵盤上的小鍵盤。
ncurses將返回一個鍵代碼,該代碼在.h頭文件里被定義為KEY_*宏,
它是針對小鍵盤上的功能鍵和方向鍵的。對于PC鍵盤來說,
這一點是非常有幫助的,由于這樣用戶就能夠使能數(shù)字鍵和光標鍵。
int?meta(win.bf)
bf為TRUE,從getch()返回的鍵代碼將是完整的8位(最高位將不會被去掉)
int?cbreak()
int?nocbreak()
int?crmode()
int?nocrmode()
cbreak()和nocbreak()將把終端的CBREAK模式打開或關(guān)閉。假設(shè)CBREAK打開則程序就能夠立馬使用讀取的輸入信息。假設(shè)CBREAK關(guān)閉,則輸入將被緩存
起來,直到產(chǎn)生新的一行(注意:crmode()和nocrmode()僅僅是為了提供向上兼容性,不要使用它們)
int?raw()
int?noraw()
這兩個函數(shù)將把RAW模式打開或關(guān)閉。RAW與CBREAK同樣,
它們的差別在于RAW模式不處理特殊字符。
int?echo()
int?noecho()
假設(shè)把echo()設(shè)置為TRUE,則用戶所敲的輸入將會回送并顯示出來,
而noecho()則對此保持沉默。
int?halfdelay(t)
此函數(shù)與cbreak()類似,但它要延遲t秒鐘。
int?nodelay(win,bf)
終端將被設(shè)置為非堵塞模式。假設(shè)沒有不論什么輸入則getch()將返回ERR,
否則假設(shè)設(shè)置為FALSE,則getch()將等待,直到用戶按下某個鍵為止。
int?timeout(t)
int?wtimeout(win,t)
筆者提倡大家使用這兩個函數(shù),而不要使用halfdelay(t)和nodelay(win,bf)getch()的結(jié)果取決于t的值。假設(shè)t是正數(shù),則讀操作將被堵塞t毫秒;
假設(shè)t為零,則不發(fā)生不論什么堵塞;假設(shè)t是負數(shù),則程序?qū)⒍氯钡接休斎霝橹?
int?notimeout(win,bf)
假設(shè)bf為TRUE,則getch()將使用一個特殊的定時器(一秒鐘長)。到時間以后
再對以Esc等鍵打頭的輸入序列進行解釋。
int?typeahead(fd)
假設(shè)fd是-1,則不檢查超前鍵擊,否則ncurses將使用文件描寫敘述符fd來進行這些檢查
int?int?rflush(win,bf)
當bf為TRUE時使能該函數(shù)。在終端上按下隨意中斷鍵(quit、break.)時,
全部的輸出將會刷新到tty驅(qū)動程序隊列中。





四級(中級)
user4
97
6339214
984818
202193
qisiwole
0
------------------------------
終端屬性
int?baudrate()此函數(shù)返回終端的速度,以bps為單位。
char?erasechar()此函數(shù)返回當前刪除的字符。
char?killchar()此函數(shù)返回當前殺死的字符。
int?has_ic()
int?has_il()假設(shè)終端具有插入/刪除字符的能力,則has_rc()將返回TRUE假設(shè)終端具有插入/刪除行的能力,則has_il()將返回TRUE,
否則這兩個函數(shù)將返回ERR。(注:尚未實現(xiàn))
char?*longname()此函數(shù)所返回的指針同意用戶訪問當前終端的描寫敘述符。
chty?petermattrs()(注:此函數(shù)尚未實現(xiàn))
char?*termname()這個函數(shù)從用戶環(huán)境中返回TERM的內(nèi)容。(尚未實現(xiàn))
--------------------------------
更新終端
int?refresh()
int?wrefresh(win)
refersh()將把窗體映像復(fù)制到終端,而wrefresh(win)將把窗體映像
復(fù)制到win,并使它看起來象原來的樣子。
int?wnoutrefresh(win)
int?doupdate()
wnoutrefresh(win)將會僅僅復(fù)制到窗體win,這意味著在終端上將不進行不論什么輸出,可是虛擬屏幕實際上看起來象程序猿所希望的那樣。doupdate()將輸
出到終端上。程序能夠改變很多窗體,對每一個窗體都調(diào)用一次
wnoutrefresh(win),然后再調(diào)用一次doupdate()來更新物理屏幕。
int?redrawln(win)
int?wredrawln(win,bline,blines)
假設(shè)在往屏幕上輸出新內(nèi)容時須要清除一些行或者整個屏幕,能夠使用這兩
個函數(shù)。(可能這些行已經(jīng)被破壞了或者由于其它的原因。)
int?touchwin(win)
int?touchline(win,start,count)
int?wtouchln(win,y,n,changed)
int?untouchwln(win)
這些函數(shù)通知ncurses整個win窗體已經(jīng)被修改過了,或者從start直到
start+count的這些行已經(jīng)被修改過了。比如,假設(shè)用戶有一些重疊的窗體
(正如在example.c中一樣),對某個窗體的修改不會影響其它窗體的映像。
wtouchln(.)
將按掀從y開始的n行。假設(shè)change的值是TRUE,則這些行被按掀過了,
否則就還未被按掀過(改變或未改變)。
untouchwin(win)將把窗體win標記為自上次調(diào)用refresh()以來還未被按掀。
int?ls_linetouched(win,line)
int?ls_wint?ouched(win)
通過使用這兩個函數(shù),用戶能夠檢查自從上次調(diào)用refresh()以來,
第line行或者窗體win是否已被按掀過。
-------------------------------
視頻屬性與顏色
ncurses定義了八種顏色,在帶有彩色支持的終端上用戶能夠使用這些顏色。
首先,調(diào)用start_color()初始化顏色數(shù)據(jù)結(jié)構(gòu),
然后使用has_colors()檢查終端權(quán)能。
start_color()將初始化COLORS和COLOR_PAIR。
前者是終端所支持的最多的顏色數(shù)目,而后者是用戶能夠定義的色彩對的最大數(shù)目。
兩個屬性能夠使用OR操作組合起來。“COLORPAIRS_1COLORS_1”

int?color_content(color,t,g,b)

此函數(shù)獲取color的顏色成份r,g和b。
首先,函數(shù)CheckColor調(diào)用start_color()初始化顏色,假設(shè)當前終端有彩色的話,
則函數(shù)has_colors()將返回TRUE。我們檢查了這一點以后,調(diào)用init_pair(.)
把前景色和背景色組合起來,再調(diào)用wattrset(.)為特定的窗體設(shè)置這些顏色對。
此外,假設(shè)我們使用的是黑白終端,還能夠單獨使用wattrset(.)來設(shè)置屬性。
假設(shè)要在xterm中獲取顏色,我覺得最佳方法是使用ansi_xterm,
以及來自MidnightCommander的terminfo項目。用戶能夠獲取ansi_xterm
和MidnightCommander的源碼(mc_x.x.tar.gz),然后編譯ansi_xterm,
并對mc_x.x.tar.gz文檔中的xterm.ti和vt100.ti使用tic命令。
運行ansi_xterm,把它試驗出來

---------------------------------
光標和屏幕坐標

int?move(y,x)
int?wmove(win,y,x)
move()將移動光標,而wmove(win)則從窗體win中移動光標。對
輸入/輸出函數(shù)來說,還定義了其它的一些宏,在調(diào)用特定函數(shù)之前,
這些宏能夠移動光標。

int?curs_set(bf)?這個函數(shù)將把光標置為可見或者不可見,假設(shè)終端有這個功能
void?getyx(win,y,x)?getyx(.)將返回當前光標位置。(注意:這是一個宏)
void?getparyx(win,y,x)
假設(shè)win是個子窗體,getparyx(.)將把該窗體相應(yīng)父窗體的坐標存儲在y和x則y和x都將為-1。(注:此函數(shù)尚未實現(xiàn))

void?getbegyx(win,y,x)
void?getmaxyx(win,y,x)
int?getmaxx(win)
int?getmaxy(win)
這些函數(shù)把窗體win的開始坐標和大小坐標存放在y和x中。
int?getsyx(int?y,int?x)
int?setsyx(int?y,int?x)
getsyx(.)把虛擬屏幕光標存放在y和x中,而setsyx(.)則設(shè)置這個坐標。
假設(shè)y和x是-1,?用戶調(diào)用getsyx(.)將會設(shè)置leaveok。

------------------------------
滾動

int?tscrollok(win,bf)
當光標在屏幕的右下角而且輸入了一個字符(或者新的一行)時,如bf為TRUE則窗體win中的文本將上滾一行。假設(shè)bf為FALSE,則鼠標留在原來的位置上
當滾動特征打開時,使用以下的函數(shù)能夠滾動窗體中的內(nèi)容。
(注意:當用戶在窗體的最
后一行輸入一個新行時,也應(yīng)該發(fā)生相應(yīng)的滾動操作,
所以在使用scrollok(.)時要十分小心,
否則可能會得到出乎意料的結(jié)果。)
int?scrol(win)
此函數(shù)將使窗體向上滾動一行(數(shù)據(jù)結(jié)構(gòu)中的行也向上滾動)。
int?acrl(n)
int?wscrl(win,n)
這兩個函數(shù)將使屏幕或者窗體win向上向下滾動,滾動方向取決于整數(shù)n的值
假設(shè)n是正數(shù),則窗體向上滾動n行,否則假設(shè)n是負數(shù),則窗體向下滾動n行
int?setscrreg(t,b)
int?wsetscrreg(win,t,b)
這兩個函數(shù)設(shè)置一個軟滾動區(qū)。
-------------------------------------
小鍵盤

WINDOW?*newpad(nlines,ncols)
WINDOW?*subpad(orlg,nlines,ncols,begy,begx)
int?prefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol)
int?pnoutrefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol)
int?pechochar?(pad,ch)
----------------------------
軟標簽

int?slk_init(int?fmt)
int?slk_set(int?labnum,char?*label,int?fmt)
int?slk_refresh()
int?slk_noutrefresh()
char?*slk_label(int?labnum)
int?slk_clear()
int?slk_restore()
int?slk_touch()
int?slk_attron(chty?peattr)
int?slk_attrset(chty?peattr)
int?slk_attroff(chty?peattr)
這些函數(shù)是與attron(attr)、attrset(attr)和attroft(attr)相相應(yīng)的,
但它們尚未實現(xiàn)。
------------------------------
int?beep()
int?flash()
char?*unctrl(chty?pec)
char?*keyname(int?c)
int?filter()
(注:以上函數(shù)尚未實現(xiàn)。)
void?use_env(bf)
int?putwin(WINDOW?*win,FILE*filep)
(注:以上函數(shù)尚未實現(xiàn)。)
WINDOW?*getwin(FILE*filep)
(注:以上函數(shù)尚未實現(xiàn)。)
int?delay_output(int?ms)
int?flushinp()
--------------------------------------
低級訪問

int?def_prog_mode()
int?def_shell)_mode()
int?reset_prog_mode()
int?reset_shell_mode()
int?resetty()
int?savetty()
int?ripoffline(int?line,int?(*init)(WINDOW?*,int?))
int?napms(int?ms)
---------------------------------
屏幕轉(zhuǎn)儲

int?scr_dump(char?*filename)
(注:此函數(shù)尚未實現(xiàn)。)
int?scr_restore(char?*filename)
(注:此函數(shù)尚未實現(xiàn)。)
int?scr_init(char?*filename)
(注:此函數(shù)尚未實現(xiàn)。)
int?scr_set(char?*filename)
(注:此函數(shù)尚未實現(xiàn)。)
-----------------------------------
Termcap模擬

int?tgetent(char?*bp,char?*name)
int?tgetflag(char?fd[2])
int?tgetnum(char?fd[2])
char?*tgetstr(char?fd[2],char?**area)
char?tgoto(char?*cap,int?col,int?row)
int?tputs(char?*str,int?offset,int?(*putc)())
-------------------------------------------
調(diào)試函數(shù)

void?_init(trace()
void?_trace(char?*,...)
char?*_traceattr(mode)
void?traceon()
void?traceoff()

2002-08-31?09:29:00


四級(中級)
user4
97
6339224
984818
202193
qisiwole
0
-------------------------------------------

8.21.1布爾型權(quán)能
變量權(quán)能名稱初始化描寫敘述
auto_left_marginbwbwcub1從最后一列換行到第0列
auto_right_marginamam終端的邊界自己主動對齊
back_color_erasebceut屏幕以背景色清除
can_changeccccc終端能夠又一次定義現(xiàn)有的顏色
ceol_standout_glitch?xhpxs標準輸出不會被覆蓋所清除(hp)
col_addr_glitchxhpaYA對hpa/mhpa大寫字符而言僅僅作正向移動
cpi_changes_rescpixYF改變字符間距將會影響解析度
cr_cancels_micro_mode?crxm?YB使用cr關(guān)閉宏模式
eat_newline_glitchxenlxn在80列之后將忽略新行(Concept)
erase_overtrikeeoeo能夠用空格來刪除疊印
generic_typegngn通用行類型(如dialup,switch)
hard_copyhchc硬拷貝終端
hard_cursorchtsHC光標非常難看到
has_meta_keykmkm有一個元鍵(shift,設(shè)置奇偶校驗位)
has_print?_wheeldaisyYC打印機須要操作員來改變字符集
has_status_linehshs有一個額外的“狀態(tài)行”
hue_lightness_saturation?hlshl終端僅僅使用HLS顏色表示法(Tektronix)
insert_null_glitchinin插入模式,能識別空行
lpi_changes_reslpixYG改變行距將影響解析度
memory_abovedada顯示能夠保留在屏幕上方
memory_belowdbdb顯示能夠保留在屏幕下方
move_insert_modemirmi在插入模式下能夠安全地移動
move_standout_mode?msgrms在標準輸出模式下能夠安全地移動
needs_xon_xoffnxonnx不能填充,須要nxon/xoff
no_esc_ctl_cxsbxbBeehive信號(F1=Escape,F2=CtrlC)
non_rev_rmcupnrrmcNRsmcup不能反轉(zhuǎn)rmcup
no_pad_char?npcNP填充字符不存在
non_dest_scroll_region?ndscr?ND滾動區(qū)不可摧毀
over_strikeosos終端能夠疊印
prtr_silentmc5i5i打印機不向屏幕回送
row_addr_glitchxvpaYDvhp/mvpa大寫字母僅僅能作正向移動
semi_auto_right_margin?samYE打印在最后一列將導(dǎo)致cr
status_line_esc_okeslokes在狀態(tài)行上能夠使用Esc鍵
dest_tabs_magic_smso?xtxt制表符不可用(Teleray1061)
tilde_glitchhzhzHazel_tine;不能打印’s
transparent_underline?ulul下劃線字符疊印
xon_coffxonxo終端使用xon/xoff握手機制
8.21.2數(shù)值型權(quán)能
變量權(quán)能名稱初始值描寫敘述
bit_image_entwining?bitwinYo在SYSV中未作描寫
buffer_capacitybufszYa在打印前緩存的字節(jié)的數(shù)目
columnscolsco在一行中列的數(shù)目
dot_vert_spacingspinvYb在水平方向上點與點的距離,以每英寸多少點為單位
dot_horz_spacingspinhYc在垂直方向上針之間的距離,以每英寸多少針為單位
init_tabsitit每#個空格算一個制表符的位置
label_heightlhlh每一個標簽多少行
label_widthlwlw每一個標簽多少列
lineslinesli屏幕或頁面上行的數(shù)目
lines_of_memorylmlm假設(shè)>;lines則表示內(nèi)存中的行數(shù),0意味著可變
magic_cookie_glitch?xmcsgsmso或rmso所剩下的空白字符的數(shù)目
max_colorscolorsCo在屏幕上顏色的最大數(shù)目
max_micro_address?maddrYd在micro_._address中的最大值
max_micro_jumpmjumpYe在parm_._micro中的最大值
max_pairspairspa在屏幕上顏色對的最大數(shù)目
micro_col_sizemcsYf在宏模式中字符間距的大小
micro_line_sizemlsYg在宏模式中行距的大小
no_color_videoncvNC不能使用彩色的視頻屬性
number_of_pinsnpinsYh在打印頭中針的數(shù)目
num_labelsnlabNl屏幕上標簽的數(shù)量
output_res_char?orcYi水平解析度,以每行單元數(shù)為單位
output_res_lineorlYj垂直解析度,以每行單元數(shù)為單位
output_res_horz_inch?orhiYk水平解度,以每英寸單元數(shù)為單位
output_res_vert_inch?orviYl垂直解析度,以每英寸單元數(shù)為單位
padding_baud_rate?pbpb在須要cr/nl填充時最低的波特率
virtual_terminalvtvt虛擬終端號(Unix系統(tǒng))
width_status_linewslws狀態(tài)行的第n列

(以下的數(shù)值型權(quán)能是在SYSVterm結(jié)構(gòu)中定義的,但在man幫助中還沒有提供對它們的
描寫敘述。我們的解釋來自term結(jié)構(gòu)的頭文件。)
變量權(quán)能名稱初始值描寫敘述

bit_image_typebitypeYp位映像設(shè)備的類型
buttonsbtnsBT鼠標按鍵的數(shù)目
max_attributesmama終端能夠處理的最多的組合屬性
maximum_windows?wnumMW可定義窗體的最大數(shù)目
print?_ratecpsYm打印速率,以每秒字符數(shù)為單位
wide_char?_sizewidcsYn在雙寬度模式中字符間距的大小

8.21.3字符串型權(quán)能
變量權(quán)能名稱初始值描寫敘述

acs_char?sacscac圖形字符集對一def=vt100
alt_scancode_escscesaS8掃描碼模擬的還有一種換碼(默認值是VT100)
back_tab?cbtbt向后tab(p)
bellbelbl聲音信號(響鈴)(p)
bit_image_repeatbirepXy把位映像單元反復(fù)#1#2次(使用tparm)
bit_image_newlinebinelZz移動到位映像的下一行(使用tparm)
bit_image_carriage_return?bicr?Yv移動到同一行的開頭(使用tparm)
carriage_returncrcr回車(p*)
change_char?_pitch?cpiZA改變?yōu)槊坑⒋?個字符
change_line_pitchlpiZB改變?yōu)槊坑⒋?行
change_res_horzchrZC改變水平解度
change_res_vertcvrZD改變垂直解析度
change_scroll_region?csrcs把滾動區(qū)改變?yōu)閺?1行到#2行(VT100)(PG)
char?_paddingrmprP與ip類似,但它用在插入模式中
char?_set_namescsnmZy字符集名稱的列表
clear_all_tabstbcct清除全部的制表符停止(p)
clear_marginsmgcMC清除全部的頁邊
clear_screenclearcl清除屏幕和home光標(p*)
clr_bolel1cb清除到行首
clr_eolelce清除到行尾(P)
clr_eosedcd清除到顯示的末尾(p*)
code_set_initcsinci多個代碼集合的初始化序列
color_namescolornmYw#1號顏色的名稱
column_addresshpach設(shè)置光標列(PG)
command_char?acter?cmdchCC在原型中終端能夠設(shè)置的cmd字符
cursor_addresscupcm屏幕光標移動到#1行#2列(PG)
cursor_downcud1do下移一行
cursor_homehomehoHome光標(假設(shè)沒有環(huán)的話)
cursor_invisiblecivisvi使光標不可見
cursor_leftcub1le把光標向左移一個空格
cursor_mem_address?mrcupCM內(nèi)存相對的光標尋址
cursor_normalcnormve使光標以最普通的外形顯示(undovs/vi)
cursor_rightcuf1nd不具有破壞性的空白(光標向右移)
cursor_to_llllll最后一行,第一列(假設(shè)沒有環(huán)的話)
cursor_upcuu1upUpline(光標向上移)

cursor_visiblecvvisvs使光標可見
define_bit_image_region?defbiYx定義方形的位映像區(qū)(使用tparm)
define_char?defcZE定義字符集中的某個字符
delete_char?acterdch1dc刪除字符(p*)
delete_linedl1dl刪除行(p*)
device_typedevtdv顯示語言/代碼集支持
dis_status_linedslds關(guān)閉狀態(tài)行
display_pc_char?dispcS1顯示PC字符
down_half_linehdhd向下移動半行(向前換1/2行)
ena_acsenacseA使能還有一個字符集合
end_bit_image_region?endbi?Yy結(jié)束位映像區(qū)(使用tparm)
enter_alt_char?set_mode?smacs?as開始還有一個字符集(p)
enter_am_modesmamSA打開自己主動對齊特征
enter_blink_modeblink?mb打開字符閃爍效果
enter_bold_modeboldmd打開粗體(特別亮)模式
enter_ca_modesmcupti啟動使用環(huán)的程序的字符串
enter_delete_modesmdcdm刪除模式(輸入)
enter_dim_modedimmh打開半亮模式
enter_doublewide_mode?swidm?ZF使能雙倍寬度模式
enter_draft_qualitysdrfqZG設(shè)置草圖效果的打印方式
enter_insert_modesmirim插入模式(輸入)
enter_italics_modesitmZH使能斜體字模式
enter_leftward_mode?slmZI使能向左回車移動
enter_micro_modesmicmZJ使能宏移動功能
enter_near_letter_quality?snlqZK設(shè)置NLQ打印
enter_normal_quality?snrmqZL設(shè)置一般質(zhì)量的打印方式
enter_pc_char?set_mode?smpch?S2輸入PC字符顯示模式
enter_protected_mode?protmp打開保護模式
enter_reverse_mode?revmr打開反轉(zhuǎn)視頻模式
enter_scancode_mode?smscS4輸入PC掃描碼
enter_secure_mode?invismk打開空白模式(字符不可見)

2002-08-31?09:29:00


四級(中級)
user4
97
6339230
984818
202193
qisiwole
0
enter_shadow_mode?sshmZM使能陰影打印模式
enter_standout_mode?smso?so開始標準輸出模式
enter_subscript_mode?ssubm?ZN使能下標打印
enter_superscript_mode?ssupm?ZO使能上標打印
enter_underline_mode?smul?us開始下劃線模式
enter_upward_mode?sum?ZP使能向上回車移動
enter_xon_modesmxonSX打開xon/xoff握手機制
erase_char?sechec刪除#1個字符(PG)
exit_alt_char?set_mode?rmacs?ae終止可選的字符集(P)
exit_am_modermamRA關(guān)閉自己主動對齊方式
exit_attribute_mode?sgr0me關(guān)閉全部屬性
exit_ca_modermcupte終止使用環(huán)的程序的字符串
exit_delete_modermdced終止刪除模式
exit_doublewide_mode?rwidm?ZQ關(guān)閉雙倍寬度打印方式
exit_insert_modermirei結(jié)束插入模式
exit_italics_moderitmZR關(guān)閉斜體打印模式

exit_leftward_moderlmZS使能右向(普通的)回車移動
exit_micro_modermicmZT關(guān)閉宏移動能力
exit_pc_char?set_mode?rmpch?S3關(guān)閉PC字符顯示
exit_scancode_mode?rmsc?S5關(guān)閉PC掃描碼模式
exit_shadow_mode?rshmZU關(guān)閉陰影打印模式
exit_standout_mode?rmsose結(jié)束標準輸出模式
exit_subscript_mode?rsubmZV關(guān)掉下標打印方式
exit_superscript_mode?rsupm?ZW關(guān)掉上標打印方式
exit_underline_mode?rmulue結(jié)束下劃線模式
exit_upward_moderumZX打開向下(普通的)回車移動
exit_xon_modermxonRX關(guān)掉xon/xoff握手機制
flash_screenflashvb可視響鈴(不能移動光標)
form_feedffff硬拷貝終端頁面的換頁(p*)
from_status_linefslfs從狀態(tài)行返回
init_1stringis1i1終端初始化字符串
init_2stringis2i2終端初始化字符串
init_3stringis3i3終端初始化字符串
init_fileifif所包括的文件名
init_progiprogiP初始化程序的路徑名
initialize_colorinitcIc初始化顏色的定義
initialize_pairinitpIp初始化顏色對
insert_char?acterich1ic插入字符(P)
insert_lineil1al增加一個新的空白行(p*)
insert_paddingipip在插入的字符之后再插入填充字符(p*)
key_a1ka1K1小鍵盤左上方的鍵
key_a3ka3K3小鍵盤右上方的鍵
key_b2kb2K2小鍵盤中央的鍵
key_backspacekbskb由回退鍵所發(fā)送
key_begkbeg1開始鍵
key_btabkcbtkB向右一tab鍵
key_c1kc1K4小鍵盤左下角的鍵
key_c3kc3K5小鍵盤右下角的鍵
key_cancelkcan2取消鍵
key_catabktbcka由clear_all_tabs鍵發(fā)送
key_clearkclrkC由清除屏幕或者刪除鍵發(fā)送
key_closekclo3關(guān)閉鍵
key_commandkcmd4命令鍵
key_copykcpy5拷貝鍵
key_createkcrt6創(chuàng)建鍵
key_ctabkctabkt由clear_tab鍵發(fā)送
key_dckdch1kD由刪除字符鍵發(fā)送
key_dlkdl1kL由刪除行鍵發(fā)送
key_downkcud1kd由終端向下光標鍵發(fā)送
key_eickrmirkM在插入模式中由rmir或smir發(fā)送
key_endkend7結(jié)束鍵
key_enterkent8輸入/發(fā)送鍵
key_eolkelkE由clear_to_end_of_line鍵發(fā)送

key_eoskedkS由clear_to_end_of_screen鍵發(fā)送
key_exitkext9退出鍵
key_findkfnd0查找鍵
key_helpkhlp%1幫助鍵
key_homekhomekh由home鍵發(fā)送
key_ickich1kl由inschar?/enterinsmode鍵發(fā)送
key_ilkil1kA由插入行發(fā)送
key_leftkcub1kl由終端向左鍵發(fā)送
key_llkllkH由home_down鍵發(fā)送
key_markkmrk%2標記鍵
key_messagekmsg%3消息鍵
key_movekmov%4移動鍵
key_nextknxt%5下一個鍵
key_npageknpkN由下頁鍵發(fā)送
key_openkopn%6打開鍵
key_optionskopt%7選項鍵
key_ppagekppkP由前頁鍵發(fā)送
key_previouskprv%8前一鍵
key_print?kprt%9打印鍵
key_redokrdo%0redo鍵
key_refrencekref&amp;1引用鍵
key_refreshkrfr&amp;2刷新鍵
key_replacekrpl&amp;3替換鍵
key_restartkrst&amp;4重新啟動鍵
key_resumekres&amp;5恢復(fù)鍵
key_rightkcuf1kr由終端向右鍵發(fā)送
key_saveksav&amp;6保存鍵
key_sbegkBEG&amp;9按下開始鍵的同一時候按下shift鍵
key_scancelkCAN&amp;0按下取消鍵的同一時候按下shift鍵
key_scommandkCMD*1按下命令鍵的同一時候按下shift鍵
key_scopykCPY*2按下拷貝鍵的同一時候按下shift鍵
key_screatekCRT*3按下創(chuàng)建鍵的同一時候按下shift鍵
key_sdckDC*4按下刪除字符鍵的同一時候按下shift鍵
key_sdlkDL*5按下刪除行鍵的同一時候按下shift鍵
key_selectkslt*6選擇鍵
key_sendkEND*7按下結(jié)束鍵的同一時候按下shift鍵
key_seolkEOL*8按下行尾鍵的同一時候按下shift鍵
key_sexitkEXT*9按下退出鍵的同一時候按下shift鍵
key_sfkindkF由前滾/下滾鍵發(fā)送
key_sfindkFND*0按下查找鍵的同一時候按下shift鍵
key_shelpkHLP#1按下幫助鍵的同一時候按下shift鍵
key_shomekHOM#2按下Home鍵的同一時候按下shift鍵
key_sickIC#3按下插入字符鍵的同一時候按下shift鍵
key_sleftkLFT#4按下向左鍵的同一時候按下shift鍵
key_smessagekMSG%a按下消息鍵的同一時候按下shift鍵
key_smovekMOV%b按下移動鍵的同一時候按下shift鍵
key_snextkNXT%c按下向后鍵的同一時候按下shift鍵

key_soptionskOPT%d按下選項鍵的同一時候按下shift鍵
key_spreviouskPRV%e按下向前鍵的同一時候按下shift鍵
key_sprint?kPRT%f按下打印鍵的同一時候按下shift鍵
key_srkrikR由后滾/下滾鍵發(fā)送
key_sredokRDO%g按下redo鍵的同一時候按下shift鍵
key_sreplacekRPL%h按下替換鍵的同一時候按下shift鍵
key_srightkRIT%l按下向右鍵的同一時候按下shift鍵
key_srsumekRES%j按下恢復(fù)鍵的同一時候按下shift鍵
key_ssavekSAV!1按下保存鍵的同一時候按下shift鍵
key_ssuspendkSPD!2按下中斷鍵的同一時候按下shift鍵
key_sundokUND!3按下取消鍵的同一時候按下shift鍵
key_stabkhtskT由set_tab鍵發(fā)送
key_suspendkspd&amp;7中斷鍵
key_undokund&amp;8取消鍵
key_upkcuulku由終端的向上鍵發(fā)送
keypad_localrmkxke不處于“小鍵盤發(fā)送”方式之中
keypad_xmitsmkxks把終端置為“小鍵盤發(fā)送”方式
lab_f0lf0l0假設(shè)不是f0的話,則為功能鍵f0的標簽

2002-08-31?09:30:00


一級(0基礎(chǔ))
user1
100
6339448
984818
200455
linuxman2002
0
up

2002-08-31?09:46:00


四級(中級)
user4
97
6339495
984818
202193
qisiwole
0
lab_f1lf1l1假設(shè)不是f1的話,則為功能鍵f1

的標簽
lab_f2lf2l2假設(shè)不是f2的話,則為功能鍵f2

的標簽
lab_f3lf3l3假設(shè)不是f3的話,則為功能鍵f3

的標簽
lab_f4lf4l4假設(shè)不是f4的話,則為功能鍵f4

的標簽
lab_f5lf5l5假設(shè)不是f5的話,則為功能鍵f5

的標簽
lab_f6lf6l6假設(shè)不是f5的話,則為功能鍵f6

的標簽
lab_f7lf7l7假設(shè)不是f7的話,則為功能鍵f7

的標簽
lab_f8lf8l8假設(shè)不是f8的話,則為功能鍵f8

的標簽
lab_f9lf9l9假設(shè)不是f9的話,則為功能鍵f9

的標簽
lab_f10lf10la假設(shè)不是f10的話,則為功能鍵

f10的標簽
label_onsmlnLO打開軟標簽
label_offrmlnLF關(guān)閉軟標簽
meta_offrmmmo關(guān)閉“元模式”
meta_onsmmmm打開“元模式”(8位)
micro_column_address?mhpa?ZY近似宏調(diào)整的列—地址,
micro_downmcud1ZZ近似宏調(diào)整的光標—向下
micro_leftmcutb1Za近似宏調(diào)整的光標—向左
micro_rightmcuf1Zb近似宏調(diào)整的光標—向右
micro_row_address?mvpaZc近似宏調(diào)整的行—地址
micro_upmcuu1Zd近似宏調(diào)整的光標—向上
newlinenelnw新行(行為近似于cr后跟lf)
order_of_pinsporderZe匹配軟件以及打印頭中的針
orig_colorsococ重置全部的顏色對
orig_pairopop把默認的顏色對設(shè)置為原始的那


pad_char?padpc填充字符(非空)
parm_dchdchDC刪除#1字符(PG*)
parm_delete_linedlDL刪除#1行(PG*)
parm_down_cursor?cudDO把光標向下移#1行(PG*)
parm_down_micro?mcudZf近似宏調(diào)用的cub

parm_ichichIC插入#1個空白符號(PG*)
parm_indexindnSF向上滾動#1行(PG)
parm_insert_lineilAL增加#1個新的空白行(PG*)
parm_left_cursorcubLE把光標向左移#1個空格(PG)
parm_left_micromcubZg近似宏調(diào)整中的cub
parm_right_cursor?cufRl把光標向右移#1個空格(PG*)
parm_right_micromcufZh近似宏調(diào)整中的cuf
parm_rindexrinSR回滾#1行(PG)
parm_up_cursorcuuUP把光標上移#1行(PG*)
parm_up_micromcuuZi近似宏調(diào)整中的cuu
pkey_keypfkeypk把功能鍵#1定義為字符#2的類型
pkey_localpflocpl把功能鍵#1定義為運行字符串#2
pkey_xmitpfxpx把功能鍵#1定義為發(fā)送字符串#2
pkey_plabpfxlxl把功能鍵#1定義為發(fā)送#2,并顯

示#3
plab_normplnpn編程標簽#1,以顯示字符串#2
print?_screenmc0ps打印屏幕內(nèi)容
prtr_nonmc5ppO打開打印機,打印#1個字節(jié)
prtr_offmc4pf關(guān)閉打印機
prtr_onmc5po打開打印機
repeat_char?reprp把字符#1反復(fù)#2次(PG*)
req_for_inputrfiRF輸入請求
reset_1stringrs1r1把終端全然置為sane方式
reset_2stringrs2r2把終端全然置為sane方式
reset_3stringrs3r3把終端全然置為sane方式
reset_filerfrf包括重置字符串的文件名
restore_cursorrcrc把光標置為上一個屏幕上的位置
row_addressvpacv垂直絕對位置(設(shè)置行)(PG)
save_cursorscsc保存光標位置(P)
scancode_escapescescS7為了掃描碼模擬按下Esc鍵
scroll_forwardindsf把文本向上滾動(P)
scroll_reverserisr把文本向下滾動(P)
select_char?_setscsZj選擇字符集
set0_des_seqs0dss0切換到代碼集0(EUC集0,ASCII)
set1_des_seqs1dss1切換到代碼集1
set2_des_seqs2dss2切換到代碼集2
set3_des_seqs3dss3切換到代碼集3
set_a_backgroundsetabAB使用ANSI設(shè)置背景顏色
set_a_foregroundsetafAF使用ANSI設(shè)置前景顏色
set_attributessgrsa定義視頻屬性(PG9)
set_backgroundsetbSb設(shè)置當前背景顏色
set_bottom_marginsmgbZk設(shè)置當前行的底部邊界
set_bottom_margin_parm?smgbp?ZI從bottomset_color_band的#1行

或#2行設(shè)置底行
setcolorYz改變#1號色帶顏色
set_color_pairscpsp設(shè)置當前顏色對
set_foregroundsetfSf設(shè)置當前前景色
set_left_marginsmglML設(shè)置當前行的左邊界
set_left_margin_parm?smglpZm在#1行(#2行)設(shè)置左(右)邊界

set_lr_marginsmglrML設(shè)置左右邊界
set_page_lengthslinesYZ把頁的長度設(shè)置為#1行(使用

tparm)
set_right_marginsmgrMR把右邊界設(shè)置為當前列
set_right_margin_parm?smgrp?Zn把右邊界設(shè)置為#1列
set_tabhtsst在當前列的全部行設(shè)置制表符
set_tb_marginsmgtbMT設(shè)置上下邊界
set_top_marginsmgtZo把上邊界設(shè)置為當前行
set_top_margin_parm?smgtp?Zp把上邊界設(shè)置為#1行
set_WINDOW?windwi當前窗體是從#1行到#2行,從#3

列到#4列
start_bit_imagesbimZq開始打印位映像圖形
start_char?_set_def?scsdZr開始定義字符集
stop_bit_imagerbimZs結(jié)束打印位映像圖形
stop_char?_set_def?rcsdZt結(jié)束定義字符集
subscript_char?acters?subcs?Zu下標字符的列表
superscript_char?acters?supcs?Zv?上標字符的列表
tabhtta跳轉(zhuǎn)到以下8個空格硬件的制表

符位置
these_cause_crdocrZw這些字符導(dǎo)致CR
to_status_linetslts跳到狀態(tài)行,第1列
underline_char?ucuc給某字符劃下劃線,并移過它
up_half_linehuhu上移半行(反轉(zhuǎn)1/2行)
xoff_char?actercoffcXFXON字符
xon_char?acterxoncXNXOFF字符

(以下的字符串權(quán)能是在SYSVr終端結(jié)構(gòu)中定義的,但在man幫助信息中還

未作描寫敘述,對
它們的解釋是從終端結(jié)構(gòu)頭文件里得到的。)

label_formatflnLf??
set_clocksclkSC設(shè)置時鐘
display_clockdclkDK顯示時鐘
remove_clockrmclkRC刪除時鐘
create_WINDOW?cwinCW把窗體#1定義為從#2行,#3列到#4

行,#5列
goto_WINDOW?wingoWG跳到窗體#1
hanguphupHU掛起電話
dial_phonedialDI撥電話號碼#1
quick_dialqdialQD撥電話號碼#1,但不做進度檢查
tonetoneTO選擇接觸聲調(diào)撥叫
pulsepulsePU選擇脈沖撥叫
flash_hookhookfh閃光切換分支
fixed_pausepausePA暫停2~3秒
wait_tonewaitWA等待撥叫聲音
user0u0u0用戶字符串#0
user1u1u1用戶字符串#1
user2u2u2用戶字符串#2
user3u3u3用戶字符串#3
user4u4u4用戶字符串#4
user5u5u5用戶字符串#5
user6u6u6用戶字符串#6
user7u7u7用戶字符串#7
user8u8u8用戶字符串#8
user9u9u9用戶字符串#9
get_mousegetmGmsurses?應(yīng)獲得按鈕事件
key_mousekmousKm??
mouse_infominfoMi鼠標狀態(tài)信息
pc_term_optionspctrmS6PC終端選項
req_mouse_posreqmpRQ請求鼠標位置報告
zero_motionzeromZx后繼字符沒有移動

參考函數(shù)文件:
http://dl2.csdn.net/down4/20070911/11132900783.h

Linux curses庫使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91精品国产综合久久久久久 | 久久激情小视频 | 精品欧美一区二区三区四区 | 日本女同在线 | 99re国产| 日日干天天 | 成人av网站免费观看 | 91婷婷射| 国产精品久久久久久久四虎电影 | 国产综合在线视频 | 亚洲精品第五页中文字幕 | 一区二区中文字幕 | 国产精品爽爽va在线观看网站 | 天海翼视频在线 | 97久久精品一区二区三区观看 | 成人久久一区二区 | 黄色视频a级毛片 | 日韩三级中文字幕 | 国产人妻人伦精品潘金莲 | 天天影院成人免费观看 | 欧美日韩中文视频 | 另类婷婷| 欧美精品一区二区精品久久 | 午夜精品视频在线观看 | 日本精品一二区 | 亚洲国产中文字幕 | 国产精品1区2区3区 一级电影免费 | 九九99九九在线精品视频 | 亚洲成人一区二区 | 亚洲精品久久久 | 免费一区 | 一区二区三区国产在线 | 亚洲免费在线视频 | 午夜在线免费视频 | 日本黄视色视频在线观看 | 无遮挡啪啪成人免费网站 | 狠狠的撸2015最新版狠狠的撸2015最新版 | 国产91一区二区三区 | 欧美日韩在线播放一区二区三区 | 欧美电影免费观看 | 亚洲综合国产 |