Di mana saya dapat menemukan jenis huruf "rock" (atau "t") versi modern?

8

Kembali di Slackware dan RedHat-pra-Fedora, ada font konsol yang disebut, "rock", atau "t". Saya sudah sering mencari ini, tetapi tidak dapat menemukan referensi untuk itu. Saya pikir akan menyenangkan untuk mengembalikannya di Ubuntu, jika memungkinkan. Apakah ada yang tahu apa namanya sekarang, atau jika ada versi TrueType saya bisa memakai sistem lain?

David Krider
sumber
3
Apakah ini font yang Anda cari? i.stack.imgur.com/lvMUZ.png
Runium
Ya, itu dia!
David Krider 4-15

Jawaban:

19

AFAIK tidak ada porta font yang ada ini untuk varian garis besar apa pun. Namun, berikut ini beberapa perincian, dan peretasan, yang mungkin membantu Anda dalam perjalanan.

The t.fnt , tektite, diciptakan oleh (mantan?) ClySmic Software , dan kemungkinan Ralph B Smith Jr, Presiden / Kepala Programmer / Masak / Botol Washer . Ini adalah font bitmap yang disertakan dengan program VFONT untuk DOS dan OS / 2. Ini memuat font pengganti untuk sistem VGA. Nama yang diberikan oleh penulis adalah Tektite dan digambarkan sebagai font gaya "a" Architect "."

VFONT dapat diunduh di arsip CVFONT.ZIP dan CVFONTA.ZIP. The tektite font bagian dari yang terakhir. Yang pertama adalah versi yang lebih lama hanya untuk DOS.

VFONT dan ekstraksi:

Arsipnya terdiri dari program DOS, VFONT.COM, program OS / 2 VFONT2.EXE, basis data font VFONT.DAT dan README.MAN. VFONT.DAT berisi 13 font bitmap yang disimpan kembali ke belakang. Untuk mengekstrak font Tektite lakukan:

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

Ini memberi Anda file font tipe RAW, yang termasuk dalam misalnya Slackware.

Setiap font adalah 4096 byte. Jadi untuk mengekstrak yang lain cukup ubah opsi lewati . Yaitu c.fntyang datang setelah t.fntmemberi Anda nilai lewati 28672 + 4096 = 32768. Semua font termasuk dalam Linux, dan untuk melakukan ekstraksi lengkap yang bisa dilakukan:

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

... atau, tentu saja, unduh dari salah satu dari berbagai distro yang menyertakannya.

File-file ini dapat dimuat langsung di terminal dengan mis:

setfont t.fnt

Penamaan di Linux

Font diberi namanya di Linux oleh opsi untuk program VFONT. Tektite memiliki /T. Font lain juga disertakan, juga dinamai dengan opsi baris perintah untuk VFONT. ( / S = s.fnt, / SD = sd.fnt, / RO = ro.fnt ... dll.)

Font RAW

Format font RAW (usang tetapi dikenali) adalah format font paling sederhana yang ada. Ini tidak memiliki header, tidak ada footer, tidak ada byte melarikan diri dll. Biasanya memiliki lebar 8 piksel (bit) - seperti halnya font VFONT. Mereka selalu memiliki 256 mesin terbang.

Dari sini kita dapat dengan mudah menghitung ketinggian dengan:

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

Karena semua font VFONT memiliki ukuran 4.096, kita juga tahu tingginya 16 piksel (bit). Itu juga memberikan bahwa setiap mesin terbang adalah 16 byte.

Rendering ASCII

Karena font sesuai dengan rentang ASCII ketika datang ke 0x20 (spasi) - 0x7e (tilde) kita dapat melakukan rendering ASCII sederhana dari mesin terbang.

Misalnya surat itu Amemiliki posisi 65. Karena setiap mesin terbang adalah 8 × 16 = 128 bit kita memilikinya pada 128/8 = 16 byte.

Karena 65 × 16 = 1040 kita dapat mengekstraksi mesin terbang Adengan (di sini termasuk konversi ke biner dan penggantian 0 dan 1 untuk membuatnya lebih mudah dibaca):

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

Yang memberi kita:

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

Dengan menggunakan beberapa kode-C sederhana kita juga dapat membuat beberapa gambar PBM sederhana. Berikut ini contoh keluaran dari semua font di VFONT:

Sampel VFONT

Editing dengan FontForge

Jika Anda ingin bekerja dengan font, saya kira Anda mungkin pergi ke FontForge . Karena tidak mengenali font RAW, Anda harus mengubahnya ke format lain. Salah satu konversi yang lebih sederhana adalah BDF. Salah satu opsi adalah menggunakan Alat PSF John Elliot . Konversi pertama dari RAW ke PSF kemudian PSF ke BDF:

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

File BDF sekarang dapat dibuka di FontForge

Karena prosesnya agak sederhana (dan sama untuk semua VFONT), Anda juga dapat menggunakan skrip ini untuk mengonversi langsung ke format BDF:

Penggunaan sampel:

./raw2bdf Tektite t.fnt > t.bdf

Memberi Anda font Tektite sebagai 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"
    }
'

Versi lain

Ada beberapa versi modifikasi dari font Tektite. Jika Anda mencarinya, tambahkan misalnya "clysmic" ke frasa pencarian yang dapat Anda pelajari.

Render gambar

Demi kelengkapan saya menambahkan kode-C tumbuk untuk membuat gambar di atas. displaydan convertmerupakan bagian dari ImageMagick .

Penggunaan sampel:

$ ./fntsampler t.fnt hello a

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

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

Halo Wold di Tekite

Gambar contoh semua font di atas dibuat oleh:

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

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

Kode:

#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;
}
Runium
sumber
VFONT.DAT hilang dari arsip yang ditautkan. Saya melakukan perjalanan, dan menemukan ini, yang merupakan arsip Slackware yang berpusat pada font yang saya pikirkan: ibiblio.org/pub/historic-linux/distributions/slackware-2.1/usr/… . Semua font rusak di sini.
David Krider
1
@DavidKrider: Apakah Anda mengunduh CVFONTA.ZIP? Tidak ada Apada akhir CVFONTA. Saya baru saja mengunduhnya dan sudah ada. Tautan alternatif: kimludvigsen.dk/os2/gfd/wps/font/index.php dengan nama cvfonta.zip - Fon di tautan Anda juga cocok dan OK di sini, dan diffmenunjukkannya identik dengan yang ditemukan di disebutkan arsip ZIP.
Runium
Aku memang merindukan "A" itu. Maaf bila membingungkan.
David Krider
Saya menggunakan font sekarang, dan itu sama mengagumkan seperti yang saya ingat.
David Krider