调用move()函数来移动光标的位置的时候,新的位置将基于COLS和LINES的值。由于这些参数是根据终端性能自动设置的,因此程序可以在任何类型的终端上运行而不会导致运行结果有明显的差异。
curses中使用的终端类型由TERM环境变量决定,我们可以通过命令echo $TERM查看,也可以通过命令来进行重新设置或者可以在象 .profile和.cshrc的文件中进行定义然
后在登录的时候自动读入。如果登录shell为Bshell或者Kshell,则TERM设置如下:TERM=terminaltype;export TERM
如果登录的是C shell,TERM的设置为:
setenv TERM terminaltype
在上面的例子中terminaltype是正在使用的终端的名字,一般的终端类型为vt100,它不是在terminfo中定义就是在termcap中定义。比如,对于ANSI终端来说,TERM将被设置成“ansi”。如果使用的是terminfo数据库,使用curses包的程序将自动引用
/usr/lib/terminfo/a/ansi文件来找到必须的性能参数。如果使用的是termcap数据库,程序将从/etc/termcap文件中获取终端的相关信息。
我们可以指定一个自己的终端数据库来替代terminfo和termcap。做到这一点只需要分别简单的修改环境变量TERMINFO和TERMCAP就可以了。这对于那些想在终端信息描述库中增加新的终端描述信息或者修改已存在的描述信息而又不想真正改变数据库本身的人是非常有用的。
TERMINFO的值通常设置成包含终端描述信息的文件的路径名,这个终端描述信息的格式与正常的terminfo的描述信息格式相同。然后通过命令tic编译这个文件。
TERMCAP的值通常设置为包含终端描述信息而且格式与文件/etc/termcap相同的文件的路径名,与TERMINFO不同,这个文件不需要进行另外的编译就可以直接使用。如果需要额外的终端描述信息,那么唯一需要的仅是与程序使用的终端描述信息数据库对应的环境变量。这两个数据库我们都可以通过一些curses包之外的比较低级的函数进行直接访问,比如tgetent(),tgetnum()等等。:多数情况下我们并不鼓励这么做,因为这样编写的程序不具有curses的移植性。
关于terminfo、termcap和低层函数的使用我们在“terminfo数据库”章节中会有详细的讨论和讲解,另外你也可以通过帮助文件获取更多的信息。
1.2.4编译curses程序
如果程序中使用了curses包,那么在程序编译的时候它必须链接程序中引用的库。在cc编译命令中通过使用–l 选项来指定编译所必须的库。通常用来编译curses程序所用的命令如下:
cc –o outputfile file1.c file2.c … [-l X] –lcurses (SCO UNIX)
或者
gcc –o outputfile file1.c file2.c … [-l X] –lcurses (Linux)
-lcurses选项将在编译的时候链接curses包。之所以所有的程序都必须链接curses包是因为它包含了所有的初始化操作,基本的输入和输出操作,以及更新和中断操作。[-l X]指明了一个可选的额外的库,主要包括panel,menu,form或者tam。如果我们需要一个以上的