> -----Original Message-----
>       Does anyone know how to convert .pcf files to, say bdf?
> I've found bdftopcf, but I only know how to convert bdf files
> to micro-windows currently.

PCF files, like SNF files, are binary files, but the format is portable
across architectures. The data is stored in an SBFirst (Most Significant
Byte First) format. The table of contents is written first, followed by
each of the tables needed. Tables of variable length are preceded by a
count for the number of  entries for that particular table. Tables are
zero-padded to be a multiple of 32 bits. Here is the list of possible
tables:

        o table of contents

        o pcf properties

        o pcf accelerators

        o pcf metrics

        o pcf bitmaps

        o pcf ink metrics

        o pcf bdf encoding

        o pcf swidths

        o pcf glyph names

        o pcf bdf accelerators

The following sections describe each of these tables.
TABLE OF CONTENTS
The TOC consists of two 32-bit fields and a variable number of TOC entry
fields.

file version    # currently "pcf1"
TOC_entries     # number of entries to follow
TOC entry               # up to TOC_entries of these

Each TOC entry consists of 4 32-bit fields.

type            # type of table entry (see below)
format  # format of table
size            # size in 32-bit words of this table
offset  # offset into file of this table

Some tables may have a special format associated with them.The default
format treats all data as 32-bit words. A format has meaning in
relationship to a type.

format                          value
DEFAULT                         0x00000000
INKBOUNDS                       0x00000200
ACCELERATORS_W_INKBOUNDS        0x00000l00
COMPRESSED_METRICS              0x00000l00

If another format is available for a type, use of the DEFAULT format
with that type may indicate that type's table is empty. Only four types
use anything besides the DEFAULT format in pcf1 files. Accelerators are
basically a set of hints about the font layout which allow certain parts
of the font drawing process to take p1ace faster.

type                            format
pcf accelerators                ACCELERATORS_W_INKBOUNDS
pcf metrics                     COMPRESSED_METRICS
pcf ink metrics         COMPRESSED METRICS
pcf bdf accelerators    ACCELERATORS_W_INKBOUNDS

PCF PROPERTIES

The properties table consists of the number of properties and the
properties themselves, followed by the string table for the properties.

format                  32 bits         # format of property table
num-props               32 bits         # number of properties
property                        72 bits         # property data (num_props
                                                # entries)
string table size       32 bits         # length of strin table in
                                                # 8-bit chars
string table            variable        # property names and values

The property data consists of three fields and is zero-padded to be a
multiple of 32 bits.

name            32 bits         # property atom
is_string        8 bits         # true if the property value is a
                                # string
value   32 bits         # property value (string or int)

The string table includes all property names and their values (when
those values are strings). The strings are NULL-terminated.

PCF ACCELERATORS

The accelerators consist of 8 8-bit fields, 3 32 bit fields, 2 metric
fields (described below) and (if format is ACCELERATORS_W_INKBOUNDS) 2
optional metric fields. Metric field formats are discussed later.

noOverlap               8 bits
constantMetrics         8 bits
terminalFont    8 bits
constantWidth   8 bits
inkInside               8 bits
inkMetrics              8 bits
drawDirection   8 bits
pad                     8 bits # always 0
fontAscent              32 bits
fontDescent     32 bits
maxOverlap              32 bits
minbounds               96 bits # (metric field type)
maxbounds               96 bits # (metric field type)
ink_minbounds   96 bits # (optional metric field type)
ink_maxbounds   96 bits # (optional metric field type)

METRIC FIELD FORMATS

Uncompressed metric fields require 96 bits each. Compressed metric
fields
require 56 bytes.

size
field   compressed/uncompressed
num chars               16/32 # number of characters in font
leftSideBearing         8[16] # left-most filled pixel x coordinate
rightSideBearing        8[16] # right-most fiIIed pixel y coordinate
characterWidth  8[l6] # character width
ascent          8[l6] # height above baseline
descent                 8[l6] # depth below baseline
attributes              N/A[l6]

PCF METRICS

If the metrics can be compressed, the format is COMPRESSED_METRICS.
Otherwise
the format is DEFAULT.

size
field           compressed/uncompressed
num_chars               l6/32   # number of characters
metric field    56[96]          # per character

PCF BIIMAPS

num_chars               32bits  # number of glyphs
offsets         32bits  # offset into glyph bitmap data
                                        # (l per character)
bitmap_size     32bits  # extra bitmap size info
                                        # (1, 2, 4 or 8 (4 in pcfl)
bitmaps                 variable        # bitmap data

PCF INK METRICES

These are formated like the pcf metrics referenced above. Uncompressed
metric fields require 96 bits each. Compressed metric fields require 56
bytes.

size
field   compressed/uncompressed

num_chars               16/32   # number of characters
leftSideBearing         8[16]   # left_most filled pixel x coordinate
rightSideBearing        8[16]   # right_most filled pixel x
                                  # coordinate
characterWidth  8[16]   # character cell width
ascent          8[l6]   # height above baseline
descent         8[16]   # depth below baseline
attributes              N/A[l6]

PCF INK METRICS

If the metrics can be compressed, the format is COMPRESSED-MEIRICS.
Otherwise the format is DEFALUT.

size
field           compressed/uncompressed
num_chars               16/32   # number of characters
metric field    56[96]  # 1 per character

PCF BDF ENCODINGS

These are related to the bdf format. They relate to characters in the
Row/column matrix which are actually used.

firstCol                l6 bits # 1st character column (typ. 0)
lastCol         16 bits # last character column (typ.l27)
firstRow                16 bits # last character row (typ. 0)
lastRow                 l6 bits # last character row (typ. 0)
                                  # most ISO-Latin fonts are l row
                                  # of chars, but most large
                                  # oriental fonts have many rows
                                  # Typical values are for ISO-
                                  # Latin fonts on the mit tapes.
defaultCh               16 bits # default character
nencodings              l6 bits # number of encoded characters
encoding metrics        16 bits # 1 per encoded character, defaults
                                  # to 0xFFFF

PCF SWIDTHS

These are the same as the BDF scalable widths.

num chars               32 bits # number of characters
swidths                 32 bits # 1 per character

PCF GLYPH NAMES

Yet another string table, this contains the names of the glyphs as
described under the BDF glyph_names field.

num_chars               32 bits # number of characters in font
offsets                 32 bits # offsets into strings, l per
                                  # character
strings size            32 bits # size of string table in 8 bit
                                  # characters
strings variable                  # NULL_delineated glyph names

PCF BDF ACCELERATORS
Formatted like the pcf accelerators, this data includes the same
information but as included  in the BDF file. Accelerators consist of 8
8-bit fields, 3 32 bit fields, 2 metric fields and (if format is
ACCELERATORS_W_INKBOUNDS) 2 optional

MEIRTIC FIELD

noOverlap               8 bits # true if characters don't overlap
constantMetrics         8 bits # metrics apply to all characters
terminalFont    8 bits # outdated - true if font metrics
                         # work well with a terminal
constantWidth   8bits  # true if all characters have the same
                                 # width
inkInside               8bits  # true if all ink inside bounding box
inkMetrics              8bits  # true if ink metrics != font metrics
                         # (used with terminal fonts)
drawDirection           8 bits # direction to draw (eg, Left To
                                 # Right)
pad                     8 bits # always 0
fontAscent              32bits # minimum for quality typography
fontDescent     32bits # minimum for quality typography
maxOverlap              32bits # maximum this character may be
                                 # overlapped
minbounds               96bits # (metric field type)
maxbounds               96bits # (metric field type)
ink_minbounds   96bits # (optional metric field type)
ink maxbounds   96bits # (optional metric field type)

I'm not sure about a converter, but this should give you something to
build upon, I hope.

        -Darran (minefiled of useless information)

--
Darran D. Rimron                              [EMAIL PROTECTED]
Mobile: +44 7808 49 25 49                  Pager: +44 76543 07647
Rimron Design & Consultancy              http://www.rimron.co.uk/
Phone: +44 1708 766 959                     Fax: +44 1708 766 959

Reply via email to