我在哪里可以找到现代版本的“rock”(或“t”)控制台字体?

Dav*_*der 9 fonts console

回到 Slackware 和 RedHat-pre-Fedora 时代,有一种控制台字体,有时称为“rock”或“t”。我已经搜索了很多次,但找不到任何参考。如果可能的话,我认为将它带回 Ubuntu 会很有趣。有谁知道它现在叫什么名字,或者如果有它的 TrueType 版本我可以放在其他系统上?

Run*_*ium 20

AFAIK 没有此字体的现有端口到任何轮廓变体。然而,这里有一些细节和技巧,可能会对您有所帮助。

t.fnt,熔融石,是由(前?)创建clySmic软件,并有可能拉尔夫乙JR史密斯,总裁/首席程序员/库克/洗瓶机。它是一种位图字体,包含在用于 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
Run Code Online (Sandbox Code Playgroud)

这会为您提供一个 RAW 类型的字体文件,例如 Slackware 中包含的字体文件。

每个字体为 4096 字节。因此,要提取其他人,只需更改跳过选项即可。即c.fnt后面的t.fnt给你一个跳过值28672 + 4096 = 32768。所有字体都包含在 Linux 中,要进行完整的提取,可以这样做:

dd if=VFONT.DAT of=t.fnt bs=1 skip=28672 count=4096
Run Code Online (Sandbox Code Playgroud)

...或者,当然,从包含它们的各种发行版之一下载它。

这些文件可以直接在终端中加载,例如:

setfont t.fnt
Run Code Online (Sandbox Code Playgroud)

Linux 中的命名

该字体在 Linux 中由 VFONT 程序的选项命名。泰克泰特有/T。其他字体也包括在内,也由 VFONT 的命令行选项命名。( /S = s.fnt, /SD = sd.fnt, /RO = ro.fnt ...等)

原始字体

(过时但被认可的)RAW 字体格式是最简单的字体格式。它没有页眉,没有页脚,没有转义字节等。它通常有 8 个像素(位)的宽度——就像 VFONT 字体一样。他们总是有 256 个字形。

由此我们可以很容易地计算出高度:

      file_size (bits)               8 × 4096
h = -------------------- e.g.  h = ------------- = 16
          w × 256                    8 × 256
Run Code Online (Sandbox Code Playgroud)

由于所有 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 '#'
Run Code Online (Sandbox Code Playgroud)

这给了我们:

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
Run Code Online (Sandbox Code Playgroud)

使用一些简单的 C 代码,我们还可以渲染一些简单的 PBM 图像。以下是 VFONT 中所有字体的示例输出:

VFONT 示例

使用 FontForge 进行编辑

如果你想使用字体,我想你可以去FontForge。由于它无法识别 RAW 字体,因此您必须将其转换为另一种格式。一种更简单的转换可能是到 BDF。一种选择是使用John Elliot 的 PSF 工具。首先从 RAW 转换为 PSF,然后将 PSF 转换为 BDF:

raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf
Run Code Online (Sandbox Code Playgroud)

BDF 文件现在可以在 FontForge 中打开

由于该过程相当简单(对于所有 VFONT 也是如此),您还可以使用此脚本直接转换为 BDF 格式:

示例用法:

./raw2bdf Tektite t.fnt > t.bdf
Run Code Online (Sandbox Code Playgroud)

为您提供 BDF 的 Tektite 字体。

#!/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"
    }
'
Run Code Online (Sandbox Code Playgroud)

其他版本

Tektite 字体有几个修改版本。如果您搜索它,可选择将例如“clysmic”添加到您可以研究的搜索词组中。

图像渲染

为了完整起见,我添加了混搭的 C 代码以创建上面的图像。display并且convertImageMagick 的一部分。

示例用法:

$ ./fntsampler t.fnt hello a

##                ###     ###           
##                 ##      ##           
##                 ##      ##           
##  ###   #####    ##      ##     ##### 
## ## ## ##   ##   ##      ##    ##   ##
####  ####  ###    ##      ##   ##    ##
###   #######      ##      ##   ##    ##
##    ####         ##      ##   ##    ##
##    ####    ##   ##      ##   ##   ## 
##    ## ######    ##      ##    #####  

$ ./fntsampler t.fnt "Hello World!" > hello.pbm
$ display hello.pbm
Run Code Online (Sandbox Code Playgroud)

你好,在 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
Run Code Online (Sandbox Code Playgroud)

代码:

#!/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
Run Code Online (Sandbox Code Playgroud)