AFAIK нет существующих портов этого шрифта для любого варианта схемы. Вот, однако, некоторые детали и хаки, которые могут помочь вам в пути.
T.fnt , тектитовых, был создан (бывший?) ClySmic Software , и , вероятно , Ральф B Смит - младший, президент / главный программист / Cook / Bottle Washer . Это растровый шрифт, который был включен в программу VFONT для DOS и OS / 2. Он загружает сменные шрифты для систем VGA. Его имя, данное автором, называется Tektite и описывается как «шрифт стиля« Архитектор »».
VFONT можно скачать в архивах CVFONT.ZIP и CVFONTA.ZIP. Тектитовый шрифт является частью последнего. Первая - более старая версия только для DOS.
VFONT и добыча:
Архив состоит из программы DOS, VFONT.COM, программы OS / 2 VFONT2.EXE, базы данных шрифтов VFONT.DAT и README.MAN. VFONT.DAT содержит 13 растровых шрифтов, хранящихся вплотную. Чтобы извлечь шрифт Tektite:
dd if=VFONT.DAT of=t.fnt bs=1 skip=28672 count=4096
Это дает вам файл шрифта типа RAW, который включен, например, в Slackware.
Каждый шрифт составляет 4096 байт. Таким образом, чтобы извлечь другие, просто измените параметр пропуска . Т.е., c.fnt
который идет после того, как t.fnt
дает вам значение пропуска 28672 + 4096 = 32768
. Все шрифты включены в Linux, и для полного извлечения можно сделать:
#!/bin/bash
pos=0
for n in s sd r ro rl mu ml t c b m mr sc; do
dd if=VFONT.DAT of=$n.fnt bs=1 skip=$pos count=4096
((pos += 4096))
done
... или, конечно, скачать его из одного из дистрибутивов, который включает их.
Эти файлы могут быть загружены непосредственно в терминал, например:
setfont t.fnt
Именование в Linux
Шрифт получил свое имя в Linux в настройках программы VFONT. Тектит имеет /T
. Другие шрифты также включены, также названы опцией командной строки для VFONT. ( / S = s.fnt, / SD = sd.fnt, / RO = ro.fnt ... и т. Д.)
RAW шрифты
(Устаревший, но признанный) формат шрифта RAW - самый простой из существующих форматов шрифтов. Он не имеет ни заголовка, ни нижнего колонтитула, ни escape-байтов и т. Д. Он обычно имеет ширину 8 пикселей (бит) - как и шрифты VFONT. У них всегда есть 256 символов.
Из этого мы можем легко рассчитать высоту по:
file_size (bits) 8 × 4096
h = -------------------- e.g. h = ------------- = 16
w × 256 8 × 256
Поскольку все шрифты VFONT имеют размер 4096, мы также знаем, что все они имеют высоту 16 пикселей (бит). Это также дает, что каждый глиф составляет 16 байтов.
ASCII рендеринг
Поскольку шрифты соответствуют диапазону ASCII, когда дело доходит до 0x20 (пробел) - 0x7e (тильда), мы можем сделать простую визуализацию глифов в ASCII.
Например, буква A
имеет позицию 65. Поскольку каждый глиф имеет размер 8 × 16 = 128 бит, мы имеем их в 128/8 = 16 байтов.
При 65 × 16 = 1040 мы можем извлечь глиф следующим A
образом (здесь включая преобразование в двоичный файл и замену 0 и 1, чтобы сделать его более читабельным):
xxd -s 1040 -l 16 -b -c 1 t.fnt | cut -d' ' -f 2 | tr 0 ' ' | tr 1 '#'
Что дает нам:
Output from | Data in file
command: | Binary: Hex: Offset Offset
| Hex: Dec:
| 00000000 00 410 1040
| 00000000 00 411 1041
## | 00011000 18 412 1042
## | 00011000 18 413 1043
#### | 00111100 3c 414 1044
# # | 00100100 24 415 1045
## ## | 01100110 66 416 1046
## ### | 01101110 6e 417 1047
#### # | 01111010 7a 418 1048
### ## | 11100011 e3 419 1049
## ## | 11000011 c3 41a 1050
## ## | 11000011 c3 41b 1051
| 00000000 00 41c 1052
| 00000000 00 41d 1053
| 00000000 00 41e 1054
| 00000000 00 41f 1055
Используя некоторый простой C-код, мы также можем визуализировать несколько простых изображений PBM. Вот пример вывода всех шрифтов в VFONT:
Редактирование с помощью FontForge
Если вы хотите работать со шрифтом, я думаю, вы можете перейти к FontForge . Поскольку он не распознает шрифты RAW, его необходимо преобразовать в другой формат. Одним из более простых преобразований может быть BDF. Одним из вариантов является использование PSF Tools Джона Эллиота . Сначала конвертируйте из RAW в PSF, затем из PSF в BDF:
raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf
Файл BDF теперь можно открыть в FontForge
Поскольку процесс довольно прост (и одинаков для всех VFONT), вы также можете использовать этот скрипт для непосредственного преобразования в формат BDF:
Пример использования:
./raw2bdf Tektite t.fnt > t.bdf
Дает вам шрифт Tektite как BDF.
#!/bin/bash
if [ $# -lt 2 ]; then
printf "Usage: %s <NAME> <raw-fnt-file>\n" $0
exit
fi
name=$1
file=$2
cat <<EOM
STARTFONT 2.1
FONT $name
SIZE 16 75 75
FONTBOUNDINGBOX 8 16 0 -4
STARTPROPERTIES 3
FONT_DESCENT 4
FONT_ASCENT 12
DEFAULT_CHAR 255
ENDPROPERTIES
CHARS 256
EOM
hexdump -ve '/1 "%02x\n"' "$file" | awk '
BEGIN {
n = 0;
}
(!((NR - 1) % 16)) {
if (n > 0)
print "ENDCHAR"
printf "STARTCHAR C00%02x\n"\
"ENCODING %d\n"\
"SWIDTH 666 0\n"\
"DWIDTH 8 0\n"\
"BBX 8 16 0 -4\n"\
"BITMAP\n",
n, n
++n
}
{
print $0
}
END {
print "ENDCHAR"
print "ENDFONT"
}
'
Другие версии
Существует несколько модифицированных версий шрифта Tektite. Если вы ищете его, добавьте, например, «clysmic» к поисковой фразе, по которой вы можете изучить.
Рендеринг изображений
Для полноты картины я добавляю C-код, который используется для создания изображения выше. display
и convert
являются частью ImageMagick .
Пример использования:
$ ./fntsampler t.fnt hello a
## ### ###
## ## ##
## ## ##
## ### ##### ## ## #####
## ## ## ## ## ## ## ## ##
#### #### ### ## ## ## ##
### ####### ## ## ## ##
## #### ## ## ## ##
## #### ## ## ## ## ##
## ## ###### ## ## #####
$ ./fntsampler t.fnt "Hello World!" > hello.pbm
$ display hello.pbm
Образец изображения всех шрифтов выше был создан:
$ for f in *.fnt; do ./fntsampler "$f" "$(printf "%-6s Hello ABC abc 123" "$f")" | convert - "${f%.*}.png"; done
$ convert -negate -append *.png collection.png
Код:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int usage(char *me, char *s)
{
fprintf(stderr,
"Usage: %s <RAW-font-file> \"<string>\" [format] [[invert] | [dot] [blank]]\n\n"
" format p : PBM image (default).\n"
" a : ASCII.\n"
" invert i : invert b/w in PBM.\n"
" dot\n"
" blank : Dot / blank in ASCII mode.\n\n"
"%s\n"
,
me, errno ? "" : s
);
if (errno)
perror(s);
return 1;
}
int main(int argc, char *argv[])
{
char *me = argv[0];
char buf[4096];
size_t n;
char *p;
int i, j, k;
FILE *fh;
char *s;
char fmt = 'p', dot = '1', blank = '0';
if (argc < 3)
return usage(me, "Missing argument(s)");
if (!(fh = fopen(argv[1], "r")))
return usage(me, "Unable to open file");
if ((fread(buf, 1, 4096, fh) != 4096))
return usage(me, "Bad file size");
s = argv[2];
if ((n = strlen(s)) < 1)
return usage(me, "Empty string");
if (argc > 3)
fmt = argv[3][0];
if (fmt != 'a' && fmt != 'p')
return usage(me, "Unknown format");
if (fmt == 'a') {
dot = argc > 4 ? argv[4][0] : '#';
blank = argc > 5 ? argv[5][0] : ' ';
} else {
if (argc > 4 && argv[4][0] == 'i') {
dot = '0';
blank = '1';
}
printf("P1\n");
printf("#Text: \"%s\", using %s\n", s, argv[1]);
printf("%u 16\n", n * 8);
}
for (i = 0; i < 16; ++i) {
for (j = 0; j < (int)n; ++j) {
p = buf + (s[j] * 16) + i;
for (k = 7; k >= 0; --k) {
putchar((*p >> k) & 0x01 ? dot : blank);
}
/*putchar(' '); */
}
putchar('\n');
}
return 0;
}