Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Функция выполняет запись области панели, начинающейся в точке (
pad_rowpad_columnscreen_row_minscreen_col_minscreen_row_maxscreen_col_maxЕсть и дополнительная подпрограмма
pnoutrefreshwnoutrefreshДавайте проверим это на практике с помощью программы pad.с (упражнение 6.8).
1. В начале этой программы вы инициализируете структуру панели и затем формируете панель с помощью функции, которая возвращает указатель на нее. Вставьте символы, заполняющие структуру панели (панель на 50 символов шире и выше экрана терминала):
#include <unistd.h>#include <stdlib.h>#include <curses.h>int main() { WINDOW *pad_ptr; int x, y; int pad_lines; int pad_cols; char disp_char; initscr(); pad_lines = LINES + 50; pad_cols = COLS + 50; pad_ptr = newpad(pad_lines, padcols); disp_char = 'a'; for (x = 0; x < pad_lines; x++) { for (у = 0; у < pad_cols; y++) { mvwaddch(pad_ptr, x, y, disp_char); if (disp_char == 'z') disp_char = 'a'; else disp_char++; } }2. Теперь перед завершением программы нарисуйте разные области панели в разных местах экрана:
prefresh(pad_ptr, 5, 7, 2, 2, 9, 9); sleep(1); prefresh(pad_ptr, LINES + 5, COLS + 7, -5, 5, 21, 19); sleep(1); delwin(pad_ptr); endwin(); exit(EXIT_SUCCESS);}Выполнив эту программу, вы увидите нечто подобное показанному на рис. 6.8.

Рис. 6.8
Приложение, управляющее коллекцией компакт-дисков
Теперь, когда вы узнали о средствах, которые предлагает библиотека curses, можно разработать типовое приложение. Далее приведена его версия, написанная на языке С и использующая библиотеку curses. К достоинствам приложения относятся более четкое отображение информации на экране и применение окна с прокруткой для просмотра списков.
Все приложение занимает восемь страниц, поэтому мы разделили его на секции и отдельные функции внутри секций. Исходный код программы curses_app.c можно получить на Web-сайте издательства Wrox (http://www.wrox.com/WileyCDA/). Как и все программы из этой книги, оно подчиняется требованиям Общедоступной лицензии проекта GNU.
Мы написали эту версию приложения для работы с базой данных компакт-дисков, используя информацию из предыдущих глав. Данное приложение — потомок оригинального сценария командной оболочки, приведенного в главе 2. Оно не перепроектировалось для написания на языке С, поэтому вы увидите в этой версии многие подходы, заимствованные из сценария. Учтите, что в этой реализации есть существенные ограничения, которые мы устраним в последующих модификациях.
Мы разбили программный код этого приложения на несколько отдельных секций, которые обозначены заголовками последующих разделов. Соглашения, принятые для оформления этого программного кода, немного отличаются от оформления большинства программ в этой книге; здесь выделение цветом применяется только для обозначения вызовов других функций приложения.
Начало нового приложения для работы с коллекцией компакт-дисков
Первая секция программного кода просто связана с объявлениями переменных и функций, которые вы будете применять позже, и инициализацией некоторых структур данных.
1. Включите в программу все приведенные заголовочные файлы и несколько глобальных переменных:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <curses.h>#define MAX_STRING 80 /* Самый длинный допустимый ответ */#define MAX_ENTRY 1024 /* Самый длинный допустимый элемент БД */#define MESSAGE_LINE 6 /* В этой строке разные сообщения */#define ERROR LINE 22 /* Строка для вывода ошибок */#define Q_LINE 20 /* Строка для вопросов */#define PROMPT_LINE 18 /* Строка для вывода приглашения */2. Теперь вам нужны глобальные переменные. Переменная
current_cdisNULL