「ロック」(または「t」)コンソールタイプフェースの最新バージョンはどこにありますか?


8

SlackwareとRedHat-pre-Fedoraの時代には、「rock」または「t」と呼ばれるコンソールフォントが存在していました。私はこれを何度も検索しましたが、それへの参照を見つけることができません。できればUbuntuに戻すのは楽しいと思いました。誰がそれが今何と呼ばれるか知っていますか、または私が他のシステムに置くことができるTrueTypeバージョンがある場合?


3
これはあなたが探しているフォントですか?i.stack.imgur.com/lvMUZ.png
Runium

はい、それです!
David Krider

回答:


19

私の知る限りでは、このフォントの既存の移植版はありません。ただし、途中で役立つかもしれない詳細とハックがいくつかあります。

t.fnt、テクタイトは、(元?)により作成されたclySmicソフトウェア、およびおそらくラルフ・B・スミスジュニア、社長/チーフプログラマー/クック/洗濯機ボトル。これは、DOSおよびOS / 2用のVFONTプログラムに含まれていたビットマップフォントです。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

...または、もちろん、それを含むさまざまなディストリビューションの1つからダウンロードします。

これらのファイルは、たとえば次のようにしてターミナルに直接ロードできます。

setfont t.fnt

Linuxでの命名

Linuxでは、フォントはVFONTプログラムのオプションによってその名前が付けられました。テクタイトは持ってい/Tます。他のフォントも含まれており、VFONTのコマンドラインオプションによって名前が付けられます。(/ S = s.fnt、/ SD = sd.fnt、/ RO = ro.fnt ...など)

RAWフォント

(廃止されましたが認識されている)RAWフォント形式は、最も単純なフォント形式です。ヘッダー、フッター、エスケープバイトなどはありません。通常、VFONTフォントと同様に、幅は8ピクセル(ビット)です。彼らは常に256のグリフを持っています。

これから、次のようにして高さを簡単に計算できます。

      file_size (bits)               8 × 4096
h = -------------------- e.g.  h = ------------- = 16
          w × 256                    8 × 256

すべてのVFONTフォントのサイズは4096なので、すべてのフォントの高さが16ピクセル(ビット)であることがわかります。これにより、各グリフは16バイトになります。

ASCIIレンダリング

フォントは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のすべてのフォントからの出力例を以下に示します。

VFONTサンプル

FontForgeによる編集

フォントを使用したい場合は、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

Tekiteでこんにちは

上記のすべてのフォントのサンプル画像は、以下によって作成されました。

$ 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;
}

リンクされたアーカイブにVFONT.DATがありません。私は旅に出て、これを見つけました。これ、私が考えていたフォントibiblio.org/pub/historic-linux/distributions/slackware-2.1/usr/…を中心としたSlackwareアーカイブです。フォントはすべてここで分割されています。
David Krider 2015

1
@DavidKrider:CVFONTA.ZIPをダウンロードしていますか?CVFONTAのA終わりにありません。ダウンロードしたばかりです。代替リンク:kimludvigsen.dk/os2/gfd/wps/font/index.php(cvfonta.zipという名前)–リンク内のフォントも一致しており、ここで問題ありdiffません。 ZIPアーカイブについて言及。
Runium、2015

私は確かにその「A」を逃した。混乱させて申し訳ありません。
David Krider

私は今フォントを使用しています、そしてそれは私が覚えているのと同じくらい素晴らしいです。
David Krider
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.