|
|
1.1 root 1: /*
2: *
3: * Characteristics of a font - for postprocessors. Most changes are for
4: * Unicode and Plan 9 UTF encoding. Also tried to anticipate larger and
5: * more general Unicode fonts.
6: *
7: */
8:
9: #define FIRSTCODE 0x0020
10: #define LASTCODE 0x8BFF
11: #define FIRSTSPECIAL 0xE800
12: #define LASTSPECIAL 0xFDFF
13:
14: #define INVALIDCODE 0x0000
15: #define LARGESTFONT 0x1000
16: #define MAXFONTS 99
17: #define SPECIALCHARS (LASTSPECIAL-FIRSTSPECIAL+1)
18:
19: #define ValidCode(c) ((c) >= FIRSTCODE && (c) <= LASTCODE)
20: #define ValidSpecial(c) ((c) >= FIRSTSPECIAL && (c) <= LASTSPECIAL)
21: #define ValidChar(c) (ValidCode(c) || ValidSpecial(c))
22:
23: /*
24: *
25: * State of a table entry in fonts[].
26: *
27: */
28:
29: #define NEWFONT 0
30: #define RELEASED 1
31: #define INMEMORY 2
32:
33: /*
34: *
35: * Flags - for setting bits in a font's flag field.
36: *
37: */
38:
39: #define USED 1
40: #define NAMED 2
41:
42: #define skipline(f) while ( getc(f) != '\n' )
43:
44: /*
45: *
46: * Data about each character on a font. Omitted the ascender/descender field.
47: * Need 16 bits for num field to support Unicode character set. Use the same
48: * for code field which may be translated to Plan 9's UTF represenation on
49: * output. A string for code field might be worth a try? Needs considerable
50: * thought!!
51: *
52: */
53:
54: typedef struct {
55: unsigned short num; /* INVALIDCODE means not on this font */
56: unsigned char wid; /* width */
57: unsigned short code; /* code for actual device. */
58: } Chwid;
59:
60: /*
61: *
62: * Font header - one for each available position. first and last fields
63: * are an attempt to anticipate support for Unicode fonts. Characters
64: * from first through last are described by the initial last-first+1
65: * entries in wp. Entries in wp having num == INVALIDCODE are unassigned
66: * in the font. The remaining nchars-(last-first+1) wp entries support
67: * troff's traditional two character escapes. Special characters are
68: * hashed and assigned codes from Unicode's Private Use Area.
69: *
70: */
71:
72: typedef struct {
73: char *path; /* where it came from */
74: char *name; /* as known to troff */
75: char *fontname; /* real name (e.g. Times-Roman) */
76: char state; /* NEWFONT, RELEASED, or INMEMORY */
77: char flags; /* for now just USED and NAMED */
78: char mounted; /* mounted on this many positions */
79: char specfont; /* 1 == special font */
80: unsigned short first; /* first wp entry is for this character */
81: unsigned short last; /* last code for this font */
82: unsigned short nchars; /* size of width table for this font */
83: Chwid *wp; /* widths, etc., of the real characters */
84: } Font;
85:
86: /*
87: *
88: * Non-integer functions.
89: *
90: */
91:
92: extern char *chname();
93: extern char *strsave();
94: extern char *allocate();
95:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.