curses开发包的man_page( 二 )


如果设置了环境变量TERMINFO,则所有使用curses()的程序在标准位置查找终端定义的信息前,都要先查找本地的终端定义信息.比如,如果TERM设为wyse150,则编译的终端定义位于:
HTML.awk: part.03: 1917: Trying to use .nf indisplay, haventstarted.
fi 1>&2 /usr/lib/terminfo/w/wyse150
(注:此处我有些看不懂,反复读了原文有N遍,怀疑是不是其manual_page页的问题,总之,如有问题,请指正,译者注)(w由wyse150的首字母拷贝而来,以免创建一个大目录),而如果TERMINFO设为$HOME/myterms,curses()首先查找$HOME/myterms/w/wyse150,如果失败,再查找/usr/lib/terminfo/w/wyse150 .这样做对于开发实验性的定义或者在/usr/lib/terminfo的写权限禁止时很有用.
整型变量LINES和COLS在curses.h中定义,而且由initscr()例程根据屏幕大小填写.常量TRUE值为1,FALSE值为0.
curses例程还定义了WINDOW *变量curscr,用在某些低级操作如清除或重写屏幕的操作中.但它只能在很少的几个例程中使用 。
国际化功能

对附加字符集,保存一个字符所需的字节数和列数是现场指定的.(LC_CTYPE类型)
你可以在字符种类表中指定它(指LC_CTYPE,译者注).使其在编辑时完全适于字符级操作.
但对于格式屏幕,在其上随意移动字符却并不太好.
覆盖字符的例程(如addch())工作于屏幕级别.用一个需要不同列数的字符覆盖另一个字符会导致产生奇数个数的列,这些列用背景字符填充.
插入字符的例程(如insch())工作于字符级别(即在字符的边界).一个新字符在当前字符的前面插入,无论光标当前指向字符的哪一列.在插入前,光标移动到字符的第一列.
删除字符的例程(如delch())同样工作于字符级别.光标当前指向的字符被删除,无论光标当前指向字符的哪一列.在删除前,光标移动到字符的第一列.
你不能把一个多列字符放到一行的最后一列上.如果你企图这样做,最后一列被设为背景字符.这样的操作也会产生由背景字符填充的奇数列.
在做了覆盖一个窗口的边缘的字符的操作后,会发生窗口的遮挡或覆盖.这果如果产生有奇数列,将与字符操作级别同样处理 。
光标可放于窗口的任意位置.在插入或删除操作前,它先移动到一个多列字符的第一列.
例程与参数名称

许多curses()例程拥有两个或更多版本:
o前缀为p的例程需要一个pad参数.
o名字中有w的例程通常需要一个窗口参数或一个宽字符参数.如果w在一个例程名字中出现了两次,则该例程往往需要一个窗口参数和一个宽字符参数.
o不需要pad或window参数的例程一般使用stdscr.
o前缀为mv的需要一个(x,y)坐标以在操作前移动到该坐标处.这些mv例程在调用其他例程前隐含有一个对move()的调用,坐标y指(窗口的)行,x指列.左上角坐标是(0,0),而不是(1,1).
o前缀为mvw的例程接受一个窗口参数和一对(x,y)坐标,窗口参数总是出现在坐标之前.
在任何一种情形下,win是受影响的窗口,pad是受影响的光条,win和pad总是指向WINDOW类型的指针,设定选项的例程需要一个布尔型的标志bf,它有TRUE和FALSE两种状态;该标志总是布尔型的.变量ch和attrs总是chtype类型.类型WINDOW,SCREEN,bool和chtype在curses.h中定义.类型TERMINAL在term.h中定义.其他所有的参数都是整型.许多例程可以通过将其作为嵌入宏的方式的加入优化.在编译时要使用:
cc ... -DPERFORMANCE 来明确指定.
例程名索引

下面的表格列出了每个curses例程名字和手册中对其详细描述的页面名
-------------------------------------------
curses Routine Name Manual Page Name
-------------------------------------------
addch curs_addch(S)
addchnstr curs_addchstr(S)
addchstr curs_addchstr(S)
addnstr curs_addstr(S)
addnwstr curs_addwstr(S)
addstr curs_addstr(S)

推荐阅读