SlackwareとRedHat-pre-Fedoraの時代には、「rock」または「t」と呼ばれるコンソールフォントが存在していました。私はこれを何度も検索しましたが、それへの参照を見つけることができません。できればUbuntuに戻すのは楽しいと思いました。誰がそれが今何と呼ばれるか知っていますか、または私が他のシステムに置くことができるTrueTypeバージョンがある場合?
SlackwareとRedHat-pre-Fedoraの時代には、「rock」または「t」と呼ばれるコンソールフォントが存在していました。私はこれを何度も検索しましたが、それへの参照を見つけることができません。できればUbuntuに戻すのは楽しいと思いました。誰がそれが今何と呼ばれるか知っていますか、または私が他のシステムに置くことができるTrueTypeバージョンがある場合?
回答:
私の知る限りでは、このフォントの既存の移植版はありません。ただし、途中で役立つかもしれない詳細とハックがいくつかあります。
t.fnt、テクタイトは、(元?)により作成されたclySmicソフトウェア、およびおそらくラルフ・B・スミスジュニア、社長/チーフプログラマー/クック/洗濯機ボトル。これは、DOSおよびOS / 2用のVFONTプログラムに含まれていたビットマップフォントです。VGAシステムの代替フォントをロードします。著者が付けた名前はTektiteで、「「建築家」スタイルのフォント」と説明されています。
VFONTは、アーカイブCVFONT.ZIPおよびCVFONTA.ZIPからダウンロードできます。テクタイトのフォントは、後者の部分です。前者はDOS専用の古いバージョンです。
アーカイブは、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
...または、もちろん、それを含むさまざまなディストリビューションの1つからダウンロードします。
これらのファイルは、たとえば次のようにしてターミナルに直接ロードできます。
setfont t.fnt
Linuxでは、フォントはVFONTプログラムのオプションによってその名前が付けられました。テクタイトは持ってい/T
ます。他のフォントも含まれており、VFONTのコマンドラインオプションによって名前が付けられます。(/ S = s.fnt、/ SD = sd.fnt、/ RO = ro.fnt ...など)
(廃止されましたが認識されている)RAWフォント形式は、最も単純なフォント形式です。ヘッダー、フッター、エスケープバイトなどはありません。通常、VFONTフォントと同様に、幅は8ピクセル(ビット)です。彼らは常に256のグリフを持っています。
これから、次のようにして高さを簡単に計算できます。
file_size (bits) 8 × 4096
h = -------------------- e.g. h = ------------- = 16
w × 256 8 × 256
すべてのVFONTフォントのサイズは4096なので、すべてのフォントの高さが16ピクセル(ビット)であることがわかります。これにより、各グリフは16バイトになります。
フォントは0x20(スペース)– 0x7e(チルド)の場合、ASCII範囲に準拠しているため、グリフの単純な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を使用するとよいでしょう。RAWフォントを認識しないため、別の形式に変換する必要があります。より簡単な変換の1つは、BDFへの変換です。1つのオプションは、John ElliotのPSFツールを使用することです。最初に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フォントにはいくつかの修正バージョンがあります。それを検索する場合、必要に応じて、学習できる検索語句に「クライスミック」などを追加します。
完全を期すために、マッシュアップされたCコードを追加して上の画像を作成します。display
およびImageMagickのconvert
一部です。
使用例:
$ ./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;
}
A
終わりにありません。ダウンロードしたばかりです。代替リンク:kimludvigsen.dk/os2/gfd/wps/font/index.php(cvfonta.zipという名前)–リンク内のフォントも一致しており、ここで問題ありdiff
ません。 ZIPアーカイブについて言及。