Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
- Название:Разработка приложений в среде Linux. Второе издание
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:2007
- Город:Москва
- ISBN:978-5-8459-1143-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
24.2.5. Скелет программы управления экраном
Ниже приведен пример программы, которая сначала инициализирует возможности библиотеки S-Lang для управления экраном, а затем закрывает их. Хотя эта программа выполняет лишь некоторые действия, она иллюстрирует основы использования функциональных возможностей SLsmg
библиотеки S-Lang.
1: /* slinit.с */
2:
3: #include
4: #include
5: #include
6: #include
7:
8: int main(void) {
9: struct winsize ws;
10:
11: /* получение размеров терминала, подключенного к stdout */
12: if (ioctl(1, TIOCGWINSZ, &ws)) {
13: perror("сбой при получении размеров окна");
14: return 1;
15: }
16:
17: SLtt_get_terminfo();
18:
19: SLtt_Screen_Rows = ws.ws_row;
20: SLtt_Screen_Cols = ws.ws_col;
21:
22: SLsmg_init_smg();
23:
24: /* здесь находится ядро программы */
25:
26: SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);
27: SLsmg_refresh();
28: SLsmg_reset_smg();
29: SLang_reset_tty();
30:
31: return 0;
32: }
24.2.6. Переключение наборов символов
Большинство современных терминалов (включая VT100, который достаточно точно эмулирует консоль Linux) поддерживают как минимум два набора символов. Основным набором обычно является ISO-8859-1 или ему подобный; другой набор используется главным образом для линейных символов. Библиотека S-Lang позволяет выбирать набор тех символов, которые будут применяться для вычерчивания символов.
void SLsmg_set_char_set(int useAlternate)
Если функцию SLsmg_set_char_set()
вызвать с ненулевым аргументом, на экране будут выводиться новые символы, отображаемые с применением альтернативного набора символов. Если функцию SLsmg_set_char_set()
вызвать с нулевым аргументом, то это отображение использоваться не будет, вследствие чего на экране будут появляться обычные символы.
S-Lang определяет набор символических имен для наиболее часто используемых линейных символов, входящих в альтернативный набор. В табл. 24.1 перечислены доступные линейные символы и имена S-Lang для каждого из них.
Таблица 24.1. Линейные символы
Глиф | Символическая константа |
---|---|
─ |
SLSMG_HLINE_CHAR |
│ |
SLSMG_VLINE_CHAR |
┌ |
SLSMG_ULCORN_CHAR |
┐ |
SLSMG_URCORN_CHAR |
└ |
SLSMG_LLCORN_CHAR |
┘ |
SLSMG_LRCORN_CHAR |
┤ |
SLSMG_RTEE_CHAR |
├ |
SLSMG_LTEE_CHAR |
┬ |
SLSMG_UTEE_CHAR |
┴ |
SLSMG_DTEE_CHAR |
┼ |
SLSMG_PLUS_CHAR |
24.2.7. Запись на экран
Записать строки на экран под управлением S-Lang можно несколькими различными способами, суть которых одинакова. Далее приводится полный список функций, предназначенных для этой цели.
void SLsmg_write_char(char ch);
void SLsmg_write_string(char * str);
void SLsmg_write_nchars(char * chars, int length);
void SLsmg_write_nstring(char * str, int length);
void SLsmg_printf(char * format, ...);
void SLsmg_vprintf(char * format, va_list args);
void SLsmg_write_wrapped_string(char * str, int row, int column, int height,
int width, int fill);
Каждая из этих функций, за исключением SLsmg_write_wrapped_string()
, записывает требуемую строку в буфер экрана [170] Помните, что обновление физического терминала производится только с помощью функции SLsmg_refresh() .
в текущую позицию курсора, используя текущий цвет и набор символов. Однако все они по-разному определяют, какую строку необходимо записать. После того как информация будет записана, курсор переместится в конец выделенной для этого области, как и на обычном терминале. Любая строка, выходящая за пределы правого края экрана, усекается, а не переносится на другую строку. Хотя этот способ отличается от обычного вывода на терминал, он подходит для большинства полноэкранных приложений, в которых текст, переводимый на новую строку, искажает содержимое экрана.
SLsmg_write_char() |
Среди всех функций вывода данных на экран это самая простая функция. Она записывает передаваемый символ в текущую позицию курсора и перемещает курсор. |
SLsmg_write_string() |
Выводит на экран передаваемую ей строку. |
SLsmg_write_nchars() |
Выводит на экран символы length , на которые указывает chars . Символ конца строки NULL игнорируется — если он будет найден, выводится комбинация '\0' и подпрограмма продолжает работу после окончания строки. |
SLsmg_write_nstring() |
Выводит на экран не более length символов из str . Если str содержит менее length символов, оставшееся пространство заполняется пробелами. |
SLsmg_printf() |
Как можно судить из имени функции, она работает подобно стандартной функции printf() , форматируя первый аргумент, а остальные аргументы используются в качестве параметров для форматирования. После этого на экран выводится сформатированная строка. |
SLsmg_vprintf() |
Подобно функции vfprintf() из библиотеки С. Эта функция ожидает получение аргумента va_arg , который она использует для форматирования первого параметра. Затем на экран выводится сформатированная строка. |
SLsmg_write_wrapped_string() |
Хотя S-Lang отсекает строки, а не переносит их на следующие строки, она предлагает простую функцию для записи строк, перенесенных в произвольную прямоугольную область экрана. Функция SLsmg_write_wrapped_string() записывает строку str в прямоугольную область, которая начинается в row и column и имеет размеры height и width . Несмотря на то что эта подпрограмма осуществляет перенос границ слов, последовательность \n указывает на необходимость перехода на следующую строку. Если последний параметр fill имеет ненулевое значение, то каждая строка будет заполнена по всей ширине прямоугольной области, а при необходимости будут добавляться пробелы. |
24.2.8. Рисование линий и прямоугольников
Хотя функция SLsmg_set_char_set()
предлагает весь спектр функциональных возможностей, необходимых для рисования простой линейной графики на терминале, в библиотеке S-Lang для этого предусмотрено несколько простых функций.
void SLsmg_draw_hline(int row);
void SLsmg_draw_vline(int column);
void SLsmg_draw_box(int row, int column, int height, int width);
Функция SLsmg_draw_hline()
рисует одну горизонтальную линию в строке row
, а функция SLsmg_draw_vline()
— одну вертикальную линию в колонке col
.
Функция SLsmg_draw_box()
рисует прямоугольник, начиная с row
и col
, который простирается на height
строк и width
колонок. Функция SLsmg_draw_box()
подобна комбинации функций SLsmg_draw_hline()
и SLsmg_draw_vline()
, однако вдобавок она получает информацию о вершинах.
Интервал:
Закладка: