亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux curses庫使用

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

?

?

1. curses 的歷史與版本號:

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

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

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

?

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

在您的 C 程式的檔頭將 <cureses.h>include 進來.當您引進 curses.h 這個函式庫後, 系統會自己主動將 <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 模式.

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

#include? < curses.h >

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

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

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

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


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

  • initscr(): initscr() 是一般 curses 程式必須先呼叫的函數, 一但這個函數被呼叫之後, 系統將依據終端機的形態并啟動 curses 模式.
  • endwin(): curses 通常以呼叫 endwin() 來結束程式. endwin() 可用來關閉curses 模式, 或是臨時的跳離 curses 模式. 假設您在程式中需要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 鍵是否被相應為 NEWLINE 字元 ( 如 /n ). 而輸出資料時, NEWLINE 字元是否被相應為 RETURN 和 LINDFEED系統預設是開啟的.
  • echo() and noecho(): 此函式用來控制從鍵盤輸入字元時是否將字元顯示在終端機上.系統預設是開啟的.
  • intrflush(win,bf): 呼叫 intrflush 時須傳入兩個值, win 為一 WINDOW 型態指標, 通常傳入標準輸出入螢幕 stdscr. bf 為 TRUE 或 FALSE. 當 bf 為 true 時, 當輸入中斷字元 ( 如 break) 時, 中斷的反應將較為高速.但可能會造成螢幕的錯亂.?
  • keypad(win,bf): 呼叫 keypad 時須傳入兩個值, win 為一 WINDOW 型態指標, 通常傳入標準輸出入螢幕 stdscr. bf 為 TRUE 或 FALSE. 當開啟 keypad 後, 能夠使用鍵盤上的一些特殊字元, 如上下左右>等方向鍵, curses 會將這些特殊字元轉換成 curses.h 內定義的一些特殊鍵. 這些定義的特殊鍵通常以 KEY_ 開頭.
  • refresh(): refresh() 為 curses 最常呼叫的一個函式. curses 為了使螢幕輸出入達最佳化, 當您呼叫螢幕輸出函式企圖改變螢幕上的畫面時, curses 并不會立馬對螢幕做改變, 而是等到refresh() 呼叫後, 才將剛才所做的變動一次完畢. 其馀的資料將維持不變. 以盡可能送最少的字元至螢幕上. 降低螢幕重繪的時間.假設是 initscr() 後第一次呼叫 refresh(), curses 將做清除螢幕的工作.?

?

5. 游標的控制:

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

?

6. 有關清除螢幕的函式:

clear() and erase(): 將整個螢幕清除. (請注意配合refresh() 使用)

?

7. 怎樣在螢幕上顯示字元:

  • 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() , 以一定的格式輸出至螢幕.
  • mvprintw(y,x,format,str): 在(x,y) 位置上做 printw 的工作. 相當於呼叫move(y,x);printw(format,str);

?

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

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

例:

int ?ch;
char ?string1[ 80 ];? /* ?請注意!?不可宣告為?char?*string1;? */
char ?string2[ 80 ];
echo();?
/* ?開啟?echo?模式,?使輸入立馬顯示在螢幕上? */
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 即代表方向鍵的 " ↑ ". 但, 假設您想使用curses.h 所為您定義的這些特殊鍵的話, 您就必須將 keypad 設定為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 (* 注三).

一并為您列出其它經常使用的一些特殊字元:

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

??

10. 怎樣改變螢幕顯示字元的屬性:

??? 為了使輸出的螢幕畫面更為生動漂亮, 我們常需要在螢幕上做一些如反白, 閃爍等變化. curses 定義了一些特殊的屬性, 透過這些定義, 我們也能夠在 curses 程式控制螢幕的輸出變化.

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

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

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

??? 當使用 attron() 開啟某一種特殊屬性模式後, 接下來在螢幕的輸出都會以該種屬性出現. 直到您呼叫 attroff() 將此模式關閉. 請注意, 當您欲 attron() 開啟還有一種屬性時, 請記得利用attroff()先關閉原來的屬性, 或直接以attrset(A_NORMAL) 將全部特殊屬性關閉.否則, curses 會將兩種屬性做重疊處理.

例:

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

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

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

attroff(A_UNDERLINE); /* 關閉加底線模式, 恢復正常模式 */

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

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

attroff(A_REVERSE); /* 關閉反白模式, 恢復正常模式 */

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

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

attroff(A_BLINK); /* 關閉閃爍模式, 恢復正常模式 */

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

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

attroff(A_BOLD); /* 關閉高亮度模式, 恢復正常模式 */

?

11. 其它一些函數:

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

??

12. 應用完整例:

??? 以下所舉的樣例, 即全然利用剛剛所介紹的含式來完畢.這個程式可將從鍵盤上讀取的字元顯示在螢幕上, 而且能夠上下左右方向鍵來控制游標的位置, 當按下 [ESC] 後, 程式即結束. 您有沒有發現, 這不就是一個簡單全螢幕編輯器的雛形嗎?

實例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庫函數說明 ??

--------------------------------------------------------?
INDDW*curscr:當前屏幕
WINDOW?*stdscr:標準屏幕
int?LINES:終端上的行數
int?COLS:終端上的列數
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)
對用戶訪問的每一個終端都應該調用newterm
t?y?p?e是終端的名稱,包括在$?T?E?R?M中(如ansi,?xterm,?vt100等等)
SCREEN*set_term(SCREEN?*new)
用戶能夠切換當前終端。全部的函數都將在設置的當前終端上起作用。
int?endwin()
退出程序之前,關閉全部打開的窗體。
之后還能夠調用refresh(),
int?isendwin()
ifendwin()->;refresh(),TRUE,|FALSE。
-----------------------
WINDOW?*newwin(nlines,ncols,begy,begx)
begy和begx是窗體左上角的坐標。nlines是一個整數,
存放著行的數目,而ncols,存放著列的數目。
全部的參數設置為零,則打開的窗體的大小將與屏幕的大小同樣。
int?delwin(win)
它刪除窗體win。假設存在子窗體,曾經先要刪除這些子窗體。這個函數將
釋放win所占領的全部資源。在調用endwin()之前用戶應該刪除全部的窗體
int?mvwin(win,by,bx)
它將把窗體移到坐標(by,bx)處。假設把窗體移出屏幕邊界的范圍,則ERR
WINDOW?*subwin(origwin,nlines,ncols,begy,begx)
它返回一個位于origwin窗體中間的子窗體。假設用戶改變這兩個窗體
(origwin或者那個新窗體)中的一個,則這樣的改變將會同一時候反映到這兩
個窗體上。在下一次調用refresh()之前,先要調用touchwin(origwin)
begx和begy是相對于屏幕的,而不是相對于origwin的。
WINDOW?*derwin(origwin,nlines,ncols,begy,begx)
此函數與subwin(.)同樣,僅僅只是這里的begx和begy是相對于origwin的,而不是相對于屏幕的。
mvderwin(win,y,x)
此函數將把win移到父窗體內。(注意:此函數尚未實現)。
WINDOW?*dupwin(win)
此函數復制窗體win。
int?overlay(win1,win2)
將把win1中的全部文本復制到win2中,可是不拷貝空格。
int?overwrite(win1,win2)
也是做文本拷貝工作的函數,但它拷貝空格。
int?copywin(win1,win2,sminrow,smincol,dminrow,
dmincol,dmaxrow,dmaxcol,overlay)
它所做的工作與overlay(.)和overwrite(.)類似,可是該函數還能夠讓程序猿選擇拷貝窗體的哪個區域。
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數組的一個指針。*****
---------------------------
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)
這些函數把字符ch插入到光標的左邊,
光標后面的全部字符則向右移動一個位置。
在這一行最右端的字符可能會丟失。
---------------------------
int?insert()
int?winsert(win)
在當前行的上方插入一個空行(最底下的一行將被丟失)。
---------------------------
int?insdelin(n)
int?winsdelln(win,n)
假設n為正數,則這些函數將在適當的窗體的當前光標上方插入n行
(這樣一來最底下的n行將丟失);假設n為負數,則光標以下的n行將被刪除,
余下的行將上升,頂替它們的位置。這些函數將在當前光標的左邊插入str
(字符的個數不能超過一行的限度)。在光標右邊的字符將右移,假設到達行
尾,則字符將丟失,光標位置不變。y和x是指在插入str曾經先要把光標移動
到的坐標,n是要插入的字符的數目(假設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)
這些函數將在當前光標的左邊插入str(字符的個數不能超過一行的限度)。
在光標右邊的字符將右移,假設到達行尾,則字符將丟失,光標位置不變。
y和x是指在插入str曾經先要把光標移動到的坐標,n是要插入的字符的數目
(假設n為0則插入整個字符串)。
---------------------------
int?delch()
int?wdelch(win)
int?mvdelch(y,x)
int?mvwdelch(win,y,x)
刪除光標左邊的字符,并把光標右邊余下的字符向左移動一個位置。
y和x是在進行刪除操作曾經要把光標移動到的坐標。
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)
這些函數在窗體的邊界(或者win的邊界)畫上方框。在以下的表格中,
讀者將能夠看到字符,以及它們的默認值。當用零去調用box(.)時將
會用到這些默認值。在以下的圖中讀者能夠看到方框中字符的位置
-------------
int?vline9ch,n)
int?wvline(win,ch,n)
int?hline(ch,n)
int?whline(win,ch,n)
這些函數將從當前光標位置開始畫一條水平線或者垂直線。
ch是畫線所使用的字符,n是要畫的字符的個數,光標位置并不移動。
--------------------------
void?bkgdset(ch)
void?wbkgdset(win,ch)
這兩個函數設置窗體或者屏幕的背景字符和屬性。ch的屬性將和窗體中
全部非空格的字符的屬性進行OR操作。背景是窗體的一部分,
將不會隨著滾動、輸入或輸出而改變
int?bkgd(ch)
int?wbkgd(win,ch)
---------------------------------
int?getch()
int?wgetch()
int?mvgetch(y,x)
int?mvwgetch(win,y,x)
getch()將從終端讀取輸入,讀取的方式取決于是否設置了延遲模式。
假設設置了延遲模式,則getch()將一直等待,直到用戶按下一個鍵為止;
假設沒有設置延遲模式,則它將返回輸入緩沖區中的數據,假設輸入緩沖區
為空,則它將返回ERR。mvgetch(.)和mvwgetch(.)首先把光標移動到位置
(y,x)上。名稱中有w字母的函數將從與窗體win相關的終端讀取輸入,
getch()和mvgetch(.)則從屏幕相關的終端讀取。假設使能了keypad(.)
在用戶按下某個功能鍵時,getch()將返回一個代碼,該代碼在.h頭文件里被
定義為KEY_*宏。假設用戶按下Esc鍵(它可能會是某個組合功能鍵的第
一個鍵),則ncurses將啟動一個否則就返回功能鍵的值。(假設須要的話,
能夠使用notimeout()來關閉第二個定時器
int?ungetch()
這個函數將把字符ch送回輸入緩沖區。
---------------------
int?getstr(str)
int?wgetstr(win,str)
int?mvgetstr(y,x,str)
int?mvwgetstr(win,y,x,str)
int?wgetnstr(win,str,n)
這些函數的作用相當于對getch()進行一系列的調用,直到接收到一個新行。
行中的字符存放在str中(所以,在調用getstr(.)之前,不要忘記給字符指針
分配內存)。假設打開了回送,則字符串將被顯示出來(使用noecho()能夠關
閉回送)而用戶的刪除字符以及其它特殊字符也會被解釋出來
-----------------
chty?peinch(0
chty?pewinch(win)
chty?pemvinch(y,x)
chty?pemvwinch(win,y,x)
這些函數從屏幕或窗體返回一個字符,由于返回值的類型是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)
這兩個函數為窗體使能或者關閉終端的insert/delete特征(idlok(.)針對一
行,而idcok(.)則針對字符)。(注:idcok(.)尚未實現)
void?immedok(win,bf)
bf設置為TRUE,則對窗體win的每一次改變都將導致物理屏幕的一次刷新。
這將使程序的性能減少,所以默認的值是FALSE。(注:此函數尚未實現)
int?clearok(win,bf)
假設bf值為TRUE,則下一次調用wrefresh(win)時將會清除屏幕,
并全然地把它又一次畫一遍(就像用戶在編輯器vi中按下Ctrl+L一樣)。
int?leaveok(win,bf)
默認的行為是,ncurses讓物理光標停留在上次刷新窗體時的同一個位置上。
不使用光標的程序能夠把leaveok(.)設置為TRUE,這樣一般能夠節省光標
移動所須要的時間。此外,ncurses將試圖使終端光標不可見。
int?nl()
int?nonl()
這兩個函數控制新行的平移。使用nl()能夠打開平移,這樣在回車時就會
平移到新的一行,在輸出時就會走行。而nonl()能夠把平移關上。
關上平移之后,ncurses做光標移動操作時速度就會快一些。
------------------------------
輸入選項

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





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

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

此函數獲取color的顏色成份r,g和b。
首先,函數CheckColor調用start_color()初始化顏色,假設當前終端有彩色的話,
則函數has_colors()將返回TRUE。我們檢查了這一點以后,調用init_pair(.)
把前景色和背景色組合起來,再調用wattrset(.)為特定的窗體設置這些顏色對。
此外,假設我們使用的是黑白終端,還能夠單獨使用wattrset(.)來設置屬性。
假設要在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中移動光標。對
輸入/輸出函數來說,還定義了其它的一些宏,在調用特定函數之前,
這些宏能夠移動光標。

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

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

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

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

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)
這些函數是與attron(attr)、attrset(attr)和attroft(attr)相相應的,
但它們尚未實現。
------------------------------
int?beep()
int?flash()
char?*unctrl(chty?pec)
char?*keyname(int?c)
int?filter()
(注:以上函數尚未實現。)
void?use_env(bf)
int?putwin(WINDOW?*win,FILE*filep)
(注:以上函數尚未實現。)
WINDOW?*getwin(FILE*filep)
(注:以上函數尚未實現。)
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)
---------------------------------
屏幕轉儲

int?scr_dump(char?*filename)
(注:此函數尚未實現。)
int?scr_restore(char?*filename)
(注:此函數尚未實現。)
int?scr_init(char?*filename)
(注:此函數尚未實現。)
int?scr_set(char?*filename)
(注:此函數尚未實現。)
-----------------------------------
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)())
-------------------------------------------
調試函數

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

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

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

8.21.3字符串型權能
變量權能名稱初始值描寫敘述

acs_char?sacscac圖形字符集對一def=vt100
alt_scancode_escscesaS8掃描碼模擬的還有一種換碼(默認值是VT100)
back_tab?cbtbt向后tab(p)
bellbelbl聲音信號(響鈴)(p)
bit_image_repeatbirepXy把位映像單元反復#1#2次(使用tparm)
bit_image_newlinebinelZz移動到位映像的下一行(使用tparm)
bit_image_carriage_return?bicr?Yv移動到同一行的開頭(使用tparm)
carriage_returncrcr回車(p*)
change_char?_pitch?cpiZA改變為每英寸#個字符
change_line_pitchlpiZB改變為每英寸#行
change_res_horzchrZC改變水平解度
change_res_vertcvrZD改變垂直解析度
change_scroll_region?csrcs把滾動區改變為從#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設置光標列(PG)
command_char?acter?cmdchCC在原型中終端能夠設置的cmd字符
cursor_addresscupcm屏幕光標移動到#1行#2列(PG)
cursor_downcud1do下移一行
cursor_homehomehoHome光標(假設沒有環的話)
cursor_invisiblecivisvi使光標不可見
cursor_leftcub1le把光標向左移一個空格
cursor_mem_address?mrcupCM內存相對的光標尋址
cursor_normalcnormve使光標以最普通的外形顯示(undovs/vi)
cursor_rightcuf1nd不具有破壞性的空白(光標向右移)
cursor_to_llllll最后一行,第一列(假設沒有環的話)
cursor_upcuu1upUpline(光標向上移)

cursor_visiblecvvisvs使光標可見
define_bit_image_region?defbiYx定義方形的位映像區(使用tparm)
define_char?defcZE定義字符集中的某個字符
delete_char?acterdch1dc刪除字符(p*)
delete_linedl1dl刪除行(p*)
device_typedevtdv顯示語言/代碼集支持
dis_status_linedslds關閉狀態行
display_pc_char?dispcS1顯示PC字符
down_half_linehdhd向下移動半行(向前換1/2行)
ena_acsenacseA使能還有一個字符集合
end_bit_image_region?endbi?Yy結束位映像區(使用tparm)
enter_alt_char?set_mode?smacs?as開始還有一個字符集(p)
enter_am_modesmamSA打開自己主動對齊特征
enter_blink_modeblink?mb打開字符閃爍效果
enter_bold_modeboldmd打開粗體(特別亮)模式
enter_ca_modesmcupti啟動使用環的程序的字符串
enter_delete_modesmdcdm刪除模式(輸入)
enter_dim_modedimmh打開半亮模式
enter_doublewide_mode?swidm?ZF使能雙倍寬度模式
enter_draft_qualitysdrfqZG設置草圖效果的打印方式
enter_insert_modesmirim插入模式(輸入)
enter_italics_modesitmZH使能斜體字模式
enter_leftward_mode?slmZI使能向左回車移動
enter_micro_modesmicmZJ使能宏移動功能
enter_near_letter_quality?snlqZK設置NLQ打印
enter_normal_quality?snrmqZL設置一般質量的打印方式
enter_pc_char?set_mode?smpch?S2輸入PC字符顯示模式
enter_protected_mode?protmp打開保護模式
enter_reverse_mode?revmr打開反轉視頻模式
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關閉自己主動對齊方式
exit_attribute_mode?sgr0me關閉全部屬性
exit_ca_modermcupte終止使用環的程序的字符串
exit_delete_modermdced終止刪除模式
exit_doublewide_mode?rwidm?ZQ關閉雙倍寬度打印方式
exit_insert_modermirei結束插入模式
exit_italics_moderitmZR關閉斜體打印模式

exit_leftward_moderlmZS使能右向(普通的)回車移動
exit_micro_modermicmZT關閉宏移動能力
exit_pc_char?set_mode?rmpch?S3關閉PC字符顯示
exit_scancode_mode?rmsc?S5關閉PC掃描碼模式
exit_shadow_mode?rshmZU關閉陰影打印模式
exit_standout_mode?rmsose結束標準輸出模式
exit_subscript_mode?rsubmZV關掉下標打印方式
exit_superscript_mode?rsupm?ZW關掉上標打印方式
exit_underline_mode?rmulue結束下劃線模式
exit_upward_moderumZX打開向下(普通的)回車移動
exit_xon_modermxonRX關掉xon/xoff握手機制
flash_screenflashvb可視響鈴(不能移動光標)
form_feedffff硬拷貝終端頁面的換頁(p*)
from_status_linefslfs從狀態行返回
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由回退鍵所發送
key_begkbeg1開始鍵
key_btabkcbtkB向右一tab鍵
key_c1kc1K4小鍵盤左下角的鍵
key_c3kc3K5小鍵盤右下角的鍵
key_cancelkcan2取消鍵
key_catabktbcka由clear_all_tabs鍵發送
key_clearkclrkC由清除屏幕或者刪除鍵發送
key_closekclo3關閉鍵
key_commandkcmd4命令鍵
key_copykcpy5拷貝鍵
key_createkcrt6創建鍵
key_ctabkctabkt由clear_tab鍵發送
key_dckdch1kD由刪除字符鍵發送
key_dlkdl1kL由刪除行鍵發送
key_downkcud1kd由終端向下光標鍵發送
key_eickrmirkM在插入模式中由rmir或smir發送
key_endkend7結束鍵
key_enterkent8輸入/發送鍵
key_eolkelkE由clear_to_end_of_line鍵發送

key_eoskedkS由clear_to_end_of_screen鍵發送
key_exitkext9退出鍵
key_findkfnd0查找鍵
key_helpkhlp%1幫助鍵
key_homekhomekh由home鍵發送
key_ickich1kl由inschar?/enterinsmode鍵發送
key_ilkil1kA由插入行發送
key_leftkcub1kl由終端向左鍵發送
key_llkllkH由home_down鍵發送
key_markkmrk%2標記鍵
key_messagekmsg%3消息鍵
key_movekmov%4移動鍵
key_nextknxt%5下一個鍵
key_npageknpkN由下頁鍵發送
key_openkopn%6打開鍵
key_optionskopt%7選項鍵
key_ppagekppkP由前頁鍵發送
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恢復鍵
key_rightkcuf1kr由終端向右鍵發送
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按下創建鍵的同一時候按下shift鍵
key_sdckDC*4按下刪除字符鍵的同一時候按下shift鍵
key_sdlkDL*5按下刪除行鍵的同一時候按下shift鍵
key_selectkslt*6選擇鍵
key_sendkEND*7按下結束鍵的同一時候按下shift鍵
key_seolkEOL*8按下行尾鍵的同一時候按下shift鍵
key_sexitkEXT*9按下退出鍵的同一時候按下shift鍵
key_sfkindkF由前滾/下滾鍵發送
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由后滾/下滾鍵發送
key_sredokRDO%g按下redo鍵的同一時候按下shift鍵
key_sreplacekRPL%h按下替換鍵的同一時候按下shift鍵
key_srightkRIT%l按下向右鍵的同一時候按下shift鍵
key_srsumekRES%j按下恢復鍵的同一時候按下shift鍵
key_ssavekSAV!1按下保存鍵的同一時候按下shift鍵
key_ssuspendkSPD!2按下中斷鍵的同一時候按下shift鍵
key_sundokUND!3按下取消鍵的同一時候按下shift鍵
key_stabkhtskT由set_tab鍵發送
key_suspendkspd&amp;7中斷鍵
key_undokund&amp;8取消鍵
key_upkcuulku由終端的向上鍵發送
keypad_localrmkxke不處于“小鍵盤發送”方式之中
keypad_xmitsmkxks把終端置為“小鍵盤發送”方式
lab_f0lf0l0假設不是f0的話,則為功能鍵f0的標簽

2002-08-31?09:30:00


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

2002-08-31?09:46:00


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

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

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

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

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

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

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

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

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

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

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


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

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

示#3
plab_normplnpn編程標簽#1,以顯示字符串#2
print?_screenmc0ps打印屏幕內容
prtr_nonmc5ppO打開打印機,打印#1個字節
prtr_offmc4pf關閉打印機
prtr_onmc5po打開打印機
repeat_char?reprp把字符#1反復#2次(PG*)
req_for_inputrfiRF輸入請求
reset_1stringrs1r1把終端全然置為sane方式
reset_2stringrs2r2把終端全然置為sane方式
reset_3stringrs3r3把終端全然置為sane方式
reset_filerfrf包括重置字符串的文件名
restore_cursorrcrc把光標置為上一個屏幕上的位置
row_addressvpacv垂直絕對位置(設置行)(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設置背景顏色
set_a_foregroundsetafAF使用ANSI設置前景顏色
set_attributessgrsa定義視頻屬性(PG9)
set_backgroundsetbSb設置當前背景顏色
set_bottom_marginsmgbZk設置當前行的底部邊界
set_bottom_margin_parm?smgbp?ZI從bottomset_color_band的#1行

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

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

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

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

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

(以下的字符串權能是在SYSVr終端結構中定義的,但在man幫助信息中還

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

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

行,#5列
goto_WINDOW?wingoWG跳到窗體#1
hanguphupHU掛起電話
dial_phonedialDI撥電話號碼#1
quick_dialqdialQD撥電話號碼#1,但不做進度檢查
tonetoneTO選擇接觸聲調撥叫
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?應獲得按鈕事件
key_mousekmousKm??
mouse_infominfoMi鼠標狀態信息
pc_term_optionspctrmS6PC終端選項
req_mouse_posreqmpRQ請求鼠標位置報告
zero_motionzeromZx后繼字符沒有移動

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

Linux curses庫使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美午夜视频一区二区三区 | 91九色在线视频 | 欧美成人高清免费大片观看 | 国产伦码精品一区二区三区 | 日日摸夜夜添夜夜添毛片 | 国产成人看片免费视频观看 | 免费a级毛片出奶水 | 国产精品亚洲一区二区三区 | 日本一级毛片视频网站 | 999久久精品国产 | 国产精品视频一区二区猎奇 | 国产欧美日韩亚洲精品区2345 | 欧美日韩亚洲精品一区二区三区 | 伊人色在线 | 四虎在线最新永久免费 | 一区二区国产精品 | 天天天天天操 | 国产伦精品一区二区三区视频小说 | 亚洲激情小视频 | 一级毛片一级毛片a毛片欧美 | 国产精品免费福利 | 特级aa一级欧美毛片 | 亚洲国产成人私人影院 | 久久私人影院 | 久久久久青草大香线综合精品 | 欧美一级成人毛片影院 | 国产永久一区二区三区 | 九九热这里都是精品 | 福利院肉动漫视频在线观看 | 国产精品综合一区二区 | 亚洲精品播放 | 国产99在线视频 | 国产自制一区 | 日日日视频 | 久草热在线观看 | 国产免费久久精品99久久 | 精品久久久久久久一区二区伦理 | 黄色在线观看网站 | 首页 动漫 亚洲 欧美 日韩 | 亚洲毛片免费在线观看 | 九九热在线精品 |