Linux下curses常用函式
阿新 • • 發佈:2019-01-06
一.全域性變數
1.字元顯示
WINDOW* newwin(nlines,ncols,begy,begx) begy和begx是視窗左上角的座標。nlines是個整數, 存放著行的數目,而ncols,存放著列的數目。
任何的引數配置為零,則開啟的視窗的大小將和螢幕的大小相同。
他所做的工作和overlay(.)和overwrite(.)相似,但是該函式還能夠讓程式員選擇拷貝視窗的哪個區域。
顯示某個字元或字串
------------------------------------------------
------------------------------------------------
*****chstr是指向ch type陣列的一個指標。*****
------------------------------------------------
這些函式將在當前游標的左邊插入str(字元的個數不能超過一行的限度)。
2.方框和直線
這兩個函式配置視窗或螢幕的背景字元和屬性。ch的屬性將和視窗中任何非空格的字元的屬性進行OR操作。背景是視窗的一部分,將不會隨著滾動、輸入或輸出而改變
假如使能了keypad(.) 在使用者按下某個功能鍵時,getch()將返回一個程式碼,該程式碼在.h頭文件中被 定義為KEY_*巨集。假如使用者按下Esc鍵(他可能會是某個組合功能鍵的第
一個鍵),則ncurses將啟動一個否則就返回功能鍵的值。(假如需要的話,能夠使用notimeout()來關閉第二個定時器
這些函式的作用相當於對getch()進行一系列的呼叫,直到接收到一個新行。 行中的字元存放在str中(所以,在呼叫getstr(.)之前,不要忘記給字元指標分配記憶體)。假如打開了回送,則字串將被顯示出來(使用noecho()能夠關閉回送),而使用者的刪除字元連同其他特別字元也會被解釋出來
這些函式從螢幕或視窗返回一個字元,因為返回值的型別是chty pe, 所以還包括了屬性資訊。這一資訊能夠使用常量A_*從字元中擴充套件得到。
3.輸出選項
bf配置為TRUE,則對視窗win的每一次改變都將導致物理螢幕的一次重新整理。 這將使程式的效能降低,所以預設的值是FALSE。(注:此函式尚未實現)
假如bf值為TRUE,則下一次呼叫wrefresh(win)時將會清除螢幕, 並完全地把他重新畫一遍(就像使用者在編輯器vi中按下Ctrl+L相同)。
預設的行為是,ncurses讓物理游標停留在上次重新整理視窗時的同一個位置上。 不使用游標的程式能夠把leaveok(.)配置為TRUE,這樣一般能夠節省游標移動所需要的時間。此外,ncurses將試圖使終端游標不可見。
這兩個函式控制新行的平移。使用nl()能夠開啟平移,這樣在回車時就會 平移到新的一行,在輸出時就會走行。而nonl()能夠把平移關上。 關上平移之後,ncurses做游標移動操作時速度就會快一些。
4.輸入選項
bf為TRUE,函式在等待輸入時會使能使用者終端的鍵盤上的小鍵盤。 ncurses將返回一個鍵程式碼,該程式碼在.h頭文件中被定義為KEY_*巨集,他是針對小鍵盤上的功能鍵和方向鍵的。對於PC鍵盤來說,這一點是很有幫助的,因為這樣使用者就能夠使能數字鍵和游標鍵。
bf為TRUE,從getch()返回的鍵程式碼將是完整的8位(最高位將不會被去掉)
cbreak()和nocbreak()將把終端的CBREAK模式開啟或關閉。假如CBREAK開啟則程式就能夠立即使用讀取的輸入資訊。假如CBREAK關閉,則輸入將被快取起來,直到產生新的一行(注意:crmode()和nocrmode()只是為了提供向上相容性,不要使用他們)
這兩個函式將把RAW模式開啟或關閉。RAW和CBREAK相同, 他們的區別在於RAW模式不處理特別字元。
假如把echo()配置為TRUE,則使用者所敲的輸入將會回送並顯示出來, 而noecho()則對此保持沉默。
此函式和cbreak()相似,但他要延遲t秒鐘。
終端將被配置為非阻塞模式。假如沒有任何輸入則getch()將返回ERR, 否則假如配置為FALSE,則getch()將等待,直到使用者按下某個鍵為止。
筆者提倡大家使用這兩個函式,而不要使用halfdelay(t)和nodelay(win,bf)。getch()的結果取決於t的值。假如t是正數,則讀操作將被阻塞t毫秒; 假如t為零,則不發生任何阻塞;假如t是負數,則程式將阻塞,直到有輸入為止。
假如fd是-1,則不檢查超前鍵擊,否則ncurses將使用文件描述符fd來進行這些檢查
當bf為TRUE時使能該函式。在終端上按下任意中斷鍵(quit、break.)時, 任何的輸出將會重新整理到tty驅動程式佇列中。
三.終端屬性
此函式返回終端的速度,以bps為單位。
此函式返回當前刪除的字元。
此函式返回當前殺死的字元。
假如終端具備插入/刪除字元的能力,則has_rc()將返回TRUE,假如終端具備插入/刪除行的能力,則has_il()將返回TRUE,否則這兩個函式將返回ERR。(注:尚未實現)
refersh()將把視窗映像拷貝到終端,而wrefresh(win)將把視窗映像拷貝到win,並使他看起來象原來的樣子。
wnoutrefresh(win)將會只拷貝到視窗win,這意味著在終端上將不進行任何輸出,但是虛擬螢幕實際上看起來象程式員所希望的那樣。doupdate()將輸出到終端上。程式能夠改變許多視窗,對每個視窗都呼叫一次 wnoutrefresh(win),然後再呼叫一次doupdate()來更新物理螢幕。
假如在往螢幕上輸出新內容時需要清除一些行或整個螢幕,能夠使用這兩 個函式。(可能這些行已被破壞了或由於其他的原因。)
通過使用這兩個函式,使用者能夠檢查自從上次呼叫refresh()以來,
第line行或視窗win是否已被按掀過。
五.視訊屬性和顏色
ncurses定義了八種顏色,在帶有彩色支援的終端上使用者能夠使用這些顏色。 首先,呼叫start_color()初始化顏色資料結構,然後使用has_colors()檢查終端權能。
start_color()將初始化COLORS和COLOR_PAIR。 前者是終端所支援的最多的顏色數目,而後者是使用者能夠定義的色彩對的最大數目。兩個屬效能夠使用OR操作組合起來。“COLORPAIRS_1COLORS_1”
此函式獲取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,把他試驗出來
六.游標和螢幕座標
move()將移動游標,而wmove(win)則從視窗win中移動游標。對輸入/輸出函式來說,還定義了其他的一些巨集,在呼叫特定函式之前,這些巨集能夠移動游標。
這個函式將把游標置為可見或不可見,假如終端有這個功能
getyx(.)將返回當前游標位置。(注意:這是個巨集)
假如win是個子視窗,getparyx(.)將把該視窗對應父視窗的座標儲存在y和x,否則y和x都將為-1。(注:此函式尚未實現)
這些函式把視窗win的開始座標和大小座標存放在y和x中。
getsyx(.)把虛擬螢幕游標存放在y和x中,而setsyx(.)則配置這個座標。
假如y和x是-1, 使用者呼叫getsyx(.)將會配置leaveok。
七.滾動
當游標在螢幕的右下角並且輸入了一個字元(或新的一行)時,如bf為TRUE則視窗win中的文字將上滾一行。假如bf為FALSE,則滑鼠留在原來的位置上。當滾動特徵開啟時,使用下面的函式能夠滾動視窗中的內容。
(注意:當用戶在視窗的最後一行輸入一個新行時,也應該發生相應的滾動操作, 所以在使用scrollok(.)時要十分小心, 否則可能會得到出乎意料的結果。)
此函式將使視窗向上滾動一行(資料結構中的行也向上滾動)。
這兩個函式將使螢幕或視窗win向上向下滾動,滾動方向取決於整數n的值:假如n是正數,則視窗向上滾動n行;假如n是負數,則視窗向下滾動n行
這兩個函式配置一個軟滾動區。
小鍵盤
軟標籤
(注:以上函式尚未實現。)
Termcap模擬
八.變數權能
1.布林型變數權能名稱初始值描述
2.數值型變數權能名稱初始值描述
(下面的數值型權能是在SYSVterm結構中定義的,但在man幫助中還沒有提供對他們的描述。我們的解釋來自term結構的頭文件。)
3.字串型變數權能名稱初始值描述
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
1.字元顯示
WINDOW* initscr()
SCREEN* newterm(char *type, FILE *outfd, FILE *infd)
初始化函式,對使用者訪問的每個終端都應該呼叫newterm,type是終端的名稱,包括在$TERM中(如ansi, xterm, vt100等等) 。 SCREEN* set_term(SCREEN* new)
使用者能夠轉換當前終端。任何的函式都將在配置的當前終端上起作用。 int endwin()
退出程式之前,關閉任何開啟的視窗。之後還能夠呼叫refresh()。 int isendwin() if endwin()->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 他返回一個位於origwin視窗中間的子視窗。假如使用者改變這兩個視窗 (origwin或那個新視窗)中的一個,則這種改變將會同時反映到這兩個視窗上。在下一次呼叫refresh()之前,先要呼叫touchwin(origwin) 。begx和begy是相對於螢幕的,而不是相對於origwin的。WINDOW *subwin(origwin,nlines, ncols, begy,begx)
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行將被刪除, 餘下的行將上升,頂替他們的位置。 int insstr(str)
int insnstr(str, n)
int winsstr(win, str)
int winsnstr(win, str, n)
int mvinsstr(y, 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則插入整個字串)。 這些函式將在當前游標的左邊插入str(字元的個數不能超過一行的限度)。
int delch()
int wdelch(win)
int mvdelch(y, x)
int mvwdelch(win, y, x)
刪除游標左邊的字元,並把游標右邊餘下的字元向左移動一個位置。 y和x是在進行刪除操作以前要把游標移動到的座標。 int deleteln()
int wdeleteln(win)
刪除游標下面的一行,並把下面任何的其他行都向上移動一個位置。 此外,螢幕最底下的一行將被清除。 2.方框和直線
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 vline(ch,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()
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.)
3.輸出選項
int idlok(win, bf)
void fdcok(win, bf)
這兩個函式為視窗使能或關閉終端的insert/delete特徵(idlok(.)針對一行,而fdcok(.)則針對字元)。(注: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做游標移動操作時速度就會快一些。
4.輸入選項
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 intrflush(win, bf)
當bf為TRUE時使能該函式。在終端上按下任意中斷鍵(quit、break.)時, 任何的輸出將會重新整理到tty驅動程式佇列中。
三.終端屬性
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,則這些行被按掀過了,否則就還未被按掀過(改變或未改變)。
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()
八.變數權能
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握手機制
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在雙寬度模式中字元間距的大小
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開啟空白模式(字元不可見)
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_cancelkcan