Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<i>void get_string(char* string) {</i> int len; wgetnstr(stdscr, string, MAX_STRING); len = strlen(string); if (len > 0 && string[len - 1] == 'n') string[len - 1] = ' ';}3. Функция
get_confirmYу<i>int get_confirm() {</i> 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<i>void insert_title(char* cdtitle) {</i> FILE *fp = fopen(title_file, "a"); if (!fp) { mvprintw(ERROR_LINE, 0, "cannot open CD titles database"); } else { fprintf(fp, "%sn", cdtitle); fclose(fp); }}1. Продолжим рассмотрение других управляющих функций, вызываемых из функции
mainupdate_cdlist_tracks<i>#define BOXED_LINES 11</i><i>#define BOXED_ROWS 60</i><i>#define BOX_LINE_POS 8</i><i>#define BOX_ROW_POS 2</i>2. Функция
update_cd<i>void update_cd() {</i> 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;<i> clear_all_screen();</i> mvprintw(PROMPT_LINE, 0, "Re-entering tracks for CD. ");<i> if (!get_confirm())</i>return;
move(PROMP_TLINE, 0); clrtoeol();<i> remove_tracks();</i> 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] = ' '; if (*track_name) fprintf(tracks_fp, "%s, %d, %sn", current_cat, track, track_name); track++; if (screen_line > BOXED__LINES - 1) { /* время начать прокрутку */ scroll(sub_window_ptr); screen_line--;
