Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.220.223] |
|
Сообщ.
#1
,
|
|
|
Извиняюсь за надоедливость.
В чистой (не эмулятор терминала, загрузился передав ядру параметр nomodeset) буквенноцифровай консоли 80х25 (без фреймбуфера!) загрузил командой setfont шрифты, в ascii первый символ идёт NUL, потом SOH и т. д. В моих же шрифтах первым идёт символ копирайта - "С" в кружке, далее идут то же вполне печатные символы. По команде showconsolefont они все прекрасно выводятся на консоль, все 256 символов. Далее попытался вывести первый символ копирайта командой echo: echo -e "\x00" Но вывелось пустое место, при помощи такого вывода, выводятся: латиница, кириллица, цифры, а вот символы псевдографики вывести не удалось, вместо символов псевдографики выводится ромбик. Я не пойму почему так? И как можно вывести символы из командной строки, которые есть в шрифте. Некоторые спросят меня, зачем мне это когда есть графика, отвечаю. Хотел написать небольшую игру на баше и в шрифтах сделать некоторые изображения, комбинируя которые можно кое что нарисовать. Я понимаю что в эмуляторе, да и во фреймбуфере это работать не будет, но я просто хотел попробовать как у меня это получится в чистой консоли. Ведь линукс для людей, всё можно настроить, подправить исходники и вот тут сразу споткнулся казалось бы в простом. А теперь уже даже интересно почему echo не выводить некоторые символы из шрифта, при этом showconsolefont прекрасно выводит все символы которые есть в шрифте. И ещё, если при изменении шрифта не записать таблицу перекодировки для юникода, то кириллица не выведется, вместо неё будут вопросительные знаки. Ну откуда в чистой консоли может фигурировать юникод? Последний момент, неужели нет никакого способа как можно поменять количество столбцов и строк во фреймбуфере, уменьшив их количество при этом увеличив размеры знакоместа, кроме как записывая в виртуальный знакогенератор шрифт размерами 16х32? Команда fbset меняет разрешение, например с 1024х768 на 640х400 но при этом размер знакоместа не меняется, он как был маленьким так и останется, в результате начинает использоваться пол экрана, а вторая половина не используется. |
Сообщ.
#2
,
|
|
|
Если кому интересно, на другом форуме подсказали, надо вот так писать:
echo -e "\ua9" так работает, выводится символ копирайта. По логике вещей можно предположить следующее, echo передаёт в ядро число, а ядро воспринимает это как число-код юникода, так как локаль установлена в utf8, потом по таблице перекодировке (которая расположена в файле шрифта) ищет соответствие и выводит соответствующий символ. В таблице перекодировки, которая расположена в файле шрифта, в первой строке, получается для первого символа - первого знакоместа: 0x000 U+00a9 В шрифте это символ копирайта. Непонятно вот что, я ведь для echo явно в шестнадцатиричном виде указывал на него - x00, но почему то так не работает. Получается что x00 воспринимается как юникод....? |
Сообщ.
#3
,
|
|
|
Коды от нуля до 127 имеют одинаковое кодирование и в ASCII и в UNICODE.
|
Сообщ.
#4
,
|
|
|
Кое что прояснилось:
Все символы можно посмотреть командой: showconsolefont Или раскрыть файл шрифта: gunzip font.psf.gz # разархивирую файл со шрифтом psfgettable font.psf font.table # вынимаю из него таблицу перекодировки, если локаль utf8 то таблица перекодировки будет для юникода psf2txt font.psf font.txt # преобразовываю файл шрифта в текстовый вид, этот файл можно редактировать в текстовом редакторе, что именно редактировать можно догадаться по содержимому этого файла Если кому интересно, то после редактирования шрифта можно всё собрать в обратном порядке: txt2psf newfont.txt newfont.psf # создаём новый файл шрифта mv newfont.psf newfont1.psf # переименовываем файл шрифта psfaddtable newfont1.psf font.table newfont.psf # записываем таблицу перекодировки в новый фал шрифта, таблицу перекодировки то же можно отредактировать - это текстовый файл gzip newfont.psf # архивируем файл шрифта setfont newfont.psf.gz # записываем наш новый шрифт в знакогенератор, теперь будет работать этот шрифт Там где в шрифте элементы псевдографики, (имеются ввиду ячейки знакогенератора) наверное сам знакогенератор продолжает изображение копируя последний столбец, поэтому символы псевдографики изображаются непрерывными. Остальные символы будут разделены полоской шириной в один столбец. Поэтому если нужно создать свои символы псевдографики или какие нибудь изображения, то в файле шрифта менять нужно именно эти ячейки. И выводить, как подсказали на другом форуме, можно так: echo -e "\u......" где: \u...... код юникода, можно посмотреть в вынутом файле таблицы перекодировки, например: echo -e "\ua9" выведет первый символ - копирайт, это в шрифте которые у меня, в другом шрифте может быть и другой символ. Остались невыясненными следующие вопросы: Как изменить в чистой текстовой консоли количество выводимых строк и столбцов, без перезагрузки, из самой консоли? Ведь есть режимы 40х25, 160х50 и т.д. Для этого есть команда: resizecons 160x50 resizecons: resizecons: не удалось найти файл видеорежима 160х50 Вроде как надо - поставить svgalib, который принесет restoretextmode, который сгенерит файл 80x25, который... Дистрибутив у меня devuan - это ветка от debian без systemd. В нём в репозиториях svgalib нет. Скачал deb пакет и попытался из него использовать restoretextmode, но оказалось что нет библиотеки svgalib, её поставить так и не удалось. Может этот файл можно создать вручную в текстовом редакторе? Второй вопрос как изменить количество выводимых столбцов и строк в фреймбуфере, не прибегая к загрузке шрифта разрешением 16х32 fbset не подходит, так как: например у меня 1024х768, удалось выставить и реальные и виртуальные размеры 640х400, но сам размер знакоместа не изменился, в результате стало использоваться приблизительно пол экрана с размерами знакоместа такими какими они были ранее при 1024х768. |