1{
2 d = 0
3 for (i = 1; i <= length($0); ++i)
4 d = d * 16 + index("0123456789ABCDEF", substr($0, i, 1)) - 1
5 unimap[unimap_len++] = d
6}
7
8function readchar() {
9 name = $2
10 buf = ""
11 while (getline < font) {
12 if ($1 == "ENDCHAR")
13 break
14 if ($1 == "ENCODING")
15 encoding = $2
16 else
17 buf = buf $0 "\n"
18 }
19 names[encoding] = name
20 chars[encoding] = buf
21}
22
23function printchar(i, encoding) {
24 if (!(encoding in names))
25 exit(1)
26 print "STARTCHAR", names[encoding]
27 print "ENCODING", i
28 printf "%s", chars[encoding]
29 print "ENDCHAR"
30}
31
32END {
33 while (getline < font) {
34 if ($1 == "STARTCHAR") {
35 readchar()
36 continue
37 }
38 if ($1 == "CHARS") {
39 $2 = unimap_len
40 } else if ($1 == "FONT") {
41 sub(/-[^-]*-[^-]*$/, "-" charset, $2)
42 } else if ($1 == "ENDFONT") {
43 for (i = 0; i < unimap_len; ++i) {
44 encoding = unimap[i]
45 printchar(i >= 32 ? encoding : i, encoding)
46 }
47 }
48 print
49 }
50}