date and time created 83/03/09 10:31:13 by ralph
[unix-history] / usr / src / old / vpr / vtools / vwidth.c
CommitLineData
b1dda97e
RC
1/* vwidth.c 4.1 83/03/09 */
2/*
3 * Creates a width table for troff from a versatec font for a
4 * normal font.
5 * Usage: width font [ point_size ]
6 * where font is the file name of the versatec font and
7 * point_size is it point size.
8 * If the point size is omitted it is taken from the suffix of
9 * the font name, as bocklin.14 => 14 point.
10 * It is better to use as large a point size font as possible
11 * to avoid round off.
12 */
13
14#include <stdio.h>
15
16struct wtable {
17 char charloc;
18 char *name;
19} wtable[] = {
20 '\214', "space",
21 '!', "!",
22 '"', "\"",
23 '#', "#",
24 '$', "$",
25 '%', "%",
26 '&', "&",
27 '\'', "'",
28 '(', "(",
29 ')', ")",
30 '*', "*",
31 '+', "+",
32 ',', ",",
33 '-', "- hyphen",
34 '.', ".",
35 '/', "/",
36 '0', "0",
37 '1', "1",
38 '2', "2",
39 '3', "3",
40 '4', "4",
41 '5', "5",
42 '6', "6",
43 '7', "7",
44 '8', "8",
45 '9', "9",
46 ':', ":",
47 ';', ";",
48 '<', "<",
49 '=', "=",
50 '>', ">",
51 '?', "?",
52 '@', "@",
53 'A', "A",
54 'B', "B",
55 'C', "C",
56 'D', "D",
57 'E', "E",
58 'F', "F",
59 'G', "G",
60 'H', "H",
61 'I', "I",
62 'J', "J",
63 'K', "K",
64 'L', "L",
65 'M', "M",
66 'N', "N",
67 'O', "O",
68 'P', "P",
69 'Q', "Q",
70 'R', "R",
71 'S', "S",
72 'T', "T",
73 'U', "U",
74 'V', "V",
75 'W', "W",
76 'X', "X",
77 'Y', "Y",
78 'Z', "Z",
79 '[', "[",
80 '\\', "\\",
81 ']', "]",
82 '^', "^",
83 '_', "_",
84 '\`', "\`",
85 'a', "a",
86 'b', "b",
87 'c', "c",
88 'd', "d",
89 'e', "e",
90 'f', "f",
91 'g', "g",
92 'h', "h",
93 'i', "i",
94 'j', "j",
95 'k', "k",
96 'l', "l",
97 'm', "m",
98 'n', "n",
99 'o', "o",
100 'p', "p",
101 'q', "q",
102 'r', "r",
103 's', "s",
104 't', "t",
105 'u', "u",
106 'v', "v",
107 'w', "w",
108 'x', "x",
109 'y', "y",
110 'z', "z",
111 '{', "{",
112 '|', "|",
113 '}', "}",
114 '~', "~",
115 '\206', "narrow space\7f",
116 '-', "hyphen",
117 '\07', "bullet",
118 '\010', "square",
119 '\06', "3/4 em dash",
120 '\05', "rule",
121 '\021', "1/4",
122 '\022', "1/2",
123 '\023', "3/4",
124 '\04', "minus",
125 '\01', "fi",
126 '\02', "fl",
127 '\03', "ff",
128 '\011', "ffi",
129 '\012', "ffl",
130 '\013', "degree",
131 '\014', "dagger",
132 '\200', "section (unimplem)",
133 '\015', "foot mark",
134 '\200', "acute acc (unimplem)",
135 '\200', "grave acc (unimplem)",
136 '\200', "underrule (unimplem)",
137 '\200', "slash (unimplem)",
138 '\203', "half narrow space",
139 '\200', "null",
140 '\200', "null",
141 '\200', "null",
142 '\200', "null",
143 '\200', "null",
144 '\200', "null",
145 '\200', "null",
146 '\200', "null",
147 '\200', "null",
148 '\200', "null",
149 '\200', "null",
150 '\200', "null",
151 '\200', "null",
152 '\200', "null",
153 '\200', "null",
154 '\200', "null",
155 '\200', "null",
156 '\200', "null",
157 '\200', "null",
158 '\200', "null",
159 '\200', "null",
160 '\200', "null",
161 '\200', "null",
162 '\200', "null",
163 '\200', "null",
164 '\200', "null",
165 '\200', "null",
166 '\200', "null",
167 '\200', "null",
168 '\200', "null",
169 '\200', "null",
170 '\200', "null",
171 '\200', "null",
172 '\200', "null",
173 '\200', "null",
174 '\200', "null",
175 '\200', "null",
176 '\200', "null",
177 '\200', "null",
178 '\200', "null",
179 '\200', "null",
180 '\200', "null",
181 '\200', "null",
182 '\200', "null",
183 '\200', "null",
184 '\200', "null",
185 '\200', "null",
186 '\200', "null",
187 '\200', "null",
188 '\200', "null",
189 '\200', "null",
190 '\200', "null",
191 '\200', "null",
192 '\200', "null",
193 '\200', "null",
194 '\200', "null",
195 '\200', "null",
196 '\200', "null",
197 '\200', "null",
198 '\200', "null",
199 '\200', "null",
200 '\200', "null",
201 '\200', "null",
202 '\200', "null",
203 '\200', "null",
204 '\200', "null",
205 '\200', "null",
206 '\200', "null",
207 '\200', "null",
208 '\200', "null",
209 '\200', "null",
210 '\017', "registered",
211 '\016', "copyright",
212 '\200', "null",
213 '\020', "cent",
214 0, 0
215};
216
217struct desc {
218 short addr;
219 short nbytes;
220 char up;
221 char down;
222 char left;
223 char right;
224 short width;
225} desc[256];
226
227main(argc, argv)
228 int argc;
229 char *argv[];
230{
231 register int cl;
232 register esc;
233 register w;
234 int i, psize;
235 int fd, high;
236
237 if (argc != 3 && argc != 2) {
238 printf("Usage: vwidth font [pointsize] > font.c\n");
239 exit(1);
240 }
241 fd = open(argv[1], 0);
242 if (argc == 3)
243 psize = atoi(argv[2]);
244 else {
245 char *p;
246 for (p = argv[1]; *p && *p != '.'; p++)
247 ;
248 if (*p == 0) {
249 psize = 10;
250 fprintf(stderr, "Assuming %d point\n", psize);
251 } else
252 psize = atoi(p+1);
253 }
254 lseek(fd, 10L, 0);
255 read(fd, desc, sizeof desc);
256 high = desc['a'].up+1;
257 printf("char XXw[256-32] = {\n");
258 for (i = 0; wtable[i].charloc != 0; i++) {
259 cl = wtable[i].charloc & 0377;
260 if (cl & 0200)
261 w = cl & 0177;
262 else
263 w = desc[cl].width*(54./25.)*(6./psize)+.5;
264 esc = 0;
265 if ((cl >= '0' && cl <= '9') || (cl >= 'A' && cl <= 'Z') ||
266 (cl >= 'a' && cl <= 'z')) {
267 if (desc[cl].up > high)
268 esc |= 0200;
269 if (desc[cl].down > 0)
270 esc |= 0100;
271 }
272 if (esc)
273 printf("%d+0%o,\t/* %s */\n", w, esc, wtable[i].name);
274 else
275 printf("%d,\t\t/* %s */\n", w, wtable[i].name);
276 }
277 printf("};\n");
278}