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 |
Записать строки на экран под управлением 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
.
Читать дальше