Основы программирования в Linux
Шрифт:
#define BOXED_LINES 11
#define BOXED_ROWS 60
#define BOX_LINE_POS 8
#define BOX_ROW_POS 2
2. Функция
update_cd
позволяет пользователю заново ввести сведения о дорожках текущего компакт-диска. Удалив предыдущие записи о дорожках, она приглашает ввести новую информацию.
void update_cd {
FILE *tracks_fp;
char track_name[MAX_STRING];
int len;
int track = 1;
int screen_line = 1;
WINDOW *box_window_ptr;
WINDOW *sub_window_ptr;
clear_all_screen;
mvprintw(PROMPT_LINE, 0, "Re-entering tracks for CD. ");
if (!get_confirm)
return;
move(PROMP_TLINE, 0);
clrtoeol;
remove_tracks;
mvprintw(MESSAGE_LINE, 0, "Enter a blank line to finish");
tracks_fp = fopen(tracks_file, "a");
Примечание
Листинг будет продолжен через минуту; мы хотим сделать краткую паузу, чтобы обратить ваше внимание на ввод данных в обрамленное окно с прокруткой. Хитрость заключается в формировании вложенного окна, рисовании рамки по его краю и создании внутри этого окна нового вложенного окна с прокруткой.
box_window_ptr = subwin(stdscr, BOXED_LINES + 2, BOXED_ROWS + 2,
BOX_LINE_POS - 1, BOX_ROW_POS - 1);
if (!box_window_ptr) return;
box(box_window_ptr, ACS_VLINE, ACS_HLINE);
sub_window_ptr = subwin(stdscr, BOXED_LINES, BOXED_ROWS,
BOX_LINE_POS, BOX_ROW_POS);
if (!sub_window_ptr) return;
scrollok(sub_window_ptr, TRUE);
werase(sub_window_ptr);
touchwin(stdscr);
do {
mvwprintw(sub_window_ptr, screen_line++, BOX_ROW_POS + 2,
"Track %d: ", track);
clrtoeol;
refresh;
wgetnstr(sub_window_ptr, track_name, MAX_STRING);
len = strlen(track_name);
if (len > 0 && track_name[len - 1] = '\n')
track_name[len - 1] = '\0';
if (*track_name)
fprintf(tracks_fp, "%s, %d, %s\n", current_cat, track, track_name);
track++;
if (screen_line > BOXED__LINES - 1) {
/* время начать прокрутку */
scroll(sub_window_ptr);
screen_line--;
}
} while (*track_name);
delwin(sub_window_ptr);
fclose(tracks_fp);
}
Удаление записей
1.
remove_cd
— последняя функция, вызываемая из функции main
.
void remove_cd {
FILE *titles_fp, *temp_fp;
char entry[MAX_ENTRY];
int cat_length;
if (current_cd[0] == '\0') return;
clear_all_screen;
mvprintw(PROMPT_LINE, 0, "About to remove CD %s: %s. ", current_cat, current_cd);
if (!get_confirm)
return;
cat_length = strlen(current_cat);
/* Файл заголовков копируется во временный, игнорируя данный CD */
titles_fp = fopen(title_file, "r");
temp_fp = fopen(temp_flie, "w");
while(fgets(entry, MAX_ENTRY, titles_fp)) {
/* Сравнивает номер в каталоге и копирует элемент, если не
найдено совпадение */
if (strncmp(current_cat, entry, cat_length) != 0)
fputs(entry, temp_fp);
}
fclose(titles_fp);
fclose(temp_fp);
/* Удаляет файл заголовков и переименовывает временный файл */
unlink(title_file);
rename(temp_file, title_file);
/* Теперь делает то же самое для файла дорожек */
remove_tracks;
/* Устанавливает 'None' для текущего CD */
current_cd[0] = '\0';
}
2. Теперь вам только нужен программный код функции
remove_tracks
, удаляющей дорожки текущего компакт-диска. Она вызывается двумя функциями — update_cd
и remove_cd
.
Поделиться:
Популярные книги
Имперец. Том 5
4. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Первый среди равных. Книга VII
7. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 4
4. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неофит
3. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Точка Бифуркации X
10. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кукловод
4. Династия
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Меченный смертью. Том 3
3. Меченный смертью
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Излом
10. Последняя жизнь
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 27
27. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVIII
38. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
юмористическое фэнтези
5.00
рейтинг книги
Герцог. Книга 1. Формула геноцида
1. Псевдоним "Испанец" - 2
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Размышления русского боксёра в токийской академии Тамагава
1. Размышления русского боксёра в токийской академии
Фантастика:
альтернативная история
6.80
рейтинг книги
Авиатор: назад в СССР
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Отмороженный 9.0
9. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00