Mir-knigi.online
Книги онлайн читать бесплатно!
  • Главная
  • Жанры
  • ТОП книг
  • ТОП авторов
  • Контакты

Основы программирования в Linux

Часть 109 из 324 Информация о книге

<i>void get_string(char* string) {</i>

 int len;

 wgetnstr(stdscr, string, MAX_STRING);

 len = strlen(string);

 if (len &gt; 0 &amp;&amp; string[len - 1] == '\n') string[len - 1] = '\0';

}

3. Функция

get_confirm
запрашивает и считывает пользовательское подтверждение. Она читает введенную пользователем строку и проверяет, первый символ —
Y
или
у
. Если она обнаруживает другой символ, то не дает подтверждения.

<i>int get_confirm() {</i>

 int confirmed = 0;

 char first_char;

 mvprintw(Q_LINE, 5, &quot;Are you sure? &quot;);

 clrtoeol();

 refresh();

 cbreak();

 first_char = getch();

 if (first_char == 'Y' || first_char == 'y') {

  confirmed = 1;

 }

 nocbreak();

 if (!confirmed) {

  mvprintw(Q_LINE, 1, &quot; Cancelled&quot;);

  clrtoeol();

  refresh();

  sleep(1);

 }

 return confirmed;

}

4. Последней рассмотрим функцию

insert_title
. Она вставляет в базу данных компакт-дисков заголовок, добавляя строку с заголовком в конец файла заголовков:

<i>void insert_title(char* cdtitle) {</i>

 FILE *fp = fopen(title_file, &quot;a&quot;);

 if (!fp) {

  mvprintw(ERROR_LINE, 0, &quot;cannot open CD titles database&quot;);

 } else {

  fprintf(fp, &quot;%s\n&quot;, cdtitle);

  fclose(fp);

 }

}

Обновление записей

1. Продолжим рассмотрение других управляющих функций, вызываемых из функции

main
. Следующая из них — функция
update_cd
. Эта функция использует обведенное рамкой вложенное окно с прокруткой и нуждается в нескольких константах, которые объявляются как глобальные, поскольку они позже потребуются функции
list_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, &quot;Re-entering tracks for CD. &quot;);

<i> if (!get_confirm())</i>

return;

 move(PROMP_TLINE, 0);

 clrtoeol();

<i> remove_tracks();</i>

 mvprintw(MESSAGE_LINE, 0, &quot;Enter a blank line to finish&quot;);

 tracks_fp = fopen(tracks_file, &quot;a&quot;);

Примечание

Листинг будет продолжен через минуту; мы хотим сделать краткую паузу, чтобы обратить ваше внимание на ввод данных в обрамленное окно с прокруткой. Хитрость заключается в формировании вложенного окна, рисовании рамки по его краю и создании внутри этого окна нового вложенного окна с прокруткой.

 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,

   &quot;Track %d: &quot;, track);

  clrtoeol();

  refresh();

  wgetnstr(sub_window_ptr, track_name, MAX_STRING);

  len = strlen(track_name);

  if (len &gt; 0 &amp;&amp; track_name[len - 1] = '\n')

   track_name[len - 1] = '\0';

  if (*track_name)

   fprintf(tracks_fp, &quot;%s, %d, %s\n&quot;, current_cat, track, track_name);

  track++;

  if (screen_line &gt; BOXED__LINES - 1) {

   /* время начать прокрутку */

   scroll(sub_window_ptr);

   screen_line--;


Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело
  • Деловая литература
  • Детективы и триллеры
  • Детские
  • Детские книги
  • Документальная литература
  • Дом и дача
  • Дом и Семья
  • Жанр не определен
  • Зарубежная литература
  • Знания и навыки
  • История
  • Компьютеры и Интернет
  • Легкое чтение
  • Любовные романы
  • Научно-образовательная
  • Образование
  • Поэзия и драматургия
  • Приключения
  • Проза
  • Прочее
  • Психология и мотивация
  • Публицистика и периодические издания
  • Религия и духовность
  • Родителям
  • Серьезное чтение
  • Спорт, здоровье и красота
  • Справочная литература
  • Старинная литература
  • Техника
  • Фантастика и фентези
  • Фольклор
  • Хобби и досуг
  • Юмор
Mir-knigi.online

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • [email protected]
Информация
  • Карта сайта
© mir-knigi.online, 2026. | Вход