Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 FILE *tracks_fp;

 char entry[MAX_ENTRY];

 int cat_length;

 int lines_op = 0;

 WINDOW *track_pad_ptr;

 int tracks = 0;

 int key;

 int first_line = 0;

 if (current_cd[0] == '\0') {

mvprintw(ERROR_LINE, 0, "You must select a CD first. ");

get_return;

return;

 }

 clear_all_screen;

 cat_length = strlen(current_cat);

 /* Сначала считает количество дорожек у текущего CD */

 tracks_fp = fopen(tracks_file, "r");

 if (!tracks_fp) return;

 while (fgets(entry, MAX_ENTRY, tracks_fp)) {

if (strncmp(current_cat, entry, cat_length) == 0) tracks++;

 }

 fclose(tracks_fp);

 /* Создает новую панель, гарантируя, что даже при наличии одной

дорожки панель достаточна большая, поэтому последующий вызов

prefresh всегда будет допустим. */

 track_pad_ptr = newpad(tracks + 1 + ВОХЕD_LINES, BOXED_ROWS + 1);

 if (!track_pad_ptr) return;

 tracks_fp = fopen(tracks_file, "r");

 if (!tracks_fp) return;

 mvprintw(4, 0, "CD Track Listing\n");

 /* Записывает сведения о дорожке на панель */

 while (fgets(entry, MAX_ENTRY, tracks_fp)) {

/* Сравнивает номер каталога и оставшийся вывод элемента */

if (strncmp(current_cat, entry, cat_length) == 0) {

mvwprintw(track_pad_ptr, lines_op++, 0, "%s", entry + cat_length + 1);

}

 }

 fclose(tracks_fp);

 if (lines_op > BOXED_LINES) {

mvprintw(MESSAGE_LINE, 0,

"Cursor keys to scroll, RETURN or q to exit");

 } else {

mvprintw(MESSAGE_LINE, 0, "RETURN or q to exit");

 }

 wrefresh(stdscr);

 keypad(stdscr, TRUE);

 cbreak;

 noecho;

 key = 0;

 while (key != "q" && key != KEY_ENTER && key != '\n') {

if (key == KEY_UP) {

if (first_line > 0) first_line--;

}

if (key == KEY_DOWN) {

if (first_line + BOXED_LINES + 1 < tracks) first_line++;

}

/* Теперь рисует соответствующую часть панели на экране */

prefresh(track_pad_ptr, first_line, 0, BOX_LINE_POS, BOX_ROW_POS,

BOX_LINE_POS + BOXED_LINES, BOX_ROW_POS + BOXED_ROWS);

key = getch;

 }

 delwin(track_pad_ptr);

 keypad(stdsсr, FALSE);

 nocbreak;

 echo;

}

4. В последних двух функциях вызывается функция

get_return
, которая приглашает к вводу и считывает символ возврата каретки, игнорируя другие символы.

void get_return {

 int ch;

 mvprintw(23, 0, "is", " Press return ");

 refresh;

 while ((ch = getchar) != '\n' && ch != EOF);

}

Если вы выполните эту программу, то увидите на экране нечто похожее на рис. 6.10.

Рис. 6.10 

Резюме 

В этой главе вы изучили библиотеку curses. Она предлагает текстовым программам удобный способ управления экраном и считывания данных с клавиатуры. Хотя библиотека curses не обеспечивает такого уровня управления, как общий терминальный интерфейс (GTI) и прямой доступ к структуре

terminfo
, ею гораздо легче пользоваться. Если вы пишете полноэкранное текстовое приложение, стоит рассмотреть возможность применения в нем библиотеки curses для управления экраном и чтения данных с клавиатуры.

Глава 7

Управление данными

В предыдущих главах мы касались темы ограниченности ресурсов. В этой главе мы собираемся рассмотреть сначала способы управления распределением ресурсов, затем методы обработки файлов, к которым обращается много пользователей примерно в одно и то же время, и наконец, одно средство, предоставляемое в системах Linux и позволяющее преодолеть ограничения простых файлов как среды хранения данных.

Мы можем представить все эти темы как три способа управления данными:

Поделиться:
Популярные книги

Лев Толстой

Труайя Анри
Проза:
историческая проза
5.00
рейтинг книги
Лев Толстой

Возвращение Томаса. Башня-2 (сборник)

Никитин Юрий Александрович
Фантастика:
фэнтези
7.00
рейтинг книги
Возвращение Томаса. Башня-2 (сборник)

На горах

Мельников-Печерский Павел Иванович
Проза:
классическая проза
8.87
рейтинг книги
На горах

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Криптограммы Востока (сборник)

Рерих Елена Ивановна
Рерихи. Избранное
Религия и эзотерика:
эзотерика
религия
6.25
рейтинг книги
Криптограммы Востока (сборник)

Warhammer: Битвы в Мире Фэнтези. Омнибус. Том 2

Коллектив авторов
Warhammer Fantasy Battles
Фантастика:
фэнтези
5.00
рейтинг книги
Warhammer: Битвы в Мире Фэнтези. Омнибус. Том 2

Две могилы

Престон Дуглас
12. Пендергаст
Детективы:
триллеры
прочие детективы
8.90
рейтинг книги
Две могилы

Орленев

Мацкин Александр Петрович
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Орленев

Экспансия – I

Семенов Юлиан Семенович
10. Штирлиц
Детективы:
политические детективы
6.33
рейтинг книги
Экспансия – I

Александр III и его время

Толмачев Евгений Петрович
Научно-образовательная:
история
культурология
5.00
рейтинг книги
Александр III и его время

Параллельные миры

Каку Митио
Научно-образовательная:
прочая научная литература
8.11
рейтинг книги
Параллельные миры

12 великих комедий

Шекспир Уильям
Вожди Советского Союза
Проза:
классическая проза
6.25
рейтинг книги
12 великих комедий

Земля в цвету

Сафонов Вадим Андреевич
Научно-образовательная:
история
биология
ботаника
5.00
рейтинг книги
Земля в цвету

Ледовый апокалипсис

Ладлэм Роберт
7. Прикрытие-Один
Детективы:
триллеры
5.00
рейтинг книги
Ледовый апокалипсис