mirror of
https://github.com/PDP-10/its.git
synced 2026-01-13 15:27:28 +00:00
239 lines
10 KiB
Plaintext
Executable File
239 lines
10 KiB
Plaintext
Executable File
CAVEAT: Several bugs in the description of KST format have been
|
||
fixed, by EBM, 11/10/79. I looked carefully at the source code
|
||
for FED and XGPSPL, and tested things out to verify the fixes,
|
||
but naturally cannot take complete responsibility since I did
|
||
not write the programs.
|
||
|
||
Massachusetts Institute of Technology
|
||
|
||
Artificial Intelligence Laboratory
|
||
|
||
WORKING PAPER #78 (revision 1)
|
||
8 October, 1975
|
||
|
||
FED, the Font "EDitor"
|
||
and
|
||
Font Formats
|
||
by
|
||
Joseph D. Cohen and J. Pitts Jarvis
|
||
|
||
Abstract
|
||
This memo describes FED, a program used for compiling and inspecting
|
||
fonts; AST font format, a text format which can be used to create and
|
||
edit fonts; and KST font format, the binary format used by SCRIMP, TJ6,
|
||
PUB, R, and SCRIBE.
|
||
|
||
Work reported herein was conducted at the Artificial Intelligence
|
||
Laboratory, a Massachusetts Institute of Technology research program
|
||
supported in part by the Advanced Research Projects Agency of the
|
||
Department of Defense and monitored by the Office of Naval Research under
|
||
Contact number N00014-70-A-0362-0005.
|
||
|
||
Working Papers are informal papers intended primarily for internal use.
|
||
|
||
|
||
FED and Font Formats________________2__Font Editor and Console Operation.
|
||
|
||
FED, the Font "EDitor"
|
||
|
||
FED is a program used for compiling and inspecting fonts. FED
|
||
understands the following font formats:
|
||
AST -- text format which can be used to create and edit fonts in
|
||
TECO;
|
||
KST -- MITAI and CMU compiled font format, used by programs like
|
||
SCRIMP, TJ6, and PUB;
|
||
CMU -- a newer compiled CMU format;
|
||
CU -- the newest compiled CMU format;
|
||
FNT -- SAIL compiled font format; and
|
||
XH -- Xerox PARC compiled font format.
|
||
FED reads all formats, but writes only AST and KST.
|
||
|
||
FED asks for an input file name. If the second name is AST, KST, FNT, or
|
||
XH, FED assumes the input file to be in the appropriate format. If the
|
||
second name is something else, FED asks what FORMAT the input file is in.
|
||
If the file name is blank, FED kills itself. FED reads the file and
|
||
types out various decimal data. A FIXED width font is one in which the
|
||
CHARACTER WIDTH of all defined characters is the same as the CHARACTER
|
||
WIDTH of a space. FED calls all other fonts VARIABLE width.
|
||
|
||
FED tries to display the font on the user's terminal, if it's a TV
|
||
display; or on the 340, if the user is near there, and the 340 and PDP6
|
||
are available. FED displays as though one XGP dot equals one display
|
||
dot, so the size and proportion of the font will be distorted. (200
|
||
horizontal XGP dots = 1 inch, 192 vertical dots = 1 inch. ~108
|
||
horizontal 340 dots = ~108 vertical 340 dots = 1 inch. ~58 horizontal TV
|
||
display dots = 1 inch. ~57 vertical TV display dots = 1 inch. A TV font
|
||
display will therefore be enlarged 4 diameters over the same font on the
|
||
XGP.)
|
||
|
||
FED then offers to write out the font. If you type N, FED restarts
|
||
itself; if you type Y, it asks for the output file name; and if
|
||
anything else is typed, it repeats its offer. If you write the file, FED
|
||
will offer to compact the raster. (This is a horizontal compaction
|
||
accomplished by eliminating leading and trailing blank columns.) If you
|
||
type Y, FED will compact the raster as much as possible, and tell you how
|
||
many words the compaction will save in the XGP's PDP11. When compacting,
|
||
FED will also let you know if there are any characters whose raster is
|
||
wider than the defined raster width. The input default system name is
|
||
FONTS, the output default system name is the job's SNAME. Input and
|
||
output default second file name is KST.
|
||
|
||
Please do not write new fonts onto the FONTS directory -- it is almost
|
||
full. Absolutely do not modify fonts on the FONTS directory. All
|
||
concerned programs are perfectly capable of reading fonts from your very
|
||
own directory. The reason for this injunction is that it has been
|
||
determined, after much experimentation, that the definition of
|
||
"improvement" is consistently a local variable. Please keep your
|
||
"improvements" to yourself.
|
||
|
||
A typical FED console session looks as follows: (User typein is
|
||
underlined, is a carriage return.)
|
||
|
||
:fed
|
||
FED 119
|
||
INPUT: jdc;ast >
|
||
FORMAT: kst
|
||
READING: DSK:JDC;AST 25
|
||
142 DUPLICATE CHARACTER
|
||
FILE: DSK:JDC;AST 25
|
||
KSTID: 0
|
||
CHARACTERS READ: 128
|
||
HEIGHT: 25
|
||
WIDTH: (VARIABLE)10
|
||
WRITE? (Y OR N)y
|
||
FILE: ast kst
|
||
FILE ALREADY EXISTS. CLOBBER? (Y OR N)y
|
||
WRITING: DSK:JDC;AST KST
|
||
COMPACT RASTER? (Y OR N)y
|
||
2032 (OCTAL) PDP11 WORDS SAVED
|
||
INPUT:
|
||
|
||
:KILL
|
||
|
||
AST Font Format
|
||
|
||
The AST font format is a text format which can be used to create and edit
|
||
fonts in TECO. An AST file has one page of font data, followed by one
|
||
page of character data for each defined character. All numbers except
|
||
CHARACTER CODE are decimal. It is the order of the numbers, rather than
|
||
the text identification after them, that FED looks at. The
|
||
identification is merely a convenience.
|
||
|
||
The file's first page is font data and looks like:
|
||
n KSTID dev:dir;file name
|
||
n HEIGHT
|
||
n BASE LINE
|
||
n COLUMN POSITION ADJUSTMENT
|
||
|
||
KSTID is a currently unimplemented feature. It is intended to be a
|
||
unique number for each font so that PDP11 will know which fonts
|
||
are loaded, and not do unnecessary reloads. KSTID is used by
|
||
CMU. (KSTID should be set to 0.) FED writes, on every page of
|
||
the output AST file, the file name of the source font file. On
|
||
input FED ignores the file name data in AST files.
|
||
HEIGHT is the height of all characters in XGP raster lines.
|
||
BASE LINE is the location of the character base line in XGP raster lines
|
||
from the top of all characters. (The base line is used by the
|
||
XGP underscore command. See Working Paper #72, XGP Font
|
||
Catalog.)
|
||
COLUMN POSITION ADJUSTMENT is an artifact. It is a number which is added
|
||
to the LEFT KERN of each character to get its total left kern.
|
||
To be SAIL compatible, COLUMN POSITION ADJUSTMENT should be 0,
|
||
and all kerning sould be included in individual character data.
|
||
|
||
The rest of the file is one page of character data for each defined
|
||
character. Each page looks like:
|
||
n CHARACTER CODE
|
||
n RASTER WIDTH
|
||
n CHARACTER WIDTH
|
||
n LEFT KERN
|
||
* *
|
||
* *
|
||
*
|
||
* *
|
||
* *
|
||
|
||
CHARACTER CODE is the octal ASCII code of the character.
|
||
RASTER WIDTH is the width of the raster in XGP dots. It is a good idea
|
||
to make the raster width as small as possible, in order to save
|
||
space in font files, and to allow the XGP PDP11 to store more
|
||
fonts. A leading blank column can be flushed if RASTER WIDTH and
|
||
LEFT KERN are decremented. Trailing blank columns can be flushed
|
||
by simply decrementing RASTER WIDTH. (The FED compact feature
|
||
does this automatically.)
|
||
CHARACTER WIDTH is the amount, in XGP dots, that printing this character
|
||
will advance the line postion. This number is completely
|
||
independent of RASTER WIDTH, and LEFT KERN. For example, if
|
||
CHARACTER WIDTH<RASTER WIDTH, characters will overlap. If
|
||
CHARACTER WIDTH>RASTER WIDTH, there will be extra blank columns
|
||
in the character. How many appear on each side is determined by
|
||
LEFT KERN.
|
||
LEFT KERN (plus COLUMN POSITION ADJUSTMENT, if any) is the amount to move
|
||
left from the logical left end of the character before printing
|
||
the raster. (Positive left kern means move left; negative, move
|
||
right.)
|
||
* is any printing character used to define the CHARACTER RASTER. Each
|
||
raster row is represented by a text line. If a space appears,
|
||
the bit is off in the raster, if a printing character appears,
|
||
the bit is on. Carriage return terminates the text row, and
|
||
implies blanks for the rest of the raster row. Formfeed
|
||
terminates the raster, and implies trailing blank raster lines.
|
||
The first row is the top row. Information wider than RASTER
|
||
WIDTH is ignored.
|
||
|
||
KST Font Format
|
||
|
||
KST is CMU's oldest and MITAI's only compiled binary font format.
|
||
SCRIMP, TJ6, PUB, and other programs all use KST files as their font
|
||
definitions. KST format is as follows:
|
||
Word 0/ KSTID
|
||
Word 1/ 9 bits COLUMN POSITION ADJUSTMENT, 9 bits BASE LINE,,HEIGHT
|
||
The remainder of the file has one block of data for each character. Each
|
||
block looks like:
|
||
USER ID ;not currently used but low order bit is on. This bit
|
||
can be used to find the beginning of a new block. The
|
||
last block is followed by two -1's.
|
||
LEFT KERN,,CHARACTER CODE
|
||
RASTER WIDTH,,CHARACTER WIDTH
|
||
CHARACTER MATRIX
|
||
The character matrix is stored four 8-bit bytes per word, so that ILDBs
|
||
with 8-bit byte size get successive bytes. The remaining four low order
|
||
bits are 0. The bits are reversed in each byte (because of the way the
|
||
XGP interface works) so that the high order (leftmost) bit of the
|
||
character is the low order bit of the byte. The matrix is stored row by
|
||
row; rows follow one another with no extra separating bytes. The last
|
||
word is filled out with 0 bytes, if necessary. Note that HEIGHT rows are
|
||
stored for each character, and (RASTER WIDTH + 7)/8 bytes are used for
|
||
each row.
|
||
|
||
Some old MIT KST files, and all CMU's KST files do not use the RASTER
|
||
WIDTH variable. (All characters have RASTER WIDTH=CHARACTER WIDTH.) The
|
||
third word of those files has 0 in the left half. Programs which
|
||
directly examine KST files for RASTER WIDTH should therefore, if RASTER
|
||
WIDTH=0, use CHARACTER WIDTH instead. (Note that this also means that
|
||
while MITAI can use CMU's KST files, CMU cannot use MITAI KST files.)
|
||
Since when RASTER WIDTH=0, MITAI programs substitute CHARACTER WIDTH, you
|
||
should not write a program which will set RASTER WIDTH to zero. When FED
|
||
finds a character with zero RASTER WIDTH, FED will write the character
|
||
with RASTER WIDTH=1. This does not waste any space in the XGP's PDP11,
|
||
since the PDP11 does a vertical compaction of rasters, eliminating top
|
||
and bottom blank lines.
|
||
|
||
Odds and End
|
||
|
||
The KST, FNT, XH, and FED internal formats are listed in the
|
||
extravagantly commented FED source file (stored on the SYSENG directory).
|
||
FED also has extensive comments on programming the PDP10 to PDP11
|
||
interface. FED was written by Pitts Jarvis, with additions by Joe Cohen.
|
||
Brian Harvey is responsible for SAIL font hackery, whose specifications
|
||
and fonts we copied.
|
||
|
||
Fonts are stored on the FONTS; directory, and are described in Working
|
||
Paper #72, XGP Font Catalog, by Tom Knight.
|
||
|
||
The source file for this memo is WP;FED 78Wn, where n is the revision
|
||
number.
|
||
|
||
THE END
|
||
|