Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
const char *title_file = "title.cdb";
const char *tracks_file = "tracks.cdb";
const char *temp_file = "cdb.tmp";
4. И наконец, прототипы функций:
void clear_all_screen(void);
void get_return(void);
int get_confirm(void);
int getchoice(char *greet, char *choices[]);
void draw_menu(char *options[], int highlight,
int start_row, int start_col);
void insert_title(char *cdtitle);
void get_string(char *string);
void add_record(void);
void count_cds(void);
void find_cd(void);
void list_tracks(void);
void remove_tracks(void);
void remove_cd(void);
void update_cd(void);
5. Прежде чем рассматривать их реализацию, введем некоторые структуры (на самом деле массив пунктов меню) для хранения меню. Когда выбирается пункт меню, возвращается первый символ выбранного пункта. Например, если это пункт меню add new CD (добавить новый CD), при его выборе будет возвращен символ
а
char *main_menu[] = {
"add new CD",
"find CD",
"count CDs and tracks in the catalog",
"quit",
0,
};
char *extended_menu[] = {
"add new CD",
"find CD",
"count CDs and tracks in the catalog",
"list tracks on current CD";
"remove current CD",
"update track information",
"quit",
0,
};
На этом инициализация закончена. Теперь можно переходить к функциям программы, но сначала необходимо составить общее представление о взаимосвязях всех 16 функций. Функции разделены на три программных секции:
□ отображение меню;
□ добавление компакт-дисков в базу данных;
□ извлечение и отображение данных компакт-диска.
Визуальное представление дано на рис. 6.9.
Рис. 6.9
Взгляд на функцию main
Функция
main
<i>int main() {</i>
int choice;
initscr();
do {
choice = getchoice("Options:", current_cd[0] ? extended_menu : main_menu);
switch (choice) {
case 'q':
break;
case 'a':
<i> add_record();</i>
break;
case 'c':
<i> count_cds();</i>
break;
case 'f':
<i> find_cd();</i>
break;
case 'l':
<i> list_tracks();</i>
break;
case 'r':
<i> remove_cd();</i>
break;
case 'u':
<i> update_cd();</i>
break;
}
} while (choice != 'q');
endwin();
exit(EXIT_SUCCESS);
}
Теперь давайте подробно рассмотрим функции, связанные с тремя секциями программы.
Формирование меню
В этой секции рассматриваются три функции, относящиеся к пользовательскому интерфейсу программы.
1. Функция
getchoice
main
getchoice
greet
choices
main_menu
extended_menu
main
<i>int get_choice(char *greet, char* choises[]) {</i>
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;
<i> clear_all_screen();</i>