Основы программирования в Linux
Шрифт:
mvprintw(start_row + current_row, start_col, "%s", txt_ptr);
if (current_row == current_highlight) attroff(A_STANDOUT);
current_row++;
option_ptr++;
}
mvprintw(start_row + current_row + 3, start_col,
"Move highlight then press Return ");
refresh;
}
3. Далее рассмотрим функцию
clear_all_screen
, которая, как ни странно, очищает экран и перезаписывает заголовок. Если компакт-диск выбран, отображаются его данные:
void clear all_screen {
clear;
mvprintw(2, 20, "%s", "CD Database Application");
if (current_cd[0]) {
mvprintw(ERROR_LINE, 0, "Current CD: %s: %s\n", current_cat, current_cd);
}
refresh;
}
Управление базой данных
В этом разделе описаны функции пополнения или обновления базы данных компакт-дисков. Функции
add_record
, update_cd
и remove_cd
вызываются из функции main
. Добавление записей
1. Добавьте сведения о новом компакт-диске в базу данных.
void add_record {
char catalog_number[MAX_STRING];
char cd_title[MAX_STRING];
char cd_type[MAX_STRING];
char cd_artist[MAX_STRING];
char cd_entry[MAX_STRING];
int screenrow = MESSAGE_LINE;
int screencol = 10;
clear_all_screen;
mvprintw(screenrow, screencol, "Enter new CD details");
screenrow += 2;
mvprintw(screenrow, screencol, "Catalog Number: " );
get_string(catalog_number);
screenrow++;
mvprintw(screenrow, screencol, " CD Title: ");
get_string(cd_title);
screenrow++;
mvprintw(screenrow, screencol, " CD Type: ");
get_string(cd_type);
screenrow++;
mvprintw(screenrow, screencol, " Artist: ");
get_string(cd_artist);
screenrow++;
mvprintw(PROMPT_LINE-2, 5, "About to add this new entry:");
sprintf(cd_entry, "%s, %s, %s, %s",
catalog_number, cd_title, cd_type, cd_artist);
mvprintw(PROMPT_LINE, 5, "%s", cd_entry);
refresh;
move(PROMPT_LINE, 0);
if (get_confirm) {
insert_title(cd_entry);
strcpy(current_cd, cd_title);
strcpy(current_cat, catalog_number);
}
}
2. Функция
get_string
приглашает к вводу и считывает строку из текущей позиции экрана. Она также удаляет завершающую новую пустую строку:
void get_string(char* string) {
int len;
wgetnstr(stdscr, string, MAX_STRING);
len = strlen(string);
if (len > 0 && string[len - 1] == '\n') string[len - 1] = '\0';
}
3. Функция
get_confirm
запрашивает и считывает пользовательское подтверждение. Она читает введенную пользователем строку и проверяет, первый символ — Y
или у
. Если она обнаруживает другой символ, то не дает подтверждения.
int get_confirm {
int confirmed = 0;
char first_char;
mvprintw(Q_LINE, 5, "Are you sure? ");
clrtoeol;
refresh;
cbreak;
first_char = getch;
if (first_char == 'Y' || first_char == 'y') {
confirmed = 1;
}
nocbreak;
if (!confirmed) {
mvprintw(Q_LINE, 1, " Cancelled");
clrtoeol;
refresh;
sleep(1);
}
return confirmed;
}
4. Последней рассмотрим функцию
insert_title
. Она вставляет в базу данных компакт-дисков заголовок, добавляя строку с заголовком в конец файла заголовков:
void insert_title(char* cdtitle) {
FILE *fp = fopen(title_file, "a");
if (!fp) {
mvprintw(ERROR_LINE, 0, "cannot open CD titles database");
} else {
fprintf(fp, "%s\n", cdtitle);
fclose(fp);
}
}
Обновление записей
1. Продолжим рассмотрение других управляющих функций, вызываемых из функции
main
. Следующая из них — функция update_cd
. Эта функция использует обведенное рамкой вложенное окно с прокруткой и нуждается в нескольких константах, которые объявляются как глобальные, поскольку они позже потребуются функции list_tracks
.
Поделиться:
Популярные книги
Жена неверного генерала, или Попаданка на отборе
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травник
1. Травник
Фантастика:
фэнтези
5.00
рейтинг книги
Газлайтер. Том 28
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Товарищ "Чума" 4
4. Товарищ "Чума"
Фантастика:
городское фэнтези
альтернативная история
5.00
рейтинг книги
Железное пламя
Фантастика:
фэнтези
5.00
рейтинг книги
Вечная Война. Книга II
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Инкарнатор
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Русская драматургия XVIII – XIX вв. (Сборник)
Поэзия:
драматургия
6.25
рейтинг книги
Агенты ВКС
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Гром Раскатного. Том 2
2. Штормовой Предел
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Инженер Петра Великого 3
3. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вечный. Книга VI
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Отвергнутая невеста генерала драконов
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Лондон
The Big Book
Проза:
историческая проза
6.67