"PSC" files are used to store the width of text characters in various
fonts used within text (code 16) items. They are binary files
that store 163 character widths in two forms: (1) the character plus
the padding space after the character that separates it from the
following character, and (2) the width of the character without the
padding. The second value is used to calculate the lengths of string,
which considers the padded width of each character except the last one.
PSC files are stored in the LIB directory with one font set described in each file. The filename for each PSC file starts with "FM" and then a two digit number which matches the font number in code 16 items, such as FM00.PSC for the Times-Roman font.
Here is the binary version of a PSC file with the various components colored:
4b 81 54 69 6d 65 73 2d 52 6f 6d 61 6e 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01
d2 02 9b 02 9b 02 d2 02 63 02 2c 02 d2 02 d2 02 4d 01 85 01 d2 02 63 02 79
03 d2 02 d2 02 2c 02 d2 02 9b 02 2c 02 63 02 d2 02 d2 02 b0 03 d2 02 d2 02
63 02 fa 00 fa 00 4d 01 4d 01 bc 01 f4 01 bc 01 f4 01 bc 01 4d 01 f4 01 f4
01 16 01 16 01 81 81 f4 01 16 01 0a 03 f4 01 f4 01 f4 01 f4 01 4d 01 85 01
16 01 f4 01 f4 01 d2 02 f4 01 f4 01 bc 01 16 01 16 01 bc 01 4d 01 34 02 4d
01 f4 01 16 01 34 02 f4 01 4d 01 01 00 98 01 01 00 01 00 01 00 01 00 01 00
01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 fa 00 bc 01 d2
02 f4 01 d2 02 f4 01 d2 02 5e 01 bc 01 bc 01 4d 01 f4 01 f4 01 f4 01 f4 01
b4 00 bc 01 d2 02 f4 01 2c 02 81 62 63 02 bc 01 f4 01 e8 03 f4 01 f4 01 f4
01 2c 02 4d 01 4d 01 2c 02 e8 03 f4 01 c5 01 bc 01 85 01 f4 01 bc 01 f4 01
f4 01 41 03 0a 03 4d 01 34 02 34 02 34 02 99 03 79 03 79 03 63 02 d2 02 4d
01 16 01 4d 01 9b 02 f8 02 d2 02 16 01 16 01 f4 01 f8 02 f4 01 d4 03 e0 01
c8 00 e0 01 14 01 36 01 4d 01 62 81 dc 01 8a 01 db 01 af 01 d8 01 b6 01 d4
01 c1 01 ba 01 cc 01 c2 02 54 02 7d 02 b1 02 55 02 20 02 c0 02 bf 02 3c 01
78 01 c5 02 56 02 67 03 c5 02 b0 02 1e 02 bd 02 8e 02 eb 01 52 02 c1 02 bd
02 a8 03 c2 02 bf 02 55 02 b7 00 ca 00 30 01 1c 01 ba 01 da 01 9c 01 eb 01
a5 01 7f 01 d6 01 ea 01 03 01 d4 00 f4 01 03 01 fc 02 ea 01 d6 01 d6 01 f2
01 4f 01 5c 01 17 01 df 01 d4 01 b6 02 df 01 81 81 dc 01 a2 01 c4 00 ca 00
8b 01 e0 00 16 02 21 01 b5 01 2e 01 16 02 f4 01 f2 00 01 00 51 01 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
01 00 00 00 ba 01 c2 02 ea 01 c5 02 d6 01 b0 02 2c 01 a1 01 a1 01 e0 00 c0
01 eb 01 aa 01 f7 01 85 00 8f 01 c2 02 b7 01 eb 01 55 02 ba 01 b8 01 7b 03
ea 01 c1 01 d4 01 09 02 0f 01 20 01 09 02 ef 03 fb 01 75 01 81 46 8b 01 5f
01 f6 01 a2 01 ef 01 c8 01 04 03 ee 02 e6 00 16 02 18 02 18 02 33 03 65 03
6d 03 56 02 b0 02 2b 01 69 01 f5 00 7a 02 cd 02 b2 02 03 01 03 01 d6 01 ce
02 d4 01 b1 03 55 01 84 00 72 01 16 01 2d 01 43 01 46 82
20 20 20 20 20 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01 f4 01
d2 02 9b 02 9b 02 d2 02 63 02 2c 02 d2 02 d2 02 4d 01 85 01 d2 02 63 02 79
03 d2 02 d2 02 2c 02 d2 02 9b 02 2c 02 63 02 d2 02 d2 02 b0 03 d2 02 d2 02
63 02 fa 00 fa 00 4d 01 4d 01 bc 01 f4 01 bc 01 f4 01 bc 01 4d 01 f4 01 f4
01 16 01 16 01 81 81 f4 01 16 01 0a 03 f4 01 f4 01 f4 01 f4 01 4d 01 85 01
16 01 f4 01 f4 01 d2 02 f4 01 f4 01 bc 01 16 01 16 01 bc 01 4d 01 34 02 4d
01 f4 01 16 01 34 02 f4 01 4d 01 01 00 98 01 01 00 01 00 01 00 01 00 01 00
01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 fa 00 bc 01 d2
02 f4 01 d2 02 f4 01 d2 02 5e 01 bc 01 bc 01 4d 01 f4 01 f4 01 f4 01 f4 01
b4 00 bc 01 d2 02 f4 01 2c 02 81 62 63 02 bc 01 f4 01 e8 03 f4 01 f4 01 f4
01 2c 02 4d 01 4d 01 2c 02 e8 03 f4 01 c5 01 bc 01 85 01 f4 01 bc 01 f4 01
f4 01 41 03 0a 03 4d 01 34 02 34 02 34 02 99 03 79 03 79 03 63 02 d2 02 4d
01 16 01 4d 01 9b 02 f8 02 d2 02 16 01 16 01 f4 01 f8 02 f4 01 d4 03 e0 01
c8 00 e0 01 14 01 36 01 4d 01 62 81 dc 01 8a 01 db 01 af 01 d8 01 b6 01 d4
01 c1 01 ba 01 cc 01 c2 02 54 02 7d 02 b1 02 55 02 20 02 c0 02 bf 02 3c 01
78 01 c5 02 56 02 67 03 c5 02 b0 02 1e 02 bd 02 8e 02 eb 01 52 02 c1 02 bd
02 a8 03 c2 02 bf 02 55 02 b7 00 ca 00 30 01 1c 01 ba 01 da 01 9c 01 eb 01
a5 01 7f 01 d6 01 ea 01 03 01 d4 00 f4 01 03 01 fc 02 ea 01 d6 01 d6 01 f2
01 4f 01 5c 01 17 01 df 01 d4 01 b6 02 df 01 81 81 dc 01 a2 01 c4 00 ca 00
8b 01 e0 00 16 02 21 01 b5 01 2e 01 16 02 f4 01 f2 00 01 00 51 01 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
01 00 00 00 ba 01 c2 02 ea 01 c5 02 d6 01 b0 02 2c 01 a1 01 a1 01 e0 00 c0
01 eb 01 aa 01 f7 01 85 00 8f 01 c2 02 b7 01 eb 01 55 02 ba 01 b8 01 7b 03
ea 01 c1 01 d4 01 09 02 0f 01 20 01 09 02 ef 03 fb 01 75 01 81 46 8b 01 5f
01 f6 01 a2 01 ef 01 c8 01 04 03 ee 02 e6 00 16 02 18 02 18 02 33 03 65 03
6d 03 56 02 b0 02 2b 01 69 01 f5 00 7a 02 cd 02 b2 02 03 01 03 01 d6 01 ce
02 d4 01 b1 03 55 01 84 00 72 01 16 01 2d 01 43 01 46 82
The meaning of each colored section:
- first/last byte — The first byte in a PSC file is always hex 4b, or decimal 75. The last byte in a PSC file is always hex 82, or decimal 130.
- starting chunk size — Data in the file are groupped into chunks. Each chunk starts with a byte which indicates the number of bytes in the chunk. This byte is not counted as part of the chunk.
- ending chunk size — The starting chunk size is repeated at the end of the chunk. This byte is counted as being part of the chunk.
- font name — The font name consists of the first 28 bytes of the first chunk. If the font name is shorter than 28 characters, then the rest of this field is padded with spaces (hex 20). If the font name is longer than 28 bytes, then the name of the font is truncated.
- width data — After the 28-charcter font name comes a list of 326 short (signed) little-endian ints. These numbers continue through the rest of the chunks to the end of the file. The first 163 numbers are the width of the character at that enumeration, including the inter-character padding space on the right side of the character. The second 163 numbers are the widths of the character without the space padding.
Character enumeration
The following table gives the character enumeration for the widths found in a PSC file:
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | |
0x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1x | A | B | C | D | E | F | G | H | I | J |
2x | K | L | M | N | O | P | Q | R | S | T |
3x | U | V | W | X | Y | Z | . | , | ( | ) |
4x | a | b | c | d | e | f | g | h | i | j |
5x | k | l | m | n | o | p | q | r | s | t |
6x | u | v | w | x | y | z | : | ; | ? (??) | ! (!!) |
7x | + | – | * | \ | = | ` | ' | unused | " | unused |
8x | unused | unused | unused | unused | unused | unused | unused | unused | unused | unused |
9x | unused | unused | unused | unused | • (!0) | „ (!1) | ” (!2) | ¡ (!3) | ¢ (!4) | £ (!5) |
10x | § (!6) | ¤ (!7) | (!8) | “ (!9) | Å (!A) | ‡ (!D) | Š (!S) | unknown | Ž (!Z) | å (!a) |
11x | † (!d) | … (!e) | ƒ (!f) | « (!g) | » (!h) | fi (!i) | ‹ (!j) | › (!k) | fl (!l) | — (!m) |
12x | – (!n) | ¶ (!p) | ¿ (!q) | š (!s) | ¥ (!y) | ž (!z) | # | $ | % | & |
13x | _ | _ | (?-) | < | > | @ | Æ (?A) | Œ (?E) | Ł (?L) | Ø (?O) |
14x | [ (?[) | \ (?\) | ] (?]) | æ (?a) | © (?c) | œ (?e) | ª (?f) | ł (?l) | ø (?o) | ® (?r) |
15x | ß (?s) | ™ (?t) | { (?{) | | (?|) | } (?}) | unkown | º (?m) | unknown | unknown | unknown |
16x | unknown | unknown |
For example the first character at position 00 in the above table has its width incding the inter-character padding as index 0 in the list of widths, and the with without padding at index 163.
Default font enumerations
_00 Times Roman _01 Times Bold _02 Times Italic _03 Times BoldItalic _04 Helvetica _05 Helvetica Bold _06 Helvetica Oblique _07 Helvetica BoldOblique _08 Helvetica Narrow _09 Helvetica Narrow Bold _10 Helvetica Narrow Oblique _11 Helvetica Narrow BoldOblique _12 Palatino Roman _13 Palatino Bold _14 Palatino Italic _15 Palatino BoldItalic _16 Avant Garde Book _17 Avant Garde BookOblique _18 Avant Garde Demi _19 Avant Garde DemiOblique _20 Bookman Light _21 Bookman LightItalic _22 Bookman Demi _23 Bookman DemiItalic _24 New Century Schoolbook Roman _25 New Century Schoolbook Bold _26 New Century Schoolbook Italic _27 New Century Schoolbook BoldItalic _28 Zapf Chancery Medium Italic _29 Courier _30 Courier Bold _31 Courier Oblique _32 Courier BoldOblique _33 Symbol _34 Zapf Dingbats Built in fonts not recommended for PostScript printing (other than _94): _90 Bodoni _91 Bodoni Bold _92 Bodoni Italic _92 Bodoni Bold Italic _94 Music Symbols _98 Prinitive (stick letters) _99 PostScript code escape string