Операционная система UNIX. Руководство программиста



         

Пример программы, работающей с terminfo


Программа termhl - это простой пример использования подпрограмм terminfo. Она является вариантом программы highlight (см. раздел Примеры программ, работающих с curses), в котором не используются возможности curses более высокого уровня. Программу termhl можно использовать в качестве фильтра, вставляющего последовательности символов, необходимые для включения режимов подсветки и подчеркивания и для отключения всех атрибутов.

/* Версия программы highlight уровня terminfo */

#include <curses.h> #include <term.h>

int ulmode = 0; /* Режим подчеркивания */

main (argc, argv) int argc; char **argv; { FILE *fd; int c, c2; int outch();

if (argc > 2) { fprintf (stderr, "Откуда: termhl [file]\n"); exit(1); }

if (argc == 2) { fd = fopen (argv [1], "r"); if (fd == NULL) { perror (argv [1]); exit(2); } } else { fd = stdin; } setupterm ((char*) 0, 1, (int*) 0);

for (;;) { c = getc (fd); if (c == EOF) break (); if (c == '\') { c2 = getc (fd); switch (c2) { case 'B': tputs (enter_bold_mode, 1, outch); continue; case 'U': tputs (enter_underline_mode, 1, outch); ulmode = 1; continue; case 'N': tputs (exit_attribute_mode, 1, outch); ulmode = 0; continue; } putch (c); putch (c2); } else putch (c); }

fclose (fd); fflush (stdout); resetterm (); exit (0); }

/* Функция putch подобна putchar, */ /* но проверяет необходимость подчеркивания */

putch (c) int c; { outch (c); if (ulmode && underline_char) { outch ('\b'); tputs (underlihe_char, 1, outch); } }

/* outchar передается tputs в качестве параметра */ /* как функция, которую нужно вызывать вместо putchar */

outch (c) int c; { putchar (c); }

Познакомимся поближе с подпрограммами terminfo на примере использования функции tputs (cap, affcnt, outc) в этой программе. tputs() добавляет символы-заполнители. Некоторые терминалы имеют возможность задерживать вывод. Их описания в базе данных terminfo, быть может, содержат цепочки, подобные $<20>, что означает задержку на 20 миллисекунд (см. ниже раздел Указание характеристик терминала). tputs генерирует достаточное для задержки на это время количество символов-заполнителей.




Содержание  Назад  Вперед