|
|
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.