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

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

Жанры

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

static int command_mode(int argc, char *argv[]);

static void announce(void);

static menu_options show_menu(const cdc_entry *current_cdc);

static int get_confirm(const char *question);

static int enter_new_cat_entry(cdc_entry *entry_to_update);

static void enter_new_track_entries(const cdc_entry* entry_to_add_to);

static void del_cat_entry(const cdc_entry *entry_to_delete);

static void del_track_entries(const cdc_entry *entry_to_delete);

static cdc_entry find_cat(void);

static void list_tracks(const cdc_entry *entry_to_use);

static void count_all_entries(void);

static void display_cdc(const cdc_entry *cdc_to_show);

static void display_cdt(const cdt_entry *cdt_to_show);

static void strip_return(char *string_to_strip);

4. И наконец, вы добрались до функции

main
. Она начинается с проверки того, что текущий элемент
current_cdc_entry
, который применяется для сохранения дорожки выбранного в данный момент элемента каталога компакт-дисков, инициализирован. Также проводится грамматический разбор командной строки, выдается оповещение о том, какая программа выполняется, и инициализируется база данных.

void main(int argc, char *argv[]) {

 menu_options current_option;

 cdc_entry current_cdc_entry;

 int command_result;

 memset(&current_cdc_entry, '\0', sizeof(current_cdc_entry));

if (argc >1) {

command_result = command_mode(argc, argv);

exit(command_result);

 }

 announce;

 if (!database_initialize(0)) {

fprintf(stderr, "Sorry, unable to initialize database\n");

fprintf(stderr, "To create a new database use %s -i\n", argv[0]);

exit(EXIT_FAILURE);

 }

5. Теперь вы готовы обрабатывать ввод пользователя. Вы остаетесь в цикле, запрашивая пункт меню и обрабатывая его до тех пор, пока пользователь не выберет выход. Обратите вниманий на то, что вы передаете структуру

current_cdc_entry
в функцию
show_menu
, чтобы разрешить изменять варианты пунктов меню, когда выбран текущий элемент каталога:

 while (current_option != mo_exit) {

current_option = show_menu(&current_cdc_entry);

switch(current_option) {

case mo_add_cat:

if (enter_new_cat_entry(&current_cdc_entry)) {

if (!add_cdc_entry(current_cdc_entry)) {

fprintf(stderr, "Failed to add new entry\n");

memset(&current_cdc_entry, '\0',

sizeof(current_cdc_entry));

}

}

break;

case mo_add_tracks:

enter_new_track_entries(&current_cdc_entry);

break;

case mo_del_cat:

del_cat_entry(&current_cdc_entry);

break;

case mo_find_cat:

current_cdc_entry = find_cat;

break;

case mo_list_cat_tracks:

list_tracks(&current_cdc_entry);

break;

case mo_del_tracks:

del_track_entries(&current_cdc_entry);

break;

case mo_count_entries:

count_all_entries;

break;

case mo_exit:

break;

case mo_invalid:

break;

default:

break;

} /* switch */

 } /* while */

6. Когда цикл в функции

main
завершится, закройте базу данных и вернитесь в окружение. Функция
announce
выводит приглашающее предложение:

 database_close;

 exit(EXIT_SUCCESS);

} /* main */

static void announce(void) {

 printf("\n\nWelcome to the demonstration CD catalog database \

program\n");

}

7. Здесь вы реализуете функцию

show_menu
. Эта функция проверяет, выбран ли текущий элемент каталога, используя первый символ имени в каталоге. Если элемент каталога выбран, становятся доступными дополнительные пункты меню:

static menu_options show_menu(const cdc_entry *cdc_selected) {

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

Аврора Горелика (сборник)

Аксенов Василий Павлович
Поэзия:
драматургия
6.25
рейтинг книги
Аврора Горелика (сборник)

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

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

Газлайтер. Том 21

Володин Григорий Григорьевич
21. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.25
рейтинг книги
Газлайтер. Том 21

Маркс и Энгельс

Серебрякова Галина Иосифовна
421. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Маркс и Энгельс

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Лунный бассейн. Металлическое чудовище (сборник)

Меррит Абрахам Грэйс
2. Абрахам Меррит. Собрание сочинений в 5 томах
Фантастика:
ужасы и мистика
5.00
рейтинг книги
Лунный бассейн. Металлическое чудовище (сборник)

С чего все началось?

Katelyn
Любовные романы:
современные любовные романы
3.40
рейтинг книги
С чего все началось?

Дважды одарённый. Том IX

Тарс Элиан
9. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Дважды одарённый. Том IX

Отряд

Посняков Андрей
Отряд тайных дел
Фантастика:
фэнтези
боевая фантастика
6.25
рейтинг книги
Отряд

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.50
рейтинг книги
Шайтан Иван 5

Америго Веспуччи. Фернан Магеллан

Цвейг Стефан
Проза:
историческая проза
5.00
рейтинг книги
Америго Веспуччи. Фернан Магеллан

Неучтенный элемент. Том 7

NikL
7. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 7