Новые проклятия для С-кодеров под Linux Иван Скляров Xakep, номер #058, стр. 058-086-5 Программы, использующие библиотеку меню, должны компилиться с дополнительным ключом -lmenu, т.е. в нашем случае: gcc idiot.c -o idiot -lmenu -lncurses, и включать заголовочный файл <menu.h>. Этот заголовочный файл автоматически подключает хедер <curses.h>, поэтому повторно его включать не следует. В общем случае программы, использующие меню, создаются по таким правилам: 1. Инициализировать ncurses. 2. Создать элементы меню, используя new_item(). 3. Создать меню, используя new_menu(). 4. Поместить меню, используя menu_post(). 5. Регенерировать экран. 6. Обработать пользовательские запросы в цикле. 7. Убрать меню, используя menu_unpost(). 8. Удалить меню, используя free_menu(). 9. Удалить элементы меню, используя free_item(). 10. Завершить ncurses. Прежде чем выполнять второй пункт, мы должны определить элементы меню в массиве (у нас это *choice[]) и подготовить для него память (с помощью calloc). В программе мы создаем окно, а в этом окне с помощью subwin подокно, за которым закрепляем меню (set_menu_win). Это сделано для того, чтобы удобно было выдерживать отступы от края окна. Чтобы вставить заголовок программы и надпись "F1 to exit" с цветами, отличающимися от установленных функцией wbkgd, мы воспользовались инструкциями wattron и wattroff, работающими в паре. В цикле, с помощью инструкции выбора switch, определяется нажатие клавиш. Если это "стрелка вниз", то вызывается специальная функция библиотеки меню menu_driver с атрибутом REQ_DOWN_ITEM. Это провоцирует перемещение указателя меню вниз на одну позицию. Аналогично происходит со "стрелкой вверх" (см. man menu_driver). Если нажата ENTER, с помощью функции item_name(current_item()) определяется название пункта меню и выбирается соответствующая команда, которая будет выполнена в функции system. За деталями обращайся к man. Надо сказать, несмотря на то, что Idiot написан в учебных целях, сейчас я его юзаю постоянно :). Действительно, быстрее нажать один раз кнопку, чем набирать утомительные команды. Поверь, тебе он тоже понравится, особенно если заточишь его под себя. Это ведь ты теперь тоже умеешь ;). Пиши, если возникнут какие-то вопросы/осложнения. Помогу. Что такое ncurses? Ncurses - это библиотека с огромными возможностями, которая позволяет создавать программы, не зависящие от типа терминала. Ncurses поддерживается любой UNIX-like системой. Наглядным примером работы библиотеки является Midnight Commander. Рекомендуется к изучению Eric S. Raymond и Zeyd M. Ben-Halim "nCurses Intro". Перевод: http://spslug.sposad.ru/doc/man/ncurses/ncurses-intro.html (там же ищи russian маны ncurses). Sven Goldt и пр. "Linux Programmer's Guide". Перевод: http://ufalug.rb.ru/books/lpg.koi8-r.txt www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/ - HOWTO по ncurses (перевода не встречал). |