В августе 2021 я уже писал на эту тему. Но потом мне захотелось прекрасного и недавно я доработал алгоритм, сведя его в отдельную процедуру и дополнив некоторыми возможностями.
Красиво оформлено через pastebin
Вот как выглядит результат работы этого скрипта
Функция border() принимает 2 аргумента. Первый, обязательный, текст для вывода внутри рамки. Второй, не обязательный, выбор типа рамки. Сейчас воспринимаются только два модификатора: g - graphical, и d - double, соответственно обычная и двойная псевдографические рамки.
По сути, модификатор просто определяет набор знаков, используемых для рисования. Всего имеется 8 компонентов рамки: 4 угла и 4 "стенки" - 2 вертикальных (левая/правая) и 2 горизонтальных (верхняя/нижняя). Меняя символы в этих наборах, можно без проблем рисовать рамки из любых символов.
Забавно, что символ "одиночная псевдографическая горизонталь" (переменные BTM и BBM в наборе "g", \Ux2500, если не ошибаюсь) я никак не мог ввести в консоли. Не помогала даже вставка из "таблицы символов".
Под катом - не раскрашенный текст скрипта на случай, если pastebin перестанет работать.