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