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