📄 00000001.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>寄信人: <A HREF="mailto:guest.bbs@hgluo.hust.edu.cn">guest.bbs@hgluo.hust.edu.cn</A> <BR>标 题: ◇ UNIX 萤幕导向程式的发展利器 - curses (一) <BR>发信站: 华南理工大学 BBS木棉站 <BR>日 期: Thu Feb 20 14:15:37 1997 <BR> <BR> UNIX 萤幕导向程式的发展利器 - curses <BR> <BR> 校园网路策进会 <BR> 会长 林建宏 <BR> <BR> <BR> ■ 前言 <BR> <BR> 相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, <BR> 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式 <BR> 的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也 <BR> 许他能在 PC 上用 Turbo C 轻易地写出类似的程式, 然而, 但当他将相同 <BR> 的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. <BR> 其实, 原因很简单, 他使用的函式库可能在 UNIX 上是没有定义的. 有些 <BR> 在 Turbo-C 上被广泛使用的一些函式, 可能在 UNIX 上是不被定义的. <BR> <BR> 为了因应网路上各式各样的终端机形态 (terminal), UNIX 上特别发展出 <BR> 一套函式库, 专门用来处理 UNIX 上游标移动及萤幕的显示. 这就是本篇 <BR> 文章要为您介绍的 - curses.h 函式库. 利用这个函式库, 您也可以写出 <BR> 像 elm 般利用方向键来移动光棒位置的程式. (CCCA 近来所提供的线上选 <BR> 课程式, 及程式服务界面, 即是笔者利用 curses 发展而成的 ) <BR> <BR> <BR> ■ curses 的历史与版本 <BR> <BR> cureses 最早是由柏克莱大学的 Bill Joy 及 Ken Arnold 所发展出来的. <BR> 当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设 <BR> 计的. 因此, 利用 curses 发展出来的程式将和您所使用的终端机无关. <BR> 也就是说, 您不必担心您的程式因为换了一部终端机而无法使用. 这对程 <BR> 式设计师而言, 尤其是网路上程式的撰写, 是件相当重要的一件事. <BR> curses之所以能对上百种以上的终端机工作, 是因为它将所有终端机的资 <BR> 料, 存放在一个叫 termcap 的资料库, ( 而在第二版的 System V 系统中 <BR> , 新版的 curses 以 terminfo 取代原来的 termcap). 有了这些记录, 程 <BR> 式就能够知道遇到哪一种终端机时, 须送什麽字元才能移动游标的位置, <BR> 送什麽字元才能清除整个萤幕清除. (* 注一) <BR> <BR> 另外, 本文的介绍 以 System V 的 curses 版本为主. <BR> <BR> <BR> ■ 如何在您的程式使用 curses ? <BR> <BR> 在您的 C 程式的档头将 <curses.h> include 进来.当您引进 curses.h <BR> 这个函式库後, 系统会自动将 <stdio.h> 和 <unctl.h>一并 include 进 <BR> 来.另外, 在 System V 版本中, <terminfo.h> 这个函式库也将一并 <BR> include进来. <BR> <BR> #include <curses.h> <BR> <BR> main() <BR> { <BR> : : <BR> : : <BR> } <BR> <BR> 当然, 您的系统内必须放有 curses.h 这个函式库. <BR> <BR> <BR> ■ 如何编译(compile) <BR> <BR> 当您编辑好您的程式, 在 UNIX 提示符号下键入: <BR> <BR> % /usr/5bin/cc [file.c] -lcurses <BR> ^^^^^^^ <BR> 引进 curses.h 这个 library <BR> <BR> 或 % /usr/5bin/cc [file.c] -lcurses -ltermlib <BR> <BR> (*注二) <BR> <BR> <BR> ■ 如何开始我的第一个 curses 程式? <BR> <BR> 在开始使用 curses 的一切命令之前, 您必须先利用 initscr()这个函式 <BR> 来开启 curses 模式. <BR> <BR> 相对的, 在结束 curses 模式前 ( 通常在您结束程式前 ) 也必须以 <BR> endwin()来关闭 curses 模式. <BR> <BR> #include <curses.h> <BR> <BR> main() <BR> { <BR> initscr(); <BR> : : <BR> : : <BR> : : <BR> endwin(); <BR> } <BR> <BR> 这是一般 curses 程式标准的模式. <BR> <BR> 此外, 您可以就您程式所须, 而做不同的设定. 当然, 您可以不做设定,而 <BR> 只是呼叫 initscr(). <BR> <BR> 您可以自己写一个函式来存放所有您所须要的设定. 平常使用时, 只要呼 <BR> 叫这个函式即可启动 curses 并完成一切设定. <BR> <BR> 下面的例子, 即是笔者将平常较常用的一些设定放在一个叫 initial()的函 <BR> 式内. <BR> <BR> void initial() <BR> { <BR> initscr(); <BR> cbreak(); <BR> nonl(); <BR> noecho(); <BR> intrflush(stdscr,FALSE); <BR> keypad(stdscr,TRUE); <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -