"rock"(또는 "t") 콘솔 글꼴의 최신 버전을 어디서 찾을 수 있나요?

"rock"(또는 "t") 콘솔 글꼴의 최신 버전을 어디서 찾을 수 있나요?

Slackware 및 RedHat-pre-Fedora 시대에는 "rock" 또는 "t"라고도 불리는 콘솔 글꼴이 있었습니다. 여러번 검색해봤는데 참고자료가 없네요. 가능하다면 이것을 우분투로 다시 가져오는 것이 재미있을 것이라고 생각했습니다. 지금 그것이 무엇인지 아는 사람이 있습니까? 아니면 다른 시스템에 설치할 수 있는 TrueType 버전이 있습니까?

답변1

내가 아는 한, 이 글꼴의 아웃라인 변형에 대한 기존 포트는 없습니다. 그러나 도움이 될 수 있는 몇 가지 세부 정보와 팁은 다음과 같습니다.

이것t.fnt, 텍타이트, (이전?)로 만든 것클래식 소프트웨어, 그리고 아마도 Ralph B Smith Jr,사장/최고 프로그래머/셰프/병 세척기. DOS 및 OS/2용 VFONT 프로그램에 포함된 비트맵 글꼴입니다. VGA 시스템용 대체 글꼴을 로드합니다. 작가가 지은 이름은텍타이트그리고 다음과 같이 설명됩니다."'건축가' 스타일의 글꼴입니다."

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

그러면 Slackware 등에 포함된 RAW 형식의 글꼴 파일이 제공됩니다.

각 글꼴은 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에서 이름 지정

글꼴 이름은 Linux에서 VFONT 프로그램의 옵션에 의해 지정됩니다. 텍타이트가 있습니다 /T. VFONT에 대한 명령줄 옵션으로 이름이 지정된 다른 글꼴도 포함되어 있습니다. (/S = s.fnt, /SD = sd.fnt, /RO = ro.fnt...등. )

RAW 글꼴

(구식이지만 인식됨)RAW 글꼴 형식가장 간단한 글꼴 형식입니다. 머리글, 바닥글, 이스케이프 바이트 등이 없습니다. 일반적으로 너비는 8픽셀(비트)입니다. VFONT 글꼴의 경우에도 마찬가지입니다. 항상 256개의 문자 모양을 갖습니다.

이것으로부터 우리는 쉽게 높이를 계산할 수 있습니다:

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

모든 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 '#'

이는 우리에게 다음을 제공합니다.

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로 편집하기

해당 글꼴을 사용하려면글꼴 단조. 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 글꼴에는 여러 가지 수정된 버전이 있습니다. 검색하면 추가할 수 있는 옵션이 있습니다."거룩한"조사할 수 있는 문구를 검색합니다.

이미지 렌더링

완성도를 높이기 위해 위의 이미지를 생성하기 위해 혼합 C 코드를 추가했습니다. display그리고 convert의 일부입니다이미지 마술사.

사용 예:

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

관련 정보