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

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

Жанры

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

 "update track information",

 "quit",

 0,

};

На этом инициализация закончена. Теперь можно переходить к функциям программы, но сначала необходимо составить общее представление о взаимосвязях всех 16 функций. Функции разделены на три программных секции:

отображение меню;

добавление компакт-дисков в базу данных;

извлечение и отображение данных компакт-диска.

Визуальное представление дано на рис. 6.9.

Рис. 6.9

Взгляд на функцию main

Функция

main
позволяет выбирать пункты меню, пока не выбран вариант выхода из меню (quit). Далее приведен соответствующий код.

int main {

 int choice;

 initscr;

 do {

choice = getchoice("Options:", current_cd[0] ? extended_menu : main_menu);

switch (choice) {

case 'q':

break;

case 'a':

add_record;

break;

case 'c':

count_cds;

break;

case 'f':

find_cd;

break;

case 'l':

list_tracks;

break;

case 'r':

remove_cd;

break;

case 'u':

update_cd;

break;

}

 } while (choice != 'q');

 endwin;

 exit(EXIT_SUCCESS);

}

Теперь давайте подробно рассмотрим функции, связанные с тремя секциями программы.

Формирование меню

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

1. Функция

getchoice
, вызываемая из функции
main
, — это основная функция данной секции. В функцию
getchoice
передается приглашение
greet
и указатель
choices
на базовое или расширенное меню (в зависимости от того, выбран ли компакт-диск). Вы также увидите, как
main_menu
или
extended_menu
передаются как параметры в описанную ранее функцию
main
.

int get_choice(char *greet, char* choises[]) {

 static int selected_row = 0;

 int max_row = 0;

 int start_screenrow = MESSAGE_LINE, start_screencol = 10;

 char **option;

 int selected;

 int key = 0;

 option = choices;

 while (*option) {

max_row++;

option++;

 }

 if (selected_row >= max_row)

selected_row = 0;

 clear_all_screen;

 mvprintw(start_screenrow - 2, start_screencol, greet);

 keypad(stdscr, TRUE);

 cbreak;

 noecho;

 key = 0;

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

if (key == KEY_UP) {

if (selected_row == 0) selected_row = max_row - 1;

else selected_row--;

}

if (key == KEY_DOWN) {

if (selected_row == (max_row - 1)) selected_row = 0;

else selected_row++;

}

selected = *choices[selected_row];

draw_menu(choices, selected_row, start_screen_row, start_screencol);

key = getch;

 }

 keypad(stdscr, FALSE);

 nocbreak;

 echo;

 if (key == 'q') selected = 'q';

 return(selected);

}

2. Обратите внимание на то, как две локальные функции

clear_all_screen
и
draw_menu
вызываются внутри функции
getchoice
. Первой рассмотрим функцию
draw_menu
:

void draw_menu(char* options[], int current_highlight, int start_row, int start_col) {

 int current_row = 0;

 char **option_ptr;

 char *txt_ptr;

 option_ptr = options;

 while (*option_ptr) {

if (current_row == current_highlight) attron(A_STANDOUT);

txt_ptr = options[current_row];

txt_ptr++;

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

Вольный Лекарь. Ученик. Трилогия

Карелин Сергей Витальевич
Вольный лекарь
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Вольный Лекарь. Ученик. Трилогия

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Стальной дрозд

Русанов Владислав Адольфович
4. Бронзовый грифон
Фантастика:
фэнтези
7.43
рейтинг книги
Стальной дрозд

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.25
рейтинг книги
Моров. Том 1 и Том 2

Эпоха Опустошителя. Том IX

Павлов Вел
9. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том IX

Чужак из ниоткуда

Евтушенко Алексей Анатольевич
1. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Леди-Солнце

Холт Виктория
9. The Plantagenet Saga
Любовные романы:
исторические любовные романы
6.80
рейтинг книги
Леди-Солнце

Власть Варяга

Сухов Евгений Евгеньевич
Я – вор в законе
Детективы:
боевики
8.33
рейтинг книги
Власть Варяга

Первый среди равных. Книга VII

Бор Жорж
7. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга VII

Егерь. Сердце стаи. Книга 5

Скиба Николай
5. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
6.80
рейтинг книги
Егерь. Сердце стаи. Книга 5