Чтение онлайн

на главную

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Инициализировать уровень управления экраном в S-Lang можно очень просто:

void SLsmg_init_smg(void);

SLsmg_init_smg

24.2.2. Обновление экрана

Прежде чем результаты выполнения последовательности подпрограмм

SLsmg
смогут быть отражены на физическом терминале, необходимо вызвать функцию
SLsmg_refresh
. Эта функция не принимает аргументы и не возвращает значения, а обновляет физический терминал по результатам рисования чего-либо на экране, которое было выполнено со времени ее последнего вызова.

24.2.3.

Перемещение курсора

Как и в большинстве программ, курсор терминала используется библиотекой S-Lang для обозначения позиции, принятой по умолчанию, для ввода текста и для подсказки пользователю. Программы S-Lang могут перемещать курсор с помощью показанной ниже функции.

extern void SLsmg_gotorc(int row, int column);

Имейте в виду, что верхний левый угол экрана определяется координатами (

0, 0
), а нижний правый угол — (
SLtt_Screen_Rows - 1, SLtt_Screen_Cols - 1
).

24.2.4. Завершение управления экраном

Когда программа, использующая

SLsmg
, завершает свою работу, она должна послать библиотеке S-Lang соответствующее сообщение об этом, после чего библиотека освободит буферы и восстановит состояние терминала. Прежде чем сделать это, будет правильным переместить курсор вниз экрана и обновить дисплей, чтобы пользователь смог увидеть все выводимые данные.

24.2.5. Скелет программы управления экраном

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

SLsmg
библиотеки S-Lang.

 1: /* slinit.с */

 2:

 3: #include <slang/slang.h>

 4: #include <stdio.h>

 5: #include <sys/ioctl.h>

 6: #include <termios.h>

 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, ...);

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6