1. 程式人生 > >curses程式設計(一)初識

curses程式設計(一)初識

  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. 示例
    功能:從鍵盤上讀取的字元顯示在螢幕上, 並且可以上下左右方向鍵來控制遊標的位置, 當按下 [ESC] 後, 程式即結束.有點類似與全屏編輯程式的雛形.
    原始碼
     1test.cpp:
    #include <curses.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define StartX 1
    #define StartY 1
    void initial();
    int main()
    {
     int x = StartX;
     int y = StartY;
     
     int ch;
     char title[100];
     initial();
     box(stdscr,'|','-');//將以 | 及 - 圍成一個方框.
     //box(stdscr,'X','X');//
     attron(A_REVERSE);//開啟反白模式
     sprintf(title,"curses program;windows[%d,%d]", COLS, LINES);
     //mvaddstr(0,20,"curses program");//移動到(0,20)位置列印"curses program"
     mvaddstr(0,20,title);//移動到(0,20)位置列印title
     attroff(A_REVERSE);//關閉反白模式
     move(x,y);//移動座標到(1,1)
     //在呼叫initscr前,COLS,LINES的值都是0
     const int WIDTH = COLS-2;
     const int HIGHT = LINES-2;
     
     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=1;
        break;
          case '/t':
        x+=7;
        break;
          case KEY_BACKSPACE:
           x = --x?x:1;
        mvaddch(y,x,' ');//用SPACE填充以前的字元在螢幕上的位置,等於在螢幕上刪除
        break;
       case 13:
        ++y;
        x = 1;
        break;
          case 27:
        endwin(); //關閉curses 模式, 或是暫時的跳離 curses 模式
        exit(1);
          default:
        addch(ch);//顯示當前輸入的字元
        x++;
        break;
        }
        x = (x>=WIDTH)?WIDTH:x;
        y = (y>=HIGHT)?HIGHT:y;
        sprintf(title,"[%d,%d]", x, y);
        mvaddstr(0,0,title);
        move(y,x);
     }while(1);
    }
    void initial()
    {
     initscr();//開啟curses模式
     cbreak();//開啟cbreak模式,除了 DELETE 或 CTRL 等仍被視為特殊控制字元外一切輸入的字元將立刻被一一讀取
     nonl();//用來決定當輸入資料時, 按下 RETURN 鍵是否被對應為 NEWLINE 字元
     noecho();//echo() and noecho(): 此函式用來控制從鍵盤輸入字元時是否將字元顯示在終端機上
     intrflush(stdscr,false);
     keypad(stdscr,true);//當開啟 keypad 後, 可以使用鍵盤上的一些特殊字元, 如上下左右>等方向鍵
     refresh();//將做清除螢幕的工作
    }
    編譯命令:g++ -o 1test 1test.cpp -lcurses

    說明:
    move(y,x): 將遊標移動至 x,y 的位置.
    getyx(win,y,x): 得到目前遊標的位置. (請注意! 是 y,x 而不是&y,&x )
    clear() and erase(): 將整個螢幕清除. (請注意配合refresh() 使用)
    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);
    getch(): 從鍵盤讀取一個字元. (注意! 傳回的是整數值)
    getstr(): 從鍵盤讀取一串字元.
    scanw(format,&arg1,&arg2...): 如同 scanf, 從鍵盤讀取一串字元.
    beep(): 發出一聲嗶聲.
    box(win,ch1,ch2): 自動畫方框
    螢幕顯示字元的屬性:
    為了使輸出的螢幕畫面更為生動美麗, 我們常須要在螢幕上做一些如反白, 閃爍等變化. 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); /* 關閉高亮度模式, 恢復正常模式 */
    方向鍵:
    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 
  6. curses庫函式說明 

    -------------------------------------------------------- 
    WINDDW*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


    一級(初級)
    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後繼字元沒有移動

    英文curses資料:http://www.linux.org/docs/ldp/howto/NCURSES-Programming-HOWTO/index.html