|
|
1.1 ! root 1: # ! 2: ! 3: # ! 4: ! 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: * It is better to use as large a point size font as possible ! 12: * to avoid round off. ! 13: */ ! 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) ! 240: { ! 241: printf("arg count\n"); ! 242: exit(); ! 243: } ! 244: fd = open(argv[1], 0); ! 245: psize = atoi(argv[2]); ! 246: lseek(fd, 10, 0); ! 247: read(fd, &desc, sizeof desc); ! 248: high = desc['a'].up+1; ! 249: printf("char XXw[256-32] {\n"); ! 250: for(i = 0; wtable[i].charloc != 0; i++) ! 251: { ! 252: cl = wtable[i].charloc & 0377; ! 253: if(cl & 0200) ! 254: w = cl & 0177; ! 255: else ! 256: w = desc[cl].width*(54./25.)*(6./psize)+.5; ! 257: esc = 0; ! 258: if((cl >= '0' && cl <= '9') || (cl >= 'A' && cl <= 'Z') || ! 259: (cl >= 'a' && cl <= 'z')) ! 260: { ! 261: if(desc[cl].up > high) ! 262: esc =| 0200; ! 263: if(desc[cl].down > 0) ! 264: esc =| 0100; ! 265: } ! 266: if(esc) ! 267: printf("%d+0%o,\t/* %s */\n", w, esc, wtable[i].name); ! 268: else ! 269: printf("%d,\t\t/* %s */\n", w, wtable[i].name); ! 270: } ! 271: printf("};\n"); ! 272: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.