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