SVGAlib

Не так давно на почту пришло письмо с просьбой рассказать об SVGAlib. Поскольку я думаю, что узнать, что это за зверь, будет интересно и другим, то выполняю данную просьбу через нашу любимую газету.

Если вы ищете простой графический пакет для разработки приложений под Linux, то можете прекратить поиски. Библиотека SVGAlib является простейшим способом создания графических приложений, без всего этого вздора, окружающего X Window System. Даже элементарных навыков программирования на C достаточно для использования SVGAlib.

Что такое SVGAlib? SVGAlib это низкоуровневая графическая библиотека для Linux. Она расширяет возможности языка C, который, как известно, не имеет встроенных средств для создания графических приложений. Итак, SVGAlib является библиотекой внешних функций и используется с языком С. В Линукс, программы на язык C сами по себе, без спецбиблиотек имеют возможность вывода только текстовом режиме. Это связано с тем, что графические функции специфичны и не могут переноситься с одной компьютерной платформы на другую. Графические подпрограммы и функции, созданные для одной операционной системы должны быть полностью переписаны, если вы хотите, чтобы ваша программа работала в другой операционной среде. Например, графические программы для DOS или Windows не могут использоваться под Linux'ом. Для работы с графикой в среде Linux необходимо использовать набор внешних функций, специально разработанных для Linux. SVGAlib и является таким набором. Т.е. SVGAlib это просто библиотека функций языка C вызываемых из C-программ.

Чем отличается SVGAlib от X Window System? X Window System (XFree86) - это сервер. Сервер должен быть запущен прежде, чем к нему сможет обратиться любое из X-приложений. X-сервер потребляет много системных ресурсов и лишает вас возможности использовать виртуальные терминалы (Alt 1-6). При использовании функций SVGAlib, сервер не нужен. SVGAlib - это просто библиотека функций, вызываемых из C-программ (аналогично всем другим библиотекам расположенным в каталогах /lib и /usr/lib). Если библиотека SVGAlib установлена правильно, можно ни о чем не беспокоиться. И, наконец, SVGAlib не оказывает воздействия на остальные виртуальные терминалы, т.е. с одного терминала вы можете запустить графическое приложение, в то время как другой будет работать в обычном текстовом режиме. Но и без недостатков здесь не обойтись. Для X-Windows разработано несравненно больше приложений, чем с использованием SVGAlib, поскольку X Window System является кросс-платформенной (т.е. приложения не требуют изменений при переносе из одной реализации UNIX в другую). SVGAlib имеется только для Linux. Кроме того, неграмотное использование SVGAlib в приложениях может "подвесить" консоль так, что придется перезагружаться. Также не стоит быстро и часто переключаться между виртуальными терминалами, если с них запущены графические приложения. Есть риск "повиснуть". Существует миф, будто использование SVGAlib создает проблемы с безопасностью. На самом деле программы, использующие SVGAlib запускаются с установленным битом смены пользователя (т.е. в момент исполнения приобретают права root), но эта привилегия заканчивается одновременно с выполнением программы.

И все же, несмотря на указанные проблемы библиотека SVGAlib позволяет быстрее и проще создавать приложения и ее использование оправданно во многих ситуациях.

Чтобы использовать SVGAlib, необходимо сообщить об этом компилятору. Для этого вставьте оператор

#include <vga.h>

в текст программы. Вот простейший пример:

#include <stdio.h>

#include <vga.h> int main(void) {

vga_init();

vga_setmode(5);

vga_setcolor(4);

vga_drawpixel(10,10);

sleep(5);

vga_setmode(0);

exit(0);

}

Программа рисует на экране точку (пиксел) красного цвета. Через пять секунд консоль переводится в обычный текстовый режим и программа завершается. Обратите внимание на первый оператор: vga_init(). С его помощью программа получает статус root (если установлен соответствующий бит) и инициализирует библиотеку SVGAlib. Следующая строка содержит функцию vga_setmode(5), т.е. устанавливается 5-й режим VGA адаптера (320x200x256). В этом режиме графическая сетка экрана имеет размеры 320 точек (пикселов) по горизонтали и 200 точек по вертикали с цветовой гаммой в 256 цветов. В качестве альтернативы можно использовать форму vga_setmode(G320x200x256). Оба вызова этой функции эквивалентны. Следующая функция: vga_setcolor(4), устанавливает в качестве текущего цвета красный цвет. Можно использовать любое значение в диапазоне от 0 до 255. Некоторые функции допускают использование большего количества цветов, но в данном примере мы будем использовать этот. И, наконец, функция: vga_drawpixel(10,10) рисует красную точку в позиции экрана 10, 10. На самом деле это одиннадцатая точка вправо от левой границы и вниз, от верхней границы экрана. Именно одиннадцатая, а не десятая, т.к. отсчет координат начинается с нуля. Точка с координатами 0,0 соответствует верхней левой границе экрана. Функция vga_setmode(0) возвращает VGA адаптер в текстовый режим (аналог - vga_setmode(text)). Помните, что при завершениипрограммы всегда необходимо восстанавливать текстовый режим. В противном случае у вас будут проблемы. Для компиляции программы используйте gcc. При этом необходимо указать, что будет использоваться библиотека SVGAlib (параметр для компилятора: -lvga). Рекомендуется также задать оптимизацию объектного кода при помощи ключа: -O3, это высший уровень оптимизации. Командная строка компиляции будет выглядеть так (предполагается, что исходный текст программы находится в файле sample.c):gcc -O3 -o sample sample.c -lvga

Чтобы программу могли запускать простые пользователи, необходимо установить бит смены пользователя:chmod u+s sample

Полный перечень функций SVGAlib приведен в man-руководстве. Я надеюсь, что данная заметка поможет вам создавать простейшие графические приложения для Linux.

X-Stranger

xstranger@tut.by

Хостинг от uCoz