home *** CD-ROM | disk | FTP | other *** search
- The PSF file-format
-
- (C) 1997 Yann Dirson <dirson@debian.org>
-
-
- This file documents the PSF font-file-format, as understood by version 0.94
- and above of the Linux console utilities ('kbd'). This file makes obsolete
- the old `psffile.doc'.
-
- This file has revision number 1.1, and is dated 1998/04/20.
- Any useful additionnal information on PSF files would be great.
-
-
- 0. Changes:
-
- 1998/08/20: updated author's e-mail.
- 1998/08/20: History of the format from hpa himself.
- 1998/08/20: Fixed `filemode' description from hpa's input.
-
-
- 1. Summary
-
- PSF stands for PC Screen Font.
-
- A PSF file basically contains one character-font, whose width is 8 pixels,
- ie. each scanline in a character occupies 1 byte.
-
- It may contain characters of any height between 0 and 255, though character
- heights lower than 8 or greater than 32 are not attested to exist or even be
- useful [more info needed on this].
-
- Fonts can contain either 256 or 512 characters.
-
- The file can optionnally contain a unicode mapping-table, telling, for each
- character in the font, which UCS2 characters it can be used to display.
-
- The "file mode" byte controls font size (256/512) and whether file contains
- a unicode mapping table.
-
-
- 2. History
-
- The PSF file format was designed by H. Peter Anvin
- <hpa@transmeta.com> in 1989 or so for his DOS screen font editor,
- FONTEDIT.EXE. When he became involved with Linux, he used it for the
- Linux font stuff he worked with, released a binary of FONTEDIT.EXE for
- free distribution, and added the Unicode table to the spec.
-
-
- 3. Known programs understanding this file-format.
-
- The following program in the Linux console utilities can read and/or write
- PSF files:
-
- setfont (R/W)
- psfaddtable (R/W)
- psfstriptable (R/W)
- psfgettable (R)
-
-
- 4. Technical data
-
- The file format is described here in sort-of EBNF notation. Upper-case
- WORDS represent terminal symbols, ie. C types; lower-case words represent
- non-terminal symbols, ie. symbols defined in terms of other symbols.
- [sym] is an optional symbol
- {sym} is a symbol that can be repeated 0 or more times
- {sym}*N is a symbol that must be repeated N times
- Comments are introduced with a # sign.
-
-
- # The data (U_SHORT's) are stored in LITTLE_ENDIAN byte order.
-
- psf_file = psf_header
- raw_fontdata
- [unicode_data]
-
-
- psf_header = CHAR = 0x36 CHAR = 0x04 # magic number
- filemode
- fontheight
-
- fontheight = CHAR # measured in scan lines
- filemode = CHAR # 0 : 256 characters, no unicode_data
- # 1 : 512 characters, no unicode_data
- # 2 : 256 characters, with unicode_data
- # 3 : 512 characters, with unicode_data
-
- #
-
- raw_fontdata = {char_data}*<fontsize>
-
- char_data = {BYTE}*<fontheight>
-
- #
-
- unicode_data = { unicode_array psf_separator }*<fontsize>
-
- unicode_array = { unicode } # any necessary number of times
-
- unicode = U_SHORT # UCS2 code
- psf_separator = unicode = 0xFFFF
-