AFAIK tidak ada porta font yang ada ini untuk varian garis besar apa pun. Namun, berikut ini beberapa perincian, dan peretasan, yang mungkin membantu Anda dalam perjalanan.
The t.fnt , tektite, diciptakan oleh (mantan?) ClySmic Software , dan kemungkinan Ralph B Smith Jr, Presiden / Kepala Programmer / Masak / Botol Washer . Ini adalah font bitmap yang disertakan dengan program VFONT untuk DOS dan OS / 2. Ini memuat font pengganti untuk sistem VGA. Nama yang diberikan oleh penulis adalah Tektite dan digambarkan sebagai font gaya "a" Architect "."
VFONT dapat diunduh di arsip CVFONT.ZIP dan CVFONTA.ZIP. The tektite font bagian dari yang terakhir. Yang pertama adalah versi yang lebih lama hanya untuk DOS.
VFONT dan ekstraksi:
Arsipnya terdiri dari program DOS, VFONT.COM, program OS / 2 VFONT2.EXE, basis data font VFONT.DAT dan README.MAN. VFONT.DAT berisi 13 font bitmap yang disimpan kembali ke belakang. Untuk mengekstrak font Tektite lakukan:
dd if=VFONT.DAT of=t.fnt bs=1 skip=28672 count=4096
Ini memberi Anda file font tipe RAW, yang termasuk dalam misalnya Slackware.
Setiap font adalah 4096 byte. Jadi untuk mengekstrak yang lain cukup ubah opsi lewati . Yaitu c.fnt
yang datang setelah t.fnt
memberi Anda nilai lewati 28672 + 4096 = 32768
. Semua font termasuk dalam Linux, dan untuk melakukan ekstraksi lengkap yang bisa dilakukan:
#!/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
... atau, tentu saja, unduh dari salah satu dari berbagai distro yang menyertakannya.
File-file ini dapat dimuat langsung di terminal dengan mis:
setfont t.fnt
Penamaan di Linux
Font diberi namanya di Linux oleh opsi untuk program VFONT. Tektite memiliki /T
. Font lain juga disertakan, juga dinamai dengan opsi baris perintah untuk VFONT. ( / S = s.fnt, / SD = sd.fnt, / RO = ro.fnt ... dll.)
Font RAW
Format font RAW (usang tetapi dikenali) adalah format font paling sederhana yang ada. Ini tidak memiliki header, tidak ada footer, tidak ada byte melarikan diri dll. Biasanya memiliki lebar 8 piksel (bit) - seperti halnya font VFONT. Mereka selalu memiliki 256 mesin terbang.
Dari sini kita dapat dengan mudah menghitung ketinggian dengan:
file_size (bits) 8 × 4096
h = -------------------- e.g. h = ------------- = 16
w × 256 8 × 256
Karena semua font VFONT memiliki ukuran 4.096, kita juga tahu tingginya 16 piksel (bit). Itu juga memberikan bahwa setiap mesin terbang adalah 16 byte.
Rendering ASCII
Karena font sesuai dengan rentang ASCII ketika datang ke 0x20 (spasi) - 0x7e (tilde) kita dapat melakukan rendering ASCII sederhana dari mesin terbang.
Misalnya surat itu A
memiliki posisi 65. Karena setiap mesin terbang adalah 8 × 16 = 128 bit kita memilikinya pada 128/8 = 16 byte.
Karena 65 × 16 = 1040 kita dapat mengekstraksi mesin terbang A
dengan (di sini termasuk konversi ke biner dan penggantian 0 dan 1 untuk membuatnya lebih mudah dibaca):
xxd -s 1040 -l 16 -b -c 1 t.fnt | cut -d' ' -f 2 | tr 0 ' ' | tr 1 '#'
Yang memberi kita:
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
Dengan menggunakan beberapa kode-C sederhana kita juga dapat membuat beberapa gambar PBM sederhana. Berikut ini contoh keluaran dari semua font di VFONT:
Editing dengan FontForge
Jika Anda ingin bekerja dengan font, saya kira Anda mungkin pergi ke FontForge . Karena tidak mengenali font RAW, Anda harus mengubahnya ke format lain. Salah satu konversi yang lebih sederhana adalah BDF. Salah satu opsi adalah menggunakan Alat PSF John Elliot . Konversi pertama dari RAW ke PSF kemudian PSF ke BDF:
raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf
File BDF sekarang dapat dibuka di FontForge
Karena prosesnya agak sederhana (dan sama untuk semua VFONT), Anda juga dapat menggunakan skrip ini untuk mengonversi langsung ke format BDF:
Penggunaan sampel:
./raw2bdf Tektite t.fnt > t.bdf
Memberi Anda font Tektite sebagai 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"
}
'
Versi lain
Ada beberapa versi modifikasi dari font Tektite. Jika Anda mencarinya, tambahkan misalnya "clysmic" ke frasa pencarian yang dapat Anda pelajari.
Render gambar
Demi kelengkapan saya menambahkan kode-C tumbuk untuk membuat gambar di atas. display
dan convert
merupakan bagian dari ImageMagick .
Penggunaan sampel:
$ ./fntsampler t.fnt hello a
## ### ###
## ## ##
## ## ##
## ### ##### ## ## #####
## ## ## ## ## ## ## ## ##
#### #### ### ## ## ## ##
### ####### ## ## ## ##
## #### ## ## ## ##
## #### ## ## ## ## ##
## ## ###### ## ## #####
$ ./fntsampler t.fnt "Hello World!" > hello.pbm
$ display hello.pbm
Gambar contoh semua font di atas dibuat oleh:
$ for f in *.fnt; do ./fntsampler "$f" "$(printf "%-6s Hello ABC abc 123" "$f")" | convert - "${f%.*}.png"; done
$ convert -negate -append *.png collection.png
Kode:
#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;
}