分享
 
 
 

scounix下curses编程函数说明

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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驱动程序队列中。

</Content>

</Issue>

<Replys>

<Reply>

<PostUserNickName></PostUserNickName>

<rank>四级(中级)</rank>

<ranknum>user4</ranknum>

<credit>97</credit>

<ReplyID>6339214</ReplyID>

<TopicID>984818</TopicID>

<PostUserId>202193</PostUserId>

<PostUserName>qisiwole</PostUserName>

<Point>0</Point>

<Content>------------------------------

终端属性

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直到

[1] [2] [3] [4] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有