Tôi có thể tìm thấy một phiên bản hiện đại của kiểu chữ giao diện điều khiển Rock đá (hay còn gọi là gì?


8

Quay trở lại thời Slackware và RedHat-trước Fedora, có một phông chữ điều khiển được gọi là "rock" hoặc "t". Tôi đã tìm kiếm điều này nhiều lần, nhưng không thể tìm thấy bất kỳ tài liệu tham khảo nào về nó. Tôi nghĩ sẽ rất vui nếu mang nó trở lại trên Ubuntu, nếu có thể. Có ai biết nó sẽ được gọi là gì bây giờ không, hoặc nếu có phiên bản TrueType của nó, tôi có thể đưa vào các hệ thống khác không?


3
Đây có phải là phông chữ bạn đang tìm kiếm? i.stack.imgur.com/lvMUZ.png
Runium

Vâng, đó là một trong những!
David Krider

Câu trả lời:


19

AFAIK không có cổng hiện có của phông chữ này cho bất kỳ biến thể phác thảo nào. Tuy nhiên, đây là một số chi tiết và hack, có thể giúp bạn trên đường đi.

Các t.fnt , Tektite, được tạo ra bởi (cựu?) ClySmic phần mềm , và có khả năng Ralph B Smith Jr, Chủ tịch / Giám Programmer / Nấu / chai máy giặt . Đó là một phông chữ bitmap được bao gồm trong chương trình VFONT cho DOS và OS / 2. Nó tải phông chữ thay thế cho các hệ thống VGA. Tên của tác giả được đặt tên là Tektite và được mô tả là phông chữ theo phong cách "Kiến trúc sư".

VFONT có thể được tải xuống trong kho lưu trữ CVFONT.ZIP và CVFONTA.ZIP. Các Tektite phông chữ là một phần của sau này. Trước đây là phiên bản cũ hơn chỉ dành cho DOS.

VFONT và khai thác:

Kho lưu trữ bao gồm chương trình DOS, VFONT.COM, OS / 2 chương trình VFONT2.EXE, cơ sở dữ liệu phông chữ VFONT.DAT và README.MAN. VFONT.DAT chứa 13 phông chữ bitmap được lưu trữ trở lại. Để giải nén phông chữ Tektite, hãy làm:

dd if=VFONT.DAT of=t.fnt bs=1 skip=28672 count=4096

Điều này cung cấp cho bạn một tệp phông chữ loại RAW, là tệp có trong ví dụ Slackware.

Mỗi phông chữ là 4096 byte. Vì vậy, để trích xuất những người khác chỉ cần thay đổi tùy chọn bỏ qua . Tức c.fntlà sau khi t.fntcung cấp cho bạn một giá trị bỏ qua 28672 + 4096 = 32768. Tất cả các phông chữ được bao gồm trong Linux và để thực hiện trích xuất hoàn chỉnh, người ta có thể làm:

#!/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

... hoặc, tất nhiên, tải xuống từ một trong những bản phát hành khác nhau bao gồm chúng.

Các tệp này có thể được tải trực tiếp trong thiết bị đầu cuối bằng cách:

setfont t.fnt

Đặt tên trong Linux

Phông chữ được đặt tên trong Linux bởi các tùy chọn cho chương trình VFONT. Tektite có /T. Các phông chữ khác cũng được bao gồm, cũng được đặt tên theo tùy chọn dòng lệnh cho VFONT. ( / S = s.fnt, / SD = sd.fnt, / RO = ro.fnt ... vv)

Phông chữ RAW

Định dạng phông chữ RAW (lỗi thời nhưng được công nhận) là định dạng phông chữ đơn giản nhất. Nó không có tiêu đề, không có chân trang, không có byte thoát, v.v. Nó thường có chiều rộng 8 pixel (bit) - cũng như các phông chữ VFONT. Họ luôn có 256 glyphs.

Từ đó chúng ta có thể dễ dàng tính được chiều cao bằng cách:

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

Vì tất cả các phông chữ VFONT có kích thước 4096, chúng tôi cũng biết rằng tất cả chúng đều có chiều cao 16 pixel (bit). Điều đó cũng cho rằng mỗi glyph là 16 byte.

Kết xuất ASCII

Vì các phông chữ phù hợp với phạm vi ASCII khi nói đến 0x20 (dấu cách) - 0x7e (dấu ngã), chúng ta có thể thực hiện kết xuất ASCII đơn giản của glyphs.

Ví dụ, chữ cái Acó vị trí 65. Vì mỗi glyph là 8 × 16 = 128 bit, chúng ta có chúng ở 128/8 = 16 byte.

Khi 65 × 16 = 1040, chúng ta có thể trích xuất glyph Abằng cách (ở đây bao gồm chuyển đổi thành nhị phân và thay thế 0 và 1 để dễ đọc hơn):

xxd -s 1040 -l 16 -b -c 1 t.fnt | cut -d' ' -f 2 | tr 0 ' ' | tr 1 '#'

Cung cấp cho chúng tôi:

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

Sử dụng một số mã C đơn giản, chúng tôi cũng có thể hiển thị một số hình ảnh PBM đơn giản. Đây là đầu ra mẫu từ tất cả các phông chữ trong VFONT:

Mẫu VFONT

Chỉnh sửa với FontForge

Nếu bạn muốn làm việc với phông chữ tôi đoán bạn có thể đến FontForge . Vì nó không nhận ra phông chữ RAW, bạn phải chuyển đổi nó sang định dạng khác. Một trong những chuyển đổi đơn giản hơn có thể là BDF. Một lựa chọn là sử dụng Công cụ PSF của John Elliot . Đầu tiên chuyển đổi từ RAW sang PSF sau đó PSF sang BDF:

raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf

Bây giờ có thể mở tệp BDF trong FontForge

Vì quy trình này khá đơn giản (và giống nhau cho tất cả các VFONT), bạn cũng có thể sử dụng tập lệnh này để chuyển đổi trực tiếp sang định dạng BDF:

Sử dụng mẫu:

./raw2bdf Tektite t.fnt > t.bdf

Cung cấp cho bạn phông chữ Tektite dưới dạng 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"
    }
'

Các phiên bản khác

Có một số phiên bản sửa đổi của phông chữ Tektite. Nếu bạn tìm kiếm nó, tùy ý thêm eg clysmicv vào cụm từ tìm kiếm bạn có thể nghiên cứu.

Kết xuất hình ảnh

Để hoàn thiện, tôi thêm mã C được trộn để tạo hình ảnh ở trên. displayconvertlà một phần của ImageMagick .

Sử dụng mẫu:

$ ./fntsampler t.fnt hello a

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

$ ./fntsampler t.fnt "Hello World!" > hello.pbm
$ display hello.pbm

Xin chào Wold trong Tekite

Hình ảnh mẫu của tất cả các phông chữ ở trên được tạo bởi:

$ for f in *.fnt; do ./fntsampler "$f" "$(printf "%-6s Hello ABC abc 123" "$f")" | convert - "${f%.*}.png"; done

$ convert -negate -append *.png collection.png

Mã số:

#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 bị thiếu trong kho lưu trữ được liên kết. Tôi đã đi trên một hành trình và tìm thấy cái này, đó kho lưu trữ Slackware tập trung vào phông chữ mà tôi đang nghĩ về: ibiblio.org/pub/historic-linux/distribution/slackware-2.1/usr/ . Các phông chữ được chia ra ở đây.
David Krider

1
@DavidKrider: Bạn đang tải CVFONTA.ZIP? Không có Acuối CVFONTA. Tôi chỉ cần tải về nó và nó là hiện tại. Liên kết thay thế: kimludvigsen.dk/os2/gfd/wps/font/index.php nơi nó được đặt tên là cvfonta.zip - Các phông chữ trong liên kết của bạn cũng khớp với nhau và ở đây diffhiển thị chúng giống hệt với những cái được tìm thấy trong đã đề cập đến kho lưu trữ ZIP.
Runium

Tôi thực sự đã bỏ lỡ "A". Xin lỗi vì sự nhầm lẫn.
David Krider

Bây giờ tôi đang sử dụng phông chữ và nó tuyệt vời như tôi nhớ.
David Krider
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.