Программа highlight
Эта программа иллюстрирует использование подпрограммы attrset(). Программа highlight читает текстовый файл и использует находящиеся в нем управляющие цепочки для переключения атрибутов отображения. \U означает подчеркивание, \B - повышенную яркость, \N восстанавливает подразумеваемые значения атрибутов.
Обратите внимание на первый вызов подпрограммы scrollok(), о которой мы еще не упоминали [см. curses(3X)]. Эта подпрограмма позволяет роллировать экран терминала, если его размер меньше размера файла. Когда программа пытается вывести что-либо ниже нижнего края экрана, scrollok() автоматически роллирует на одну строку вверх и вызывает refresh().
/* highlight: программа, использующая последовательности \U, \B, \N для выделения текста на экране, позволяя подчеркивать их или отображать с повышенной яркостью */
#include <curses.h>
main (argc, argv) int argc; char **argv; { FILE *fd; int c, c2; void exit (), perror ();
if (argc != 2) { fprintf (stderr, "usage: %s file\n", argv [0]); exit (1); }
fd = fopen (argv [1], "r"); if (fd == NULL) { perror (argv [1]); exit (2); }
initscr (); scrollok (stdscr, TRUE); nonl ();
while ((c = getc (fd)) != EOF) { if (c == '\\') { c2 = getc (fd); switch (c2) { case 'B': attrset (A_BOLD); continue; case 'U': attrset (A_UNDERLINE); continue; case 'N': attrset (0); continue; } addch (c); addch (c2); } else addch (c); }
fclose (fd); refresh (); endwin (); exit (0); }