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

       

curses содержит подпрограммы для записи


curses содержит подпрограммы для записи в stdscr, похожие на подпрограммы из stdio(3S) для записи в файл. Они позволяют:

  • Выводить одиночный символ - addch().

  • Выводить цепочку символов - addstr().

  • Форматировать строку из нескольких входных аргументов - printw().

  • Перемещать курсор, возможно, с одновременным выводом символа (символов) - move(), mvaddch(), mvaddstr(), mvprintw().

  • Очистить весь экран или его часть - clear(), erase(), crltoeol(), clrtobot().

Далее следуют описания и примеры применения этих подпрограмм.
Предостережение
Библиотека curses располагает своим собственным набором подпрограмм ввода/вывода. Если Вы работаете с curses, Вам не следует использовать для ввода/вывода других подпрограмм или обращений к системе, например, read(2) или write(2); в противном случае при выполнении подпрограммы могут возникнуть нежелательные эффекты.
addch( )



СИНТАКСИС
#include <curses.h>
int addch (ch) chtype ch;


ОПИСАНИЕ
  addch() записывает один символ в stdscr.

Этот символ имеет тип chtype, который определяется в <curses.h>. chtype содержит данные и атрибуты (об атрибутах см. ниже в разделе Атрибуты вывода).
Работая с переменными этого типа, объявляйте их принадлежащими именно к типу chtype, а не к тому основному типу (скажем, short), через который объявляется chtype
в <curses.h>. Это обеспечит совместимость с будущими версиями.
addch() производит некоторую перекодировку. Так, она преобразует:

  • символ перевода строки в последовательность, обеспечивающую очистку до конца строки и переход к новой строке; символ табуляции в соответствующее количество пробелов;
  • другие управляющие символы в их запись в нотации ^X.

addch() обычно возвращает OK, за исключением случая вывода символа в правом нижнем углу нероллируемого окна, когда возвращается ERR.
addch() является макросом.

ПРИМЕР
  #include <curses.h>
main () { initscr (); addch ('a'); refresh (); endwin (); }

Эта программа выводит следующее:

См. также программу show в разделе Примеры программ, работающих с curses.


addstr( )

СИНТАКСИС
  #include <curses.h>
int addstr (str) char *str;


ОПИСАНИЕ
  addstr() выводит цепочку символов в stdscr.

addstr() вызывает addch() для вывода каждого символа.
addstr() производит ту же перекодировку, что и addch().
addstr() возвращает OK при успешном завершении и ERR
при ошибке.
addstr() является макросом.

ПРИМЕР
  См. примеры программ во Введении.

printw( )

СИНТАКСИС
  #include <curses.h>
int printw(fmt [,arg...]) char *fmt;


ОПИСАНИЕ
  printw() осуществляет форматированный вывод в stdscr.

Подобно printf(3S), printw() получает формат и переменное количество аргументов.
Подобно addstr(), printw() обращается к addch() для вывода каждого символа.
printw() возвращает OK при успешном завершении и ERR
при ошибке.

ПРИМЕР
  #include <curses.h>
main () { char *title = "Не указано"; int no = 0; . . . initscr (); . . . printw ("%s отсутствует на складе.", title); printw ("Попросите кассира заказать %d для Вас.\n", no); refresh (); endwin (); }

Эта программа выводит следующее:

move( )

СИНТАКСИС
  #include <curses.h>
int move (y, x); int y, x;


ОПИСАНИЕ
  move() устанавливает курсор в позицию "строка y, колонка x" окна stdscr.

Обратите внимание, что первым аргументом move() является координата y, а вторым - x. Координаты левого верхнего угла stdscr равны (0, 0), а правого нижнего - (LINES-1, COLS-1). Подробнее см. в разделе Подпрограммы initscr(), refresh() и endwin().
Перемещение курсора можно производить одновременно с выводом данных, а именно:

  • mvaddch (y, x, ch) перемещает курсор и выводит символ;
  • mvaddstr (y, x, str) перемещает курсор и выводит цепочку символов;
  • mvprintw (y, x, fmt[,arg...]) перемещает курсор и выводит форматированную строку.

move() возвращает OK при нормальном завершении и ERR
при ошибке. К ошибке приводит попытка сдвинуть курсор в позицию, не находящуюся между (0, 0) и (LINES-1, COLS-1).
move() является макросом.



ПРИМЕР
  #include <curses.h>
main() { initscr (); addstr ("Курсор должен быть здесь -->"); addstr (" если move () работает."); printw ("\n\n\nНажмите <CR> для завершения теста."); move (0, 28); refresh (); getch (); /* Вводит <CR>, см. ниже */ endwin (); }

Эта программа выводит следующее:

После нажатия возврата каретки экран будет выглядеть так:

Другой пример использования move() можно найти в программе scatter в разделе Примеры программ, работающих с curses.
clear( ), erase( )

СИНТАКСИС
  #include <curses.h>
int clear ( )
int erase ( )


ОПИСАНИЕ
  Обе подпрограммы заполняют все окно stdscr пробелами.

clear() допускает наличие на экране мусора, о котором она не знает; эта подпрограмма вызывает сначала erase(), а затем clearok(), что приводит к полной очистке физического экрана при следующем вызове refresh() для stdscr. Подробнее о clearok() см. curses(3X).
initscr() автоматически вызывает clear().
clear() всегда возвращает OK, erase() не возвращает ничего полезного.
И clear(), и erase() являются макросами.
clrtoeol( ), clrtobot( )

СИНТАКСИС
  #include <curses.h>
int clrtoeol ( )
int clrtobot ( )


ОПИСАНИЕ
  clrtoeol() заменяет остаток строки пробелами.

clrtobot() заменяет остаток экрана пробелами.
Обе подпрограммы выполняют свои действия с позиции, в которой находится курсор (включительно).
Ни одна из подпрограмм не возвращает ничего полезного.

ПРИМЕР
  Приведем текст программы, использующей clrtobot().
#include <curses.h>
main () { initscr (); addstr ("Нажмите <CR> для удаления отсюда "); addstr ("до конца строки и далее."); addstr ("\nУдалите это тоже.\nИ это."); move (0, 32); refresh (); getch (); clrtobot (); refresh (); endwin (); }

Эта программа выводит следующее:

Обратите внимание на два вызова refresh() - первый выводит этот текст на экран, второй очищает экран с отмеченного курсором места до конца.
После нажатия возврата каретки экран будет выглядеть так:

Примеры использования clrtoeol() см. в программах show и two в разделе Примеры программ, работающих с curses.


Содержание раздела