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] в текущую позицию курсора, используя текущий цвет и набор символов. Однако все они по-разному определяют, какую строку необходимо записать. После того как информация будет записана, курсор переместится в конец выделенной для этого области, как и на обычном терминале. Любая строка, выходящая за пределы правого края экрана, усекается, а не переносится на другую строку. Хотя этот способ отличается от обычного вывода на терминал, он подходит для большинства полноэкранных приложений, в которых текст, переводимый на новую строку, искажает содержимое экрана.