早在Slackware和RedHat之前的Fedora时代,就有一种控制台字体,有时称为“ rock”或“ t”。我已经搜索了很多次,但是找不到任何参考。我认为,如果可能的话,将其重新安装到Ubuntu上将很有趣。有人知道它现在会被称为什么吗,或者我可以在其他系统上使用它的TrueType版本吗?
早在Slackware和RedHat之前的Fedora时代,就有一种控制台字体,有时称为“ rock”或“ t”。我已经搜索了很多次,但是找不到任何参考。我认为,如果可能的话,将其重新安装到Ubuntu上将很有趣。有人知道它现在会被称为什么吗,或者我可以在其他系统上使用它的TrueType版本吗?
Answers:
AFAIK没有该字体的现有端口,可用于任何Outline变体。但是,这里有一些细节和技巧可能会对您有所帮助。
该t.fnt,熔融石,是由(前?)创建clySmic软件,并有可能拉尔夫乙JR史密斯,总裁/首席程序员/库克/洗瓶机。它是位图字体,已包含在DOS和OS / 2的VFONT程序中。它加载VGA系统的替换字体。作者提供的名字是Tektite,被描述为“一种“建筑师”风格的字体。”
可以在档案CVFONT.ZIP和CVFONTA.ZIP中下载 VFONT。的熔融石字体是后者的一部分。前者是仅用于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...,或者,当然,也可以从包含它们的各种发行版之一下载它。
这些文件可以通过以下方式直接加载到终端中:
setfont t.fnt
该字体在Linux中通过VFONT程序的选项为其命名。Tektite有/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
由于所有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字体,因此必须将其转换为另一种格式。更简单的转换之一可能是到BDF。一种选择是使用John Elliot的PSF工具。首先从RAW转换为PSF,然后从PSF转换为BDF:
raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf
现在可以在FontForge中打开BDF文件
由于该过程非常简单(所有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;
}ACVFONTA的结束。我刚刚下载了它,并且它存在。替代链接:kimludvigsen.dk/os2/gfd/wps/font/index.php,其中的名称为cvfonta.zip –您链接中的字体也匹配并且可以在这里找到,并diff显示与该字体相同的字体。提到ZIP存档。