Хакер № 10/03 (58)

Новые проклятия для С-кодеров под Linux
Иван Скляров
Xakep, номер #058, стр. 058-086-2
Также надо отметить понятия физического и логического курсоров. Под физическим курсором понимается курсор, который всегда присутствует в системе, причем в единственном экземпляре. Логические курсоры создаются ncurses. Их может быть несколько, по одному на каждое окно. Перемещением физического курсора управляет функция mvcur. Для того чтобы сделать физический курсор невидимым, используется функция curs_set.
Наша первая программа
По старинной хакерской традиции мы напишем программу, которая посылает этот мир куда подальше (см. листинг). Результаты программы показаны на рис.2.
Листинг fuck.c
#include <curses.h>
#include <string.h>
#define WHEIGHT 5
#define WWIDTH 40
int main () {
WINDOW *my_win;
char *str="FUCK YOU, WORLD!";
initscr();
start_color();
if (has_colors()) {
init_pair(1, COLOR_CYAN, COLOR_RED);
}
my_win=newwin(WHEIGHT, WWIDTH, (LINES-WHEIGHT)/2, (COLS-WWIDTH)/2);
box(my_win, '*', '*');
wbkgd(my_win, COLOR_PAIR(1)|A_BOLD|A_BLINK);
mvwaddstr(my_win, WHEIGHT/2, (WWIDTH-strlen(str))/2, str);
wrefresh(my_win);
endwin();
return 0;
}
Для того чтобы откомпилировать прогу с ncurses, в командной строке надо указать флаг -lncurses. Т.е. для нашей программы будет так: gcc fuck.c -o fuck -lncurses. Рассмотрим по порядку, как работает "fuck.c".
#include <curses.h> - любая программа с ncurses должна включать этот заголовочный файл. Замечу, что должен подключаться именно <curses.h>, а не <ncurses.h>. Впрочем, можно использовать и последний, т.к. он обычно тоже присутствует в системе и является символической ссылкой на файл curses.h. Кроме того, <curses.h> автоматически подключает хедер <stdio.h>, поэтому дополнительно включать <stdio.h> в программу не нужно. В нашу прогу мы еще подключаем хедер <string.h>, т.к. далее будем использовать функции библиотеки обработки строк, а точнее, единственную функцию strlen, определяющую длину строки.
С помощью двух макросов #define мы устанавливаем две именованные константы: высоту и ширину окна, в котором будет наше послание. Т.к. библиотека ncurses работает с символьными терминалами, то она не оперирует таким понятием, как "точка" экрана, и поэтому все длины, высоты и координаты задаются в символах. Понятно, что раз ncurses обходит стороной графический экран, то любые линии можно строить только из символов псевдографики, правда с возможностью смены цвета (в распоряжении имеется всего 8 цветов). Обычный размер экрана в консоли - 80 колонок на 25 линий, но на X-терминалах размеры могут быть любыми.
Назад на стр. 058-086-1 Содержание Вперед на стр. 058-086-3
|
 |
|