SLsmg_write_char() | Среди всех функций вывода данных на экран это самая простая функция. Она записывает передаваемый символ в текущую позицию курсора и перемещает курсор. |
SLsmg_write_string() | Выводит на экран передаваемую ей строку. |
SLsmg_write_nchars() | Выводит на экран символы length , на которые указывает chars . Символ конца строки NULL игнорируется — если он будет найден, выводится комбинация ' ' и подпрограмма продолжает работу после окончания строки. |
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 . Несмотря на то что эта подпрограмма осуществляет перенос границ слов, последовательность
указывает на необходимость перехода на следующую строку. Если последний параметр 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()
, однако вдобавок она получает информацию о вершинах.
Далее представлен пример программы, которая рисует экран, отображающий обычный и альтернативный наборы символов. В программе также демонстрируется простое использование функции SLsmg_draw_box()
.
1: /* slcharset.с */
2:
3: #include <slang/slang.h>
4: #include <stdio.h>
5: #include <sys/ioctl.h>
6: #include <termios.h>
7:
8: /* отображает таблицу, содержащую 256 символов из одного набора символов,
9: начиная со столбца col. Поверх таблицы отображается метка 'label',
10: а альтернативный набор символов будет отображаться в том случае,
11: если isAlternate будет иметь ненулевое значение */
12: static void drawCharSet(int col, int isAlternate, char * label) {
13: int i, j;
14: int n = 0;
15:
16: /* нарисовать прямоугольник */
17: SLsmg_draw_box(0, col, 20, 38);
18:
19: /* центрировать надпись */
20: SLsmg_gotorc(0, col + 2);
21: SLsmg_write_string(label);
22:
23:
24: /* нарисовать горизонтальную линию */
25: SLsmg_gotorc(2, col + 4);
26: SLsmg_write_string('0123456789ABCDEF');
27:
28: /* задать используемый набор символов */
29: SLsmg_set_char_set(isAlternate);